From e7fd8c57e298e8f277a834518f0d4d75028bb75b Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 30 May 2012 17:59:15 +0000 Subject: [PATCH] test: a better GLSL parser in the LolFx test parser. --- test/sandbox/lex/lolfx.l | 15 +- test/sandbox/lex/lolfx.y | 974 +++++++++++++++++++++++++++--------- test/sandbox/lex/test.lolfx | 10 +- 3 files changed, 749 insertions(+), 250 deletions(-) diff --git a/test/sandbox/lex/lolfx.l b/test/sandbox/lex/lolfx.l index f4123945..d7a20d72 100644 --- a/test/sandbox/lex/lolfx.l +++ b/test/sandbox/lex/lolfx.l @@ -62,6 +62,12 @@ "precision" { return GT_PRECISION; } "invariant" { return GT_INVARIANT; } + /* + * Deprecated GLSL keywords + */ + +"attribute" { return GT_ATTRIBUTE; } + /* * GLSL vector types */ @@ -433,11 +439,18 @@ "#"[ \t]*"pragma" { return PREPROCESSOR_PRAGMA; } "#"[ \t]*"undef" { return PREPROCESSOR_UNDEF; } + /* + * GLSL preprocessor directives + */ + +"#"[ \t]*"version".* { /* ignore for now */ } + /* * LolFx preprocessor directives */ -"#"[ \t]*"region" { return PREPROCESSOR_REGION; } +"#"[ \t]*"region" { return PREPROCESSOR_REGION; } +"#"[ \t]*"pragma"[ \t]*"lolfx".* { /* ignore for now */ } /* * HLSL reserved keywords diff --git a/test/sandbox/lex/lolfx.y b/test/sandbox/lex/lolfx.y index fe6f548d..14dbc9ff 100644 --- a/test/sandbox/lex/lolfx.y +++ b/test/sandbox/lex/lolfx.y @@ -41,6 +41,12 @@ void yyerror(const char *s); %token GT_SUBROUTINE GT_PATCH GT_SAMPLE GT_FLAT GT_SMOOTH GT_LAYOUT %token GT_INVARIANT GT_HIGHP GT_MEDIUMP GT_LOWP GT_PRECISION + /* + * Deprecated GLSL keywords + */ + +%token GT_ATTRIBUTE + /* * GLSL types */ @@ -82,7 +88,7 @@ void yyerror(const char *s); %token GT_USAMPLERBUFFER /* - * HLSL and GLSL keywords + * GLSL keywords that are also in HLSL */ %token GHT_BOOL GHT_BREAK GHT_CASE GHT_CENTROID GHT_CONST GHT_CONTINUE @@ -91,6 +97,10 @@ void yyerror(const char *s); %token GHT_SAMPLER1D GHT_SAMPLER2D GHT_SAMPLER3D GHT_SAMPLERCUBE GHT_STRUCT %token GHT_SWITCH GHT_UINT GHT_UNIFORM GHT_VOID GHT_WHILE + /* + * HLSL keywords that are also in GLSL + */ + %token HGT_BOOL HGT_BREAK HGT_CASE HGT_CENTROID HGT_CONST HGT_CONTINUE %token HGT_DEFAULT HGT_DISCARD HGT_DO HGT_DOUBLE HGT_ELSE HGT_FLOAT HGT_FOR %token HGT_IF HGT_IN HGT_INOUT HGT_INT HGT_NOPERSPECTIVE HGT_OUT HGT_RETURN @@ -182,7 +192,7 @@ void yyerror(const char *s); %token HT_USING HT_VIRTUAL /* - * Language keywords + * Language symbols */ %token T_INC T_DEC T_LE T_GE T_EQ T_NE T_LEFT T_RIGHT T_AND T_OR T_XOR @@ -193,24 +203,487 @@ void yyerror(const char *s); * Temporary shit */ -%token INT %token FLOAT %token STRING NAME + /* + * Our entry point + */ + +%start lolfx_file + %% + /* + * Shortcuts for token groups + */ + +group_glsl_keyword: + GT_SUBROUTINE + | GT_PATCH + | GT_SAMPLE + | GT_FLAT + | GT_SMOOTH + | GT_LAYOUT + | GT_INVARIANT + | GT_HIGHP + | GT_MEDIUMP + | GT_LOWP + | GT_PRECISION + | GT_ATTRIBUTE + ; + +group_glsl_type: + GT_VEC2 + | GT_VEC3 + | GT_VEC4 + | GT_BVEC2 + | GT_BVEC3 + | GT_BVEC4 + | GT_DVEC2 + | GT_DVEC3 + | GT_DVEC4 + | GT_IVEC2 + | GT_IVEC3 + | GT_IVEC4 + | GT_UVEC2 + | GT_UVEC3 + | GT_UVEC4 + | GT_MAT2 + | GT_MAT2X2 + | GT_MAT2X3 + | GT_MAT2X4 + | GT_MAT3 + | GT_MAT3X2 + | GT_MAT3X3 + | GT_MAT3X4 + | GT_MAT4 + | GT_MAT4X2 + | GT_MAT4X3 + | GT_MAT4X4 + | GT_DMAT2 + | GT_DMAT2X2 + | GT_DMAT2X3 + | GT_DMAT2X4 + | GT_DMAT3 + | GT_DMAT3X2 + | GT_DMAT3X3 + | GT_DMAT3X4 + | GT_DMAT4 + | GT_DMAT4X2 + | GT_DMAT4X3 + | GT_DMAT4X4 + | GT_SAMPLER1DSHADOW + | GT_SAMPLER1DARRAY + | GT_SAMPLER1DARRAYSHADOW + | GT_SAMPLER2DSHADOW + | GT_SAMPLER2DARRAY + | GT_SAMPLER2DARRAYSHADOW + | GT_SAMPLER2DRECT + | GT_SAMPLER2DRECTSHADOW + | GT_SAMPLER2DMS + | GT_SAMPLER2DMSARRAY + | GT_SAMPLERCUBESHADOW + | GT_SAMPLERCUBEARRAY + | GT_SAMPLERCUBEARRAYSHADOW + | GT_SAMPLERBUFFER + | GT_ISAMPLER1D + | GT_ISAMPLER1DARRAY + | GT_ISAMPLER2D + | GT_ISAMPLER2DARRAY + | GT_ISAMPLER2DRECT + | GT_ISAMPLER2DMS + | GT_ISAMPLER2DMSARRAY + | GT_ISAMPLER3D + | GT_ISAMPLERCUBE + | GT_ISAMPLERCUBEARRAY + | GT_ISAMPLERBUFFER + | GT_USAMPLER1D + | GT_USAMPLER1DARRAY + | GT_USAMPLER2D + | GT_USAMPLER2DARRAY + | GT_USAMPLER2DRECT + | GT_USAMPLER2DMS + | GT_USAMPLER2DMSARRAY + | GT_USAMPLER3D + | GT_USAMPLERCUBE + | GT_USAMPLERCUBEARRAY + | GT_USAMPLERBUFFER + ; + +group_glsl_keyword_in_hlsl: + GHT_BOOL + | GHT_BREAK + | GHT_CASE + | GHT_CENTROID + | GHT_CONST + | GHT_CONTINUE + | GHT_DEFAULT + | GHT_DISCARD + | GHT_DO + | GHT_DOUBLE + | GHT_ELSE + | GHT_FLOAT + | GHT_FOR + | GHT_IF + | GHT_IN + | GHT_INOUT + | GHT_INT + | GHT_NOPERSPECTIVE + | GHT_OUT + | GHT_RETURN + | GHT_SAMPLER1D + | GHT_SAMPLER2D + | GHT_SAMPLER3D + | GHT_SAMPLERCUBE + | GHT_STRUCT + | GHT_SWITCH + | GHT_UINT + | GHT_UNIFORM + | GHT_VOID + | GHT_WHILE + ; + +group_hlsl_keyword_in_glsl: + HGT_BOOL + | HGT_BREAK + | HGT_CASE + | HGT_CENTROID + | HGT_CONST + | HGT_CONTINUE + | HGT_DEFAULT + | HGT_DISCARD + | HGT_DO + | HGT_DOUBLE + | HGT_ELSE + | HGT_FLOAT + | HGT_FOR + | HGT_IF + | HGT_IN + | HGT_INOUT + | HGT_INT + | HGT_NOPERSPECTIVE + | HGT_OUT + | HGT_RETURN + | HGT_SAMPLER1D + | HGT_SAMPLER2D + | HGT_SAMPLER3D + | HGT_SAMPLERCUBE + | HGT_STRUCT + | HGT_SWITCH + | HGT_UINT + | HGT_UNIFORM + | HGT_VOID + | HGT_WHILE + ; + +group_hlsl_keyword: + HT_APPENDSTRUCTUREDBUFFER + | HT_ASM + | HT_ASM_FRAGMENT + | HT_BLENDSTATE + | HT_BUFFER + | HT_BYTEADDRESSBUFFER + | HT_CBUFFER + | HT_COLUMN_MAJOR + | HT_COMPILE + | HT_COMPILE_FRAGMENT + | HT_COMPILESHADER + | HT_COMPUTESHADER + | HT_CONSUMESTRUCTUREDBUFFER + | HT_DEPTHSTENCILSTATE + | HT_DEPTHSTENCILVIEW + | HT_DOMAINSHADER + | HT_DWORD + | HT_EXTERN + | HT_FALSE + | HT_FXGROUP + | HT_GEOMETRYSHADER + | HT_GROUPSHARED + | HT_HALF + | HT_HULLSHADER + | HT_INLINE + | HT_INPUTPATCH + | HT_INTERFACE + | HT_LINE + | HT_LINEADJ + | HT_LINEAR + | HT_LINESTREAM + | HT_MATRIX + | HT_NAMESPACE + | HT_NOINTERPOLATION + | HT_NULL + | HT_OUTPUTPATCH + | HT_PACKOFFSET + | HT_PASS + | HT_PIXELFRAGMENT + | HT_PIXELSHADER + | HT_POINT + | HT_POINTSTREAM + | HT_PRECISE + | HT_RASTERIZERSTATE + | HT_RENDERTARGETVIEW + | HT_REGISTER + | HT_ROW_MAJOR + | HT_RWBUFFER + | HT_RWBYTEADDRESSBUFFER + | HT_RWSTRUCTUREDBUFFER + | HT_RWTEXTURE1D + | HT_RWTEXTURE1DARRAY + | HT_RWTEXTURE2D + | HT_RWTEXTURE2DARRAY + | HT_RWTEXTURE3D + | HT_SAMPLER + | HT_SAMPLER_STATE + | HT_SAMPLERSTATE + | HT_SAMPLERCOMPARISONSTATE + | HT_SHARED + | HT_SNORM + | HT_STATEBLOCK + | HT_STATEBLOCK_STATE + | HT_STATIC + | HT_STRING + | HT_STRUCTUREDBUFFER + | HT_TBUFFER + | HT_TECHNIQUE + | HT_TECHNIQUE10 + | HT_TECHNIQUE11XZ + | HT_TEXTURE + | HT_TEXTURE1D + | HT_TEXTURE1DARRAY + | HT_TEXTURE2D + | HT_TEXTURE2DARRAY + | HT_TEXTURE2DMS + | HT_TEXTURE2DMSARRAY + | HT_TEXTURE3D + | HT_TEXTURECUBE + | HT_TEXTURECUBEARRAY + | HT_TRUE + | HT_TYPEDEF + | HT_TRIANGLE + | HT_TRIANGLEADJ + | HT_TRIANGLESTREAM + | HT_UNORM + | HT_VECTOR + | HT_VERTEXFRAGMENT + | HT_VERTEXSHADER + | HT_VOLATILE + ; + +group_hlsl_type: + HT_BOOL1 + | HT_BOOL1x1 + | HT_BOOL2x1 + | HT_BOOL3x1 + | HT_BOOL4x1 + | HT_BOOL2 + | HT_BOOL1x2 + | HT_BOOL2x2 + | HT_BOOL3x2 + | HT_BOOL4x2 + | HT_BOOL3 + | HT_BOOL1x3 + | HT_BOOL2x3 + | HT_BOOL3x3 + | HT_BOOL4x3 + | HT_BOOL4 + | HT_BOOL1x4 + | HT_BOOL2x4 + | HT_BOOL3x4 + | HT_BOOL4x4 + | HT_FLOAT1 + | HT_FLOAT1x1 + | HT_FLOAT2x1 + | HT_FLOAT3x1 + | HT_FLOAT4x1 + | HT_FLOAT2 + | HT_FLOAT1x2 + | HT_FLOAT2x2 + | HT_FLOAT3x2 + | HT_FLOAT4x2 + | HT_FLOAT3 + | HT_FLOAT1x3 + | HT_FLOAT2x3 + | HT_FLOAT3x3 + | HT_FLOAT4x3 + | HT_FLOAT4 + | HT_FLOAT1x4 + | HT_FLOAT2x4 + | HT_FLOAT3x4 + | HT_FLOAT4x4 + | HT_DOUBLE1 + | HT_DOUBLE1x1 + | HT_DOUBLE2x1 + | HT_DOUBLE3x1 + | HT_DOUBLE4x1 + | HT_DOUBLE2 + | HT_DOUBLE1x2 + | HT_DOUBLE2x2 + | HT_DOUBLE3x2 + | HT_DOUBLE4x2 + | HT_DOUBLE3 + | HT_DOUBLE1x3 + | HT_DOUBLE2x3 + | HT_DOUBLE3x3 + | HT_DOUBLE4x3 + | HT_DOUBLE4 + | HT_DOUBLE1x4 + | HT_DOUBLE2x4 + | HT_DOUBLE3x4 + | HT_DOUBLE4x4 + | HT_DWORD1 + | HT_DWORD1x1 + | HT_DWORD2x1 + | HT_DWORD3x1 + | HT_DWORD4x1 + | HT_DWORD2 + | HT_DWORD1x2 + | HT_DWORD2x2 + | HT_DWORD3x2 + | HT_DWORD4x2 + | HT_DWORD3 + | HT_DWORD1x3 + | HT_DWORD2x3 + | HT_DWORD3x3 + | HT_DWORD4x3 + | HT_DWORD4 + | HT_DWORD1x4 + | HT_DWORD2x4 + | HT_DWORD3x4 + | HT_DWORD4x4 + | HT_INT1 + | HT_INT1x1 + | HT_INT2x1 + | HT_INT3x1 + | HT_INT4x1 + | HT_INT2 + | HT_INT1x2 + | HT_INT2x2 + | HT_INT3x2 + | HT_INT4x2 + | HT_INT3 + | HT_INT1x3 + | HT_INT2x3 + | HT_INT3x3 + | HT_INT4x3 + | HT_INT4 + | HT_INT1x4 + | HT_INT2x4 + | HT_INT3x4 + | HT_INT4x4 + | HT_UINT1 + | HT_UINT1x1 + | HT_UINT2x1 + | HT_UINT3x1 + | HT_UINT4x1 + | HT_UINT2 + | HT_UINT1x2 + | HT_UINT2x2 + | HT_UINT3x2 + | HT_UINT4x2 + | HT_UINT3 + | HT_UINT1x3 + | HT_UINT2x3 + | HT_UINT3x3 + | HT_UINT4x3 + | HT_UINT4 + | HT_UINT1x4 + | HT_UINT2x4 + | HT_UINT3x4 + | HT_UINT4x4 + ; + +group_hlsl_preprocessor: + PREPROCESSOR_DEFINE + | PREPROCESSOR_ELIF + | PREPROCESSOR_ELSE + | PREPROCESSOR_ENDIF + | PREPROCESSOR_ERROR + | PREPROCESSOR_IF + | PREPROCESSOR_IFDEF + | PREPROCESSOR_IFNDEF + | PREPROCESSOR_INCLUDE + | PREPROCESSOR_LINE + | PREPROCESSOR_PRAGMA + | PREPROCESSOR_UNDEF + | PREPROCESSOR_REGION + ; + +group_hlsl_reserved: + HT_AUTO + | HT_CATCH + | HT_CHAR + | HT_CLASS + | HT_CONST_CAST + | HT_DELETE + | HT_DYNAMIC_CAST + | HT_ENUM + | HT_EXPLICIT + | HT_FRIEND + | HT_GOTO + | HT_LONG + | HT_MUTABLE + | HT_NEW + | HT_OPERATOR + | HT_PRIVATE + | HT_PROTECTED + | HT_PUBLIC + | HT_REINTERPRET_CAST + | HT_SHORT + | HT_SIGNED + | HT_SIZEOF + | HT_STATIC_CAST + | HT_TEMPLATE + | HT_THIS + | HT_THROW + | HT_TRY + | HT_TYPENAME + | HT_UNION + | HT_UNSIGNED + | HT_USING + | HT_VIRTUAL + ; + +group_language_symbols: + T_INC + | T_DEC + | T_LE + | T_GE + | T_EQ + | T_NE + | T_LEFT + | T_RIGHT + | T_AND + | T_OR + | T_XOR + | T_MULEQ + | T_DIVEQ + | T_MODEQ + | T_ADDEQ + | T_SUBEQ + | T_LEFTEQ + | T_RIGHTEQ + | T_ANDEQ + | T_XOREQ + | T_OREQ + ; + + /* + * Grammar for LolFx files + */ + lolfx_file: lolfx_section_list ; lolfx_section_list: lolfx_section - | lolfx_section_list lolfx_section + | lolfx_section lolfx_section_list ; lolfx_section: lolfx_technique - | lolfx_shader + | lolfx_shader ; /* @@ -218,7 +691,7 @@ lolfx_section: */ lolfx_technique: - HT_TECHNIQUE NAME '{' pass_list '}' { std::cout << "New tech" << std::endl; } + HT_TECHNIQUE IDENTIFIER '{' pass_list '}' { std::cout << "New tech" << std::endl; } ; /* @@ -227,24 +700,35 @@ lolfx_technique: pass_list: pass - | pass_list pass + | pass pass_list ; pass: - HT_PASS NAME '{' pass_stmt_list '}' { std::cout << "New pass" << std::endl; } + HT_PASS IDENTIFIER '{' pass_stmt_list '}' { std::cout << "New pass" << std::endl; } ; pass_stmt_list: pass_stmt - | pass_stmt_list pass_stmt + | pass_stmt pass_stmt_list ; + /* Shitty shit */ pass_stmt: ';' - | NAME '=' NAME ';' - | NAME '=' INT ';' - | NAME '[' INT ']' '=' NAME ';' - | NAME '[' INT ']' '=' INT ';' + | IDENTIFIER '=' IDENTIFIER ';' + | IDENTIFIER '=' INTCONSTANT ';' + | IDENTIFIER '=' BOOLCONSTANT ';' + | IDENTIFIER '=' HT_FALSE ';' + | IDENTIFIER '=' HT_TRUE ';' + | IDENTIFIER '[' INTCONSTANT ']' '=' IDENTIFIER ';' + | IDENTIFIER '[' INTCONSTANT ']' '=' INTCONSTANT ';' + | HT_TEXTURE '[' INTCONSTANT ']' '=' IDENTIFIER ';' + | HT_TEXTURE '[' INTCONSTANT ']' '=' HT_NULL ';' + | HT_DOMAINSHADER '=' IDENTIFIER ';' + | HT_GEOMETRYSHADER '=' IDENTIFIER ';' + | HT_HULLSHADER '=' IDENTIFIER ';' + | HT_PIXELSHADER '=' IDENTIFIER ';' + | HT_VERTEXSHADER '=' IDENTIFIER ';' ; /* @@ -253,7 +737,7 @@ pass_stmt: lolfx_shader: lolfx_shader_region glsl_translation_unit - | lolfx_shader_region + | lolfx_shader_region ; lolfx_shader_region: @@ -262,7 +746,7 @@ lolfx_shader_region: lolfx_shader_name: IDENTIFIER { $$ = $1; } - | lolfx_shader_name '.' IDENTIFIER { $$ = $3; } /* FIXME: concatenate */ + | lolfx_shader_name '.' IDENTIFIER { $$ = $3; } /* FIXME: concatenate */ ; /* @@ -275,20 +759,20 @@ glsl_variable_identifier: glsl_primary_expression: glsl_variable_identifier - | INTCONSTANT - | UINTCONSTANT - | FLOATCONSTANT - | BOOLCONSTANT - | '(' glsl_expression ')' + | INTCONSTANT + | UINTCONSTANT + | FLOATCONSTANT + | BOOLCONSTANT + | '(' glsl_expression ')' ; glsl_postfix_expression: glsl_primary_expression - | glsl_postfix_expression '[' glsl_integer_expression ']' - | glsl_function_call - | glsl_postfix_expression '.' FIELDSELECTION - | glsl_postfix_expression T_INC - | glsl_postfix_expression T_DEC + | glsl_postfix_expression '[' glsl_integer_expression ']' + | glsl_function_call + | glsl_postfix_expression '.' FIELDSELECTION + | glsl_postfix_expression T_INC + | glsl_postfix_expression T_DEC ; glsl_integer_expression: @@ -301,22 +785,22 @@ glsl_function_call: glsl_function_call_or_method: glsl_function_call_generic - | glsl_postfix_expression '.' glsl_function_call_generic + | glsl_postfix_expression '.' glsl_function_call_generic ; glsl_function_call_generic: glsl_function_call_header_with_parameters ')' - | glsl_function_call_header_no_parameters ')' + | glsl_function_call_header_no_parameters ')' ; glsl_function_call_header_no_parameters: glsl_function_call_header GHT_VOID - | glsl_function_call_header + | glsl_function_call_header ; glsl_function_call_header_with_parameters: glsl_function_call_header glsl_assignment_expression - | glsl_function_call_header_with_parameters ',' glsl_assignment_expression + | glsl_function_call_header_with_parameters ',' glsl_assignment_expression ; glsl_function_call_header: @@ -325,114 +809,114 @@ glsl_function_call_header: glsl_function_identifier: glsl_type_specifier - | IDENTIFIER - | FIELDSELECTION + | IDENTIFIER + | FIELDSELECTION ; glsl_unary_expression: glsl_postfix_expression - | T_INC glsl_unary_expression - | T_DEC glsl_unary_expression - | glsl_unary_operator glsl_unary_expression + | T_INC glsl_unary_expression + | T_DEC glsl_unary_expression + | glsl_unary_operator glsl_unary_expression ; glsl_unary_operator: '+' - | '-' - | '!' - | '~' + | '-' + | '!' + | '~' ; glsl_multiplicative_expression: glsl_unary_expression - | glsl_multiplicative_expression '*' glsl_unary_expression - | glsl_multiplicative_expression '/' glsl_unary_expression - | glsl_multiplicative_expression '%' glsl_unary_expression + | glsl_multiplicative_expression '*' glsl_unary_expression + | glsl_multiplicative_expression '/' glsl_unary_expression + | glsl_multiplicative_expression '%' glsl_unary_expression ; glsl_additive_expression: glsl_multiplicative_expression - | glsl_additive_expression '+' glsl_multiplicative_expression - | glsl_additive_expression '-' glsl_multiplicative_expression + | glsl_additive_expression '+' glsl_multiplicative_expression + | glsl_additive_expression '-' glsl_multiplicative_expression ; glsl_shift_expression: glsl_additive_expression - | glsl_shift_expression T_LEFT glsl_additive_expression - | glsl_shift_expression T_RIGHT glsl_additive_expression + | glsl_shift_expression T_LEFT glsl_additive_expression + | glsl_shift_expression T_RIGHT glsl_additive_expression ; glsl_relational_expression: glsl_shift_expression - | glsl_relational_expression '<' glsl_shift_expression - | glsl_relational_expression '>' glsl_shift_expression - | glsl_relational_expression T_LE glsl_shift_expression - | glsl_relational_expression T_GE glsl_shift_expression + | glsl_relational_expression '<' glsl_shift_expression + | glsl_relational_expression '>' glsl_shift_expression + | glsl_relational_expression T_LE glsl_shift_expression + | glsl_relational_expression T_GE glsl_shift_expression ; glsl_equality_expression: glsl_relational_expression - | glsl_equality_expression T_EQ glsl_relational_expression - | glsl_equality_expression T_NE glsl_relational_expression + | glsl_equality_expression T_EQ glsl_relational_expression + | glsl_equality_expression T_NE glsl_relational_expression ; glsl_and_expression: glsl_equality_expression - | glsl_and_expression '&' glsl_equality_expression + | glsl_and_expression '&' glsl_equality_expression ; glsl_exclusive_or_expression: glsl_and_expression - | glsl_exclusive_or_expression '^' glsl_and_expression + | glsl_exclusive_or_expression '^' glsl_and_expression ; glsl_inclusive_or_expression: glsl_exclusive_or_expression - | glsl_inclusive_or_expression '|' glsl_exclusive_or_expression + | glsl_inclusive_or_expression '|' glsl_exclusive_or_expression ; glsl_logical_and_expression: glsl_inclusive_or_expression - | glsl_logical_and_expression T_AND glsl_inclusive_or_expression + | glsl_logical_and_expression T_AND glsl_inclusive_or_expression ; glsl_logical_xor_expression: glsl_logical_and_expression - | glsl_logical_xor_expression T_XOR glsl_logical_and_expression + | glsl_logical_xor_expression T_XOR glsl_logical_and_expression ; glsl_logical_or_expression: glsl_logical_xor_expression - | glsl_logical_or_expression T_OR glsl_logical_xor_expression + | glsl_logical_or_expression T_OR glsl_logical_xor_expression ; glsl_conditional_expression: glsl_logical_or_expression - | glsl_logical_or_expression '?' glsl_expression ':' glsl_assignment_expression + | glsl_logical_or_expression '?' glsl_expression ':' glsl_assignment_expression ; glsl_assignment_expression: glsl_conditional_expression - | glsl_unary_expression glsl_assignment_operator glsl_assignment_expression + | glsl_unary_expression glsl_assignment_operator glsl_assignment_expression ; glsl_assignment_operator: '=' - | T_MULEQ - | T_DIVEQ - | T_MODEQ - | T_ADDEQ - | T_SUBEQ - | T_LEFTEQ - | T_RIGHTEQ - | T_ANDEQ - | T_XOREQ - | T_OREQ + | T_MULEQ + | T_DIVEQ + | T_MODEQ + | T_ADDEQ + | T_SUBEQ + | T_LEFTEQ + | T_RIGHTEQ + | T_ANDEQ + | T_XOREQ + | T_OREQ ; glsl_expression: glsl_assignment_expression - | glsl_expression ',' glsl_assignment_expression + | glsl_expression ',' glsl_assignment_expression ; glsl_constant_expression: @@ -441,13 +925,13 @@ glsl_constant_expression: glsl_declaration: glsl_function_prototype ';' - | glsl_init_declarator_list ';' - | GT_PRECISION glsl_precision_qualifier glsl_type_specifier_no_prec ';' - | glsl_type_qualifier IDENTIFIER '{' glsl_struct_declaration_list '}' ';' - | glsl_type_qualifier IDENTIFIER '{' glsl_struct_declaration_list '}' IDENTIFIER ';' - | glsl_type_qualifier IDENTIFIER '{' glsl_struct_declaration_list '}' IDENTIFIER '[' ']' ';' - | glsl_type_qualifier IDENTIFIER '{' glsl_struct_declaration_list '}' IDENTIFIER '[' glsl_constant_expression ']' ';' - | glsl_type_qualifier ';' + | glsl_init_declarator_list ';' + | GT_PRECISION glsl_precision_qualifier glsl_type_specifier_no_prec ';' + | glsl_type_qualifier IDENTIFIER '{' glsl_struct_declaration_list '}' ';' + | glsl_type_qualifier IDENTIFIER '{' glsl_struct_declaration_list '}' IDENTIFIER ';' + | glsl_type_qualifier IDENTIFIER '{' glsl_struct_declaration_list '}' IDENTIFIER '[' ']' ';' + | glsl_type_qualifier IDENTIFIER '{' glsl_struct_declaration_list '}' IDENTIFIER '[' glsl_constant_expression ']' ';' + | glsl_type_qualifier ';' ; glsl_function_prototype: @@ -456,12 +940,12 @@ glsl_function_prototype: glsl_function_declarator: glsl_function_header - | glsl_function_header_with_parameters + | glsl_function_header_with_parameters ; glsl_function_header_with_parameters: glsl_function_header glsl_parameter_declaration - | glsl_function_header_with_parameters ',' glsl_parameter_declaration + | glsl_function_header_with_parameters ',' glsl_parameter_declaration ; glsl_function_header: @@ -470,21 +954,22 @@ glsl_function_header: glsl_parameter_declarator: glsl_type_specifier IDENTIFIER - | glsl_type_specifier IDENTIFIER '[' glsl_constant_expression ']' + | glsl_type_specifier IDENTIFIER '[' glsl_constant_expression ']' ; glsl_parameter_declaration: glsl_parameter_type_qualifier glsl_parameter_qualifier glsl_parameter_declarator - | glsl_parameter_qualifier glsl_parameter_declarator - | glsl_parameter_type_qualifier glsl_parameter_qualifier glsl_parameter_type_specifier - | glsl_parameter_qualifier glsl_parameter_type_specifier + | glsl_parameter_qualifier glsl_parameter_declarator + | glsl_parameter_type_qualifier glsl_parameter_qualifier glsl_parameter_type_specifier + | glsl_parameter_qualifier glsl_parameter_type_specifier ; glsl_parameter_qualifier: /* empty */ - | GHT_IN - | GHT_OUT - | GHT_INOUT + | GHT_IN + | GHT_OUT + | GHT_INOUT + | GT_ATTRIBUTE /* deprecated */ ; glsl_parameter_type_specifier: @@ -493,28 +978,28 @@ glsl_parameter_type_specifier: glsl_init_declarator_list: glsl_single_declaration - | glsl_init_declarator_list ',' IDENTIFIER - | glsl_init_declarator_list ',' IDENTIFIER '[' ']' - | glsl_init_declarator_list ',' IDENTIFIER '[' glsl_constant_expression ']' - | glsl_init_declarator_list ',' IDENTIFIER '[' ']' '=' glsl_initializer - | glsl_init_declarator_list ',' IDENTIFIER '[' glsl_constant_expression ']' '=' glsl_initializer - | glsl_init_declarator_list ',' IDENTIFIER '=' glsl_initializer + | glsl_init_declarator_list ',' IDENTIFIER + | glsl_init_declarator_list ',' IDENTIFIER '[' ']' + | glsl_init_declarator_list ',' IDENTIFIER '[' glsl_constant_expression ']' + | glsl_init_declarator_list ',' IDENTIFIER '[' ']' '=' glsl_initializer + | glsl_init_declarator_list ',' IDENTIFIER '[' glsl_constant_expression ']' '=' glsl_initializer + | glsl_init_declarator_list ',' IDENTIFIER '=' glsl_initializer ; glsl_single_declaration: glsl_fully_specified_type - | glsl_fully_specified_type IDENTIFIER - | glsl_fully_specified_type IDENTIFIER '[' ']' - | glsl_fully_specified_type IDENTIFIER '[' glsl_constant_expression ']' - | glsl_fully_specified_type IDENTIFIER '[' ']' '=' glsl_initializer - | glsl_fully_specified_type IDENTIFIER '[' glsl_constant_expression ']' '=' glsl_initializer - | glsl_fully_specified_type IDENTIFIER '=' glsl_initializer - | GT_INVARIANT IDENTIFIER + | glsl_fully_specified_type IDENTIFIER + | glsl_fully_specified_type IDENTIFIER '[' ']' + | glsl_fully_specified_type IDENTIFIER '[' glsl_constant_expression ']' + | glsl_fully_specified_type IDENTIFIER '[' ']' '=' glsl_initializer + | glsl_fully_specified_type IDENTIFIER '[' glsl_constant_expression ']' '=' glsl_initializer + | glsl_fully_specified_type IDENTIFIER '=' glsl_initializer + | GT_INVARIANT IDENTIFIER ; glsl_fully_specified_type: glsl_type_specifier - | glsl_type_qualifier glsl_type_specifier + | glsl_type_qualifier glsl_type_specifier ; glsl_invariant_qualifier: @@ -523,8 +1008,8 @@ glsl_invariant_qualifier: glsl_interpolation_qualifier: GT_SMOOTH - | GT_FLAT - | GHT_NOPERSPECTIVE + | GT_FLAT + | GHT_NOPERSPECTIVE ; glsl_layout_qualifier: @@ -533,12 +1018,12 @@ glsl_layout_qualifier: glsl_layout_qualifier_id_list: glsl_layout_qualifier_id - | glsl_layout_qualifier_id_list ',' glsl_layout_qualifier_id + | glsl_layout_qualifier_id_list ',' glsl_layout_qualifier_id ; glsl_layout_qualifier_id: IDENTIFIER - | IDENTIFIER '=' INTCONSTANT + | IDENTIFIER '=' INTCONSTANT ; glsl_parameter_type_qualifier: @@ -547,158 +1032,159 @@ glsl_parameter_type_qualifier: glsl_type_qualifier: glsl_storage_qualifier - | glsl_layout_qualifier - | glsl_layout_qualifier glsl_storage_qualifier - | glsl_interpolation_qualifier glsl_storage_qualifier - | glsl_interpolation_qualifier - | glsl_invariant_qualifier glsl_storage_qualifier - | glsl_invariant_qualifier glsl_interpolation_qualifier glsl_storage_qualifier - | glsl_invariant_qualifier + | glsl_layout_qualifier + | glsl_layout_qualifier glsl_storage_qualifier + | glsl_interpolation_qualifier glsl_storage_qualifier + | glsl_interpolation_qualifier + | glsl_invariant_qualifier glsl_storage_qualifier + | glsl_invariant_qualifier glsl_interpolation_qualifier glsl_storage_qualifier + | glsl_invariant_qualifier ; glsl_storage_qualifier: GHT_CONST - | GHT_IN - | GHT_OUT - | GHT_CENTROID GHT_IN - | GHT_CENTROID GHT_OUT - | GT_PATCH GHT_IN - | GT_PATCH GHT_OUT - | GT_SAMPLE GHT_IN - | GT_SAMPLE GHT_OUT - | GHT_UNIFORM + | GHT_IN + | GHT_OUT + | GHT_CENTROID GHT_IN + | GHT_CENTROID GHT_OUT + | GT_PATCH GHT_IN + | GT_PATCH GHT_OUT + | GT_SAMPLE GHT_IN + | GT_SAMPLE GHT_OUT + | GHT_UNIFORM + | GT_ATTRIBUTE /* deprecated */ ; glsl_type_specifier: glsl_type_specifier_no_prec - | glsl_precision_qualifier glsl_type_specifier_no_prec + | glsl_precision_qualifier glsl_type_specifier_no_prec ; glsl_type_specifier_no_prec: glsl_type_specifier_nonarray - | glsl_type_specifier_nonarray '[' ']' - | glsl_type_specifier_nonarray '[' glsl_constant_expression ']' + | glsl_type_specifier_nonarray '[' ']' + | glsl_type_specifier_nonarray '[' glsl_constant_expression ']' glsl_type_specifier_nonarray: GHT_VOID - | GHT_FLOAT - | GHT_DOUBLE - | GHT_INT - | GHT_UINT - | GHT_BOOL - | GT_VEC2 - | GT_VEC3 - | GT_VEC4 - | GT_DVEC2 - | GT_DVEC3 - | GT_DVEC4 - | GT_BVEC2 - | GT_BVEC3 - | GT_BVEC4 - | GT_IVEC2 - | GT_IVEC3 - | GT_IVEC4 - | GT_UVEC2 - | GT_UVEC3 - | GT_UVEC4 - | GT_MAT2 - | GT_MAT3 - | GT_MAT4 - | GT_MAT2X2 - | GT_MAT2X3 - | GT_MAT2X4 - | GT_MAT3X2 - | GT_MAT3X3 - | GT_MAT3X4 - | GT_MAT4X2 - | GT_MAT4X3 - | GT_MAT4X4 - | GT_DMAT2 - | GT_DMAT3 - | GT_DMAT4 - | GT_DMAT2X2 - | GT_DMAT2X3 - | GT_DMAT2X4 - | GT_DMAT3X2 - | GT_DMAT3X3 - | GT_DMAT3X4 - | GT_DMAT4X2 - | GT_DMAT4X3 - | GT_DMAT4X4 - | GHT_SAMPLER1D - | GHT_SAMPLER2D - | GHT_SAMPLER3D - | GHT_SAMPLERCUBE - | GT_SAMPLER1DSHADOW - | GT_SAMPLER2DSHADOW - | GT_SAMPLERCUBESHADOW - | GT_SAMPLER1DARRAY - | GT_SAMPLER2DARRAY - | GT_SAMPLER1DARRAYSHADOW - | GT_SAMPLER2DARRAYSHADOW - | GT_SAMPLERCUBEARRAY - | GT_SAMPLERCUBEARRAYSHADOW - | GT_ISAMPLER1D - | GT_ISAMPLER2D - | GT_ISAMPLER3D - | GT_ISAMPLERCUBE - | GT_ISAMPLER1DARRAY - | GT_ISAMPLER2DARRAY - | GT_ISAMPLERCUBEARRAY - | GT_USAMPLER1D - | GT_USAMPLER2D - | GT_USAMPLER3D - | GT_USAMPLERCUBE - | GT_USAMPLER1DARRAY - | GT_USAMPLER2DARRAY - | GT_USAMPLERCUBEARRAY - | GT_SAMPLER2DRECT - | GT_SAMPLER2DRECTSHADOW - | GT_ISAMPLER2DRECT - | GT_USAMPLER2DRECT - | GT_SAMPLERBUFFER - | GT_ISAMPLERBUFFER - | GT_USAMPLERBUFFER - | GT_SAMPLER2DMS - | GT_ISAMPLER2DMS - | GT_USAMPLER2DMS - | GT_SAMPLER2DMSARRAY - | GT_ISAMPLER2DMSARRAY - | GT_USAMPLER2DMSARRAY - | glsl_struct_specifier - | TYPENAME + | GHT_FLOAT + | GHT_DOUBLE + | GHT_INT + | GHT_UINT + | GHT_BOOL + | GT_VEC2 + | GT_VEC3 + | GT_VEC4 + | GT_DVEC2 + | GT_DVEC3 + | GT_DVEC4 + | GT_BVEC2 + | GT_BVEC3 + | GT_BVEC4 + | GT_IVEC2 + | GT_IVEC3 + | GT_IVEC4 + | GT_UVEC2 + | GT_UVEC3 + | GT_UVEC4 + | GT_MAT2 + | GT_MAT3 + | GT_MAT4 + | GT_MAT2X2 + | GT_MAT2X3 + | GT_MAT2X4 + | GT_MAT3X2 + | GT_MAT3X3 + | GT_MAT3X4 + | GT_MAT4X2 + | GT_MAT4X3 + | GT_MAT4X4 + | GT_DMAT2 + | GT_DMAT3 + | GT_DMAT4 + | GT_DMAT2X2 + | GT_DMAT2X3 + | GT_DMAT2X4 + | GT_DMAT3X2 + | GT_DMAT3X3 + | GT_DMAT3X4 + | GT_DMAT4X2 + | GT_DMAT4X3 + | GT_DMAT4X4 + | GHT_SAMPLER1D + | GHT_SAMPLER2D + | GHT_SAMPLER3D + | GHT_SAMPLERCUBE + | GT_SAMPLER1DSHADOW + | GT_SAMPLER2DSHADOW + | GT_SAMPLERCUBESHADOW + | GT_SAMPLER1DARRAY + | GT_SAMPLER2DARRAY + | GT_SAMPLER1DARRAYSHADOW + | GT_SAMPLER2DARRAYSHADOW + | GT_SAMPLERCUBEARRAY + | GT_SAMPLERCUBEARRAYSHADOW + | GT_ISAMPLER1D + | GT_ISAMPLER2D + | GT_ISAMPLER3D + | GT_ISAMPLERCUBE + | GT_ISAMPLER1DARRAY + | GT_ISAMPLER2DARRAY + | GT_ISAMPLERCUBEARRAY + | GT_USAMPLER1D + | GT_USAMPLER2D + | GT_USAMPLER3D + | GT_USAMPLERCUBE + | GT_USAMPLER1DARRAY + | GT_USAMPLER2DARRAY + | GT_USAMPLERCUBEARRAY + | GT_SAMPLER2DRECT + | GT_SAMPLER2DRECTSHADOW + | GT_ISAMPLER2DRECT + | GT_USAMPLER2DRECT + | GT_SAMPLERBUFFER + | GT_ISAMPLERBUFFER + | GT_USAMPLERBUFFER + | GT_SAMPLER2DMS + | GT_ISAMPLER2DMS + | GT_USAMPLER2DMS + | GT_SAMPLER2DMSARRAY + | GT_ISAMPLER2DMSARRAY + | GT_USAMPLER2DMSARRAY + | glsl_struct_specifier + | TYPENAME ; glsl_precision_qualifier: GT_HIGHP - | GT_MEDIUMP - | GT_LOWP + | GT_MEDIUMP + | GT_LOWP ; glsl_struct_specifier: GHT_STRUCT IDENTIFIER '{' glsl_struct_declaration_list '}' - | GHT_STRUCT '{' glsl_struct_declaration_list '}' + | GHT_STRUCT '{' glsl_struct_declaration_list '}' ; glsl_struct_declaration_list: glsl_struct_declaration - | glsl_struct_declaration_list glsl_struct_declaration + | glsl_struct_declaration_list glsl_struct_declaration ; glsl_struct_declaration: glsl_type_specifier glsl_struct_declarator_list ';' - | glsl_type_qualifier glsl_type_specifier glsl_struct_declarator_list ';' + | glsl_type_qualifier glsl_type_specifier glsl_struct_declarator_list ';' ; glsl_struct_declarator_list: glsl_struct_declarator - | glsl_struct_declarator_list ',' glsl_struct_declarator + | glsl_struct_declarator_list ',' glsl_struct_declarator ; glsl_struct_declarator: IDENTIFIER - | IDENTIFIER '[' ']' - | IDENTIFIER '[' glsl_constant_expression ']' + | IDENTIFIER '[' ']' + | IDENTIFIER '[' glsl_constant_expression ']' ; glsl_initializer: @@ -711,42 +1197,42 @@ glsl_declaration_statement: glsl_statement: glsl_compound_statement - | glsl_simple_statement + | glsl_simple_statement ; glsl_simple_statement: glsl_declaration_statement - | glsl_expression_statement - | glsl_selection_statement - | glsl_switch_statement - | glsl_case_label - | glsl_iteration_statement - | glsl_jump_statement + | glsl_expression_statement + | glsl_selection_statement + | glsl_switch_statement + | glsl_case_label + | glsl_iteration_statement + | glsl_jump_statement ; glsl_compound_statement: '{' '}' - | '{' glsl_statement_list '}' + | '{' glsl_statement_list '}' ; glsl_statement_no_new_scope: glsl_compound_statement_no_new_scope - | glsl_simple_statement + | glsl_simple_statement ; glsl_compound_statement_no_new_scope: '{' '}' - | '{' glsl_statement_list '}' + | '{' glsl_statement_list '}' ; glsl_statement_list: glsl_statement - | glsl_statement_list glsl_statement + | glsl_statement_list glsl_statement ; glsl_expression_statement: ';' - | glsl_expression ';' + | glsl_expression ';' ; glsl_selection_statement: @@ -755,12 +1241,12 @@ glsl_selection_statement: glsl_selection_rest_statement: glsl_statement GHT_ELSE glsl_statement - | glsl_statement + | glsl_statement ; glsl_condition: glsl_expression - | glsl_fully_specified_type IDENTIFIER '=' glsl_initializer + | glsl_fully_specified_type IDENTIFIER '=' glsl_initializer ; glsl_switch_statement: @@ -769,51 +1255,51 @@ glsl_switch_statement: glsl_switch_statement_list: /* nothing */ - | glsl_statement_list + | glsl_statement_list ; glsl_case_label: GHT_CASE glsl_expression ':' - | GHT_DEFAULT ':' + | GHT_DEFAULT ':' ; glsl_iteration_statement: GHT_WHILE '(' glsl_condition ')' glsl_statement_no_new_scope - | GHT_DO glsl_statement GHT_WHILE '(' glsl_expression ')' ';' - | GHT_FOR '(' glsl_for_init_statement glsl_for_rest_statement ')' glsl_statement_no_new_scope + | GHT_DO glsl_statement GHT_WHILE '(' glsl_expression ')' ';' + | GHT_FOR '(' glsl_for_init_statement glsl_for_rest_statement ')' glsl_statement_no_new_scope ; glsl_for_init_statement: glsl_expression_statement - | glsl_declaration_statement + | glsl_declaration_statement ; glsl_conditionopt: glsl_condition - | /* empty */ + | /* empty */ ; glsl_for_rest_statement: glsl_conditionopt ';' - | glsl_conditionopt ';' glsl_expression + | glsl_conditionopt ';' glsl_expression ; glsl_jump_statement: GHT_CONTINUE ';' - | GHT_BREAK ';' - | GHT_RETURN ';' - | GHT_RETURN glsl_expression ';' - | GHT_DISCARD ';' + | GHT_BREAK ';' + | GHT_RETURN ';' + | GHT_RETURN glsl_expression ';' + | GHT_DISCARD ';' ; glsl_translation_unit: glsl_external_declaration - | glsl_translation_unit glsl_external_declaration + | glsl_translation_unit glsl_external_declaration ; glsl_external_declaration: glsl_function_definition - | glsl_declaration + | glsl_declaration ; glsl_function_definition: @@ -824,7 +1310,7 @@ glsl_function_definition: main() { - yyin = fopen("test.lolfx", "r"); + yyin = stdin;//fopen("test.lolfx", "r"); do { yyparse(); diff --git a/test/sandbox/lex/test.lolfx b/test/sandbox/lex/test.lolfx index b9111a7b..9ef471c8 100644 --- a/test/sandbox/lex/test.lolfx +++ b/test/sandbox/lex/test.lolfx @@ -66,7 +66,7 @@ technique Foo /* Defines GLSL shader "Prout" */ -#section GLSL.Prout +#region GLSL.Prout #version 120 @@ -80,21 +80,21 @@ attribute vec4 in_Color; void main(void) { - ... + /* ... */ } /* Defines GLSL shader "Zob" */ -#section GLSL.Zob +#region GLSL.Zob void main(void) { - shit fuck fuck shit; + shit(); fuck(); fuck(); shit(); } /* Defines HLSL shader "Prout" */ -#section HLSL.Prout +#region HLSL.Prout void main(void) {