slang: Do not parse whitespace.
authorMichal Krol <michal@vmware.com>
Tue, 8 Sep 2009 11:29:17 +0000 (13:29 +0200)
committerMichal Krol <michal@vmware.com>
Tue, 8 Sep 2009 11:29:17 +0000 (13:29 +0200)
The preprocessor tokeniser deals with those.

src/mesa/shader/slang/library/slang_shader.syn
src/mesa/shader/slang/library/slang_shader_syn.h

index af83543cbb80ec6e432db90b0ac251b820e272d0..4558ed58b0727f36791f61e8afa00180fdd2a68d 100644 (file)
@@ -692,11 +692,7 @@ function_header_with_parameters_1
  * <function_header> ::= <fully_specified_type> <identifier> "("
  */
 function_header
-    function_header_nospace .or function_header_space;
-function_header_space
-    fully_specified_type_space .and space .and function_decl_identifier .and lparen;
-function_header_nospace
-    fully_specified_type_nospace .and function_decl_identifier .and lparen;
+    fully_specified_type .and function_decl_identifier .and lparen;
 
 /*
  * <function_decl_identifier> ::= "__constructor"
@@ -793,11 +789,7 @@ overriden_operator
  *                          | <type_specifier> <identifier> "[" <constant_expression> "]"
  */
 parameter_declarator
-    parameter_declarator_nospace .or parameter_declarator_space;
-parameter_declarator_nospace
-    type_specifier_nospace .and identifier .and parameter_declarator_1;
-parameter_declarator_space
-    type_specifier_space .and space .and identifier .and parameter_declarator_1;
+    type_specifier .and identifier .and parameter_declarator_1;
 parameter_declarator_1
     parameter_declarator_2 .emit PARAMETER_ARRAY_PRESENT .or
     .true .emit PARAMETER_ARRAY_NOT_PRESENT;
@@ -825,15 +817,13 @@ parameter_declaration
 parameter_declaration_1
     parameter_declaration_2 .or parameter_declaration_3;
 parameter_declaration_2
-    type_qualifier .and space .and parameter_qualifier .and parameter_declaration_4;
+    type_qualifier .and parameter_qualifier .and parameter_declaration_4;
 parameter_declaration_3
     parameter_qualifier .emit TYPE_QUALIFIER_NONE .and parameter_declaration_4;
 parameter_declaration_4
     parameter_declaration_optprec .and parameter_declaration_rest;
 parameter_declaration_optprec
-    parameter_declaration_prec .or .true .emit PRECISION_DEFAULT;
-parameter_declaration_prec
-    precision .and space;
+    precision .or .true .emit PRECISION_DEFAULT;
 parameter_declaration_rest
     parameter_declarator .or parameter_type_specifier;
 
@@ -846,8 +836,6 @@ parameter_declaration_rest
 parameter_qualifier
     parameter_qualifier_1 .or .true .emit PARAM_QUALIFIER_IN;
 parameter_qualifier_1
-    parameter_qualifier_2 .and space;
-parameter_qualifier_2
     "in" .emit PARAM_QUALIFIER_IN .or
     "out" .emit PARAM_QUALIFIER_OUT .or
     "inout" .emit PARAM_QUALIFIER_INOUT;
@@ -857,9 +845,7 @@ parameter_qualifier_2
  *                              | <type_specifier> "[" <constant_expression> "]"
  */
 parameter_type_specifier
-    parameter_type_specifier_1 .and .true .emit '\0' .and parameter_type_specifier_2;
-parameter_type_specifier_1
-    type_specifier_nospace .or type_specifier_space;
+    type_specifier .and .true .emit '\0' .and parameter_type_specifier_2;
 parameter_type_specifier_2
     parameter_type_specifier_3 .emit PARAMETER_ARRAY_PRESENT .or
     .true .emit PARAMETER_ARRAY_NOT_PRESENT;
@@ -895,18 +881,10 @@ init_declarator_list_5
  *                        | <fully_specified_type> <identifier> "=" <initializer>
  */
 single_declaration
