==========================================
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
