/*============================================================================= grammar.ll Version 7.06 ANSI standard C grammar in EBNF format. Recognizer only. Actions included to handle typedef declaration. Copyright (c) 2002-2014 DMR, all rights reserved. 09-18-14 Simplified and converted more to ebnf 10-11-14 Added some simple C++ support, no templates =============================================================================*/ translation_unit : { declaration } __FinishParse declaration : { declaration_specifier }+ function_or_declaration constructor typedef { declaration_specifier }+ [ init_declarator_list2 ] ; access_specifier : using qualified_type ; constructor : [ TYPEDEF_NAME :: ] [ ~ ] TYPEDEF_NAME ( [ parameter_type_list ] ) [ base_list ] more_constructor TAG_NAME ( [ parameter_type_list ] ) more_constructor more_constructor : compound_statement ; base_list : : qualified_id_or_type ( [ expression ] ) { , qualified_id_or_type ( [ expression ] ) } function_or_declaration : declarator more_function_or_declaration ; more_function_or_declaration : compound_statement [ = initializer ] { , init_declarator } ; declaration_specifier : storage_class_specifier type_specifier type_qualifier access_specifier function_specifier friend storage_class_specifier : auto register static extern mutable function_specifier : inline virtual explicit type_specifier : void char short int long float double signed unsigned TYPEDEF_NAME [ :: TYPEDEF_NAME ] struct_or_union_specifier enum_specifier type_qualifier : const volatile access_specifier : private protected public struct_or_union_specifier : struct_or_union id_or_tagname [ [ base_clause ] \{ { declaration } \} ] struct_or_union \{ { declaration } \} class id_or_typename [ [ base_clause ] \{ { declaration } \} ] struct_or_union : struct union qualified_id : [ { id_or_typename :: }+ { * } ] IDENTIFIER qualified_id_or_type : { id_or_typename :: } id_or_typename qualified_type : { id_or_typename :: } TYPEDEF_NAME id_or_typename : TYPEDEF_NAME __SetTypedefName IDENTIFIER id_or_tagname : TAG_NAME __SetTagName IDENTIFIER base_clause : : [ access_specifier ] qualified_id_or_type { , [ access_specifier ] qualified_id_or_type } init_declarator : declarator [ : constant_expression ] [ = initializer ] : constant_expression init_declarator_list2 : init_declarator2 { , init_declarator2 } init_declarator2 : declarator __SetTypedefName [ = initializer ] specifier_qualifier : type_specifier type_qualifier enum_specifier : enum \{ enumerator_list \} enum IDENTIFIER [ \{ enumerator_list \} ] enumerator_list : enumerator { , enumerator } enumerator : IDENTIFIER __SetEnumName [ = constant_expression ] ENUM_NAME [ = constant_expression ] declarator : [ pointer ] direct_declarator direct_declarator : qualified_id more_direct_declarator ( declarator ) more_direct_declarator more_direct_declarator : \[ [ constant_expression ] \] more_direct_declarator __NewScope ( parameter_type_list ) __ReleaseScope more_direct_declarator ( expression ) more_direct_declarator ( ) more_direct_declarator _epsilon_ pointer : * [ type_qualifier ] [ pointer ] & parameter_type_list : parameter_declaration { , parameter_declaration } [ , ... ] parameter_declaration : { declaration_specifier }+ [ declarator_or_abstract_declarator ] declarator_or_abstract_declarator : direct_declarator_or_direct_abstract_declarator pointer [ direct_declarator_or_direct_abstract_declarator ] direct_declarator_or_direct_abstract_declarator : qualified_id more_dd_or_dad ( declarator_or_abstract_declarator ) more_dd_or_dad \[ [ constant_expression ] \] more_dd_or_dad ( [ parameter_type_list ] ) more_dd_or_dad more_dd_or_dad : \[ [ constant_expression ] \] more_dd_or_dad ( parameter_type_list ) more_dd_or_dad ( expression ) more_dd_or_dad ( ) more_dd_or_dad _epsilon_ initializer : assignment_expression \{ initializer_list [ , ] \} initializer_list : initializer { , initializer } type_name : { specifier_qualifier }+ [ abstract_declarator ] abstract_declarator : pointer [ direct_abstract_declarator ] direct_abstract_declarator direct_abstract_declarator : ( abstract_declarator ) more_direct_abstract_declarator \[ [ constant_expression ] \] more_direct_abstract_declarator ( [ parameter_type_list ] ) more_direct_abstract_declarator more_direct_abstract_declarator : \[ [ constant_expression ] \] more_direct_abstract_declarator ( [ parameter_type_list ] ) more_direct_abstract_declarator _epsilon_ statement : labeled_statement expression_statement compound_statement selection_statement iteration_statement jump_statement declaration labeled_statement : IDENTIFIER : statement case constant_expression : statement default : statement expression_statement : [ expression ] ; compound_statement : __NewScope \{ { statement } \} __ReleaseScope selection_statement : if ( expression ) statement more_if switch ( expression ) statement more_if :! else statement _epsilon_ iteration_statement : while ( expression ) statement do statement while ( expression ) ; for ( [ expression ] ; [ expression ] ; [ expression ] ) statement jump_statement : goto IDENTIFIER ; continue ; break ; return [ expression ] ; expression : assignment_expression { , assignment_expression } /* ----------------------------------------------------------------------- use semantic check for lvalue instead of the following production: unary_expression assignment_operator assignment_expression ----------------------------------------------------------------------- */ assignment_expression : conditional_expression [ assignment_operator assignment_expression ] assignment_operator : = *= /= %= += -= <<= >>= &= ^= |= conditional_expression : logical_OR_expression [ ? expression : conditional_expression ] logical_OR_expression : logical_AND_expression { || logical_AND_expression } logical_AND_expression : inclusive_OR_expression { && inclusive_OR_expression } inclusive_OR_expression : exclusive_OR_expression { | exclusive_OR_expression } exclusive_OR_expression : and_expression { ^ and_expression } and_expression : equality_expression { & equality_expression } equality_expression : relational_expression { equality_op relational_expression } equality_op : == != relational_expression : shift_expression { relational_op shift_expression } relational_op : < > <= >= shift_expression : additive_expression { shift_op additive_expression } shift_op : << >> additive_expression : multiplicitive_expression { additive_op multiplicitive_expression } additive_op : + - multiplicitive_expression : cast_expression { multiplicitive_op cast_expression } multiplicitive_op : * / % cast_expression : unary_expression ( type_name ) cast_expression unary_expression : postfix_expression ++ unary_expression -- unary_expression unary_operator cast_expression sizeof unary_expression sizeof ( type_name ) new TYPEDEF_NAME [ :: TYPEDEF_NAME ] ( [ argument_expression_list ] ) new ( type_name ) delete cast_expression delete \[ \] cast_expression unary_operator : & * + - ~ ! postfix_expression : primary_expression more_postfix_expression more_postfix_expression : \[ expression \] more_postfix_expression ( [ argument_expression_list ] ) more_postfix_expression . IDENTIFIER more_postfix_expression .* IDENTIFIER more_postfix_expression -> IDENTIFIER more_postfix_expression ->* IDENTIFIER more_postfix_expression ++ more_postfix_expression -- more_postfix_expression _epsilon_ primary_expression : qualified_id constant { STRING }+ ( expression ) argument_expression_list : assignment_expression { , assignment_expression } constant : INTEGER_CONSTANT CHARACTER_CONSTANT FLOATING_CONSTANT ENUMERATION_CONSTANT ENUM_NAME constant_expression : mul_expression { additive_op mul_expression } mul_expression : unary_expr { multiplicitive_op unary_expr } unary_expr : constant unary_op unary_expr ( constant_expression ) sizeof unary_expr sizeof ( type_name ) unary_op : * + - ~ ! =========================================================================== slk V4.88 (c) 2001-2014 by DMR more_if: ambiguous: nullable can follow itself Conflict 1: parse table conflict under "TYPEDEF_NAME": 2: declaration --> declaration_specifier declaration_specifier_* function_or_declaration 3: declaration --> constructor Conflict 2: parse table conflict under "public": 2: declaration --> declaration_specifier declaration_specifier_* function_or_declaration 5: declaration --> access_specifier : Conflict 3: parse table conflict under "protected": 2: declaration --> declaration_specifier declaration_specifier_* function_or_declaration 5: declaration --> access_specifier : Conflict 4: parse table conflict under "private": 2: declaration --> declaration_specifier declaration_specifier_* function_or_declaration 5: declaration --> access_specifier : Conflict 5: parse table conflict under "union": 47: struct_or_union_specifier --> struct_or_union id_or_tagname base_clause_opt_{_declaration_2_*_}_opt 48: struct_or_union_specifier --> struct_or_union { declaration_3_* } Conflict 6: parse table conflict under "struct": 47: struct_or_union_specifier --> struct_or_union id_or_tagname base_clause_opt_{_declaration_2_*_}_opt 48: struct_or_union_specifier --> struct_or_union { declaration_3_* } Conflict 7: parse table conflict under "enum": 66: enum_specifier --> enum { enumerator_list } 67: enum_specifier --> enum IDENTIFIER {_enumerator_list_}_opt Conflict 8: parse table conflict under "(": 75: more_direct_declarator --> __NewScope ( parameter_type_list ) __ReleaseScope more_direct_declarator 76: more_direct_declarator --> ( expression ) more_direct_declarator 77: more_direct_declarator --> ( ) more_direct_declarator Conflict 9: parse table conflict under "(": 86: direct_declarator_or_direct_abstract_declarator --> ( declarator_or_abstract_declarator ) more_dd_or_dad 88: direct_declarator_or_direct_abstract_declarator --> ( parameter_type_list_3_opt ) more_dd_or_dad Conflict 10: parse table conflict under "(": 90: more_dd_or_dad --> ( parameter_type_list ) more_dd_or_dad 91: more_dd_or_dad --> ( expression ) more_dd_or_dad 92: more_dd_or_dad --> ( ) more_dd_or_dad Conflict 11: parse table conflict under "(": 100: direct_abstract_declarator --> ( abstract_declarator ) more_direct_abstract_declarator 102: direct_abstract_declarator --> ( parameter_type_list_4_opt ) more_direct_abstract_declarator Conflict 12: parse table conflict under "IDENTIFIER": 106: statement --> labeled_statement 107: statement --> expression_statement Conflict 13: parse table conflict under "~": 107: statement --> expression_statement 112: statement --> declaration Conflict 14: parse table conflict under "TYPEDEF_NAME": 107: statement --> expression_statement 112: statement --> declaration Conflict 15: parse table conflict under "else": 120: more_if --> else statement 121: more_if --> Conflict 16: parse table conflict under "(": 166: cast_expression --> unary_expression 167: cast_expression --> ( type_name ) cast_expression Conflict 17: parse table conflict under "sizeof": 172: unary_expression --> sizeof unary_expression 173: unary_expression --> sizeof ( type_name ) Conflict 18: parse table conflict under "new": 174: unary_expression --> new TYPEDEF_NAME ::_TYPEDEF_NAME_2_opt ( argument_expression_list_opt ) 175: unary_expression --> new ( type_name ) Conflict 19: parse table conflict under "delete": 176: unary_expression --> delete cast_expression 177: unary_expression --> delete [ ] cast_expression Conflict 20: parse table conflict under "sizeof": 209: unary_expr --> sizeof unary_expr 210: unary_expr --> sizeof ( type_name ) Conflict 21: parse table conflict under "TYPEDEF_NAME": 218: declaration_specifier_* --> declaration_specifier declaration_specifier_* 219: declaration_specifier_* --> Conflict 22: parse table conflict under "TYPEDEF_NAME": 220: declaration_specifier_2_* --> declaration_specifier declaration_specifier_2_* 221: declaration_specifier_2_* --> Conflict 23: parse table conflict under "TYPEDEF_NAME": 224: TYPEDEF_NAME_::_opt --> TYPEDEF_NAME :: 225: TYPEDEF_NAME_::_opt --> Conflict 24: parse table conflict under "IDENTIFIER": 260: id_or_typename_::_* --> id_or_typename :: id_or_typename_::_* 261: id_or_typename_::_* --> Conflict 25: parse table conflict under "IDENTIFIER": 264: id_or_typename_::_id_or_typename_::_*_*_*_opt --> id_or_typename :: id_or_typename_::_* *_* 265: id_or_typename_::_id_or_typename_::_*_*_*_opt --> Conflict 26: parse table conflict under "TYPEDEF_NAME": 266: id_or_typename_::_2_* --> id_or_typename :: id_or_typename_::_2_* 267: id_or_typename_::_2_* --> Conflict 27: parse table conflict under "IDENTIFIER": 266: id_or_typename_::_2_* --> id_or_typename :: id_or_typename_::_2_* 267: id_or_typename_::_2_* --> Conflict 28: parse table conflict under "TYPEDEF_NAME": 268: id_or_typename_::_3_* --> id_or_typename :: id_or_typename_::_3_* 269: id_or_typename_::_3_* --> Conflict 29: parse table conflict under ",": 300: ,_parameter_declaration_* --> , parameter_declaration ,_parameter_declaration_* 301: ,_parameter_declaration_* --> Conflict 30: parse table conflict under "TYPEDEF_NAME": 304: declaration_specifier_3_* --> declaration_specifier declaration_specifier_3_* 305: declaration_specifier_3_* --> Conflict 31: parse table conflict under ",": 318: ,_initializer_* --> , initializer ,_initializer_* 319: ,_initializer_* --> -------------------------------------------------- Conflict 1 is resolved at level 7. Conflict 2 is resolved at level 1. Conflict 3 is resolved at level 1. Conflict 4 is resolved at level 1. Conflict 5 is resolved at level 1. Conflict 6 is resolved at level 1. Conflict 7 is resolved at level 1. Conflict 8 is resolved at level 4. Conflict 9 is resolved at level 4. Conflict 10 is resolved at level 4. Conflict 11 is resolved at level 1. Conflict 12 is resolved at level 1. Conflict 13 is resolved at level 2. Conflict 14 is resolved at level 3. Conflict 15 is being ignored by request, using the first production Conflict 16 is resolved at level 4. Conflict 17 is resolved at level 5. Conflict 18 is resolved at level 1. Conflict 19 is resolved at level 1. Conflict 20 is resolved at level 2. Conflict 21 is resolved at level 3. Conflict 22 is resolved at level 3. Conflict 23 is resolved at level 1. Conflict 24 is resolved at level 1. Conflict 25 is resolved at level 1. Conflict 26 is resolved at level 1. Conflict 27 is resolved at level 1. Conflict 28 is resolved at level 1. Conflict 29 is resolved at level 1. Conflict 30 is resolved at level 3. Conflict 31 is resolved at level 1. -------------------------------------------------- Conflicts were ignored by request on 1 nonterminal(s) Conflicts were resolved at lookahead level k=8 total nonterminals = 167 total terminals = 103 total productions = 385 parse table size = 17201 ignored conflicts = 1 total base conflicts = 31 total conflicts = 67 conflict table size = 6901 generating the parser compacting parse table from 17201 to 3236 compacting conflict table from 6901 to 2173