aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2003-07-18 16:45:38 +0000
committerBrian Paul <[email protected]>2003-07-18 16:45:38 +0000
commit190c11e06d0f33c6815c19f36bb6f8f90d2ac2be (patch)
treef0a2cf73c741755074a4ccca2ea48751f994f16c
parent9a0d97a21c94f8e1ae673b8b96737956a27ae201 (diff)
Numbered productions for ARB_vertex_program grammar (Karl Rasche)
-rw-r--r--src/mesa/main/arbvp_grammar.txt1279
1 files changed, 1279 insertions, 0 deletions
diff --git a/src/mesa/main/arbvp_grammar.txt b/src/mesa/main/arbvp_grammar.txt
new file mode 100644
index 00000000000..f2e392a4981
--- /dev/null
+++ b/src/mesa/main/arbvp_grammar.txt
@@ -0,0 +1,1279 @@
+==========================================
+0: <program> ::= <optionSequence> <statementSequence> "END"
+ ------
+ first: <OPTION> ""
+ <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
+ <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
+ <MAD> <SWZ> <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
+ <END>
+ follow: $
+
+==========================================
+1: <optionSequence> ::= <optionSequence2>
+ -----
+ first: <OPTION> ""
+ follow: = <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
+ <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
+ <MAD> <SWZ> <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
+ <END>
+
+==========================================
+2: <optionSequence2> ::= <option> <optionSequence2>
+ ------
+ first: <OPTION>
+3: | ""
+ ------
+ first: ""
+ follow: <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
+ <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
+ <MAD> <SWZ> <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
+ <END>
+
+==========================================
+4: <option> ::= "OPTION" <identifier> ";"
+ -------
+ first: <OPTION>
+
+==========================================
+5: <statementSequence> ::= <statementSequence2>
+ -------
+ first: <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
+ <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
+ <MAD> <SWZ> <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
+ ""
+ follow: <END>
+
+=========================================
+6: <statementSequence2> ::= <statement> <statementSequence2>
+ ----------
+ first: <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
+ <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
+ <MAD> <SWZ> <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
+7: | ""
+ -------
+ first: ""
+ follow: <END>
+
+==========================================
+8: <statement> ::= <instruction> ";"
+ ----------
+ first: <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
+ <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
+ <MAD> <SWZ>
+9: | <namingStatement> ";"
+ --------
+ first: <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
+
+==========================================
+10: <instruction> ::= <ARL_instruction>
+ ---------
+ first: <ARL>
+11: | <VECTORop_instruction>
+ ----------
+ first: <ABS> <FLR> <FRC> <LIT> <MOV>
+12: | <SCALARop_instruction>
+ ---------
+ first: <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
+13: | <BINSCop_instruction>
+ -----
+ first: <POW>
+14: | <BINop_instruction>
+ ----
+ first: <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
+15: | <TRIop_instruction>
+ ----
+ first: <MAD>
+16: | <SWZ_instruction>
+ -----
+ first: <SWZ>
+
+===========================================
+17: <ARL_instruction> ::= "ARL" <maskedAddrReg> "," <scalarSrcReg>
+ ---------
+ first: <ARL>
+
+==========================================
+18: <VECTORop_instruction> ::= <VECTORop> <maskedDstReg> "," <swizzleSrcReg>
+ ----------
+ first: <ABS> <FLR> <FRC> <LIT> <MOV>
+
+==========================================
+19: <VECTORop> ::= "ABS"
+20: | "FLR"
+21: | "FRC"
+22: | "LIT"
+23: | "MOV"
+
+==========================================
+24: <SCALARop_instruction> ::= <SCALARop> <maskedDstReg> "," <scalarSrcReg>
+ ---------
+ first: <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
+
+==========================================
+25: <SCALARop> ::= "EX2"
+26: | "EXP"
+27: | "LG2"
+28: | "LOG"
+29: | "RCP"
+30: | "RSQ"
+
+==========================================
+31: <BINSCop_instruction> ::= <BINSCop> <maskedDstReg> <BINSCop_instruction2>
+ -----
+ first: <POW>
+
+32: <BINSCop_instruction2> ::= "," <scalarSrcReg> "," <scalarSrcReg>
+ -----
+ first: ","
+
+==========================================
+33: <BINSCop> ::= "POW"
+ ----
+ first: <POW>
+
+==========================================
+34: <BINop_instruction> ::= <BINop> <maskedDstReg> <BINop_instruction2>
+ ----
+ first: <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
+
+35: <BINop_instruction2> ::= "," <swizzleSrcReg> "," <swizzleSrcReg>
+ -----
+ first: ","
+
+
+==========================================
+36: <BINop> ::= "ADD"
+ -----
+ first: <ADD>
+37: | "DP3"
+ -----
+ first: <DP3>
+38: | "DP4"
+ -----
+ first: <DP4>
+39: | "DPH"
+ -----
+ first: <DPH>
+40: | "DST"
+ -----
+ first: <DST>
+41: | "MAX"
+ -----
+ first: <MAX>
+42: | "MIN"
+ -----
+ first: <MIN>
+43: | "MUL"
+ ----
+ first: <MUL>
+44: | "SGE"
+ ----
+ first: <SGE>
+45: | "SLT"
+ ----
+ first: <SLT>
+46: | "SUB"
+ ----
+ first: <SUB>
+47: | "XPD"
+ -----
+ first: <XPD>
+==========================================
+48: <TRIop_instruction> ::= <TRIop> <maskedDstReg> <TRIop_instruction2>
+ ----
+ first: <MAD>
+
+49: <TRIop_instruction2> ::= "," <swizzleSrcReg> <TRIop_instruction3>
+ -----
+ first: ","
+
+50: <TRIop_instruction3> ::= "," <swizzleSrcReg> "," <swizzleSrcReg>
+ -----
+ first: ","
+
+==========================================
+51: <TRIop> ::= "MAD"
+ -----
+ first: <MAD>
+
+==========================================
+52: <SWZ_instruction> ::= "SWZ" <maskedDstReg> <SWZ_instruction2>
+ -----
+ first: <SWZ>
+
+53: <SWZ_instruction2> ::= "," <srcReg> "," <extendedSwizzle>
+ -----
+ first: ","
+
+==========================================
+54: <scalarSrcReg> ::= <optionalSign> <srcReg> <scalarSuffix>
+ --------
+ first: "+" "-" "vertex" "state" "program" "{" <float> <int>
+ <id> that is vertexAttrib
+ <id> that is a TEMP
+ <id> that is a single, <id> that is an array,
+
+==========================================
+55: <swizzleSrcReg> ::= <optionalSign> <srcReg> <swizzleSuffix>
+ ---------
+ first: "+" "-" "vertex" "state" "program" "{" <float> <int>
+ <id> that is vertexAttrib
+ <id> that is a TEMP
+ <id> that is a single, <id> that is an array,
+
+==========================================
+56: <maskedDstReg> ::= <dstReg> <optionalMask>
+ ---------
+ first: first: <id>, that is a TEMP "result", <id> that is a vertexResult
+
+==========================================
+57: <maskedAddrReg> ::= <addrReg> <addrWriteMask>
+ ---------
+ first: <id> (that is an addr reg)
+
+==========================================
+58: <extendedSwizzle> ::= <extSwizComp> "," <extSwizComp> <extendedSwizzle2>
+ -------
+ first: "+" "-" "0" "1" "x" "y" "z" "w"
+
+59: <extendedSwizzle2> ::= "," <extSwizComp> "," <extSwizComp>
+ -------
+ first: ","
+
+==========================================
+60: <extSwizComp> ::= <optionalSign> <extSwizSel>
+ -------
+ first: "+" "-" "0" "1" "x" "y" "z" "w"
+
+==========================================
+61: <extSwizSel> ::= "0"
+62: | "1"
+63: | <component>
+
+==========================================
+64: <srcReg> ::= <vertexAttribReg>
+ ----
+ first: "vertex" <id> that is vertexAttrib
+65: | <temporaryReg>
+ -----
+ first: <id> that is a TEMP
+66: | <progParamReg>
+ ----
+ first: <id> that is a single, <id> that is an array, "state" "program" "{" <float> <int>
+
+==========================================
+67: <dstReg> ::= <temporaryReg>
+ ---------
+ first: <id>, that is a TEMP
+68: | <vertexResultReg>
+ --------
+ first: "result", <id> that is a vertexResult
+
+==========================================
+69: <vertexAttribReg> ::= <establishedName>
+ -----
+ first: <id>,
+70: | <vtxAttribBinding>
+ -----
+ first: "vertex"
+
+==========================================
+ 71: <temporaryReg> ::= <establishedName>
+ ------
+ first: <id> that is a TEMP
+
+==========================================
+72: <progParamReg> ::= <progParamSingle>
+ ------
+ first: <id>, that is single
+73: | <progParamArray> "[" <progParamArrayMem> "]"
+ -----
+ first: <id>, that is an array
+74: | <paramSingleItemUse>
+ -------
+ first: "state" "program" "{" <float> <int>
+
+==========================================
+75: <progParamSingle> ::= <establishedName>
+ ------
+ first: <id>, that is a single
+
+==========================================
+76: <progParamArray> ::= <establishedName>
+ ------
+ first: <id>, that is an array
+
+==========================================
+77: <progParamArrayMem> ::= <progParamArrayAbs>
+ ------
+ first: <integer>
+78: | <progParamArrayRel>
+ -----
+ first: <id>
+
+==========================================
+79: <progParamArrayAbs> ::= <integer>
+ -------
+ first: <integer>
+
+==========================================
+80: <progParamArrayRel> ::= <addrReg> <addrComponent> <addrRegRelOffset>
+ ------
+ first: <id>
+
+==========================================
+81: <addrRegRelOffset> ::= ""
+ -----
+ first: ""
+ follow: "]"
+82: | "+" <addrRegPosOffset>
+ -----
+ first: "+"
+83: | "-" <addrRegNegOffset>
+ -----
+ first: "-"
+
+==========================================
+84: <addrRegPosOffset> ::= <integer> from 0 to 63
+ -------
+ first: <integer>
+
+==========================================
+85: <addrRegNegOffset> ::= <integer> from 0 to 64
+ -------
+ first: <integer>
+
+==========================================
+86: <vertexResultReg> ::= <establishedName>
+ ------
+ first: <id>
+87: | <resultBinding>
+ first: "result"
+
+==========================================
+88: <addrReg> ::= <establishedName>
+ first: <id>
+
+==========================================
+89: <addrComponent> ::= "." "x"
+ -------
+ first: "."
+
+==========================================
+90: <addrWriteMask> ::= "." "x"
+ --------
+ first: "."
+
+==========================================
+91: <scalarSuffix> ::= "." <component>
+ ---------
+ first: "."
+
+==========================================
+92: <swizzleSuffix> ::= ""
+ ---------
+ first: ""
+ follow: "," ";"
+
+
+/*
+custom: | "." <component> | --> Treat as the same production
+custom: | "." <component> <component> | --> but check the lenght of <component>
+ <component> <component>
+*/
+317: | "." <swizzleSuffix2>
+ --------
+ first: "."
+318: swizzleSuffix2 ::= <component>
+
+319: | <component4>
+
+==========================================
+93: <component> ::= "x"
+94: | "y"
+95: | "z"
+96: | "w"
+
+=========================================
+ <component4> := strlen() == 4, chars are from {x, y, z, w} --> push the input onto the stack
+ ----
+
+==========================================
+97: <optionalMask> ::= "." <optionalMask2>
+ ---------
+ first: "."
+98: | ""
+ ---------
+ first: ""
+ follow: ","
+
+==========================================
+99: <optionalMask2> ::= "x"
+100: | "y"
+101: | "xy"
+102: | "z"
+103: | "xz"
+104: | "yz"
+105: | "xyz"
+106: | "w"
+107: | "xw"
+108: | "yw"
+109: | "xyw"
+110: | "zw"
+111: | "xzw"
+112: | "yzw"
+113: | "xyzw"
+
+==========================================
+114: <namingStatement> ::= <ATTRIB_statement>
+ ------
+ first: "ATTRIB"
+115: | <PARAM_statement>
+ -----
+ first: "PARAM"
+116: | <TEMP_statement>
+ -----
+ first: "TEMP"
+117: | <ADDRESS_statement>
+ -----
+ first: "ADDRESS"
+118: | <OUTPUT_statement>
+ -----
+ first: "OUTPUT"
+119: | <ALIAS_statement>
+ -----
+ first: "ALIAS"
+
+==========================================
+120: <ATTRIB_statement> ::= "ATTRIB" <establishName> "="
+ <vtxAttribBinding>
+ ------
+ first: "ATTRIB"
+
+==========================================
+121: <vtxAttribBinding> ::= "vertex" "." <vtxAttribItem>
+ -----
+ first: "vertex"
+
+==========================================
+122: <vtxAttribItem> ::= "position"
+ ------
+ first: "position"
+123: | "weight" <vtxOptWeightNum>
+ -----
+ first: "weight"
+124: | "normal"
+ -----
+ first: "normal"
+125: | "color" <optColorType>
+ -----
+ first: "color"
+126: | "fogcoord"
+ -----
+ first: "fogcoord"
+127: | "texcoord" <optTexCoordNum>
+ -----
+ first: "texcoord"
+128: | "matrixindex" "[" <vtxWeightNum> "]"
+ ----
+ first: "matrixindex"
+129: | "attrib" "[" <vtxAttribNum> "]"
+ ----
+ first: "attrib"
+
+==========================================
+130: <vtxAttribNum> ::= <integer> from 0 to MAX_VERTEX_ATTRIBS_ARB-1
+ ------
+ first: <integer>
+
+==========================================
+131: <vtxOptWeightNum> ::= ""
+ ------
+ first: ""
+ follow: ";" "," "."
+132: | "[" <vtxWeightNum> "]"
+ ------
+ first: "["
+
+==========================================
+133: <vtxWeightNum> ::= <integer> from 0 to MAX_VERTEX_UNITS_ARB-1,
+ must be divisible by four
+ -----
+ first: <integer>
+
+==========================================
+134: <PARAM_statement> ::= "PARAM" <establishName> <PARAM_statement2>
+ -----------
+ first: "PARAM"
+
+135: <PARAM_statement2> ::= <paramSingleInit>
+ ------
+ first: "="
+136: | "[" <optArraySize> "]" <paramMultipleInit>
+ ------
+ first: "["
+
+==========================================
+137: <optArraySize> ::= ""
+ ---------
+ first: ""
+ follow: "]"
+138: | <integer> from 1 to MAX_PROGRAM_PARAMETERS_ARB
+ (maximum number of allowed program
+ parameter bindings)
+ --------
+ first: <integer>
+
+==========================================
+139: <paramSingleInit> ::= "=" <paramSingleItemDecl>
+ ------
+ first: "="
+
+==========================================
+140: <paramMultipleInit> ::= "=" "{" <paramMultInitList> "}"
+ ------
+ first: "="
+
+==========================================
+141: <paramMultInitList> ::= <paramMultipleItem> <paramMultInitList2>
+ ------
+ first: "state" "program" "+" "-" <float> <int> "{"
+
+==========================================
+142: <paramMultInitList2> ::= "," <paramMultInitList>
+ ------
+ first: ","
+143: | ""
+ ------
+ first: ""
+ follow: "}"
+
+==========================================
+144: <paramSingleItemDecl> ::= <stateSingleItem>
+ ------
+ first: "state"
+145: | <programSingleItem>
+ ------
+ first: "program"
+146: | <paramConstDecl>
+ ------
+ first: "+" "-" <float> <int>"{"
+
+==========================================
+147: <paramSingleItemUse> ::= <stateSingleItem>
+ ------
+ first: "state"
+148: | <programSingleItem>
+ ------
+ first: "program"
+149: | <paramConstUse>
+ ------
+ first: "{" <float> <int>
+
+==========================================
+150: <paramMultipleItem> ::= <stateMultipleItem>
+ -----
+ first: "state"
+151: | <programMultipleItem>
+ ------
+ first: "program"
+152: | <paramConstDecl>
+ ------
+ first: "+" "-" <float> <int> "{"
+
+==========================================
+153: <stateMultipleItem> ::= "state" "." <stateMultipleItem2>
+ -------
+ first: "state"
+
+========================================
+154: <stateMultipleItem2> ::= <stateMaterialItem>
+ -----
+ first: "material"
+155: | <stateLightItem>
+ ------
+ first: "light"
+156: | <stateLightModelItem>
+ ------
+ first: "lightmodel"
+157: | <stateLightProdItem>
+ ------
+ first: "lightprod"
+158: | <stateTexGenItem>
+ ------
+ first: "texgen"
+159: | <stateFogItem>
+ ------
+ first: "fog"
+160: | <stateClipPlaneItem>
+ ------
+ first: "clip"
+161: | <statePointItem>
+ ------
+ first: "point"
+
+162 ::= "matrix" "." <stateMatrixName> <foo>
+ ----
+ first: "matrix"
+
+===========================
+163: <foo> ::= "." <foo2>
+------
+ first: "."
+316: | ""
+-----
+follow: "," "}"
+
+
+164: <foo2> ::= <stateMatModifier> <foo3>
+ -----
+ first: "inverse" "transpose" "invtrans"
+
+165: | "row" "[" <stateMatrixRowNum> <foo4>
+ ------
+ first: "row"
+
+===========================
+166: <foo3> ::= ""
+ -----
+ first: ""
+ follow: , }
+
+167: | "." "row" "[" <foo35>
+ -----
+ first: "."
+
+==============================
+168: <foo35> ::= <stateMatrixRowNum> <foo4>
+ ------
+ first: <int>
+
+==============================
+169: <foo4> ::= "]"
+ -----
+ first: "]"
+170: | ".." <stateMatrixRowNum> "]"
+ -----
+ first: ..
+
+==========================================
+171: <stateSingleItem> ::= "state" "." <stateSingleItem2>
+ -------
+ first: "state"
+
+==========================================
+172: <stateSingleItem2> ::= <stateMaterialItem>
+ ------
+ first: "material"
+173: | <stateLightItem>
+ ------
+ first: "light"
+174: | <stateLightModelItem>
+ ------
+ first: "lightmodel"
+175: | <stateLightProdItem>
+ ------
+ first: "lightprod"
+176: | <stateTexGenItem>
+ ------
+ first: "texgen"
+177: | <stateFogItem>
+ ------
+ first: "fog"
+178: | <stateClipPlaneItem>
+ ------
+ first: "clip"
+179: | <statePointItem>
+ ------
+ first: "point"
+180: | <stateMatrixRow>
+ ------
+ first: "matrix"
+==========================================
+181: <stateMaterialItem> ::= "material" "." <stateMaterialItem2>
+ ------
+ first: "material"
+
+========================================
+182: <stateMaterialItem2> ::= <stateMatProperty>
+ ------
+ first: "ambient" "diffuse" "specular" "emission" "shininess"
+183: | "." <optFaceType2> "." <stateMatProperty>
+ -----
+ first: "."
+
+==========================================
+184: <stateMatProperty> ::= "ambient"
+ -----
+ first: "ambient"
+185; | "diffuse"
+ -----
+ first: "diffuse"
+186: | "specular"
+ -----
+ first: "specular"
+187: | "emission"
+ -----
+ first: "emission"
+188: | "shininess"
+ -----
+ first: "shininess"
+==========================================
+189: <stateLightItem> ::= "light" "[" <stateLightNumber> <stateLightItem2>
+ ------
+ first: "light"
+
+190: <stateLightItem2> ::= "]" "." <stateLightProperty>
+ -----
+ first: "]"
+
+
+==========================================
+191: <stateLightProperty> ::= "ambient"
+ -------
+ first: "ambient"
+192: | "diffuse"
+ -------
+ first: "diffuse"
+193: | "specular"
+ -------
+ first: "specular"
+194: | "position"
+ -------
+ first: "position"
+195: | "attenuation"
+ -------
+ first: "attenuation"
+196: | "spot" "." <stateSpotProperty>
+ --------
+ first: "spot"
+197: | "half"
+ --------
+ first: "half"
+
+==========================================
+198: <stateSpotProperty> ::= "direction"
+ ---------
+ first: "direction"
+
+==========================================
+199: <stateLightModelItem> ::= "lightmodel" <stateLModProperty>
+ --------
+ first: "lightmodel"
+
+==========================================
+200: <stateLModProperty> ::= "." <stateLModProperty2>
+ -------
+ first: "."
+
+201: <stateLModProperty2> ::= "ambient"
+ -------
+ first: "ambient"
+202: | "scenecolor"
+ ------
+ first: "scenecolor"
+203: | <optFaceType2> "." "scenecolor"
+ -------
+ first: "front" "back"
+==========================================
+204: <stateLightProdItem> ::= "lightprod" "[" <stateLightNumber> <stateLightProdItem15>
+ ------
+ first: "lightprod"
+
+205: <stateLightProdItem15> ::= "]" "." <stateLightProdItem2>
+ --------
+ first: "]"
+
+===============
+206: <stateLightProdItem2> ::= <stateLProdProperty>
+ ----------
+ first: "ambient" "diffuse" "specular"
+207: | <optFaceType2> "." <stateLProdProperty>
+ ---------
+ first: "front" "back"
+
+==========================================
+208: <stateLProdProperty> ::= "ambient"
+ -------
+ first: "ambient"
+209: | "diffuse"
+ -------
+ first: "diffuse"
+210: | "specular"
+ -------
+ first: "specular"
+
+==========================================
+211: <stateLightNumber> ::= <integer> from 0 to MAX_LIGHTS-1
+ ---------
+ first: <integer>
+
+==========================================
+212: <stateTexGenItem> ::= "texgen" <optTexCoordNum> <stateTexGenItem2>
+ -----------
+ first: "texgen"
+
+213: <stateTexGenItem2> ::= "." <stateTexGenType> "." <stateTexGenCoord>
+
+==========================================
+214: <stateTexGenType> ::= "eye"
+ --------------
+ first: "eye"
+215: | "object"
+ --------------
+ first: "object"
+
+==========================================
+216: <stateTexGenCoord> ::= "s"
+ ------
+ first: "s"
+217: | "t"
+ -------
+ first: "t"
+218: | "r"
+ -------
+ first: "r"
+219: | "q"
+ -------
+ first: "q"
+==========================================
+220: <stateFogItem> ::= "fog" "." <stateFogProperty>
+ --------
+ first: "fog"
+
+==========================================
+221: <stateFogProperty> ::= "color"
+ ------
+ first: "color"
+222: | "params"
+ ------
+ first: "params"
+==========================================
+223: <stateClipPlaneItem> ::= "clip" "[" <stateClipPlaneNum> <stateClipPlaneItem2>
+ ------
+ first: "clip"
+
+224: <stateClipPlaneItem2> ::= "]" "." "plane"
+ -----
+ first: "]"
+
+==========================================
+225: <stateClipPlaneNum> ::= <integer> from 0 to MAX_CLIP_PLANES-1
+ -------
+ first: <integer>
+
+==========================================
+226: <statePointItem> ::= "point" . <statePointProperty>
+ -----
+ first: "point"
+
+==========================================
+227: <statePointProperty> ::= "size"
+ -------
+ first: "size"
+228: | "attenuation"
+ --------
+ first: "attenuation"
+
+==========================================
+229: <stateMatrixRow> ::= "matrix" "." <stateMatrixName> <stateMatrixRow15>
+ --------
+ first: "matrix"
+
+230: <stateMatrixRow15> ::= "." <stateMatrixRow2>
+ -----
+ first: "."
+
+===========================
+231: <stateMatrixRow2> ::= "row" "[" <stateMatrixRowNum> "]"
+ --------
+ first: "row"
+232: | <stateMatModifier> "." "row" <stateMatrixRow3>
+ ------
+ first: "inverse" "transpose" "invtrans"
+
+233: <stateMatrixRow3> ::= "[" <stateMatrixRowNum> "]"
+ -----
+ first: "["
+
+==========================================
+234: <stateMatModifier> ::= "inverse"
+ --------
+ first: "inverse"
+235: | "transpose"
+ -------
+ first: "transpose"
+236: | "invtrans"
+ -------
+ first: "invtrans"
+
+==========================================
+237: <stateMatrixRowNum> ::= <integer> from 0 to 3
+ ----------
+ first: <integer>
+
+==========================================
+238: <stateMatrixName> ::= "modelview" <stateOptModMatNum>
+ ------------
+ first: "modelview"
+239: | "projection"
+ ------------
+ first: "projection"
+240: | "mvp"
+ -----------
+ first: "mvp"
+241: | "texture" <optTexCoordNum>
+ -----------
+ first: "texture"
+242: | "palette" "[" <statePaletteMatNum> "]"
+ -----------
+ first: "palette"
+243: | "program" "[" <stateProgramMatNum> "]"
+ -----------
+ first: "program"
+
+==========================================
+244: <stateOptModMatNum> ::= ""
+ -------------
+ first: ""
+ follow: "." "," "}"
+245: | "[" <stateModMatNum> "]"
+ -------------
+ first: "["
+
+==========================================
+246: <stateModMatNum> ::= <integer> from 0 to MAX_VERTEX_UNITS_ARB-1
+ -----------
+ first: <integer>
+
+==========================================
+247: <statePaletteMatNum> ::= <integer> from 0 to MAX_PALETTE_MATRICES_ARB-1
+ -----------
+ first: <integer>
+
+==========================================
+248: <stateProgramMatNum> ::= <integer> from 0 to MAX_PROGRAM_MATRICES_ARB-1
+ ------------
+ first: <integer>
+
+==========================================
+249: <programSingleItem> ::= "program" "." <programSingleItem2>
+ ---------------
+ first: "program"
+
+250: <programSingleItem2> ::= <progEnvParam>
+ --------------
+ first: "env"
+251: | <progLocalParam>
+ --------------
+ first: "local"
+
+==========================================
+252: <programMultipleItem> ::= "program" "." <programMultipleItem2>
+ ---------------
+ first: "program"
+
+==========================================
+253: <programMultipleItem2> ::= <progEnvParams>
+ ---------------
+ first: "env"
+254: | <progLocalParams>
+ --------------
+ first: "local"
+
+==========================================
+255: <progEnvParams> ::= "env" "[" <progEnvParamNums> "]"
+ -----------
+ first: "env"
+
+==========================================
+256: <progEnvParamNums> ::= <progEnvParamNum> <progEnvParamNums2>
+ ---------
+ first: <integer>
+
+==========================================
+257: <progEnvParamNums2> ::= ".." <progEnvParamNum>
+ ----------
+ first: ".."
+258: | ""
+ ---------
+ first: ""
+ follow: "]"
+
+==========================================
+259: <progEnvParam> ::= "env" "[" <progEnvParamNum> "]"
+ ---------
+ first: "env"
+
+==========================================
+260: <progLocalParams> ::= "local" "[" <progLocalParamNums> "]"
+ ---------
+ first: "local"
+
+==========================================
+261: <progLocalParamNums> ::= <progLocalParamNum> <progLocalParamNums2>
+ ----------
+ first: <integer>
+
+==========================================
+262: <progLocalParamNums2> ::= ".." <progLocalParamNum>
+ ---------
+ first: ".."
+263: | ""
+ --------
+ first: ""
+ follow: "]"
+==========================================
+264: <progLocalParam> ::= "local" "[" <progLocalParamNum> "]"
+ ---------
+ first: "local"
+
+==========================================
+265: <progEnvParamNum> ::= <integer> from 0 to MAX_PROGRAM_ENV_PARAMETERS_ARB - 1
+ ---------
+ first: <integer>
+
+
+==========================================
+266: <progLocalParamNum> ::= <integer> from 0 to MAX_PROGRAM_LOCAL_PARAMETERS_ARB - 1
+ -------------
+ first: <integer>
+
+==========================================
+267: <paramConstDecl> ::= <paramConstScalarDecl>
+ ------------
+ first: "+" "-" <float> <int>
+
+268: | <paramConstVector>
+ ------------
+ first: "{"
+
+==========================================
+269: <paramConstUse> ::= <paramConstScalarUse>
+ -----------
+ first: <float> <int>
+270: | <paramConstVector>
+ ----------
+ first: "{"
+
+==========================================
+271: <paramConstScalarDecl> ::= <signedFloatConstant>
+ ----------
+ first: "+" "-" <float> <int>
+
+==========================================
+272: <paramConstScalarUse> ::= <floatConstant>
+ ------------
+ first: <float> <int>
+
+==========================================
+273: <paramConstVector> ::= "{" <signedFloatConstant> <paramConstVector2>
+ -------------
+
+==========================================
+274: <paramConstVector2> ::= "}"
+ -------------
+ first: "}"
+275: | "," <signedFloatConstant> <paramConstVector3>
+ -------------
+ first: ","
+
+==========================================
+276: <paramConstVector3> ::= "}"
+ -------------
+ first: "}"
+277: | "," <signedFloatConstant> <paramConstVector4>
+ ------------
+ first: ","
+
+==========================================
+278: <paramConstVector4> ::= "}"
+ ------------
+ first: "}"
+279: | "," <signedFloatConstant> "}"
+ ------------
+ first: ","
+
+==========================================
+280: <signedFloatConstant> ::= <optionalSign> <floatConstant>
+ ----------
+ first: "-" "+" <float> <int>
+
+==========================================
+ <floatConstant> ::= see text
+ ----------
+ first: <float> <int>
+
+==========================================
+281: <optionalSign> ::= ""
+ -----------
+ first: ""
+ follow: <float> <int> "0" "1" "x" "y" "z" "w" "state" "program" "vertex" "{"
+ vertexattr <id>
+ temp <id>
+ single <id>
+ array <id>
+
+ | "-"
+ -----------
+282: first: "-"
+
+ | "+"
+ ---------
+283: first: "+"
+
+==========================================
+284: <TEMP_statement> ::= "TEMP" <varNameList>
+ --------
+ first: "TEMP"
+
+==========================================
+285: <ADDRESS_statement> ::= "ADDRESS" <varNameList>
+ -------------
+ first: "ADDRESS"
+
+==========================================
+286: <varNameList> ::= <establishName>
+ -------------
+ first: <id>
+287: | <establishName> "," <varNameList>
+ -------------
+ first: <id>
+
+==========================================
+288: <OUTPUT_statement> ::= "OUTPUT" <establishName> "=" <resultBinding>
+ ------------------
+ first: "OUTPUT"
+
+==========================================
+289: <resultBinding> ::= "result" "." <resultBinding2>
+ -------------------
+ first: "result"
+
+==========================================
+290: <resultBinding2> ::= "position"
+ ----------------------------------
+ first: "position"
+291: | "fogcoord"
+ ----------------------------------
+ first: "fogcoord"
+292: | "pointsize"
+ ----------------------------------
+ first: "pointsize"
+293: | <resultColBinding>
+ ----------------------------------
+ first: "color"
+294: | "texcoord" <optTexCoordNum>
+ ----------------------------------
+ first: "texcoord"
+
+==========================================
+295: <resultColBinding> ::= "color" <resultColBinding2>
+ -----
+ first: "color"
+
+=============
+296: <resultColBinding2> ::= ""
+ ----
+ first: ""
+ follow: ";" "," "."
+297: | "." <resultColBinding3>
+ ----
+ first: "."
+ --> HACK: If we have a ".", look ahead 1 and see if we have
+ "front" | back". If so, choose the second production.
+ If not, choose the first.
+
+===========
+298: <resultColBinding3> ::= "front" <resultColBinding4>
+ ---------
+ first: "front"
+299: | "back" <resultColBinding4>
+ --------
+ first: "back"
+
+===========
+300: <resultColBinding4> ::= ""
+ ---------
+ first: ""
+ follow: ";" "," "."
+301: | "." <resultColBinding5>
+ ---------
+ first "."
+
+ ----> HACK: If we have a ".", peek ahead 1 and see if we have "primary" | "secondary".
+ If so, choose teh second production. If not, choose the first.
+
+===============
+302: <resultColBinding5> ::= "primary"
+ --------
+ first: "primary"
+303: | "secondary"
+ --------
+ first: "secondary"
+
+
+==========================================
+304: <optFaceType2> ::= "front"
+ ----------------------------------
+ first: "front"
+305: | "back"
+ ----------------------------------
+ first: "back"
+
+==========================================
+306: <optColorType> ::= "." <optColorType2>
+ ----------------------------------
+ first: "."
+307: | ""
+ ----------------------------------
+ first: ""
+ follow: ";" "," "."
+
+ --> HACK: If we get a ".", peek ahead 1 token. if we have
+ "primary" | "secondary", go choose the first production.
+ else, choose the second.
+
+==========================================
+308: <optColorType2> ::= "primary"
+ ----------------------------------
+ first: "primary"
+309: | "secondary"
+ ----------------------------------
+ first: "secondary"
+
+==========================================
+310: <optTexCoordNum> ::= ""
+ ----------------------------------
+ first: ""
+ follow: "." ";" "," "}"
+311: | "[" <texCoordNum> "]"
+ ----------------------------------
+ first: "["
+
+==========================================
+312: <texCoordNum> ::= <integer> from 0 to MAX_TEXTURE_UNITS-1
+ -----------------------------------
+ first: <integer>
+
+==========================================
+313: <ALIAS_statement> ::= "ALIAS" <establishName> "=" <establishedName>
+ -----------------------------------
+ first: "ALIAS"
+
+==========================================
+314: <establishName> ::= <identifier>
+ -----------------------------------
+ first: <id>
+
+==========================================
+315: <establishedName> ::= <identifier>
+ -----------------------------------
+ first: <id>
+
+==========================================
+ <identifier> ::= see text
+ -----------------------------------
+ first: <id>
+
+HIGHEST PRODUCTION: 319