Changeset 1413
- Timestamp:
- May 24, 2012, 7:00:36 PM (11 years ago)
- Location:
- trunk/test/sandbox/lex
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/test/sandbox/lex/Makefile
r1409 r1413 9 9 flex -d $^ 10 10 11 clean: 12 rm -f lex.yy.c lolfx.tab.c lolfx.tab.h parser -
trunk/test/sandbox/lex/lolfx.l
r1412 r1413 57 57 "usampler2dmsarray" { return GT_USAMPLER2DMSARRAY; } 58 58 59 "identifier" { return GT_IDENTIFIER; } 60 "type_name" { return GT_TYPE_NAME; } 61 "floatconstant" { return GT_FLOATCONSTANT; } 62 "intconstant" { return GT_INTCONSTANT; } 63 "uintconstant" { return GT_UINTCONSTANT; } 64 "boolconstant" { return GT_BOOLCONSTANT; } 65 66 "field_selection" { return GT_FIELD_SELECTION; } 67 "left_op" { return GT_LEFT_OP; } 68 "right_op" { return GT_RIGHT_OP; } 69 "and_op" { return GT_AND_OP; } 70 "or_op" { return GT_OR_OP; } 71 "xor_op" { return GT_XOR_OP; } 72 "mul_assign" { return GT_MUL_ASSIGN; } 73 "div_assign" { return GT_DIV_ASSIGN; } 74 "add_assign" { return GT_ADD_ASSIGN; } 75 "mod_assign" { return GT_MOD_ASSIGN; } 76 "left_assign" { return GT_LEFT_ASSIGN; } 77 "right_assign" { return GT_RIGHT_ASSIGN; } 78 "and_assign" { return GT_AND_ASSIGN; } 79 "xor_assign" { return GT_XOR_ASSIGN; } 80 "or_assign" { return GT_OR_ASSIGN; } 81 "sub_assign" { return GT_SUB_ASSIGN; } 82 "left_paren" { return GT_LEFT_PAREN; } 83 "right_paren" { return GT_RIGHT_PAREN; } 84 "left_bracket" { return GT_LEFT_BRACKET; } 85 "right_bracket" { return GT_RIGHT_BRACKET; } 86 "left_brace" { return GT_LEFT_BRACE; } 87 "right_brace" { return GT_RIGHT_BRACE; } 88 "dot" { return GT_DOT; } 89 "comma" { return GT_COMMA; } 90 "colon" { return GT_COLON; } 91 "equal" { return GT_EQUAL; } 92 "semicolon" { return GT_SEMICOLON; } 93 "bang" { return GT_BANG; } 94 "dash" { return GT_DASH; } 95 "tilde" { return GT_TILDE; } 96 "plus" { return GT_PLUS; } 97 "star" { return GT_STAR; } 98 "slash" { return GT_SLASH; } 99 "percent" { return GT_PERCENT; } 100 "left_angle" { return GT_LEFT_ANGLE; } 101 "right_angle" { return GT_RIGHT_ANGLE; } 102 "vertical_bar" { return GT_VERTICAL_BAR; } 103 "caret" { return GT_CARET; } 104 "ampersand" { return GT_AMPERSAND; } 105 "question" { return GT_QUESTION; } 59 "highp" { return GT_HIGHP; } 60 "mediump" { return GT_MEDIUMP; } 61 "lowp" { return GT_LOWP; } 62 "precision" { return GT_PRECISION; } 106 63 "invariant" { return GT_INVARIANT; } 107 "high_precision" { return GT_HIGH_PRECISION; }108 "medium_precision" { return GT_MEDIUM_PRECISION; }109 "low_precision" { return GT_LOW_PRECISION; }110 "precision" { return GT_PRECISION; }111 64 112 65 /* … … 157 110 "dmat4x3" { return GT_DMAT4X3; } 158 111 "dmat4x4" { return GT_DMAT4X4; } 112 113 /* 114 * GLSL constant values 115 */ 116 117 "true" { yylval.ival = 1; return BOOLCONSTANT; } 118 "false" { yylval.ival = 0; return BOOLCONSTANT; } 119 120 [xyzw]{1,4} { return FIELDSELECTION; } 121 [rgba]{1,4} { return FIELDSELECTION; } 122 [stpq]{1,4} { return FIELDSELECTION; } 159 123 160 124 /* … … 471 435 472 436 /* 437 * LolFx preprocessor directives 438 */ 439 440 "#"[ \t]*"region" { return PREPROCESSOR_REGION; } 441 442 /* 473 443 * HLSL reserved keywords 474 444 * Gathered from http://msdn.microsoft.com/en-us/library/windows/desktop/bb509569%28v=vs.85%29.aspx … … 535 505 "|=" { return T_OREQ; } 536 506 537 [0-9]+\.[0-9]+ { yylval.fval = atof(yytext); return FLOAT; } 538 [0-9]+ { yylval.ival = atoi(yytext); return INT; } 507 (0|[1-9][0-9]*)\.[0-9]+ { yylval.fval = atof(yytext); return FLOATCONSTANT; } 508 (0|[1-9][0-9]*)[uU] { yylval.uval = atoi(yytext); return UINTCONSTANT; } 509 (0|[1-9][0-9]*) { yylval.ival = atoi(yytext); return INTCONSTANT; } 510 539 511 [a-zA-Z][a-zA-Z0-9_]* { 540 512 /* Copy token for now */ 541 513 yylval.sval = strdup(yytext); 542 return NAME;514 return IDENTIFIER; 543 515 } 544 [ \t\n]+ ; 545 "{"|"}"|"("|")"|"["|"]" { return *yytext; } 516 [ \t\n]+ { /* ignore whitespace */ } 546 517 . { return *yytext; } 547 518 -
trunk/test/sandbox/lex/lolfx.y
r1412 r1413 15 15 { 16 16 int ival; 17 unsigned uval; 17 18 float fval; 18 19 char *sval; 19 20 } 20 21 22 %type <sval> lolfx_shader_name 23 24 /* 25 * GLSL and HLSL generic tokens 26 */ 27 28 %token <ival> BOOLCONSTANT 29 %token <ival> INTCONSTANT 30 %token <uval> UINTCONSTANT 31 %token <fval> FLOATCONSTANT 32 %token /* TODO */ FIELDSELECTION 33 %token <sval> IDENTIFIER 34 %token <sval> TYPENAME 35 21 36 /* 22 37 * GLSL keywords … … 25 40 26 41 %token GT_SUBROUTINE GT_PATCH GT_SAMPLE GT_FLAT GT_SMOOTH GT_LAYOUT 27 %token GT_SAMPLER1DSHADOW GT_SAMPLER2DSHADOW GT_SAMPLERCUBESHADOW 28 %token GT_SAMPLER1DARRAY GT_SAMPLER2DARRAY GT_SAMPLER1DARRAYSHADOW 29 %token GT_SAMPLER2DARRAYSHADOW GT_ISAMPLER1D GT_ISAMPLER2D GT_ISAMPLER3D 30 %token GT_ISAMPLERCUBE GT_ISAMPLER1DARRAY GT_ISAMPLER2DARRAY GT_USAMPLER1D 31 %token GT_USAMPLER2D GT_USAMPLER3D GT_USAMPLERCUBE GT_USAMPLER1DARRAY 32 %token GT_USAMPLER2DARRAY GT_SAMPLER2DRECT GT_SAMPLER2DRECTSHADOW 33 %token GT_ISAMPLER2DRECT GT_USAMPLER2DRECT GT_SAMPLERBUFFER GT_ISAMPLERBUFFER 34 %token GT_USAMPLERBUFFER GT_SAMPLERCUBEARRAY GT_SAMPLERCUBEARRAYSHADOW 35 %token GT_ISAMPLERCUBEARRAY GT_USAMPLERCUBEARRAY GT_SAMPLER2DMS GT_ISAMPLER2DMS 36 %token GT_USAMPLER2DMS GT_SAMPLER2DMSARRAY GT_ISAMPLER2DMSARRAY 37 %token GT_USAMPLER2DMSARRAY GT_IDENTIFIER GT_TYPE_NAME GT_FLOATCONSTANT 38 %token GT_INTCONSTANT GT_UINTCONSTANT GT_BOOLCONSTANT GT_FIELD_SELECTION 39 %token GT_LEFT_OP GT_RIGHT_OP GT_INC_OP GT_DEC_OP GT_LE_OP GT_GE_OP GT_EQ_OP 40 %token GT_NE_OP GT_AND_OP GT_OR_OP GT_XOR_OP GT_MUL_ASSIGN GT_DIV_ASSIGN 41 %token GT_ADD_ASSIGN GT_MOD_ASSIGN GT_LEFT_ASSIGN GT_RIGHT_ASSIGN GT_AND_ASSIGN 42 %token GT_XOR_ASSIGN GT_OR_ASSIGN GT_SUB_ASSIGN GT_LEFT_PAREN GT_RIGHT_PAREN 43 %token GT_LEFT_BRACKET GT_RIGHT_BRACKET GT_LEFT_BRACE GT_RIGHT_BRACE GT_DOT 44 %token GT_COMMA GT_COLON GT_EQUAL GT_SEMICOLON GT_BANG GT_DASH GT_TILDE GT_PLUS 45 %token GT_STAR GT_SLASH GT_PERCENT GT_LEFT_ANGLE GT_RIGHT_ANGLE GT_VERTICAL_BAR 46 %token GT_CARET GT_AMPERSAND GT_QUESTION GT_INVARIANT GT_HIGH_PRECISION 47 %token GT_MEDIUM_PRECISION GT_LOW_PRECISION GT_PRECISION GT_BVEC2 GT_BVEC3 48 %token GT_BVEC4 GT_IVEC2 GT_IVEC3 GT_IVEC4 GT_UVEC2 GT_UVEC3 GT_UVEC4 GT_VEC2 49 %token GT_VEC3 GT_VEC4 GT_MAT2 GT_MAT2X2 GT_MAT2X3 GT_MAT2X4 GT_MAT3 GT_MAT3X2 50 %token GT_MAT3X3 GT_MAT3X4 GT_MAT4 GT_MAT4X2 GT_MAT4X3 GT_MAT4X4 GT_DVEC2 51 %token GT_DVEC3 GT_DVEC4 GT_DMAT2 GT_DMAT2X2 GT_DMAT2X3 GT_DMAT2X4 GT_DMAT3 52 %token GT_DMAT3X2 GT_DMAT3X3 GT_DMAT3X4 GT_DMAT4 GT_DMAT4X2 GT_DMAT4X3 53 %token GT_DMAT4X4 42 %token GT_INVARIANT GT_HIGHP GT_MEDIUMP GT_LOWP GT_PRECISION 43 44 /* 45 * GLSL types 46 */ 47 48 %token GT_VEC2 GT_VEC3 GT_VEC4 49 %token GT_BVEC2 GT_BVEC3 GT_BVEC4 50 %token GT_DVEC2 GT_DVEC3 GT_DVEC4 51 %token GT_IVEC2 GT_IVEC3 GT_IVEC4 52 %token GT_UVEC2 GT_UVEC3 GT_UVEC4 53 54 %token GT_MAT2 GT_MAT2X2 GT_MAT2X3 GT_MAT2X4 55 %token GT_MAT3 GT_MAT3X2 GT_MAT3X3 GT_MAT3X4 56 %token GT_MAT4 GT_MAT4X2 GT_MAT4X3 GT_MAT4X4 57 %token GT_DMAT2 GT_DMAT2X2 GT_DMAT2X3 GT_DMAT2X4 58 %token GT_DMAT3 GT_DMAT3X2 GT_DMAT3X3 GT_DMAT3X4 59 %token GT_DMAT4 GT_DMAT4X2 GT_DMAT4X3 GT_DMAT4X4 60 61 %token GT_SAMPLER1DSHADOW GT_SAMPLER1DARRAY GT_SAMPLER1DARRAYSHADOW 62 %token GT_SAMPLER2DSHADOW GT_SAMPLER2DARRAY GT_SAMPLER2DARRAYSHADOW 63 %token GT_SAMPLER2DRECT GT_SAMPLER2DRECTSHADOW 64 %token GT_SAMPLER2DMS GT_SAMPLER2DMSARRAY 65 %token GT_SAMPLERCUBESHADOW GT_SAMPLERCUBEARRAY GT_SAMPLERCUBEARRAYSHADOW 66 %token GT_SAMPLERBUFFER 67 68 %token GT_ISAMPLER1D GT_ISAMPLER1DARRAY 69 %token GT_ISAMPLER2D GT_ISAMPLER2DARRAY 70 %token GT_ISAMPLER2DRECT 71 %token GT_ISAMPLER2DMS GT_ISAMPLER2DMSARRAY 72 %token GT_ISAMPLER3D 73 %token GT_ISAMPLERCUBE GT_ISAMPLERCUBEARRAY 74 %token GT_ISAMPLERBUFFER 75 76 %token GT_USAMPLER1D GT_USAMPLER1DARRAY 77 %token GT_USAMPLER2D GT_USAMPLER2DARRAY 78 %token GT_USAMPLER2DRECT 79 %token GT_USAMPLER2DMS GT_USAMPLER2DMSARRAY 80 %token GT_USAMPLER3D 81 %token GT_USAMPLERCUBE GT_USAMPLERCUBEARRAY 82 %token GT_USAMPLERBUFFER 54 83 55 84 /* … … 140 169 %token PREPROCESSOR_IFDEF PREPROCESSOR_IFNDEF PREPROCESSOR_INCLUDE 141 170 %token PREPROCESSOR_LINE PREPROCESSOR_PRAGMA PREPROCESSOR_UNDEF 171 %token PREPROCESSOR_REGION 142 172 143 173 /* … … 170 200 %% 171 201 172 fx:173 section_list174 ; 175 176 section_list:177 section178 | section_listsection179 ; 180 181 section:182 technique183 | shader202 lolfx_file: 203 lolfx_section_list 204 ; 205 206 lolfx_section_list: 207 lolfx_section 208 | lolfx_section_list lolfx_section 209 ; 210 211 lolfx_section: 212 lolfx_technique 213 | lolfx_shader 184 214 ; 185 215 … … 188 218 */ 189 219 190 technique:220 lolfx_technique: 191 221 HT_TECHNIQUE NAME '{' pass_list '}' { std::cout << "New tech" << std::endl; } 192 222 ; … … 219 249 220 250 /* 251 * Grammar for shaders 252 */ 253 254 lolfx_shader: 255 lolfx_shader_region glsl_translation_unit 256 | lolfx_shader_region 257 ; 258 259 lolfx_shader_region: 260 PREPROCESSOR_REGION lolfx_shader_name { std::cout << "new shader " << $2 << std::endl; } 261 ; 262 263 lolfx_shader_name: 264 IDENTIFIER { $$ = $1; } 265 | lolfx_shader_name '.' IDENTIFIER { $$ = $3; } /* FIXME: concatenate */ 266 ; 267 268 /* 221 269 * Grammar for GLSL 222 270 */ 223 271 224 272 glsl_variable_identifier: 225 GLSL_IDENTIFIER273 IDENTIFIER 226 274 ; 227 275 … … 239 287 | glsl_postfix_expression '[' glsl_integer_expression ']' 240 288 | glsl_function_call 241 | glsl_postfix_expression '.' FIELD _SELECTION289 | glsl_postfix_expression '.' FIELDSELECTION 242 290 | glsl_postfix_expression T_INC 243 291 | glsl_postfix_expression T_DEC … … 279 327 glsl_type_specifier 280 328 | IDENTIFIER 281 | FIELD _SELECTION329 | FIELDSELECTION 282 330 ; 283 331 … … 395 443 glsl_function_prototype ';' 396 444 | glsl_init_declarator_list ';' 397 | PRECISION glsl_precision_qualifier glsl_type_specifier_no_prec ';'445 | GT_PRECISION glsl_precision_qualifier glsl_type_specifier_no_prec ';' 398 446 | glsl_type_qualifier IDENTIFIER '{' glsl_struct_declaration_list '}' ';' 399 447 | glsl_type_qualifier IDENTIFIER '{' glsl_struct_declaration_list '}' IDENTIFIER ';' … … 462 510 | glsl_fully_specified_type IDENTIFIER '[' glsl_constant_expression ']' '=' glsl_initializer 463 511 | glsl_fully_specified_type IDENTIFIER '=' glsl_initializer 464 | INVARIANT IDENTIFIER512 | GT_INVARIANT IDENTIFIER 465 513 ; 466 514 … … 471 519 472 520 glsl_invariant_qualifier: 473 INVARIANT521 GT_INVARIANT 474 522 ; 475 523 … … 619 667 | GT_USAMPLER2DMSARRAY 620 668 | glsl_struct_specifier 621 | TYPE _NAME669 | TYPENAME 622 670 ; 623 671 624 672 glsl_precision_qualifier: 625 HIGH_PRECISION626 | MEDIUM_PRECISION627 | LOW_PRECISION673 GT_HIGHP 674 | GT_MEDIUMP 675 | GT_LOWP 628 676 ; 629 677 … … 761 809 glsl_translation_unit: 762 810 glsl_external_declaration 763 glsl_translation_unit glsl_external_declaration811 | glsl_translation_unit glsl_external_declaration 764 812 ; 765 813 … … 771 819 glsl_function_definition: 772 820 glsl_function_prototype glsl_compound_statement_no_new_scope 773 ;774 775 /*776 * Grammar for shaders777 */778 779 shader:780 shader_region shader_code781 | shader_region782 ;783 784 shader_region:785 '#' NAME shader_name { std::cout << "new shader " << $2 << std::endl; }786 ;787 788 shader_name:789 NAME790 | shader_name '.' NAME791 ;792 793 shader_code:794 INT shader_code { std::cout << "int: " << $1 << std::endl; }795 | FLOAT shader_code { std::cout << "float: " << $1 << std::endl; }796 | STRING shader_code { std::cout << "string: " << $1 << std::endl; }797 | INT { std::cout << "int: " << $1 << std::endl; }798 | FLOAT { std::cout << "float: " << $1 << std::endl; }799 | STRING { std::cout << "string: " << $1 << std::endl; }800 821 ; 801 822
Note: See TracChangeset
for help on using the changeset viewer.