Numbered productions for ARB_vertex_program grammar (Karl Rasche)
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 18 Jul 2003 16:45:38 +0000 (16:45 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 18 Jul 2003 16:45:38 +0000 (16:45 +0000)
src/mesa/main/arbvp_grammar.txt [new file with mode: 0644]

diff --git a/src/mesa/main/arbvp_grammar.txt b/src/mesa/main/arbvp_grammar.txt
new file mode 100644 (file)
index 0000000..f2e392a
--- /dev/null
@@ -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