-    single_declaration_nospace .or single_declaration_space;
-single_declaration_space
-    fully_specified_type_space .and single_declaration_space_1;
-single_declaration_nospace
-    fully_specified_type_nospace .and single_declaration_nospace_1;
-single_declaration_space_1
-    single_declaration_space_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE;
-single_declaration_nospace_1
-    single_declaration_nospace_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE;
-single_declaration_space_2
-    space .and identifier .and single_declaration_3;
-single_declaration_nospace_2
+    fully_specified_type .and single_declaration_1;
+single_declaration_1
+    single_declaration_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE;
+single_declaration_2
     identifier .and single_declaration_3;
 single_declaration_3
     single_declaration_4 .or single_declaration_5 .or .true .emit VARIABLE_NONE;
@@ -922,26 +900,16 @@ single_declaration_6
  *
  * Example: "invariant varying highp vec3"
  */
-fully_specified_type_space
-    fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier_space;
-fully_specified_type_nospace
-    fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier_nospace;
+fully_specified_type
+    fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier;
 fully_specified_type_optinvariant
-    fully_specified_type_invariant .or .true .emit TYPE_VARIANT;
-fully_specified_type_invariant
-    invariant_qualifier .and space;
+    invariant_qualifier .or .true .emit TYPE_VARIANT;
 fully_specified_type_optcentroid
-    fully_specified_type_centroid .or .true .emit TYPE_CENTER;
-fully_specified_type_centroid
-    centroid_qualifier .and space;
+    centroid_qualifier .or .true .emit TYPE_CENTER;
 fully_specified_type_optqual
-    fully_specified_type_qual .or .true .emit TYPE_QUALIFIER_NONE;
-fully_specified_type_qual
-    type_qualifier .and space;
+    type_qualifier .or .true .emit TYPE_QUALIFIER_NONE;
 fully_specified_type_optprec
-    fully_specified_type_prec .or .true .emit PRECISION_DEFAULT;
-fully_specified_type_prec
-    precision .and space;
+    precision .or .true .emit PRECISION_DEFAULT;
 
 /*
  * <invariant_qualifier> ::= "invariant"
@@ -1006,7 +974,8 @@ type_qualifier
  *                             | <struct_specifier>
  *                             | <type_name>
  */
-type_specifier_nonarray_space
+type_specifier_nonarray
+    struct_specifier .emit TYPE_SPECIFIER_STRUCT .or
     "void" .emit TYPE_SPECIFIER_VOID .or
     "float" .emit TYPE_SPECIFIER_FLOAT .or
     "int" .emit TYPE_SPECIFIER_INT .or
@@ -1038,22 +1007,16 @@ type_specifier_nonarray_space
     "sampler2DRect" .emit TYPE_SPECIFIER_SAMPLER2DRECT .or
     "sampler2DRectShadow" .emit TYPE_SPECIFIER_SAMPLER2DRECTSHADOW .or
     type_name .emit TYPE_SPECIFIER_TYPENAME;
-type_specifier_nonarray_nospace
-    struct_specifier .emit TYPE_SPECIFIER_STRUCT;
-type_specifier_nonarray
-    type_specifier_nonarray_nospace .or type_specifier_nonarray_space;
 
 /*
  * <type_specifier> ::= <type_specifier_nonarray>
  *                    | <type_specifier_nonarray> "[" <constant_expression> "]"
  */
-type_specifier_space
-    type_specifier_nonarray_space .and .true .emit TYPE_SPECIFIER_NONARRAY;
-type_specifier_nospace
-    type_specifier_nospace_array .or type_specifier_nospace_1;
-type_specifier_nospace_1
-    type_specifier_nonarray_nospace .and .true .emit TYPE_SPECIFIER_NONARRAY;
-type_specifier_nospace_array
+type_specifier
+    type_specifier_array .or type_specifier_1;
+type_specifier_1
+    type_specifier_nonarray .and .true .emit TYPE_SPECIFIER_NONARRAY;
+type_specifier_array
     type_specifier_nonarray .and lbracket .emit TYPE_SPECIFIER_ARRAY .and constant_expression .and rbracket;
 
 /*
@@ -1061,12 +1024,10 @@ type_specifier_nospace_array
  *                      | "struct" "{" <struct_declaration_list> "}"
  */
 struct_specifier
-    "struct" .and struct_specifier_1 .and optional_space .and lbrace .error LBRACE_EXPECTED .and
+    "struct" .and struct_specifier_1 .and lbrace .error LBRACE_EXPECTED .and
     struct_declaration_list .and rbrace .emit FIELD_NONE;
 struct_specifier_1
