%start WholeEnchilada %name-prefix="ts10_" %{ void yyerror(char* s); int yylex ( void ); #ifdef _WIN32 # include #endif #include #include #include "ts1.0_inst.h" #include "ts1.0_inst_list.h" #include "nvparse_errors.h" #include "nvparse_externs.h" %} %union { float fval; InstPtr inst; InstListPtr instList; MappedVariablePtr variable; } %token floatValue gequal less texVariable expandString %token openParen closeParen semicolon comma %token nop %token texture_1d %token texture_2d %token texture_rectangle %token texture_3d %token texture_cube_map %token cull_fragment %token pass_through %token offset_2d_scale %token offset_2d %token offset_rectangle_scale %token offset_rectangle %token dependent_ar %token dependent_gb %token dot_product_2d_1of2 %token dot_product_2d_2of2 %token dot_product_rectangle_1of2 %token dot_product_rectangle_2of2 %token dot_product_depth_replace_1of2 %token dot_product_depth_replace_2of2 %token dot_product_3d_1of3 %token dot_product_3d_2of3 %token dot_product_3d_3of3 %token dot_product_cube_map_1of3 %token dot_product_cube_map_2of3 %token dot_product_cube_map_3of3 %token dot_product_reflect_cube_map_eye_from_qs_1of3 %token dot_product_reflect_cube_map_eye_from_qs_2of3 %token dot_product_reflect_cube_map_eye_from_qs_3of3 %token dot_product_reflect_cube_map_const_eye_1of3 %token dot_product_reflect_cube_map_const_eye_2of3 %token dot_product_reflect_cube_map_const_eye_3of3 %token dot_product_cube_map_and_reflect_cube_map_eye_from_qs_1of3 %token dot_product_cube_map_and_reflect_cube_map_eye_from_qs_2of3 %token dot_product_cube_map_and_reflect_cube_map_eye_from_qs_3of3 %token dot_product_cube_map_and_reflect_cube_map_const_eye_1of3 %token dot_product_cube_map_and_reflect_cube_map_const_eye_2of3 %token dot_product_cube_map_and_reflect_cube_map_const_eye_3of3 %type WholeEnchilada InstListDesc %type InstDesc %type MappedVariableDesc %type CondDesc %% WholeEnchilada: InstListDesc { $1->Validate(); $1->Invoke(); delete $1; } ; InstListDesc: InstListDesc InstDesc semicolon { *($1) += $2; delete $2; $$ = $1; } | InstDesc semicolon { InstListPtr instList = new InstList; *instList += $1; delete $1; $$ = instList; } ; MappedVariableDesc: expandString openParen texVariable closeParen { $$ = new MappedVariable; $$->var = $3; $$->expand = true; } | texVariable { $$ = new MappedVariable; $$->var = $1; $$->expand = false; } ; InstDesc : nop openParen closeParen { $$ = new Inst(TSP_NOP); } | texture_1d openParen closeParen { $$ = new Inst(TSP_TEXTURE_1D); } | texture_2d openParen closeParen { $$ = new Inst(TSP_TEXTURE_2D); } | texture_rectangle openParen closeParen { $$ = new Inst(TSP_TEXTURE_RECTANGLE); } | texture_3d openParen closeParen { $$ = new Inst(TSP_TEXTURE_3D); } | texture_cube_map openParen closeParen { $$ = new Inst(TSP_TEXTURE_CUBE_MAP); } | cull_fragment openParen CondDesc comma CondDesc comma CondDesc comma CondDesc closeParen { $$ = new Inst(TSP_CULL_FRAGMENT, $3, $5, $7, $9); } | pass_through openParen closeParen { $$ = new Inst(TSP_PASS_THROUGH); } | offset_2d_scale openParen texVariable comma floatValue comma floatValue comma floatValue comma floatValue comma floatValue comma floatValue closeParen { $$ = new Inst(TSP_OFFSET_2D_SCALE, $3, $5, $7, $9, $11, $13, $15); } | offset_2d openParen texVariable comma floatValue comma floatValue comma floatValue comma floatValue closeParen { $$ = new Inst(TSP_OFFSET_2D, $3, $5, $7, $9, $11); } | offset_rectangle_scale openParen texVariable comma floatValue comma floatValue comma floatValue comma floatValue comma floatValue comma floatValue closeParen { $$ = new Inst(TSP_OFFSET_RECTANGLE_SCALE, $3, $5, $7, $9, $11, $13, $15); } | offset_rectangle openParen texVariable comma floatValue comma floatValue comma floatValue comma floatValue closeParen { $$ = new Inst(TSP_OFFSET_RECTANGLE, $3, $5, $7, $9, $11); } | dependent_ar openParen texVariable closeParen { $$ = new Inst(TSP_DEPENDENT_AR, $3); } | dependent_gb openParen texVariable closeParen { $$ = new Inst(TSP_DEPENDENT_GB, $3); } | dot_product_2d_1of2 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_2D_1_OF_2, $3); delete $3; } | dot_product_2d_2of2 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_2D_2_OF_2, $3); delete $3; } | dot_product_rectangle_1of2 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_RECTANGLE_1_OF_2, $3); delete $3; } | dot_product_rectangle_2of2 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_RECTANGLE_2_OF_2, $3); delete $3; } | dot_product_depth_replace_1of2 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_DEPTH_REPLACE_1_OF_2, $3); delete $3; } | dot_product_depth_replace_2of2 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_DEPTH_REPLACE_2_OF_2, $3); delete $3; } | dot_product_3d_1of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_3D_1_OF_3, $3); delete $3; } | dot_product_3d_2of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_3D_2_OF_3, $3); delete $3; } | dot_product_3d_3of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_3D_3_OF_3, $3); delete $3; } | dot_product_cube_map_1of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_CUBE_MAP_1_OF_3, $3); delete $3; } | dot_product_cube_map_2of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_CUBE_MAP_2_OF_3, $3); delete $3; } | dot_product_cube_map_3of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_CUBE_MAP_3_OF_3, $3); delete $3; } | dot_product_reflect_cube_map_eye_from_qs_1of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_REFLECT_CUBE_MAP_EYE_FROM_QS_1_OF_3, $3); delete $3; } | dot_product_reflect_cube_map_eye_from_qs_2of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_REFLECT_CUBE_MAP_EYE_FROM_QS_2_OF_3, $3); delete $3; } | dot_product_reflect_cube_map_eye_from_qs_3of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_REFLECT_CUBE_MAP_EYE_FROM_QS_3_OF_3, $3); delete $3; } | dot_product_reflect_cube_map_const_eye_1of3 openParen MappedVariableDesc comma floatValue comma floatValue comma floatValue closeParen { $$ = new Inst(TSP_DOT_PRODUCT_REFLECT_CUBE_MAP_CONST_EYE_1_OF_3, $3, $5, $7, $9); delete $3; } | dot_product_reflect_cube_map_const_eye_2of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_REFLECT_CUBE_MAP_CONST_EYE_2_OF_3, $3); delete $3; } | dot_product_reflect_cube_map_const_eye_3of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_REFLECT_CUBE_MAP_CONST_EYE_3_OF_3, $3); delete $3; } | dot_product_cube_map_and_reflect_cube_map_eye_from_qs_1of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_CUBE_MAP_AND_REFLECT_CUBE_MAP_EYE_FROM_QS_1_OF_3, $3); delete $3; } | dot_product_cube_map_and_reflect_cube_map_eye_from_qs_2of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_CUBE_MAP_AND_REFLECT_CUBE_MAP_EYE_FROM_QS_2_OF_3, $3); delete $3; } | dot_product_cube_map_and_reflect_cube_map_eye_from_qs_3of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_CUBE_MAP_AND_REFLECT_CUBE_MAP_EYE_FROM_QS_3_OF_3, $3); delete $3; } | dot_product_cube_map_and_reflect_cube_map_const_eye_1of3 openParen MappedVariableDesc comma floatValue comma floatValue comma floatValue closeParen { $$ = new Inst(TSP_DOT_PRODUCT_CUBE_MAP_AND_REFLECT_CUBE_MAP_CONST_EYE_1_OF_3, $3, $5, $7, $9); delete $3; } | dot_product_cube_map_and_reflect_cube_map_const_eye_2of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_CUBE_MAP_AND_REFLECT_CUBE_MAP_CONST_EYE_2_OF_3, $3); delete $3; } | dot_product_cube_map_and_reflect_cube_map_const_eye_3of3 openParen MappedVariableDesc closeParen { $$ = new Inst(TSP_DOT_PRODUCT_CUBE_MAP_AND_REFLECT_CUBE_MAP_CONST_EYE_3_OF_3, $3); delete $3; } ; CondDesc : gequal { $$ = $1; } | less { $$ = $1; } ; %% void yyerror(char* s) { errors.set("unrecognized token"); }