-    struct_specifier_2 .or .true .emit '\0';
-struct_specifier_2
-    space .and identifier;
+    identifier .or .true .emit '\0';
 
 /*
  * <struct_declaration_list> ::= <struct_declaration>
@@ -1079,11 +1040,7 @@ struct_declaration_list
  * <struct_declaration> ::= <type_specifier> <struct_declarator_list> ";"
  */
 struct_declaration
-    struct_declaration_nospace .or struct_declaration_space;
-struct_declaration_space
-    type_specifier_space .and space .and struct_declarator_list .and semicolon .emit FIELD_NONE;
-struct_declaration_nospace
-    type_specifier_nospace .and struct_declarator_list .and semicolon .emit FIELD_NONE;
+    type_specifier .and struct_declarator_list .and semicolon .emit FIELD_NONE;
 
 /*
  * <struct_declarator_list> ::= <struct_declarator>
@@ -1123,10 +1080,6 @@ declaration_statement
  */
 statement
     compound_statement .or simple_statement;
-statement_space
-    compound_statement .or statement_space_1;
-statement_space_1
-    space .and simple_statement;
 
 /*
  * <simple_statement> ::= <__asm_statement>
@@ -1209,7 +1162,7 @@ selection_rest_statement
 selection_rest_statement_1
     selection_rest_statement_2 .or .true .emit OP_EXPRESSION .emit OP_PUSH_VOID .emit OP_END;
 selection_rest_statement_2
-    "else" .and optional_space .and statement;
+    "else" .and statement;
 
 /*
  * <condition> ::= <expression>
@@ -1220,17 +1173,11 @@ selection_rest_statement_2
  */
 condition
     condition_1 .emit OP_DECLARE .emit DECLARATION_INIT_DECLARATOR_LIST .or
-    condition_3 .emit OP_EXPRESSION;
+    condition_2 .emit OP_EXPRESSION;
 condition_1
-    condition_1_nospace .or condition_1_space;
-condition_1_nospace
-    fully_specified_type_nospace .and condition_2;
-condition_1_space
-    fully_specified_type_space .and space .and condition_2;
+    fully_specified_type .and identifier .emit VARIABLE_IDENTIFIER .and
+    equals .emit VARIABLE_INITIALIZER .and initializer .and .true .emit DECLARATOR_NONE;
 condition_2
-    identifier .emit VARIABLE_IDENTIFIER .and equals .emit VARIABLE_INITIALIZER .and
-    initializer .and .true .emit DECLARATOR_NONE;
-condition_3
     expression .and .true .emit OP_END;
 
 /*
@@ -1244,7 +1191,7 @@ iteration_statement_1
     "while" .emit OP_WHILE .and lparen .error LPAREN_EXPECTED .and condition .and
     rparen .error RPAREN_EXPECTED .and statement;
 iteration_statement_2
-    "do" .emit OP_DO .and statement_space .and "while" .and lparen .error LPAREN_EXPECTED .and
+    "do" .emit OP_DO .and statement .and "while" .and lparen .error LPAREN_EXPECTED .and
     expression .and rparen .error RPAREN_EXPECTED .emit OP_END .and semicolon;
 iteration_statement_3
     "for" .emit OP_FOR .and lparen .error LPAREN_EXPECTED .and for_init_statement .and
@@ -1295,7 +1242,7 @@ jump_statement_1
 jump_statement_2
     "break" .and semicolon .emit OP_BREAK;
 jump_statement_3
-    "return" .emit OP_RETURN .and optional_space .and expression .and semicolon .emit OP_END;
+    "return" .emit OP_RETURN .and expression .and semicolon .emit OP_END;
 jump_statement_4
     "return" .emit OP_RETURN .and semicolon .emit OP_PUSH_VOID .emit OP_END;
 jump_statement_5
@@ -1308,7 +1255,7 @@ jump_statement_5
  * normally slang disallows __asm statements
  */
 __asm_statement
-    "__asm" .and space .and identifier .and space .and asm_arguments .and semicolon .emit OP_END;
+    "__asm" .and identifier .and asm_arguments .and semicolon .emit OP_END;
 
 /*
  * <asm_arguments> ::= <asm_argument>
@@ -1343,9 +1290,8 @@ var_with_field
  *                      | <translation_unit> <external_declaration>
  */
 translation_unit
-    optional_space .emit REVISION .and external_declaration .error INVALID_EXTERNAL_DECLARATION .and
-    .loop external_declaration .and optional_space .and
-    '\0' .error INVALID_EXTERNAL_DECLARATION .emit EXTERNAL_NULL;
+    .true .emit REVISION .and external_declaration .error INVALID_EXTERNAL_DECLARATION .and
+    .loop external_declaration .and '\0' .error INVALID_EXTERNAL_DECLARATION .emit EXTERNAL_NULL;
 
 
 /*
@@ -1363,7 +1309,7 @@ external_declaration
  * <precision_stmt> ::= "precision" <precision> <prectype>
  */
 precision_stmt
-    "precision" .and space .and precision .error INVALID_PRECISION .and space .and prectype .error INVALID_PRECISION_TYPE .and semicolon;
+    "precision" .and precision .error INVALID_PRECISION .and prectype .error INVALID_PRECISION_TYPE .and semicolon;
 
 /*
  * <precision> ::= "lowp"
@@ -1397,7 +1343,7 @@ prectype
  * <invariant_stmt> ::= "invariant" identifier;
  */
 invariant_stmt
-    "invariant" .and space .and identifier .and semicolon;
+    "invariant" .and identifier .and semicolon;
 
 
 /*
@@ -1440,12 +1386,6 @@ intconstant
 boolconstant
     boolean .emit OP_PUSH_BOOL;
 
-optional_space
-   .true;
-
-space
-   .true;
-
 /* lexical rules */
 
 /*ampersand
index 98e6453a00b4e53c8503faa086068d61160bd706..e94238e0125e736a4f0b3815a24426edafc278c6 100644 (file)
 "function_header_with_parameters_1\n"
 " comma .and parameter_declaration;\n"
 "function_header\n"
-" function_header_nospace .or function_header_space;\n"
-"function_header_space\n"
-" fully_specified_type_space .and space .and function_decl_identifier .and lparen;\n"
-"function_header_nospace\n"
-" fully_specified_type_nospace .and function_decl_identifier .and lparen;\n"
+" fully_specified_type .and function_decl_identifier .and lparen;\n"
 "function_decl_identifier\n"
 " .if (parsing_builtin != 0) __operator .emit FUNCTION_OPERATOR .or\n"
 " .if (parsing_builtin != 0) \"__constructor\" .emit FUNCTION_CONSTRUCTOR .or\n"
 " \n"
 " caretcaret .emit OPERATOR_LOGICALXOR ;\n"
 "parameter_declarator\n"
-" parameter_declarator_nospace .or parameter_declarator_space;\n"
-"parameter_declarator_nospace\n"
-" type_specifier_nospace .and identifier .and parameter_declarator_1;\n"
-"parameter_declarator_space\n"
-" type_specifier_space .and space .and identifier .and parameter_declarator_1;\n"
+" type_specifier .and identifier .and parameter_declarator_1;\n"
 "parameter_declarator_1\n"
 " parameter_declarator_2 .emit PARAMETER_ARRAY_PRESENT .or\n"
 " .true .emit PARAMETER_ARRAY_NOT_PRESENT;\n"
 "parameter_declaration_1\n"
 " parameter_declaration_2 .or parameter_declaration_3;\n"
 "parameter_declaration_2\n"
-" type_qualifier .and space .and parameter_qualifier .and parameter_declaration_4;\n"
+" type_qualifier .and parameter_qualifier .and parameter_declaration_4;\n"
 "parameter_declaration_3\n"
 " parameter_qualifier .emit TYPE_QUALIFIER_NONE .and parameter_declaration_4;\n"
 "parameter_declaration_4\n"
 " parameter_declaration_optprec .and parameter_declaration_rest;\n"
 "parameter_declaration_optprec\n"
-" parameter_declaration_prec .or .true .emit PRECISION_DEFAULT;\n"
-"parameter_declaration_prec\n"
-" precision .and space;\n"
+" precision .or .true .emit PRECISION_DEFAULT;\n"
 "parameter_declaration_rest\n"
 " parameter_declarator .or parameter_type_specifier;\n"
 "parameter_qualifier\n"
 " parameter_qualifier_1 .or .true .emit PARAM_QUALIFIER_IN;\n"
 "parameter_qualifier_1\n"
-" parameter_qualifier_2 .and space;\n"
-"parameter_qualifier_2\n"
 " \"in\" .emit PARAM_QUALIFIER_IN .or\n"
 " \"out\" .emit PARAM_QUALIFIER_OUT .or\n"
 " \"inout\" .emit PARAM_QUALIFIER_INOUT;\n"
 "parameter_type_specifier\n"
-" parameter_type_specifier_1 .and .true .emit '\\0' .and parameter_type_specifier_2;\n"
-"parameter_type_specifier_1\n"
-" type_specifier_nospace .or type_specifier_space;\n"
+" type_specifier .and .true .emit '\\0' .and parameter_type_specifier_2;\n"
 "parameter_type_specifier_2\n"
 " parameter_type_specifier_3 .emit PARAMETER_ARRAY_PRESENT .or\n"
 " .true .emit PARAMETER_ARRAY_NOT_PRESENT;\n"
 "init_declarator_list_5\n"
 " constant_expression .emit VARIABLE_ARRAY_EXPLICIT .or .true .emit VARIABLE_ARRAY_UNKNOWN;\n"
 "single_declaration\n"
-" single_declaration_nospace .or single_declaration_space;\n"
-"single_declaration_space\n"
-" fully_specified_type_space .and single_declaration_space_1;\n"
-"single_declaration_nospace\n"
-" fully_specified_type_nospace .and single_declaration_nospace_1;\n"
-"single_declaration_space_1\n"
-" single_declaration_space_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE;\n"
-"single_declaration_nospace_1\n"
-" single_declaration_nospace_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE;\n"
-"single_declaration_space_2\n"
-" space .and identifier .and single_declaration_3;\n"
-"single_declaration_nospace_2\n"
+" fully_specified_type .and single_declaration_1;\n"
+"single_declaration_1\n"
+" single_declaration_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE;\n"
+"single_declaration_2\n"
 " identifier .and single_declaration_3;\n"
 "single_declaration_3\n"
 " single_declaration_4 .or single_declaration_5 .or .true .emit VARIABLE_NONE;\n"
 " lbracket .and single_declaration_6 .and rbracket;\n"
 "single_declaration_6\n"
 " constant_expression .emit VARIABLE_ARRAY_EXPLICIT .or .true .emit VARIABLE_ARRAY_UNKNOWN;\n"
-"fully_specified_type_space\n"
-" fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier_space;\n"
-"fully_specified_type_nospace\n"
-" fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier_nospace;\n"
+"fully_specified_type\n"
+" fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier;\n"
 "fully_specified_type_optinvariant\n"
-" fully_specified_type_invariant .or .true .emit TYPE_VARIANT;\n"
-"fully_specified_type_invariant\n"
-" invariant_qualifier .and space;\n"
+" invariant_qualifier .or .true .emit TYPE_VARIANT;\n"
 "fully_specified_type_optcentroid\n"
-" fully_specified_type_centroid .or .true .emit TYPE_CENTER;\n"
-"fully_specified_type_centroid\n"
-" centroid_qualifier .and space;\n"
+" centroid_qualifier .or .true .emit TYPE_CENTER;\n"
 "fully_specified_type_optqual\n"
-" fully_specified_type_qual .or .true .emit TYPE_QUALIFIER_NONE;\n"
-"fully_specified_type_qual\n"
-" type_qualifier .and space;\n"
+" type_qualifier .or .true .emit TYPE_QUALIFIER_NONE;\n"
 "fully_specified_type_optprec\n"
-" fully_specified_type_prec .or .true .emit PRECISION_DEFAULT;\n"
-"fully_specified_type_prec\n"
-" precision .and space;\n"
+" precision .or .true .emit PRECISION_DEFAULT;\n"
 "invariant_qualifier\n"
 " \"invariant\" .emit TYPE_INVARIANT;\n"
 "centroid_qualifier\n"
 " \"uniform\" .emit TYPE_QUALIFIER_UNIFORM .or\n"
 " .if (parsing_builtin != 0) \"__fixed_output\" .emit TYPE_QUALIFIER_FIXEDOUTPUT .or\n"
 " .if (parsing_builtin != 0) \"__fixed_input\" .emit TYPE_QUALIFIER_FIXEDINPUT;\n"
-"type_specifier_nonarray_space\n"
+"type_specifier_nonarray\n"
+" struct_specifier .emit TYPE_SPECIFIER_STRUCT .or\n"
 " \"void\" .emit TYPE_SPECIFIER_VOID .or\n"
 " \"float\" .emit TYPE_SPECIFIER_FLOAT .or\n"
 " \"int\" .emit TYPE_SPECIFIER_INT .or\n"
 " \"sampler2DRect\" .emit TYPE_SPECIFIER_SAMPLER2DRECT .or\n"
 " \"sampler2DRectShadow\" .emit TYPE_SPECIFIER_SAMPLER2DRECTSHADOW .or\n"
 " type_name .emit TYPE_SPECIFIER_TYPENAME;\n"
-"type_specifier_nonarray_nospace\n"
-" struct_specifier .emit TYPE_SPECIFIER_STRUCT;\n"
-"type_specifier_nonarray\n"
-" type_specifier_nonarray_nospace .or type_specifier_nonarray_space;\n"
-"type_specifier_space\n"
-" type_specifier_nonarray_space .and .true .emit TYPE_SPECIFIER_NONARRAY;\n"
-"type_specifier_nospace\n"
-" type_specifier_nospace_array .or type_specifier_nospace_1;\n"
-"type_specifier_nospace_1\n"
-" type_specifier_nonarray_nospace .and .true .emit TYPE_SPECIFIER_NONARRAY;\n"
-"type_specifier_nospace_array\n"
+"type_specifier\n"
+" type_specifier_array .or type_specifier_1;\n"
+"type_specifier_1\n"
+" type_specifier_nonarray .and .true .emit TYPE_SPECIFIER_NONARRAY;\n"
+"type_specifier_array\n"
 " type_specifier_nonarray .and lbracket .emit TYPE_SPECIFIER_ARRAY .and constant_expression .and rbracket;\n"
 "struct_specifier\n"
-" \"struct\" .and struct_specifier_1 .and optional_space .and lbrace .error LBRACE_EXPECTED .and\n"
+" \"struct\" .and struct_specifier_1 .and lbrace .error LBRACE_EXPECTED .and\n"
 " struct_declaration_list .and rbrace .emit FIELD_NONE;\n"
 "struct_specifier_1\n"
-" struct_specifier_2 .or .true .emit '\\0';\n"
-"struct_specifier_2\n"
-" space .and identifier;\n"
+" identifier .or .true .emit '\\0';\n"
 "struct_declaration_list\n"
 " struct_declaration .and .loop struct_declaration .emit FIELD_NEXT;\n"
 "struct_declaration\n"
-" struct_declaration_nospace .or struct_declaration_space;\n"
-"struct_declaration_space\n"
-" type_specifier_space .and space .and struct_declarator_list .and semicolon .emit FIELD_NONE;\n"
-"struct_declaration_nospace\n"
-" type_specifier_nospace .and struct_declarator_list .and semicolon .emit FIELD_NONE;\n"
+" type_specifier .and struct_declarator_list .and semicolon .emit FIELD_NONE;\n"
 "struct_declarator_list\n"
 " struct_declarator .and .loop struct_declarator_list_1 .emit FIELD_NEXT;\n"
 "struct_declarator_list_1\n"
 " declaration;\n"
 "statement\n"
 " compound_statement .or simple_statement;\n"
-"statement_space\n"
-" compound_statement .or statement_space_1;\n"
-"statement_space_1\n"
-" space .and simple_statement;\n"
 "simple_statement\n"
 " .if (parsing_builtin != 0) __asm_statement .emit OP_ASM .or\n"
 " selection_statement .or\n"
 "selection_rest_statement_1\n"
 " selection_rest_statement_2 .or .true .emit OP_EXPRESSION .emit OP_PUSH_VOID .emit OP_END;\n"
 "selection_rest_statement_2\n"
-" \"else\" .and optional_space .and statement;\n"
+" \"else\" .and statement;\n"
 "condition\n"
 " condition_1 .emit OP_DECLARE .emit DECLARATION_INIT_DECLARATOR_LIST .or\n"
-" condition_3 .emit OP_EXPRESSION;\n"
+" condition_2 .emit OP_EXPRESSION;\n"
 "condition_1\n"
-" condition_1_nospace .or condition_1_space;\n"
-"condition_1_nospace\n"
-" fully_specified_type_nospace .and condition_2;\n"
-"condition_1_space\n"
-" fully_specified_type_space .and space .and condition_2;\n"
+" fully_specified_type .and identifier .emit VARIABLE_IDENTIFIER .and\n"
+" equals .emit VARIABLE_INITIALIZER .and initializer .and .true .emit DECLARATOR_NONE;\n"
 "condition_2\n"
-" identifier .emit VARIABLE_IDENTIFIER .and equals .emit VARIABLE_INITIALIZER .and\n"
-" initializer .and .true .emit DECLARATOR_NONE;\n"
-"condition_3\n"
 " expression .and .true .emit OP_END;\n"
 "iteration_statement\n"
 " iteration_statement_1 .or iteration_statement_2 .or iteration_statement_3;\n"
 " \"while\" .emit OP_WHILE .and lparen .error LPAREN_EXPECTED .and condition .and\n"
 " rparen .error RPAREN_EXPECTED .and statement;\n"
 "iteration_statement_2\n"
-" \"do\" .emit OP_DO .and statement_space .and \"while\" .and lparen .error LPAREN_EXPECTED .and\n"
+" \"do\" .emit OP_DO .and statement .and \"while\" .and lparen .error LPAREN_EXPECTED .and\n"
 " expression .and rparen .error RPAREN_EXPECTED .emit OP_END .and semicolon;\n"
 "iteration_statement_3\n"
 " \"for\" .emit OP_FOR .and lparen .error LPAREN_EXPECTED .and for_init_statement .and\n"
 "jump_statement_2\n"
 " \"break\" .and semicolon .emit OP_BREAK;\n"
 "jump_statement_3\n"
-" \"return\" .emit OP_RETURN .and optional_space .and expression .and semicolon .emit OP_END;\n"
+" \"return\" .emit OP_RETURN .and expression .and semicolon .emit OP_END;\n"
 "jump_statement_4\n"
 " \"return\" .emit OP_RETURN .and semicolon .emit OP_PUSH_VOID .emit OP_END;\n"
 "jump_statement_5\n"
 " \"discard\" .and semicolon .emit OP_DISCARD;\n"
 "__asm_statement\n"
-" \"__asm\" .and space .and identifier .and space .and asm_arguments .and semicolon .emit OP_END;\n"
+" \"__asm\" .and identifier .and asm_arguments .and semicolon .emit OP_END;\n"
 "asm_arguments\n"
 " asm_argument .and .true .emit OP_END .and .loop asm_arguments_1;\n"
 "asm_arguments_1\n"
 "var_with_field\n"
 " variable_identifier .and dot .and field_selection .emit OP_FIELD;\n"
 "translation_unit\n"
-" optional_space .emit REVISION .and external_declaration .error INVALID_EXTERNAL_DECLARATION .and\n"
-" .loop external_declaration .and optional_space .and\n"
-" '\\0' .error INVALID_EXTERNAL_DECLARATION .emit EXTERNAL_NULL;\n"
+" .true .emit REVISION .and external_declaration .error INVALID_EXTERNAL_DECLARATION .and\n"
+" .loop external_declaration .and '\\0' .error INVALID_EXTERNAL_DECLARATION .emit EXTERNAL_NULL;\n"
 "external_declaration\n"
 " precision_stmt .emit DEFAULT_PRECISION .or\n"
 " function_definition .emit EXTERNAL_FUNCTION_DEFINITION .or\n"
 " invariant_stmt .emit INVARIANT_STMT .or\n"
 " declaration .emit EXTERNAL_DECLARATION;\n"
 "precision_stmt\n"
-" \"precision\" .and space .and precision .error INVALID_PRECISION .and space .and prectype .error INVALID_PRECISION_TYPE .and semicolon;\n"
+" \"precision\" .and precision .error INVALID_PRECISION .and prectype .error INVALID_PRECISION_TYPE .and semicolon;\n"
 "precision\n"
 " \"lowp\" .emit PRECISION_LOW .or\n"
 " \"mediump\" .emit PRECISION_MEDIUM .or\n"
 " \"sampler2DRect\" .emit TYPE_SPECIFIER_SAMPLER2DRECT .or\n"
 " \"sampler2DRectShadow\" .emit TYPE_SPECIFIER_SAMPLER2DRECTSHADOW;\n"
 "invariant_stmt\n"
-" \"invariant\" .and space .and identifier .and semicolon;\n"
+" \"invariant\" .and identifier .and semicolon;\n"
 "function_definition\n"
 " function_prototype .and compound_statement_no_new_scope;\n"
 "identifier\n"
 " integer .emit OP_PUSH_INT;\n"
 "boolconstant\n"
 " boolean .emit OP_PUSH_BOOL;\n"
-"optional_space\n"
-" .true;\n"
-"space\n"
-" .true;\n"
 "ampersandampersand\n"
 " \"@&&\";\n"
 "barbar\n"