Grammar railroad diagram
Would be nice if copper could also generate an EBNF as understood by https://www.bottlecaps.de/rr/ui to generate railroad diagrams (https://en.wikipedia.org/wiki/Syntax_diagram).
I extended bison, byacc, lemon and btyacc to do so and can be seen here https://github.com/mingodad/lalr-parser-test , also CocoR here https://github.com/mingodad/CocoR-Java , unicc here https://github.com/mingodad/unicc , and peg/leg here https://github.com/mingodad/peg .
Would be nice to have it output a consolidated EBNF to have a full global view of the final grammar because indirect usage of copper, silver and ableC uses several pieces to compose the final grammar.
Looking through the documentation I can see that almost all pieces are already there, bellow is a manual translation for the https://github.com/melt-umn/copper/blob/develop/doc/manual/CopperUserManual.md#recognizer-without-semantic-actions example:
//^ ::= expr $ [13]
expr ::= expr PLUS expr
expr ::= expr BINARY_MINUS expr
expr ::= expr TIMES expr
expr ::= expr DIVIDE expr
expr ::= UNARY_MINUS expr
expr ::= LPAREN expr RPAREN
expr ::= NUMBER
PLUS ::= '+'
UNARY_MINUS ::= '-'
BINARY_MINUS ::= '-'
TIMES ::= '*'
DIVIDE ::= '/'
LPAREN ::= '('
RPAREN ::= ')'
NUMBER ::= '0'|([1-9][0-9]*)
And here is the manual fixes applied to the output of silver --copperdump -o ableC.jar -I grammars $@ edu:umn:cs:melt:ableC:compiler that can be viewed at https://www.bottlecaps.de/rr/ui .
Copy and paste the EBNF shown bellow on https://www.bottlecaps.de/rr/ui on the tab Edit Grammar the click on the tab View Diagram to see/download a navigable railroad diagram.
grammar_start_at ::= a_Root
| notes_for_railroad
notes_for_railroad ::=
| 'a_ prefix for edu:umn:cs:melt:ableC:concretesyntax:'
| 'b_ prefix for edu:umn:cs:melt:ableC:concretesyntax:gcc_exts:'
| 'c_ prefix for edu:umn:cs:melt:ableC:concretesyntax:c11:'
a_AbstractDeclarator_c ::= a_Pointer_c a_DirectAbstractDeclarator_c
a_AbstractDeclarator_c ::= a_DirectAbstractDeclarator_c
a_AbstractDeclarator_c ::= a_Pointer_c
a_AddMulLeftOp_c ::= 'AddMulLeft_Never!!!nevernever1234567890'
a_AddMulLeft_c ::= a_AddMulRight_c
a_AddMulLeft_c ::= a_AddMulLeft_c a_AddMulLeftOp_c a_AddMulRight_c
a_AddMulNoneOp_c ::= 'AddMulNone_Never!!!nevernever1234567890'
a_AddMulNone_c ::= a_MultiplicativeExpr_c
a_AddMulNone_c ::= a_MultiplicativeExpr_c a_AddMulNoneOp_c a_MultiplicativeExpr_c
a_AddMulRightOp_c ::= 'AddMulRight_Never!!!nevernever1234567890'
a_AddMulRight_c ::= a_AddMulNone_c
a_AddMulRight_c ::= a_AddMulNone_c a_AddMulRightOp_c a_AddMulRight_c
a_AdditiveExpr_c ::= a_AddMulLeft_c
a_AdditiveExpr_c ::= a_AdditiveExpr_c a_AdditiveOp_c a_AddMulLeft_c
a_AdditiveOp_c ::= '+'
a_AdditiveOp_c ::= '-'
a_AndExpr_c ::= a_EqualityExpr_c
a_AndExpr_c ::= a_AndExpr_c a_AndOp_c a_EqualityExpr_c
a_AndOp_c ::= '&'
a_ArgumentExprList_c ::= a_AssignExpr_c
a_ArgumentExprList_c ::= a_ArgumentExprList_c ',' a_AssignExpr_c
a_ArrayDesignator_c ::= '[' a_ConstantExpr_c '...' a_ConstantExpr_c ']'
a_ArrayDesignator_c ::= '[' a_ConstantExpr_c ']'
a_AssignExpr_c ::= a_ConditionalExpr_c
a_AssignExpr_c ::= a_UnaryExpr_c a_AssignOp_c a_AssignExpr_c
a_AssignOp_c ::= '='
a_AssignOp_c ::= '*='
a_AssignOp_c ::= '/='
a_AssignOp_c ::= '%='
a_AssignOp_c ::= '+='
a_AssignOp_c ::= '-='
a_AssignOp_c ::= '<<='
a_AssignOp_c ::= '>>='
a_AssignOp_c ::= '&='
a_AssignOp_c ::= '^='
a_AssignOp_c ::= '|='
a_BlockItemList_c ::= a_BlockItem_c
a_BlockItemList_c ::= a_BlockItemList_c a_BlockItem_c
a_BlockItem_c ::= a_Stmt_c
a_BlockItem_c ::= '__extension__' a_Declaration_c
a_BlockItem_c ::= b_NestedFunctionDefinition_c
a_BlockItem_c ::= a_Declaration_c
a_CastExpr_c ::= a_UnaryExpr_c
a_CastExpr_c ::= '(' a_TypeName_c ')' a_CastExpr_c
a_CompoundStatement_c ::= '{' b_LabelDeclarations_c a_BlockItemList_c '}'
a_CompoundStatement_c ::= '{' a_BlockItemList_c '}'
a_CompoundStatement_c ::= '{' '}'
a_ConditionalExpr_c ::= a_LogicalOrExpr_c '?' ':' a_ConditionalExpr_c
a_ConditionalExpr_c ::= a_LogicalOrExpr_c '?' a_Expr_c ':' a_ConditionalExpr_c
a_ConditionalExpr_c ::= a_LogicalOrExpr_c
a_ConstantExpr_c ::= a_ConditionalExpr_c
a_Constant_c ::= b_IDecConstant_t
a_Constant_c ::= b_IDecConstantU_t
a_Constant_c ::= b_IDecConstantL_t
a_Constant_c ::= b_IDecConstantUL_t
a_Constant_c ::= b_IDecConstantLL_t
a_Constant_c ::= b_IDecConstantULL_t
a_Constant_c ::= b_IFloatConstant_t
a_Constant_c ::= b_IFloatConstantFloat_t
a_Constant_c ::= b_IFloatConstantLongDouble_t
a_Constant_c ::= b_IHexFloatConstant_t
a_Constant_c ::= b_IHexFloatConstantFloat_t
a_Constant_c ::= b_IHexFloatConstantLongDouble_t
a_Constant_c ::= a_DecConstant_t
a_Constant_c ::= a_DecConstantU_t
a_Constant_c ::= a_DecConstantL_t
a_Constant_c ::= a_DecConstantUL_t
a_Constant_c ::= a_DecConstantLL_t
a_Constant_c ::= a_DecConstantULL_t
a_Constant_c ::= a_OctConstant_t
a_Constant_c ::= a_OctConstantU_t
a_Constant_c ::= a_OctConstantL_t
a_Constant_c ::= a_OctConstantUL_t
a_Constant_c ::= a_OctConstantLL_t
a_Constant_c ::= a_OctConstantULL_t
a_Constant_c ::= a_OctConstantError_t
a_Constant_c ::= a_HexConstant_t
a_Constant_c ::= a_HexConstantU_t
a_Constant_c ::= a_HexConstantL_t
a_Constant_c ::= a_HexConstantUL_t
a_Constant_c ::= a_HexConstantLL_t
a_Constant_c ::= a_HexConstantULL_t
a_Constant_c ::= a_FloatConstant_t
a_Constant_c ::= a_FloatConstantFloat_t
a_Constant_c ::= a_FloatConstantLongDouble_t
a_Constant_c ::= a_HexFloatConstant_t
a_Constant_c ::= a_HexFloatConstantFloat_t
a_Constant_c ::= a_HexFloatConstantLongDouble_t
a_Constant_c ::= a_CharConstant_t
a_Constant_c ::= a_CharConstantL_t
a_Constant_c ::= a_CharConstantU_t
a_Constant_c ::= a_CharConstantUBig_t
a_DeclarationList_c ::=
a_DeclarationList_c ::= a_Declaration_c a_DeclarationList_c
a_DeclarationSpecifiers_c ::= c_AlignmentSpecifier_c a_DeclarationSpecifiers_c
a_DeclarationSpecifiers_c ::= c_AlignmentSpecifier_c
a_DeclarationSpecifiers_c ::= b_Attributes_c a_DeclarationSpecifiers_c
a_DeclarationSpecifiers_c ::= b_Attributes_c
a_DeclarationSpecifiers_c ::= a_TypeSpecifierItem_c
a_DeclarationSpecifiers_c ::= a_TypeQualifier_c a_DeclarationSpecifiers_c
a_DeclarationSpecifiers_c ::= a_TypeQualifier_c
a_DeclarationSpecifiers_c ::= a_FunctionSpecifier_c a_DeclarationSpecifiers_c
a_DeclarationSpecifiers_c ::= a_FunctionSpecifier_c
a_DeclarationSpecifiers_c ::= a_StorageClassSpecifier_c a_DeclarationSpecifiers_c
a_DeclarationSpecifiers_c ::= a_StorageClassSpecifier_c
a_DeclarationSpecifiers_c ::= a_TypeSpecifierItem_c a_DeclarationSpecifiers_c
a_Declaration_c ::= c_StaticAssertDeclaration_c
a_Declaration_c ::= a_DeclarationSpecifiers_c a_InitDeclaratorList_c ';'
a_Declaration_c ::= a_DeclarationSpecifiers_c ';'
a_Declarator_c ::= a_Pointer_c a_DirectDeclarator_c
a_Declarator_c ::= a_DirectDeclarator_c
a_Designation_c ::= a_ArrayDesignator_c
a_Designation_c ::= a_Identifier_c ':'
a_Designation_c ::= a_DesignatorList_c '='
a_DesignatorList_c ::= a_DesignatorList_c a_Designator_c
a_DesignatorList_c ::= a_Designator_c
a_Designator_c ::= a_ArrayDesignator_c
a_Designator_c ::= '.' a_Identifier_c
a_DirectAbstractDeclarator_c ::= '(' a_AbstractDeclarator_c ')'
a_DirectAbstractDeclarator_c ::= a_PostfixModifier_c
a_DirectAbstractDeclarator_c ::= a_DirectAbstractDeclarator_c a_PostfixModifier_c
a_DirectDeclarator_c ::= '(' a_Declarator_c ')'
a_DirectDeclarator_c ::= a_DirectDeclarator_c '(' a_IdentifierList_c ')' a_OptTypeQualifierList_c
a_DirectDeclarator_c ::= a_Identifier_c
a_DirectDeclarator_c ::= a_DirectDeclarator_c a_PostfixModifier_c
a_EnumSpecifier_c ::= 'enum' '{' a_EnumeratorList_c '}'
a_EnumSpecifier_c ::= 'enum' a_Identifier_c '{' a_EnumeratorList_c '}'
a_EnumSpecifier_c ::= 'enum' '{' a_EnumeratorList_c ',' '}'
a_EnumSpecifier_c ::= 'enum' a_Identifier_c '{' a_EnumeratorList_c ',' '}'
a_EnumSpecifier_c ::= 'enum' a_Identifier_c
a_EnumeratorList_c ::= a_Enumerator_c
a_EnumeratorList_c ::= a_EnumeratorList_c ',' a_Enumerator_c
a_Enumerator_c ::= a_Identifier_c
a_Enumerator_c ::= a_Identifier_c '=' a_ConstantExpr_c
a_EqualityExpr_c ::= a_RelationalExpr_c
a_EqualityExpr_c ::= a_EqualityExpr_c a_EqualityOp_c a_RelationalExpr_c
a_EqualityOp_c ::= '=='
a_EqualityOp_c ::= '!='
a_ExclusiveOrExpr_c ::= a_AndExpr_c
a_ExclusiveOrExpr_c ::= a_ExclusiveOrExpr_c a_ExclusiveOrOp_c a_AndExpr_c
a_ExclusiveOrOp_c ::= '^'
a_ExprStmt_c ::= ';'
a_ExprStmt_c ::= a_Expr_c ';'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c ')'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c '{'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c '}'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c '>'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c ';'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c a_AllowSEUDecl_t
a_Expr_c ::= 'Names_NEVER_t!!!nevernever1234567890' a_Names_c ')'
a_Expr_c ::= 'Names_NEVER_t!!!nevernever1234567890' a_Names_c '}'
a_Expr_c ::= 'Names_NEVER_t!!!nevernever1234567890' a_Names_c '>'
a_Expr_c ::= 'Names_NEVER_t!!!nevernever1234567890' a_Names_c ';'
a_Expr_c ::= 'Declarator_NEVER_t!!!nevernever1234567890' a_Declarator_c '>'
a_Expr_c ::= 'DirectDeclarator_NEVER_t!!!nevernever1234567890' a_DirectDeclarator_c '>'
a_Expr_c ::= a_AssignExpr_c ',' a_Expr_c
a_Expr_c ::= 'Expr_NEVER_t!!!nevernever1234567890' a_Expr_c a_AllowSEUDecl_t
a_Expr_c ::= a_AssignExpr_c
a_Expr_c ::= 'TypeIdName_Never!!!nevernever1234567890' a_TypeIdName_c '<'
a_ExternalDeclaration_c ::= '__extension__' a_ExternalDeclaration_c
a_ExternalDeclaration_c ::= b_SimpleAsmStatement_c
a_ExternalDeclaration_c ::= '#' 'pragma' b_Pack_t
a_ExternalDeclaration_c ::= '#' 'pragma' 'redefine_extname' a_Identifier_c a_Identifier_c
a_ExternalDeclaration_c ::= '#' 'pragma' b_GCC_t
a_ExternalDeclaration_c ::= a_Declaration_c
a_ExternalDeclaration_c ::= a_FunctionDefinition_c
a_FunctionDefinition_c ::= a_InitialFunctionDefinition_c a_CompoundStatement_c
a_FunctionSpecifier_c ::= '_Noreturn'
a_FunctionSpecifier_c ::= '__inline__'
a_FunctionSpecifier_c ::= '__inline'
a_FunctionSpecifier_c ::= 'inline'
a_IdentifierList_c ::= a_Identifier_c
a_IdentifierList_c ::= a_IdentifierList_c ',' a_Identifier_c
a_Identifier_c ::= a_Identifier_t
a_InclusiveOrExpr_c ::= a_ExclusiveOrExpr_c
a_InclusiveOrExpr_c ::= a_InclusiveOrExpr_c a_InclusiveOrOp_c a_ExclusiveOrExpr_c
a_InclusiveOrOp_c ::= '|'
a_InitDeclaratorList_c ::= a_InitDeclarator_c
a_InitDeclaratorList_c ::= a_InitDeclaratorList_c ',' a_InitDeclarator_c
a_InitDeclarator_c ::= a_Declarator_c b_Attributes_c
a_InitDeclarator_c ::= a_Declarator_c b_Attributes_c '=' a_Initializer_c
a_InitDeclarator_c ::= a_Declarator_c b_SimpleAsmStatement_c
a_InitDeclarator_c ::= a_Declarator_c b_SimpleAsmStatement_c b_Attributes_c
a_InitDeclarator_c ::= a_Declarator_c
a_InitDeclarator_c ::= a_Declarator_c '=' a_Initializer_c
a_InitialFunctionDefinition_c ::= a_DeclarationSpecifiers_c a_Declarator_c a_InitiallyUnqualifiedDeclarationList_c
a_InitialFunctionDefinition_c ::= a_Declarator_c a_InitiallyUnqualifiedDeclarationList_c
a_InitializerList_c ::= a_Initializer_c
a_InitializerList_c ::= a_Designation_c a_Initializer_c
a_InitializerList_c ::= a_InitializerList_c ',' a_Initializer_c
a_InitializerList_c ::= a_InitializerList_c ',' a_Designation_c a_Initializer_c
a_Initializer_c ::= '{' '}'
a_Initializer_c ::= a_AssignExpr_c
a_Initializer_c ::= '{' a_InitializerList_c '}'
a_Initializer_c ::= '{' a_InitializerList_c ',' '}'
a_InitiallyUnqualifiedDeclarationList_c ::=
a_InitiallyUnqualifiedDeclarationList_c ::= a_InitiallyUnqualifiedDeclaration_c a_DeclarationList_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_StorageClassSpecifier_c a_DeclarationSpecifiers_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_StorageClassSpecifier_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_TypeSpecifierItem_c a_DeclarationSpecifiers_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_TypeSpecifierItem_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_FunctionSpecifier_c a_DeclarationSpecifiers_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_FunctionSpecifier_c
a_InitiallyUnqualifiedDeclaration_c ::= a_InitiallyUnqualifiedDeclarationSpecifiers_c a_InitDeclaratorList_c ';'
a_InitiallyUnqualifiedDeclaration_c ::= a_InitiallyUnqualifiedDeclarationSpecifiers_c ';'
a_IterationStmt_c ::= 'for' '(' a_ExprStmt_c a_ExprStmt_c ')' a_Stmt_c
a_IterationStmt_c ::= 'for' '(' a_Declaration_c a_ExprStmt_c a_Expr_c ')' a_Stmt_c
a_IterationStmt_c ::= 'for' '(' a_Declaration_c a_ExprStmt_c ')' a_Stmt_c
a_IterationStmt_c ::= 'while' '(' a_Expr_c ')' a_Stmt_c
a_IterationStmt_c ::= 'do' a_Stmt_c 'while' '(' a_Expr_c ')' ';'
a_IterationStmt_c ::= 'for' '(' a_ExprStmt_c a_ExprStmt_c a_Expr_c ')' a_Stmt_c
a_JumpStmt_c ::= 'goto' '*' a_Expr_c ';'
a_JumpStmt_c ::= b_Asm_Starter_c 'goto' '(' a_StringConstant_c ':' ':' ':' ':' a_IdentifierList_c ')'
a_JumpStmt_c ::= 'goto' a_Identifier_c ';'
a_JumpStmt_c ::= 'continue' ';'
a_JumpStmt_c ::= 'break' ';'
a_JumpStmt_c ::= 'return' ';'
a_JumpStmt_c ::= 'return' a_Expr_c ';'
a_LabeledStmt_c ::= a_Identifier_c ':' b_Attributes_c a_Stmt_c
a_LabeledStmt_c ::= 'case' a_ConstantExpr_c '...' a_ConstantExpr_c ':' a_Stmt_c
a_LabeledStmt_c ::= a_Identifier_c ':' a_Stmt_c
a_LabeledStmt_c ::= 'case' a_ConstantExpr_c ':' a_Stmt_c
a_LabeledStmt_c ::= 'default' ':' a_Stmt_c
a_LogicalAndExpr_c ::= a_InclusiveOrExpr_c
a_LogicalAndExpr_c ::= a_LogicalAndExpr_c a_LogicalAndOp_c a_InclusiveOrExpr_c
a_LogicalAndOp_c ::= '&&'
a_LogicalOrExpr_c ::= a_LogicalAndExpr_c
a_LogicalOrExpr_c ::= a_LogicalOrExpr_c a_LogicalOrOp_c a_LogicalAndExpr_c
a_LogicalOrOp_c ::= '||'
a_MultiplicativeExpr_c ::= a_CastExpr_c
a_MultiplicativeExpr_c ::= a_MultiplicativeExpr_c a_MultiplicativeOp_c a_CastExpr_c
a_MultiplicativeOp_c ::= '*'
a_MultiplicativeOp_c ::= '/'
a_MultiplicativeOp_c ::= '%'
a_Names_c ::= a_Identifier_c ',' a_Names_c
a_Names_c ::= a_Identifier_c
a_Names_c ::=
a_OptTypeQualifierList_c ::=
a_OptTypeQualifierList_c ::= a_TypeQualifierList_c
a_ParameterDeclaration_c ::= a_DeclarationSpecifiers_c a_Declarator_c b_Attributes_c
a_ParameterDeclaration_c ::= a_DeclarationSpecifiers_c a_AbstractDeclarator_c b_Attributes_c
a_ParameterDeclaration_c ::= a_DeclarationSpecifiers_c a_Declarator_c
a_ParameterDeclaration_c ::= a_DeclarationSpecifiers_c a_AbstractDeclarator_c
a_ParameterDeclaration_c ::= a_DeclarationSpecifiers_c
a_ParameterList_c ::= a_ParameterDeclaration_c
a_ParameterList_c ::= a_ParameterList_c ',' a_ParameterDeclaration_c
a_ParameterTypeList_c ::= a_ParameterList_c
a_ParameterTypeList_c ::= a_ParameterList_c ',' '...'
a_Pointer_c ::= '*'
a_Pointer_c ::= '*' a_TypeQualifierList_c
a_Pointer_c ::= '*' a_Pointer_c
a_Pointer_c ::= '*' a_TypeQualifierList_c a_Pointer_c
a_PostfixExpr_c ::= '(' a_TypeName_c ')' '{' '}'
a_PostfixExpr_c ::= a_PrimaryExpr_c
a_PostfixExpr_c ::= a_PostfixExpr_c '[' a_Expr_c ']'
a_PostfixExpr_c ::= a_PostfixExpr_c '(' a_ArgumentExprList_c ')'
a_PostfixExpr_c ::= a_PostfixExpr_c '(' a_ArgumentExprList_c ',' ')'
a_PostfixExpr_c ::= a_PostfixExpr_c '(' ')'
a_PostfixExpr_c ::= a_PostfixExpr_c a_PostfixOp_c
a_PostfixExpr_c ::= '(' a_TypeName_c ')' '{' a_InitializerList_c '}'
a_PostfixExpr_c ::= '(' a_TypeName_c ')' '{' a_InitializerList_c ',' '}'
a_PostfixModifier_c ::= '[' ']'
a_PostfixModifier_c ::= '[' a_TypeQualifierList_c a_AssignExpr_c ']'
a_PostfixModifier_c ::= '[' a_AssignExpr_c ']'
a_PostfixModifier_c ::= '[' a_TypeQualifierList_c ']'
a_PostfixModifier_c ::= '[' 'static' a_TypeQualifierList_c a_AssignExpr_c ']'
a_PostfixModifier_c ::= '[' 'static' a_AssignExpr_c ']'
a_PostfixModifier_c ::= '[' a_TypeQualifierList_c 'static' a_AssignExpr_c ']'
a_PostfixModifier_c ::= '[' a_TypeQualifierList_c '*' ']'
a_PostfixModifier_c ::= '[' '*' ']'
a_PostfixModifier_c ::= '(' a_ParameterTypeList_c ')' a_OptTypeQualifierList_c
a_PostfixModifier_c ::= '(' ')' a_OptTypeQualifierList_c
a_PostfixOp_c ::= '.' a_Identifier_c
a_PostfixOp_c ::= '->' a_Identifier_c
a_PostfixOp_c ::= '++'
a_PostfixOp_c ::= '--'
a_PrimaryExpr_c ::= c_GenericSelection_c
a_PrimaryExpr_c ::= '(' '{' a_BlockItemList_c '}' ')'
a_PrimaryExpr_c ::= '__builtin_va_arg' '(' a_AssignExpr_c ',' a_TypeName_c ')'
a_PrimaryExpr_c ::= '__builtin_offsetof' '(' a_TypeName_c ',' b_MemberDesignator_c ')'
a_PrimaryExpr_c ::= '__builtin_types_compatible_p' '(' a_TypeName_c ',' a_TypeName_c ')'
a_PrimaryExpr_c ::= '__builtin_constant_p' '(' a_AssignExpr_c ')'
a_PrimaryExpr_c ::= '__builtin_va_arg_pack' '(' ')'
a_PrimaryExpr_c ::= '__builtin_expect' '(' a_AssignExpr_c ',' a_ConstantExpr_c ')'
a_PrimaryExpr_c ::= '__builtin_va_start' '(' a_Identifier_c ',' a_Identifier_c ')'
a_PrimaryExpr_c ::= '__builtin_va_end' '(' a_Identifier_c ')'
a_PrimaryExpr_c ::= a_Identifier_c
a_PrimaryExpr_c ::= a_Constant_c
a_PrimaryExpr_c ::= a_StringConstant_c
a_PrimaryExpr_c ::= '(' a_Expr_c ')'
a_RelationalExpr_c ::= a_ShiftExpr_c
a_RelationalExpr_c ::= a_RelationalExpr_c a_RelationalOp_c a_ShiftExpr_c
a_RelationalOp_c ::= '<'
a_RelationalOp_c ::= '>'
a_RelationalOp_c ::= '<='
a_RelationalOp_c ::= '>='
a_Root ::= a_TranslationUnit_c
a_Root ::=
a_SelectionStmt_c ::= 'if' '(' a_Expr_c ')' a_Stmt_c
a_SelectionStmt_c ::= 'if' '(' a_Expr_c ')' a_Stmt_c 'else' a_Stmt_c
a_SelectionStmt_c ::= 'switch' '(' a_Expr_c ')' a_Stmt_c
a_ShiftExpr_c ::= a_AdditiveExpr_c
a_ShiftExpr_c ::= a_ShiftExpr_c a_ShiftOp_c a_AdditiveExpr_c
a_ShiftOp_c ::= '<<'
a_ShiftOp_c ::= '>>'
a_SpecifierQualifierList_c ::= b_Attributes_c a_SpecifierQualifierList_c
a_SpecifierQualifierList_c ::= b_Attributes_c
a_SpecifierQualifierList_c ::= a_TypeSpecifierItem_c a_SpecifierQualifierList_c
a_SpecifierQualifierList_c ::= a_TypeSpecifierItem_c
a_SpecifierQualifierList_c ::= a_TypeQualifier_c a_SpecifierQualifierList_c
a_SpecifierQualifierList_c ::= a_TypeQualifier_c
a_Stmt_c ::= a_ExprStmt_c
a_Stmt_c ::= '#' 'pragma' b_OMP_t
a_Stmt_c ::= '#' 'pragma' b_OMPFor_t
a_Stmt_c ::= b_Asm_Statement_c
a_Stmt_c ::= a_LabeledStmt_c
a_Stmt_c ::= a_CompoundStatement_c
a_Stmt_c ::= a_SelectionStmt_c
a_Stmt_c ::= a_IterationStmt_c
a_Stmt_c ::= a_JumpStmt_c
a_StorageClassSpecifier_c ::= '_Thread_local'
a_StorageClassSpecifier_c ::= '__thread'
a_StorageClassSpecifier_c ::= 'typedef'
a_StorageClassSpecifier_c ::= 'extern'
a_StorageClassSpecifier_c ::= 'static'
a_StorageClassSpecifier_c ::= 'auto'
a_StorageClassSpecifier_c ::= 'register'
a_StringConstant_c ::= a_StringLiteral_c
a_StringConstant_c ::= a_StringLiteral_c a_StringConstant_c
a_StringLiteral_c ::= a_StringConstant_t
a_StringLiteral_c ::= a_StringConstantU8_t
a_StringLiteral_c ::= a_StringConstantL_t
a_StringLiteral_c ::= a_StringConstantU_t
a_StringLiteral_c ::= a_StringConstantUBig_t
a_StructDeclarationList_c ::= a_StructDeclaration_c
a_StructDeclarationList_c ::= a_StructDeclarationList_c a_StructDeclaration_c
a_StructDeclaration_c ::= a_StructOrUnion_c a_Identifier_c '{' a_StructDeclarationList_c '}' ';'
a_StructDeclaration_c ::= a_StructOrUnion_c '{' a_StructDeclarationList_c '}' ';'
a_StructDeclaration_c ::= a_StructOrUnion_c b_Attributes_c a_Identifier_c '{' a_StructDeclarationList_c '}' ';'
a_StructDeclaration_c ::= a_StructOrUnion_c b_Attributes_c '{' a_StructDeclarationList_c '}' ';'
a_StructDeclaration_c ::= a_StructOrUnion_c a_Identifier_c '{' a_StructDeclarationList_c '}' b_Attributes_c ';'
a_StructDeclaration_c ::= a_StructOrUnion_c '{' a_StructDeclarationList_c '}' b_Attributes_c ';'
a_StructDeclaration_c ::= '__extension__' a_StructDeclaration_c
a_StructDeclaration_c ::= a_SpecifierQualifierList_c a_StructDeclaratorList_c ';'
a_StructDeclaratorList_c ::= a_StructDeclarator_c
a_StructDeclaratorList_c ::= a_StructDeclaratorList_c ',' a_StructDeclarator_c
a_StructDeclarator_c ::= a_Declarator_c b_Attributes_c
a_StructDeclarator_c ::= a_Declarator_c ':' a_ConstantExpr_c b_Attributes_c
a_StructDeclarator_c ::= ':' a_ConstantExpr_c b_Attributes_c
a_StructDeclarator_c ::= a_Declarator_c
a_StructDeclarator_c ::= a_Declarator_c ':' a_ConstantExpr_c
a_StructDeclarator_c ::= ':' a_ConstantExpr_c
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c a_Identifier_c '{' '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c '{' '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c b_Attributes_c a_Identifier_c '{' a_StructDeclarationList_c '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c a_Identifier_c '{' a_StructDeclarationList_c '}' b_Attributes_c
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c b_Attributes_c a_Identifier_c '{' '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c a_Identifier_c '{' '}' b_Attributes_c
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c b_Attributes_c '{' '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c '{' '}' b_Attributes_c
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c a_Identifier_c '{' a_StructDeclarationList_c '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c '{' a_StructDeclarationList_c '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c a_Identifier_c
a_StructOrUnion_c ::= 'struct'
a_StructOrUnion_c ::= 'union'
a_TranslationUnit_c ::= a_TranslationUnit_c ';'
a_TranslationUnit_c ::= a_ExternalDeclaration_c
a_TranslationUnit_c ::= a_TranslationUnit_c a_ExternalDeclaration_c
a_TypeIdName_c ::= a_TypeName_t
a_TypeName_c ::= a_SpecifierQualifierList_c
a_TypeName_c ::= a_SpecifierQualifierList_c a_AbstractDeclarator_c
a_TypeNames_c ::= a_TypeName_c ',' a_TypeNames_c
a_TypeNames_c ::= a_TypeName_c
a_TypeNames_c ::=
a_TypeQualifierList_c ::= b_Attributes_c a_TypeQualifierList_c
a_TypeQualifierList_c ::= b_Attributes_c
a_TypeQualifierList_c ::= a_TypeQualifier_c
a_TypeQualifierList_c ::= a_TypeQualifier_c a_TypeQualifierList_c
a_TypeQualifier_c ::= '_Atomic'
a_TypeQualifier_c ::= '__const'
a_TypeQualifier_c ::= '__restrict'
a_TypeQualifier_c ::= '__restrict__'
a_TypeQualifier_c ::= '__volatile__'
a_TypeQualifier_c ::= '__volatile'
a_TypeQualifier_c ::= 'const'
a_TypeQualifier_c ::= 'volatile'
a_TypeQualifier_c ::= 'restrict'
a_TypeSpecifierItem_c ::= a_TypeSpecifier_c
a_TypeSpecifier_c ::= c_C11_Atomic_Specifier_t a_TypeName_c ')'
a_TypeSpecifier_c ::= '__builtin_va_list'
a_TypeSpecifier_c ::= '__signed__'
a_TypeSpecifier_c ::= b_TypeofStarter_c '(' a_TypeName_c ')'
a_TypeSpecifier_c ::= b_TypeofStarter_c '(' a_Expr_c ')'
a_TypeSpecifier_c ::= '_Float128'
a_TypeSpecifier_c ::= '__int128'
a_TypeSpecifier_c ::= 'void'
a_TypeSpecifier_c ::= 'char'
a_TypeSpecifier_c ::= 'short'
a_TypeSpecifier_c ::= 'int'
a_TypeSpecifier_c ::= 'long'
a_TypeSpecifier_c ::= 'float'
a_TypeSpecifier_c ::= 'double'
a_TypeSpecifier_c ::= 'signed'
a_TypeSpecifier_c ::= 'unsigned'
a_TypeSpecifier_c ::= '_Bool'
a_TypeSpecifier_c ::= '_Imaginary'
a_TypeSpecifier_c ::= '_Complex'
a_TypeSpecifier_c ::= a_StructOrUnionSpecifier_c
a_TypeSpecifier_c ::= a_EnumSpecifier_c
a_TypeSpecifier_c ::= a_TypeIdName_c
a_UnaryExpr_c ::= '_Alignof' '(' a_TypeName_c ')'
a_UnaryExpr_c ::= '__alignof' a_UnaryExpr_c
a_UnaryExpr_c ::= '__alignof' '(' a_TypeName_c ')'
a_UnaryExpr_c ::= '__alignof__' a_UnaryExpr_c
a_UnaryExpr_c ::= '__alignof__' '(' a_TypeName_c ')'
a_UnaryExpr_c ::= '&&' a_Identifier_c
a_UnaryExpr_c ::= a_PostfixExpr_c
a_UnaryExpr_c ::= '++' a_UnaryExpr_c
a_UnaryExpr_c ::= '--' a_UnaryExpr_c
a_UnaryExpr_c ::= a_UnaryOp_c a_CastExpr_c
a_UnaryExpr_c ::= 'sizeof' a_UnaryExpr_c
a_UnaryExpr_c ::= 'sizeof' '(' a_TypeName_c ')'
a_UnaryOp_c ::= '__extension__'
a_UnaryOp_c ::= '__real'
a_UnaryOp_c ::= '__real__'
a_UnaryOp_c ::= '__imag'
a_UnaryOp_c ::= '__imag__'
a_UnaryOp_c ::= '&'
a_UnaryOp_c ::= '*'
a_UnaryOp_c ::= '+'
a_UnaryOp_c ::= '-'
a_UnaryOp_c ::= '~'
a_UnaryOp_c ::= '!'
c_AlignmentSpecifier_c ::= '_Alignas' '(' a_TypeName_c ')'
c_AlignmentSpecifier_c ::= '_Alignas' '(' a_ConstantExpr_c ')'
c_GenericAssocList_c ::= c_GenericAssoc_c
c_GenericAssocList_c ::= c_GenericAssocList_c ',' c_GenericAssoc_c
c_GenericAssoc_c ::= a_TypeName_c ':' a_AssignExpr_c
c_GenericAssoc_c ::= 'default' ':' a_AssignExpr_c
c_GenericSelection_c ::= '_Generic' '(' a_AssignExpr_c ',' c_GenericAssocList_c ')'
c_StaticAssertDeclaration_c ::= '_Static_assert' '(' a_ConstantExpr_c ',' a_StringConstant_c ')' ';'
b_AsmArgument_c ::= a_StringConstant_c ':' ':' ':' b_AsmClobbers_c
b_AsmArgument_c ::= a_StringConstant_c
b_AsmArgument_c ::= a_StringConstant_c ':' b_AsmOperands_c
b_AsmArgument_c ::= a_StringConstant_c ':'
b_AsmArgument_c ::= a_StringConstant_c ':' b_AsmOperands_c ':' b_AsmOperands_c
b_AsmArgument_c ::= a_StringConstant_c ':' ':' b_AsmOperands_c
b_AsmArgument_c ::= a_StringConstant_c ':' b_AsmOperands_c ':'
b_AsmArgument_c ::= a_StringConstant_c ':' ':'
b_AsmArgument_c ::= a_StringConstant_c ':' b_AsmOperands_c ':' b_AsmOperands_c ':' b_AsmClobbers_c
b_AsmArgument_c ::= a_StringConstant_c ':' ':' b_AsmOperands_c ':' b_AsmClobbers_c
b_AsmArgument_c ::= a_StringConstant_c ':' b_AsmOperands_c ':' ':' b_AsmClobbers_c
b_AsmClobbers_c ::= a_StringConstant_t
b_AsmClobbers_c ::= b_AsmClobbers_c ',' a_StringConstant_t
b_AsmOperand_c ::= a_StringConstant_t '(' a_Expr_c ')'
b_AsmOperand_c ::= '[' a_Identifier_c ']' a_StringConstant_t '(' a_Expr_c ')'
b_AsmOperands_c ::= b_AsmOperand_c
b_AsmOperands_c ::= b_AsmOperands_c ',' b_AsmOperand_c
b_Asm_Starter_c ::= 'asm'
b_Asm_Starter_c ::= '__asm__'
b_Asm_Starter_c ::= '__asm'
b_Asm_Statement_c ::= b_Asm_Starter_c a_TypeQualifier_c '(' b_AsmArgument_c ')' ';'
b_Asm_Statement_c ::= b_Asm_Starter_c '(' b_AsmArgument_c ')' ';'
b_AttribName_c ::= b_AttributeNameUnfetterdByKeywords_t
b_Attrib_c ::=
b_Attrib_c ::= b_AttribName_c
b_Attrib_c ::= b_AttribName_c '(' a_ArgumentExprList_c ')'
b_AttributeList_c ::= b_Attrib_c
b_AttributeList_c ::= b_AttributeList_c ',' b_Attrib_c
b_Attribute_c ::= '__attribute__' '(' '(' b_AttributeList_c ')' ')'
b_Attribute_c ::= '__attribute' '(' '(' b_AttributeList_c ')' ')'
b_Attributes_c ::= b_Attribute_c
b_Attributes_c ::= b_Attribute_c b_Attributes_c
b_InitialNestedFunctionDefinition_c ::= a_DeclarationSpecifiers_c a_Declarator_c
b_LabelDeclaration_c ::= '__label__' a_IdentifierList_c ';'
b_LabelDeclarations_c ::= b_LabelDeclaration_c
b_LabelDeclarations_c ::= b_LabelDeclarations_c b_LabelDeclaration_c
b_MemberDesignator_c ::= b_MemberDesignator_c '->' a_Identifier_c
b_MemberDesignator_c ::= b_MemberDesignator_c '[' a_ConstantExpr_c ']'
b_MemberDesignator_c ::= a_Identifier_c
b_MemberDesignator_c ::= b_MemberDesignator_c '.' a_Identifier_c
b_NestedFunctionDefinition_c ::= b_InitialNestedFunctionDefinition_c a_CompoundStatement_c
b_SimpleAsmStatement_c ::= b_Asm_Starter_c '(' a_StringConstant_c ')'
b_TypeofStarter_c ::= 'typeof'
b_TypeofStarter_c ::= '__typeof__'
b_TypeofStarter_c ::= '__typeof'
Thanks for the interest and pointer to the railroad diagram maker. We'll take a look sometime - maybe at our next "hackathon".
Not at all and thanks for your great work !
And here is the manual fixes applied to the output of selfcompile silver that can be viewed at https://www.bottlecaps.de/rr/ui .
Copy and paste the EBNF shown bellow on https://www.bottlecaps.de/rr/ui on the tab Edit Grammar the click on the tab View Diagram to see/download a navigable railroad diagram.
grammar_start_at ::= b_Root
| notes_for_railroad
notes_for_railroad ::=
| 'a_ prefix for silver:compiler:definition:concrete_syntax:'
| 'b_ prefix for silver:compiler:definition:core:'
| 'c_ prefix for silver:compiler:modification:copper:'
| 'd_ prefix for silver:regex:concrete_syntax:'
| 'e_ prefix for silver:compiler:extension:easyterminal:'
| 'f_ prefix for silver:compiler:definition:type:syntax:'
| 'g_ prefix for silver:compiler:definition:flow:syntax:'
| 'h_ prefix for silver:compiler:extension:convenience:'
| 'i_ prefix for silver:compiler:modification:collection:'
| 'j_ prefix for silver:compiler:extension:autoattr:'
| 'k_ prefix for silver:compiler:extension:convenienceaspects:'
| 'l_ prefix for silver:compiler:extension:patternmatching:'
| 'm_ prefix for silver:compiler:extension:doc:core:'
| 'n_ prefix for silver:compiler:extension:strategyattr:'
| 'o_ prefix for silver:compiler:extension:treegen:'
| 'p_ prefix for silver:compiler:modification:defaultattr:'
| 'q_ prefix for silver:compiler:modification:ffi:'
| 'r_ prefix for silver:reflect:concretesyntax:'
| 's_ prefix for silver:compiler:extension:deprecation:'
| 't_ prefix for silver:compiler:extension:do_notation:'
| 'u_ prefix for silver:compiler:extension:templating:syntax:'
| 'v_ prefix for silver:compiler:extension:tuple:'
| 'w_ prefix for silver:compiler:modification:let_fix:'
| 'x_ prefix for silver:compiler:modification:primitivepattern:'
a_ProductionModifier ::= 'operator' '=' b_QNameType
a_ProductionModifier ::= 'precedence' '=' b_Int_t
a_ProductionModifier ::= 'layout' '{' c_TermList '}'
a_ProductionModifier ::= 'layout' '{' '}'
a_ProductionModifierList ::= a_ProductionModifier
a_ProductionModifierList ::= a_ProductionModifier ',' a_ProductionModifierList
a_ProductionModifiers ::= a_ProductionModifierList
a_ProductionModifiers ::=
a_RegExpr ::= '/' d_Regex '/'
a_RegExpr ::= e_Terminal_t
a_TerminalKeywordModifier ::= 'ignore'
a_TerminalKeywordModifier ::= 'marking'
a_TerminalKeywordModifier ::=
a_TerminalModifier ::= 'association' '=' 'left'
a_TerminalModifier ::= 'named' b_String_t
a_TerminalModifier ::= 'precedence' '=' b_Int_t
a_TerminalModifier ::= 'repeatProb' '=' b_Float_t
a_TerminalModifier ::= 'association' '=' 'right'
a_TerminalModifier ::= 'action' c_ActionCode_c
a_TerminalModifier ::= 'lexer' 'classes' c_LexerClasses
a_TerminalModifier ::= 'dominates' c_TermPrecs
a_TerminalModifier ::= 'submits' 'to' c_TermPrecs
a_TerminalModifiers ::= a_TerminalModifier
a_TerminalModifiers ::= a_TerminalModifier ',' a_TerminalModifiers
b_AGDcl ::= 'concrete' 'production' b_Name b_ProductionSignature a_ProductionModifiers b_ProductionBody
b_AGDcl ::= a_TerminalKeywordModifier 'terminal' b_Name a_RegExpr a_TerminalModifiers ';'
b_AGDcl ::= a_TerminalKeywordModifier 'terminal' b_Name a_RegExpr ';'
b_AGDcl ::= 'annotation' b_QName f_BracketedOptTypeExprs 'occurs' 'on' b_QName f_BracketedOptTypeExprs ';'
b_AGDcl ::= 'annotation' b_QName f_BracketedOptTypeExprs '::' f_TypeExpr ';'
b_AGDcl ::= 'aspect' 'function' b_QName b_AspectFunctionSignature b_ProductionBody
b_AGDcl ::= 'aspect' 'production' b_QName b_AspectProductionSignature b_ProductionBody
b_AGDcl ::= 'inherited' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr ';'
b_AGDcl ::= 'synthesized' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr ';'
b_AGDcl ::= 'attribute' b_QName f_BracketedOptTypeExprs 'occurs' 'on' b_QName f_BracketedOptTypeExprs ';'
b_AGDcl ::= 'function' b_Name b_FunctionSignature b_ProductionBody
b_AGDcl ::= 'global' b_Name '::' f_ConstraintList '=>' f_TypeExpr '=' b_Expr ';'
b_AGDcl ::= 'global' b_Name '::' f_TypeExpr '=' b_Expr ';'
b_AGDcl ::= 'instance' f_ConstraintList '=>' b_QNameType f_TypeExpr '{' b_InstanceBody '}'
b_AGDcl ::= 'instance' b_QNameType f_TypeExpr '{' b_InstanceBody '}'
b_AGDcl ::= b_NTDeclQualifiers 'nonterminal' b_Name f_BracketedOptTypeExprs b_NonterminalModifiers ';'
b_AGDcl ::= 'abstract' 'production' b_Name b_ProductionSignature b_ProductionBody
b_AGDcl ::= 'type' b_Name f_BracketedOptTypeExprs '=' f_TypeExpr ';'
b_AGDcl ::= 'class' f_ConstraintList '=>' b_QNameType f_TypeExpr '{' b_ClassBody '}'
b_AGDcl ::= 'class' b_QNameType f_TypeExpr '{' b_ClassBody '}'
b_AGDcl ::= 'flowtype' g_FlowSpec 'on' g_NtList ';'
b_AGDcl ::= 'flowtype' b_QName '=' g_FlowSpecs ';'
b_AGDcl ::= 'destruct' 'attribute' b_Name 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'equality' 'attribute' b_Name ',' b_Name ';'
b_AGDcl ::= 'equality' 'attribute' b_Name ',' b_Name 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'ordering' 'attribute' b_Name ',' b_Name ',' b_Name ';'
b_AGDcl ::= 'ordering' 'attribute' b_Name ',' b_Name ',' b_Name 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'equality' 'attribute' b_Name 'with' b_QName 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'functor' 'attribute' b_Name 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'monoid' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr 'with' b_Expr ',' i_NameOrBOperator 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'ordering' 'attribute' b_Name ',' b_Name 'with' b_QName 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'monoid' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'threaded' 'attribute' b_Name ',' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr 'occurs' 'on' h_QNames j_OptDirectionMod ';'
b_AGDcl ::= 'unification' 'attribute' b_Name ',' b_Name 'with' b_QName 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'destruct' 'attribute' b_Name ';'
b_AGDcl ::= 'equality' 'attribute' b_Name 'with' b_QName ';'
b_AGDcl ::= 'functor' 'attribute' b_Name ';'
b_AGDcl ::= 'monoid' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr 'with' b_Expr ',' i_NameOrBOperator ';'
b_AGDcl ::= 'ordering' 'attribute' b_Name ',' b_Name 'with' b_QName ';'
b_AGDcl ::= 'propagate' b_NameList 'on' b_NameList ';'
b_AGDcl ::= 'propagate' b_NameList 'on' b_NameList 'excluding' j_ProdNameList ';'
b_AGDcl ::= 'monoid' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr ';'
b_AGDcl ::= 'threaded' 'attribute' b_Name ',' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr j_OptDirectionMod ';'
b_AGDcl ::= 'unification' 'attribute' b_Name ',' b_Name 'with' b_QName ';'
b_AGDcl ::= 'inherited' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'synthesized' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'inherited' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr 'with' i_NameOrBOperator 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'synthesized' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr 'with' i_NameOrBOperator 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'annotation' h_QNames2 'occurs' 'on' h_QNames2 ';'
b_AGDcl ::= 'annotation' h_QNames2 'occurs' 'on' h_QNameWithTL ';'
b_AGDcl ::= 'annotation' b_QName f_BracketedOptTypeExprs 'occurs' 'on' h_QNames2 ';'
b_AGDcl ::= 'attribute' h_QNames2 'occurs' 'on' h_QNames2 ';'
b_AGDcl ::= 'attribute' h_QNames2 'occurs' 'on' h_QNameWithTL ';'
b_AGDcl ::= 'attribute' b_QName f_BracketedOptTypeExprs 'occurs' 'on' h_QNames2 ';'
b_AGDcl ::= b_NTDeclQualifiers 'nonterminal' b_Name f_BracketedOptTypeExprs b_NonterminalModifiers 'with' h_QNames ';'
b_AGDcl ::= 'concrete' 'productions' b_ProductionLHS h_ProductionDclStmts
b_AGDcl ::= 'production' b_Name b_ProductionSignature b_ProductionBody
b_AGDcl ::= 'aspect' b_QNameAttrOccur 'on' k_ConvAspectLHS k_ConvenienceAspectEquationKind 'of' l_Opt_Vbar_t l_MRuleList 'end' ';'
b_AGDcl ::= 'deprecated' b_String_t ';'
b_AGDcl ::= m_DocComment_t b_AGDcl
b_AGDcl ::= '@' m_DocComment_t
b_AGDcl ::= 'implicit' 'inherited' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr ';'
b_AGDcl ::= 'restricted' 'inherited' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr ';'
b_AGDcl ::= 'unrestricted' 'inherited' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr ';'
b_AGDcl ::= 'implicit' 'synthesized' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr ';'
b_AGDcl ::= 'restricted' 'synthesized' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr ';'
b_AGDcl ::= 'unrestricted' 'synthesized' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr ';'
b_AGDcl ::= 'partial' 'strategy' 'attribute' b_Name '=' n_StrategyExpr_c 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'strategy' 'attribute' b_Name '=' n_StrategyExpr_c 'occurs' 'on' h_QNames ';'
b_AGDcl ::= 'partial' 'strategy' 'attribute' b_Name '=' n_StrategyExpr_c ';'
b_AGDcl ::= 'strategy' 'attribute' b_Name '=' n_StrategyExpr_c ';'
b_AGDcl ::= 'equalityTest' '(' b_Expr ',' b_Expr ',' f_TypeExpr ',' b_Name ')' ';'
b_AGDcl ::= 'mainTestSuite' b_IdLower_t ';'
b_AGDcl ::= 'makeTestSuite' b_IdLower_t ';'
b_AGDcl ::= 'noWarnCode' b_String_t '{' b_AGDcls '}'
b_AGDcl ::= 'warnCode' b_String_t '{' b_AGDcls '}'
b_AGDcl ::= 'wrongCode' b_String_t '{' b_AGDcls '}'
b_AGDcl ::= 'wrongFlowCode' b_String_t '{' b_AGDcls '}'
b_AGDcl ::= 'generator' b_Name '::' f_TypeExpr '{' o_GeneratorComponents '}'
b_AGDcl ::= 'inherited' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr 'with' i_NameOrBOperator ';'
b_AGDcl ::= 'synthesized' 'attribute' b_Name f_BracketedOptTypeExprs '::' f_TypeExpr 'with' i_NameOrBOperator ';'
b_AGDcl ::= 'aspect' 'parser' 'attribute' b_QName 'action' c_ActionCode_c ';'
b_AGDcl ::= 'parser' 'attribute' b_Name '::' f_TypeExpr 'action' c_ActionCode_c ';'
b_AGDcl ::= 'concrete' 'production' b_Name b_ProductionSignature a_ProductionModifiers b_ProductionBody 'action' c_ActionCode_c
b_AGDcl ::= 'disambiguate' c_TermList c_ActionCode_c
b_AGDcl ::= 'lexer' 'class' b_Name ';'
b_AGDcl ::= 'lexer' 'class' b_Name c_LexerClassModifiers ';'
b_AGDcl ::= 'copper_mda' b_Name '(' b_QName ')' '{' c_ParserComponents '}'
b_AGDcl ::= 'parser' b_Name '::' f_TypeExpr '{' c_ParserComponents '}'
b_AGDcl ::= 'aspect' 'default' 'production' p_AspectDefaultProductionSignature b_ProductionBody
b_AGDcl ::= 'type' b_Name f_BracketedOptTypeExprs 'foreign' ';'
b_AGDcl ::= 'type' b_Name f_BracketedOptTypeExprs 'foreign' '=' b_String_t ';'
b_AGDcl ::= 'function' b_Name b_FunctionSignature b_ProductionBody 'foreign' '{' q_FFIDefs '}'
b_AGDcls ::= b_AGDcl b_AGDcls
b_AGDcls ::=
b_AnnoAppExprs ::= b_AnnoExpr
b_AnnoAppExprs ::= b_AnnoAppExprs ',' b_AnnoExpr
b_AnnoExpr ::= b_QName '=' b_AppExpr
b_AppExpr ::= '_'
b_AppExpr ::= b_Expr
b_AppExprs ::= b_AppExpr
b_AppExprs ::= b_AppExprs ',' b_AppExpr
b_AspectFunctionLHS ::= f_TypeExpr
b_AspectFunctionSignature ::= b_AspectFunctionLHS '::=' b_AspectRHS
b_AspectProductionLHS ::= b_Name
b_AspectProductionLHS ::= '_'
b_AspectProductionLHS ::= b_Name '::' f_TypeExpr
b_AspectProductionSignature ::= b_AspectProductionLHS '::=' b_AspectRHS
b_AspectRHS ::= b_AspectRHSElem b_AspectRHS
b_AspectRHS ::=
b_AspectRHS ::= '$AspectRHS' '{' b_Expr '}'
b_AspectRHSElem ::= b_Name
b_AspectRHSElem ::= '_'
b_AspectRHSElem ::= b_Name '::' f_TypeExpr
b_AspectRHSElem ::= e_EasyTerminalRef
b_AspectRHSElem ::= b_Name '::' e_EasyTerminalRef
b_ClassBody ::= b_ClassBodyItem b_ClassBody
b_ClassBody ::=
b_ClassBodyItem ::= b_Name '::' f_TypeExpr ';'
b_ClassBodyItem ::= b_Name '::' f_ConstraintList '=>' f_TypeExpr ';'
b_ClassBodyItem ::= b_Name '::' f_TypeExpr '=' b_Expr ';'
b_ClassBodyItem ::= b_Name '::' f_ConstraintList '=>' f_TypeExpr '=' b_Expr ';'
b_ClassBodyItem ::= m_DocComment_t b_ClassBodyItem
b_DefLHS ::= b_QName
b_DefLHS ::= 'forward'
b_Expr ::= b_Expr '.' b_QNameAttrOccur
b_Expr ::= b_Expr '&&' b_Expr
b_Expr ::= b_Expr '(' b_AppExprs ',' b_AnnoAppExprs ')'
b_Expr ::= b_Expr '(' b_AnnoAppExprs ')'
b_Expr ::= b_Expr '(' ')'
b_Expr ::= b_Expr '(' b_AppExprs ')'
b_Expr ::= b_QName
b_Expr ::= 'forward'
b_Expr ::= 'decorate' b_Expr 'with' '{' b_ExprInhs '}'
b_Expr ::= 'decorate' b_Expr 'with' '{' '}'
b_Expr ::= '@' b_Expr
b_Expr ::= b_Expr '/' b_Expr
b_Expr ::= b_Expr '==' b_Expr
b_Expr ::= 'false'
b_Expr ::= b_Float_t
b_Expr ::= b_Expr '.' 'forward'
b_Expr ::= b_Expr '>' b_Expr
b_Expr ::= b_Expr '>=' b_Expr
b_Expr ::= 'if' b_Expr 'then' b_Expr 'else' b_Expr
b_Expr ::= b_Int_t
b_Expr ::= b_Expr '<' b_Expr
b_Expr ::= b_Expr '<=' b_Expr
b_Expr ::= b_Expr '-' b_Expr
b_Expr ::= b_Expr '%' b_Expr
b_Expr ::= b_Expr '*' b_Expr
b_Expr ::= '-' b_Expr
b_Expr ::= b_Expr '!=' b_Expr
b_Expr ::= '(' b_Expr ')'
b_Expr ::= '!' b_Expr
b_Expr ::= 'attachNote' b_Expr 'on' b_Expr 'end'
b_Expr ::= b_Expr '||' b_Expr
b_Expr ::= b_Expr '+' b_Expr
b_Expr ::= b_Expr '++' b_Expr
b_Expr ::= b_String_t
b_Expr ::= 'terminal' '(' f_TypeExpr ',' b_Expr ',' b_Expr ')'
b_Expr ::= 'terminal' '(' f_TypeExpr ',' b_Expr ')'
b_Expr ::= 'true'
b_Expr ::= 'AST' '{' r_AST_c '}'
b_Expr ::= '(' '.' b_QNameAttrOccur ')'
b_Expr ::= '$' b_Int_t
b_Expr ::= s_NameTick
b_Expr ::= s_NameTickTick
b_Expr ::= 'do' '{' t_DoBody '}'
b_Expr ::= 'mdo' '{' t_DoBody '}'
b_Expr ::= e_EasyTerminalRef
b_Expr ::= 'if' b_Expr 'then' b_Expr 'end'
b_Expr ::= 'case_any' b_Exprs 'of' l_Opt_Vbar_t l_MRuleList 'end'
b_Expr ::= 'case' b_Exprs 'of' l_Opt_Vbar_t l_MRuleList 'end'
b_Expr ::= '/' d_Regex '/'
b_Expr ::= b_Expr '=~' b_Expr
b_Expr ::= b_Expr '<+' b_Expr
b_Expr ::= 'rule' 'on' f_TypeExpr 'of' l_Opt_Vbar_t l_MRuleList 'end'
b_Expr ::= b_Expr '<*' b_Expr
b_Expr ::= 'traverse' '(' '_' '::' b_AppExpr ')'
b_Expr ::= 'traverse' '(' b_Expr '::' b_AppExpr ')'
b_Expr ::= 'traverse' '[' b_AppExprs ']'
b_Expr ::= 'traverse' '[' ']'
b_Expr ::= 'traverse' b_QName '(' b_AnnoAppExprs ')'
b_Expr ::= 'traverse' b_QName '(' ')'
b_Expr ::= 'traverse' b_QName '(' b_AppExprs ')'
b_Expr ::= 'traverse' b_QName '(' b_AppExprs ',' b_AnnoAppExprs ')'
b_Expr ::= '$Expr' '{' b_Expr '}'
b_Expr ::= 'Silver_AGDcl' '{' b_AGDcl '}'
b_Expr ::= 'Silver_Expr' '{' b_Expr '}'
b_Expr ::= 'Silver_ExprInh' '{' b_ExprInh '}'
b_Expr ::= 'Silver_Pattern' '{' l_Pattern '}'
b_Expr ::= 'Silver_ProductionStmt' '{' b_ProductionStmt '}'
b_Expr ::= 'Silver_TypeExpr' '{' f_TypeExpr '}'
b_Expr ::= 'Silver_StrategyExpr' '(' b_Expr ')' '{' n_StrategyExpr_c '}'
b_Expr ::= 'pp"""' u_TemplateString
b_Expr ::= 's"' u_SingleLineTemplateString
b_Expr ::= 'pp"' u_SingleLineTemplateString
b_Expr ::= 's"""' u_TemplateString
b_Expr ::= 'genArbTerminal' '(' f_TypeExpr ',' b_Expr ')'
b_Expr ::= 'genArbTerminal' '(' f_TypeExpr ',' '_' ')'
b_Expr ::= '(' ')'
b_Expr ::= b_Expr '.' v_IntConst
b_Expr ::= '(' v_TupleList ')'
b_Expr ::= 'disambiguationFailure'
b_Expr ::= '\' b_ProductionRHS '->' b_Expr
b_Expr ::= 'let' w_LetAssigns 'in' b_Expr 'end'
b_Expr ::= b_Expr '::' b_Expr
b_Expr ::= '[' ']'
b_Expr ::= '[' b_Exprs ']'
b_Expr ::= 'match' b_Expr 'return' f_TypeExpr 'with' x_PrimPatterns 'else' '->' b_Expr 'end'
b_ExprInh ::= b_ExprLHSExpr '=' b_Expr ';'
b_ExprInhs ::= b_ExprInh b_ExprInhs
b_ExprInhs ::= b_ExprInh
b_ExprInhs ::= '$ExprInhs' '{' b_Expr '}'
b_ExprLHSExpr ::= b_QNameAttrOccur
b_Exprs ::= b_Expr ',' b_Exprs
b_Exprs ::= b_Expr
b_ForwardInh ::= b_ForwardLHSExpr '=' b_Expr ';'
b_ForwardInhs ::= b_ForwardInh b_ForwardInhs
b_ForwardInhs ::= b_ForwardInh
b_ForwardLHSExpr ::= b_QNameAttrOccur
b_FunctionLHS ::= f_TypeExpr
b_FunctionSignature ::= f_ConstraintList '=>' b_FunctionLHS '::=' b_ProductionRHS
b_FunctionSignature ::= b_FunctionLHS '::=' b_ProductionRHS
b_GrammarDcl ::= 'grammar' b_QName ';'
b_GrammarDcl ::=
b_ImportStmt ::= 'import' b_ModuleExpr ';'
b_ImportStmts ::= b_ImportStmt b_ImportStmts
b_ImportStmts ::=
b_InstanceBody ::= b_InstanceBodyItem b_InstanceBody
b_InstanceBody ::=
b_InstanceBodyItem ::= b_QName '=' b_Expr ';'
b_InstanceBodyItem ::= m_DocComment_t b_InstanceBodyItem
b_ModuleExpr ::= b_QName
b_ModuleExpr ::= b_QName 'with' b_WithElems
b_ModuleExpr ::= b_QName 'as' b_QName
b_ModuleExpr ::= b_QName 'hiding' b_NameList
b_ModuleExpr ::= b_QName 'hiding' b_NameList 'with' b_WithElems
b_ModuleExpr ::= b_QName 'only' b_NameList
b_ModuleExpr ::= b_QName 'only' b_NameList 'with' b_WithElems
b_ModuleName ::= b_QName
b_ModuleStmt ::= 'exports' b_ModuleName ';'
b_ModuleStmt ::= 'exports' b_QName 'with' b_QName ';'
b_ModuleStmt ::= 'imports' b_ModuleExpr ';'
b_ModuleStmt ::= 'option' b_QName ';'
b_ModuleStmt ::= 'build' b_QName 'with' b_QName ';'
b_ModuleStmts ::= b_ModuleStmt b_ModuleStmts
b_ModuleStmts ::=
b_NTDeclQualifiers ::= 'closed' b_NTDeclQualifiers
b_NTDeclQualifiers ::=
b_NTDeclQualifiers ::= 'tracked' b_NTDeclQualifiers
b_Name ::= b_IdLower_t
b_Name ::= b_IdUpper_t
b_Name ::= '$Name' '{' b_Expr '}'
b_Name ::= '$name' '{' b_Expr '}'
b_Name ::= 'pluck'
b_Name ::= 'print'
b_NameList ::= b_QName ',' b_NameList
b_NameList ::= b_QName
b_NonterminalModifier ::= 'layout' '{' c_TermList '}'
b_NonterminalModifier ::= 'layout' '{' '}'
b_NonterminalModifierList ::= b_NonterminalModifier
b_NonterminalModifierList ::= b_NonterminalModifier ',' b_NonterminalModifierList
b_NonterminalModifiers ::= b_NonterminalModifierList
b_NonterminalModifiers ::=
b_ProductionBody ::= '{' b_ProductionStmts '}'
b_ProductionBody ::= ';'
b_ProductionLHS ::= b_Name '::' f_TypeExpr
b_ProductionRHS ::= b_ProductionRHSElem b_ProductionRHS
b_ProductionRHS ::=
b_ProductionRHSElem ::= b_Name '::' f_TypeExpr
b_ProductionRHSElem ::= f_TypeExpr
b_ProductionRHSElem ::= b_Name '::' e_EasyTerminalRef
b_ProductionRHSElem ::= e_EasyTerminalRef
b_ProductionSignature ::= f_ConstraintList '=>' b_ProductionLHS '::=' b_ProductionRHS
b_ProductionSignature ::= b_ProductionLHS '::=' b_ProductionRHS
b_ProductionStmt ::= 'attachNote' b_Expr ';'
b_ProductionStmt ::= b_DefLHS '.' b_QNameAttrOccur '=' b_Expr ';'
b_ProductionStmt ::= 'forwarding' 'with' '{' b_ForwardInhs '}' ';'
b_ProductionStmt ::= 'forwards' 'to' b_Expr ';'
b_ProductionStmt ::= 'forwards' 'to' b_Expr 'with' '{' b_ForwardInhs '}' ';'
b_ProductionStmt ::= 'local' 'attribute' b_Name '::' f_TypeExpr ';'
b_ProductionStmt ::= 'production' 'attribute' b_Name '::' f_TypeExpr ';'
b_ProductionStmt ::= 'return' b_Expr ';'
b_ProductionStmt ::= 'undecorates' 'to' b_Expr ';'
b_ProductionStmt ::= b_QName '=' b_Expr ';'
b_ProductionStmt ::= 'abstract' b_QName ';'
b_ProductionStmt ::= 'propagate' b_NameList ';'
b_ProductionStmt ::= 'thread' b_QName ',' b_QName 'on' j_ChildNameList ';'
b_ProductionStmt ::= 'local' b_Name '::' f_TypeExpr '=' b_Expr ';'
b_ProductionStmt ::= 'local' 'attribute' b_Name '::' f_TypeExpr '=' b_Expr ';'
b_ProductionStmt ::= 'production' b_Name '::' f_TypeExpr '=' b_Expr ';'
b_ProductionStmt ::= 'production' 'attribute' b_Name '::' f_TypeExpr '=' b_Expr ';'
b_ProductionStmt ::= 'implicit' b_DefLHS '.' b_QNameAttrOccur '=' ';'
b_ProductionStmt ::= 'implicit' b_DefLHS '.' b_QNameAttrOccur '=' b_Expr ';'
b_ProductionStmt ::= 'restricted' b_DefLHS '.' b_QNameAttrOccur '=' b_Expr ';'
b_ProductionStmt ::= 'unrestricted' b_DefLHS '.' b_QNameAttrOccur '=' b_Expr ';'
b_ProductionStmt ::= '$ProductionStmt' '{' b_Expr '}'
b_ProductionStmt ::= b_DefLHS '.' b_QNameAttrOccur '<-' b_Expr ';'
b_ProductionStmt ::= b_DefLHS '.' b_QNameAttrOccur ':=' b_Expr ';'
b_ProductionStmt ::= 'production' 'attribute' b_Name '::' f_TypeExpr 'with' i_NameOrBOperator ';'
b_ProductionStmt ::= b_QName '<-' b_Expr ';'
b_ProductionStmt ::= b_QName ':=' b_Expr ';'
b_ProductionStmt ::= '{' b_ProductionStmts '}'
b_ProductionStmt ::= 'if' '(' b_Expr ')' b_ProductionStmt 'else' b_ProductionStmt
b_ProductionStmt ::= 'if' '(' b_Expr ')' b_ProductionStmt
b_ProductionStmt ::= 'insert' 'semantic' 'token' b_QNameType 'at' b_Expr ';'
b_ProductionStmt ::= 'pluck' b_Expr ';'
b_ProductionStmt ::= 'print' b_Expr ';'
b_ProductionStmt ::= 'pushToken' '(' b_QName ',' b_Expr ')' ';'
b_ProductionStmts ::=
b_ProductionStmts ::= b_ProductionStmts b_ProductionStmt
b_QName ::= b_Name ':' b_QName
b_QName ::= b_Name
b_QName ::= '$QName' '{' b_Expr '}'
b_QName ::= '$qName' '{' b_Expr '}'
b_QNameAttrOccur ::= b_QName
b_QNameAttrOccur ::= '$QNameAttrOccur' '{' b_Expr '}'
b_QNameType ::= b_Name ':' b_QNameType
b_QNameType ::= b_IdUpper_t
b_Root ::= b_GrammarDcl b_ModuleStmts b_ImportStmts b_AGDcls
b_Root ::= b_GrammarDcl b_ModuleStmts b_ImportStmts 'construct' b_Name 'as' b_QName 'translator' 'using' c_ParserComponents
b_WithElem ::= b_QName 'as' b_QName
b_WithElems ::= b_WithElem ',' b_WithElems
b_WithElems ::= b_WithElem
g_FlowSpec ::= g_FlowSpecId '{' g_FlowSpecInhs '}'
g_FlowSpecId ::= 'decorate'
g_FlowSpecId ::= 'forward'
g_FlowSpecId ::= b_QNameAttrOccur
g_FlowSpecInh ::= 'decorate'
g_FlowSpecInh ::= 'forward'
g_FlowSpecInh ::= b_QNameAttrOccur
g_FlowSpecInhs ::= g_FlowSpecInh ',' g_FlowSpecInhs
g_FlowSpecInhs ::=
g_FlowSpecInhs ::= g_FlowSpecInh
g_FlowSpecs ::= g_FlowSpec
g_FlowSpecs ::= g_FlowSpecs ',' g_FlowSpec
g_NtList ::= g_NtName ',' g_NtList
g_NtList ::=
g_NtList ::= g_NtName
g_NtName ::= b_QName
f_BracketedOptTypeExprs ::=
f_BracketedOptTypeExprs ::= f_BracketedTypeExprs
f_BracketedTypeExprs ::= '<' f_TypeExprs '>'
f_Constraint ::= 'annotation' b_QName f_BracketedOptTypeExprs 'occurs' 'on' f_TypeExpr
f_Constraint ::= b_QNameType f_TypeExpr
f_Constraint ::= 'attribute' b_QName f_BracketedOptTypeExprs 'occurs' 'on' f_TypeExpr
f_Constraint ::= f_TypeExpr 'subset' f_TypeExpr
f_Constraint ::= 'attribute' b_QName f_BracketedOptTypeExprs f_TypeExpr 'occurs' 'on' f_TypeExpr
f_Constraint ::= 'typeError' b_String_t
f_Constraint ::= 'runtimeTypeable' f_TypeExpr
f_ConstraintList ::= f_Constraint ',' f_ConstraintList
f_ConstraintList ::= f_Constraint
f_KindExpr ::= f_KindExpr '->' f_KindExpr
f_KindExpr ::= 'InhSet'
f_KindExpr ::= '(' f_KindExpr ')'
f_KindExpr ::= '*'
f_Signature ::= f_SignatureLHS '::=' f_TypeExprs
f_Signature ::= f_SignatureLHS '::='
f_SignatureLHS ::= '_'
f_SignatureLHS ::= f_TypeExpr
f_TypeExpr ::= f_TypeExpr f_BracketedTypeExprs
f_TypeExpr ::= 'Boolean'
f_TypeExpr ::= 'Float'
f_TypeExpr ::= '(' f_Signature ')'
f_TypeExpr ::= '{' g_FlowSpecInhs '}'
f_TypeExpr ::= 'Integer'
f_TypeExpr ::= '(' b_IdLower_t '::' f_KindExpr ')'
f_TypeExpr ::= b_QNameType
f_TypeExpr ::= 'Decorated' f_TypeExpr
f_TypeExpr ::= 'Decorated' f_TypeExpr 'with' f_TypeExpr
f_TypeExpr ::= 'String'
f_TypeExpr ::= 'TerminalId'
f_TypeExpr ::= b_IdLower_t
f_TypeExpr ::= 'Decorated!' f_TypeExpr
f_TypeExpr ::= 'Decorated!' f_TypeExpr 'with' f_TypeExpr
f_TypeExpr ::= '$TypeExpr' '{' b_Expr '}'
f_TypeExpr ::= '(' ')'
f_TypeExpr ::= '(' v_ListOfTypeExprs ')'
f_TypeExpr ::= '[' ']'
f_TypeExpr ::= '[' f_TypeExpr ']'
f_TypeExprs ::= f_TypeExpr f_TypeExprs
f_TypeExprs ::= '_' f_TypeExprs
f_TypeExprs ::= f_TypeExpr
f_TypeExprs ::= '_'
j_ChildName ::= 'forward'
j_ChildName ::= b_Name
j_ChildNameList ::= j_ChildName ',' j_ChildNameList
j_ChildNameList ::= j_ChildName
j_Direction ::= 'left' 'to' 'right'
j_Direction ::= 'right' 'to' 'left'
j_OptDirectionMod ::= 'direction' '=' j_Direction
j_OptDirectionMod ::=
j_ProdNameList ::= b_QName ',' j_ProdNameList
j_ProdNameList ::= b_QName
h_OptionalAction ::= 'action' c_ActionCode_c
h_OptionalAction ::=
h_OptionalName ::= '(' b_Name ')'
h_OptionalName ::=
h_ProductionDclStmt ::= h_OptionalName '|' b_ProductionRHS a_ProductionModifiers b_ProductionBody h_OptionalAction
h_ProductionDclStmts ::= h_ProductionDclStmt h_ProductionDclStmts
h_ProductionDclStmts ::= h_ProductionDclStmt
h_QNameWithTL ::= b_QName f_BracketedOptTypeExprs
h_QNames ::= h_QNameWithTL ',' h_QNames
h_QNames ::= h_QNameWithTL
h_QNames2 ::= h_QNameWithTL ',' h_QNames2
h_QNames2 ::= h_QNameWithTL ',' h_QNameWithTL
k_ConvAspectLHS ::= b_Name '::' f_TypeExpr
k_ConvAspectLHS ::= f_TypeExpr
k_ConvenienceAspectEquationKind ::= 'using' '='
k_ConvenienceAspectEquationKind ::= 'using' ':='
k_ConvenienceAspectEquationKind ::= 'using' '<-'
k_ConvenienceAspectEquationKind ::=
s_NameTick ::= s_IdTick_t
s_NameTickTick ::= s_IdTickTick_t
t_DoBinding ::= b_Name '::' f_TypeExpr '<-' b_Expr ';'
t_DoBinding ::= b_Expr ';'
t_DoBinding ::= 'let' b_Name '::' f_TypeExpr '=' b_Expr ';'
t_DoBody ::= t_DoBinding t_DoBody
t_DoBody ::= b_Expr ';'
t_DoBody ::= 'return' b_Expr ';'
e_EasyTerminalRef ::= e_Terminal_t
l_MRuleList ::= l_MatchRule '|' l_MRuleList
l_MRuleList ::= l_MatchRule
l_MatchRule ::= l_PatternList 'when' b_Expr 'matches' l_Pattern '->' b_Expr
l_MatchRule ::= l_PatternList 'when' b_Expr '->' b_Expr
l_MatchRule ::= l_PatternList '->' b_Expr
l_NamedPattern ::= b_QName '=' l_Pattern
l_NamedPatternList ::= l_NamedPattern ',' l_NamedPatternList
l_NamedPatternList ::= l_NamedPattern
l_Pattern ::= 'AST' '{' r_AST_c '}'
l_Pattern ::= l_Pattern '::' l_Pattern
l_Pattern ::= 'false'
l_Pattern ::= b_Float_t
l_Pattern ::= b_Int_t
l_Pattern ::= '[' l_PatternList ']'
l_Pattern ::= '(' l_Pattern ')'
l_Pattern ::= b_QName '(' l_PatternList ')'
l_Pattern ::= b_QName '(' l_PatternList ',' l_NamedPatternList ')'
l_Pattern ::= b_QName '(' l_NamedPatternList ')'
l_Pattern ::= b_String_t
l_Pattern ::= 'true'
l_Pattern ::= b_Name
l_Pattern ::= '_'
l_Pattern ::= '$Pattern' '{' b_Expr '}'
l_Pattern ::= '(' ')'
l_Pattern ::= '(' v_TuplePatternList ')'
l_PatternList ::=
l_PatternList ::= l_Pattern
l_PatternList ::= l_PatternList ',' l_Pattern
n_StrategyExpr_c ::= '$StrategyExpr' '{' b_Expr '}'
n_StrategyExpr_c ::= 'printTerm'
n_StrategyExpr_c ::= 'try' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'repeat' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'reduce' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'bottomUp' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'topDown' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'downUp' '(' n_StrategyExpr_c ',' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'allBottomUp' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'allTopDown' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'allDownUp' '(' n_StrategyExpr_c ',' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'someBottomUp' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'someTopDown' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'someDownUp' '(' n_StrategyExpr_c ',' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'onceBottomUp' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'onceTopDown' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'onceDownUp' '(' n_StrategyExpr_c ',' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'innermost' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'outermost' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'id'
n_StrategyExpr_c ::= 'fail'
n_StrategyExpr_c ::= n_StrategyExpr_c '<*' n_StrategyExpr_c
n_StrategyExpr_c ::= n_StrategyExpr_c '<+' n_StrategyExpr_c
n_StrategyExpr_c ::= 'all' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'some' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= 'one' '(' n_StrategyExpr_c ')'
n_StrategyExpr_c ::= n_StrategyQName '(' n_StrategyExprs_c ')'
n_StrategyExpr_c ::= 'rec' b_Name '->' n_StrategyExpr_c
n_StrategyExpr_c ::= 'rule' 'on' b_Name '::' f_TypeExpr 'of' l_Opt_Vbar_t l_MRuleList 'end'
n_StrategyExpr_c ::= 'rule' 'on' f_TypeExpr 'of' l_Opt_Vbar_t l_MRuleList 'end'
n_StrategyExpr_c ::= n_StrategyQName
n_StrategyExpr_c ::= '(' n_StrategyExpr_c ')'
n_StrategyExprs_c ::= n_StrategyExpr_c ',' n_StrategyExprs_c
n_StrategyExprs_c ::= n_StrategyExpr_c
n_StrategyExprs_c ::=
n_StrategyQName ::= '$strategyQName' '{' b_Expr '}'
n_StrategyQName ::= n_StrategyName_t ':' n_StrategyQName
n_StrategyQName ::= n_StrategyName_t
u_NonWater ::= '${' b_Expr '}'
u_SingleLineTemplateString ::= u_SingleLineTemplateStringBody '"'
u_SingleLineTemplateString ::= '"'
u_SingleLineTemplateStringBody ::= u_SingleLineTemplateStringBodyItem u_SingleLineTemplateStringBody
u_SingleLineTemplateStringBody ::= u_SingleLineTemplateStringBodyItem
u_SingleLineTemplateStringBody ::= u_SingleLineWater
u_SingleLineTemplateStringBodyItem ::= u_NonWater
u_SingleLineTemplateStringBodyItem ::= u_SingleLineWater u_NonWater
u_SingleLineWater ::= u_SingleLineWater u_SingleLineWaterItem
u_SingleLineWater ::= u_SingleLineWaterItem
u_SingleLineWaterItem ::= u_SingleLineQuoteWater
u_SingleLineWaterItem ::= '\'
u_SingleLineWaterItem ::= '$$'
u_SingleLineWaterItem ::= '\n'
u_TemplateString ::= u_TemplateStringBody '"""'
u_TemplateString ::= '"""'
u_TemplateStringBody ::= u_TemplateStringBodyItem u_TemplateStringBody
u_TemplateStringBody ::= u_TemplateStringBodyItem
u_TemplateStringBody ::= u_Water
u_TemplateStringBodyItem ::= u_NonWater
u_TemplateStringBodyItem ::= u_Water u_NonWater
u_Water ::= u_Water u_WaterItem
u_Water ::= u_WaterItem
u_WaterItem ::= u_QuoteWater
u_WaterItem ::= '\'
u_WaterItem ::= '$$'
u_WaterItem ::= u_LiteralNewline
u_WaterItem ::= '"'
u_WaterItem ::= ' '
o_GeneratorComponent ::= b_ModuleName ';'
o_GeneratorComponents ::= o_GeneratorComponent o_GeneratorComponents
o_GeneratorComponents ::=
v_ListOfTypeExprs ::= f_TypeExpr ',' f_TypeExpr
v_ListOfTypeExprs ::= f_TypeExpr ',' v_ListOfTypeExprs
v_TupleList ::= b_Expr ',' b_Expr
v_TupleList ::= b_Expr ',' v_TupleList
v_TuplePatternList ::= l_Pattern ',' v_TuplePatternList
v_TuplePatternList ::= l_Pattern ',' l_Pattern
i_NameOrBOperator ::= '+'
i_NameOrBOperator ::= '&&'
i_NameOrBOperator ::= '||'
i_NameOrBOperator ::= b_Expr
i_NameOrBOperator ::= '*'
i_NameOrBOperator ::= '++'
c_ActionCode_c ::= '{' b_ProductionStmts '}'
c_LexerClassList ::= b_QName ',' c_LexerClassList
c_LexerClassList ::= b_QName
c_LexerClassModifier ::= 'disambiguate' c_ActionCode_c
c_LexerClassModifier ::= 'dominates' c_TermPrecs
c_LexerClassModifier ::= 'extends' c_LexerClasses
c_LexerClassModifier ::= 'prefix' 'separator' b_String_t
c_LexerClassModifier ::= 'submits' 'to' c_TermPrecs
c_LexerClassModifiers ::= c_LexerClassModifier
c_LexerClassModifiers ::= c_LexerClassModifier ',' c_LexerClassModifiers
c_LexerClasses ::= '{' c_LexerClassList '}'
c_LexerClasses ::= b_QName
c_ParserComponent ::= 'prefer' b_QName 'over' c_TermList ';'
c_ParserComponent ::= b_ModuleName c_ParserComponentModifiers ';'
c_ParserComponent ::= 'layout' '{' c_TermList '}' ';'
c_ParserComponent ::= 'layout' '{' '}' ';'
c_ParserComponentModifier ::= 'prefix' c_TerminalPrefixItems 'with' c_TerminalPrefix
c_ParserComponentModifiers ::= c_ParserComponentModifier c_ParserComponentModifiers
c_ParserComponentModifiers ::=
c_ParserComponents ::= c_ParserComponent c_ParserComponents
c_ParserComponents ::=
c_TermList ::= b_QName ',' c_TermList
c_TermList ::= b_QName
c_TermPrecList ::= b_QName ',' c_TermPrecList
c_TermPrecList ::= b_QName
c_TermPrecs ::= '{' c_TermPrecList '}'
c_TermPrecs ::= b_QName
c_TerminalPrefix ::= b_QName
c_TerminalPrefix ::= a_RegExpr a_TerminalModifiers
c_TerminalPrefix ::= a_RegExpr
c_TerminalPrefix ::= b_String_t
c_TerminalPrefixItem ::= e_EasyTerminalRef
c_TerminalPrefixItem ::= b_QName
c_TerminalPrefixItems ::=
c_TerminalPrefixItems ::= c_TerminalPrefixItem ',' c_TerminalPrefixItems
c_TerminalPrefixItems ::= c_TerminalPrefixItem
p_AspectDefaultProductionSignature ::= b_Name '::' f_TypeExpr '::='
q_FFIDef ::= b_String_t ':' 'return' b_String_t ';'
q_FFIDefs ::= q_FFIDef q_FFIDefs
q_FFIDefs ::= q_FFIDef
w_AssignExpr ::= b_Name '::' f_TypeExpr '=' b_Expr
w_LetAssigns ::= w_AssignExpr
w_LetAssigns ::= w_AssignExpr ',' w_LetAssigns
x_PrimPattern ::= b_QName '(' x_VarBinders ')' '->' b_Expr
x_PrimPatterns ::= x_PrimPattern '|' x_PrimPatterns
x_PrimPatterns ::= x_PrimPattern
x_VarBinder ::= '_'
x_VarBinder ::= b_Name
x_VarBinders ::= x_VarBinder ',' x_VarBinders
x_VarBinders ::=
x_VarBinders ::= x_VarBinder
r_AST_c ::= '$' '{' b_Expr '}'
r_AST_c ::= r_QName_t
r_AST_c ::= '_'
r_AST_c ::= 'true'
r_AST_c ::= 'false'
r_AST_c ::= r_QName_t '(' r_ASTs_c ',' r_NamedASTs_c ')'
r_AST_c ::= r_QName_t '(' r_ASTs_c ')'
r_AST_c ::= r_QName_t '(' r_NamedASTs_c ')'
r_AST_c ::= r_QName_t '(' ')'
r_AST_c ::= 'terminal' '(' r_QName_t ',' r_String_t ',' r_AST_c ')'
r_AST_c ::= '[' r_ASTs_c ']'
r_AST_c ::= '[' ']'
r_AST_c ::= r_String_t
r_AST_c ::= r_Int_t
r_AST_c ::= r_Float_t
r_ASTs_c ::= r_ASTs_c ',' r_AST_c
r_ASTs_c ::= r_AST_c
r_NamedAST_c ::= r_QName_t '=' r_AST_c
r_NamedASTs_c ::= r_NamedASTs_c ',' r_NamedAST_c
r_NamedASTs_c ::= r_NamedAST_c
d_Regex ::= d_RegexSeq '|' d_Regex
d_Regex ::=
d_Regex ::= d_RegexSeq
d_RegexChar ::= d_RegexChar_t
d_RegexChar ::= d_EscapedChar_t
d_RegexCharSet ::= d_RegexCharSetItem
d_RegexCharSet ::= d_RegexCharSet d_RegexCharSetItem
d_RegexCharSetItem ::= d_RegexChar
d_RegexCharSetItem ::= d_RegexChar '-' d_RegexChar
d_RegexItem ::= d_RegexChar
d_RegexItem ::= '(' d_Regex ')'
d_RegexItem ::= '[' d_RegexCharSet ']'
d_RegexItem ::= '[' '^' d_RegexCharSet ']'
d_RegexItem ::= '.'
d_RegexRepetition ::= d_RegexItem '*'
d_RegexRepetition ::= d_RegexItem
d_RegexRepetition ::= d_RegexItem '?'
d_RegexRepetition ::= d_RegexItem '+'
d_RegexSeq ::= d_RegexRepetition
d_RegexSeq ::= d_RegexSeq d_RegexRepetition
I just update the silver EBNF shown above replacing long prefixes with one letter prefix for better readability .
And here is an EBNF manually converted from https://github.com/melt-umn/copper/blob/develop/doc/specs/CupSkinGrammar.xml .
Copy and paste the EBNF shown bellow on https://www.bottlecaps.de/rr/ui on the tab Edit Grammar the click on the tab View Diagram to see/download a navigable railroad diagram.
grammar_start_at ::= GrammarFile
| notes_for_railroad
notes_for_railroad ::=
CFDecl ::= precedence_kwd assoctypes_kwd CommaOrSymSeq semi_kwd
CFDecl ::= name_tok goesto_kwd RHSSeq semi_kwd
CFDecl ::= start_kwd with_kwd name_tok semi_kwd
CFDecl ::= non_kwd terminal_kwd TypeName CommaSymSeq semi_kwd
CFDecl ::= non_kwd terminal_kwd CommaSymSeq semi_kwd
CFDecls ::= CFDecl CFDecls
CFDecls ::= CFDecl
CodeBlockOpt ::=
CodeBlockOpt ::= code_block_open_kwd code_t code_block_close_kwd
CommaOrSymSeq ::= name_tok SymSeq
CommaOrSymSeq ::= name_tok comma_kwd CommaSymSeq
CommaSymSeq ::= name_tok comma_kwd CommaSymSeq
CommaSymSeq ::= name_tok
CommaSymSeqOpt ::=
CommaSymSeqOpt ::= CommaSymSeq
DeclBlock ::= attribute_decl_kwd TypeName name_tok semi_kwd
DeclBlock ::= aux_block_open_kwd code_t aux_block_close_kwd
DeclBlock ::= cf_block_open_kwd CFDecls cf_block_close_kwd
DeclBlock ::= init_block_open_kwd code_t init_block_close_kwd
DeclBlock ::= lex_block_open_kwd LexDecls lex_block_close_kwd
DeclBlocks ::= DeclBlock DeclBlocks
DeclBlocks ::= DeclBlock
GrammarFile ::= code_t barrier_kwd ParserDecl DeclBlocks
IgnoreOpt ::= ignore_kwd
IgnoreOpt ::=
LabeledSymSeq ::=
LabeledSymSeq ::= name_tok colon name_tok LabeledSymSeq
LabeledSymSeq ::= name_tok LabeledSymSeq
LexDecl ::= disambiguate_kwd name_tok colon_kwd lparen CommaSymSeq rparen code_block_open_kwd code_t code_block_close_kwd semi_kwd
LexDecl ::= disambiguate_kwd name_tok colon_kwd lparen CommaSymSeq rparen goesto_kwd name_tok semi_kwd
LexDecl ::= class_kwd CommaSymSeq semi_kwd
LexDecl ::= IgnoreOpt terminal_kwd name_tok SuperRegexRoot PrecListsOpt CodeBlockOpt TerminalFlags semi_kwd
LexDecl ::= IgnoreOpt terminal_kwd TypeName name_tok goesto_kwd RegexRoot PrecListsOpt CodeBlockOpt TerminalFlags semi_kwd
LexDecls ::= LexDecl LexDecls
LexDecls ::= LexDecl
ParserDecl ::= parser_decl_kwd name_tok
PrecList ::= gt_kwd lparen CommaSymSeqOpt rparen
PrecList ::= in_kwd lparen CommaSymSeqOpt rparen
PrecList ::= lt_kwd lparen CommaSymSeqOpt rparen
PrecLists ::= PrecList comma_kwd PrecLists
PrecLists ::= PrecList
PrecListsOpt ::=
PrecListsOpt ::= PrecLists
QualifiedName ::= name_tok wildcard QualifiedName
QualifiedName ::= name_tok
RHS ::= LabeledSymSeq CodeBlockOpt RHSFlags
RHSFlags ::= layout_decl_kwd lparen CommaSymSeqOpt rparen RHSFlags
RHSFlags ::= prec_decl_kwd name_tok RHSFlags
RHSFlags ::=
RHSSeq ::= RHS bar RHSSeq
RHSSeq ::= RHS
RegexRoot ::= slash_kwd Regex_R slash_kwd
RegexRoot ::= slash_kwd slash_kwd
Regex_CHAR ::= character
Regex_CHAR ::= escaped
Regex_DR ::= Regex_UR Regex_RR
Regex_DR ::= Regex_UR plus Regex_RR
Regex_DR ::= Regex_UR question Regex_RR
Regex_DR ::= Regex_UR star Regex_RR
Regex_G ::= Regex_UG Regex_RG
Regex_R ::= Regex_DR
Regex_R ::= Regex_DR bar Regex_R
Regex_RG ::= Regex_G
Regex_RG ::=
Regex_RR ::= Regex_DR
Regex_RR ::=
Regex_UG ::= Regex_CHAR
Regex_UG ::= Regex_CHAR dash Regex_CHAR
Regex_UR ::= Regex_CHAR
Regex_UR ::= lbrack Regex_G rbrack
Regex_UR ::= lbrack not Regex_G rbrack
Regex_UR ::= lparen Regex_R rparen
Regex_UR ::= lbrack colon termname colon rbrack
Regex_UR ::= wildcard
SuperRegexRoot ::= goesto_kwd RegexRoot
SymSeq ::=
SymSeq ::= name_tok SymSeq
TerminalFlags ::= prefix_decl_kwd name_tok TerminalFlags
TerminalFlags ::=
TypeName ::= QualifiedName
TypeName ::= QualifiedName lt_kwd TypeNameSeq gt_kwd
TypeNameSeq ::= TypeName comma_kwd TypeNameSeq
TypeNameSeq ::= TypeName
barrier_kwd ::= '%%'
goesto_kwd ::= '::='
comma_kwd ::= ','
semi_kwd ::= ';'
slash_kwd ::= '/'
lt_kwd ::= '<'
gt_kwd ::= '>'
colon_kwd ::= ':'
attribute_decl_kwd ::= '%attr'
layout_decl_kwd ::= '%layout'
parser_decl_kwd ::= '%parser'
prec_decl_kwd ::= '%prec'
prefix_decl_kwd ::= '%prefix'
aux_block_open_kwd ::= '%aux{'
aux_block_close_kwd ::= '%aux}'
init_block_open_kwd ::= '%init{'
init_block_close_kwd ::= '%init}'
lex_block_open_kwd ::= '%lex{'
lex_block_close_kwd ::= '%lex}'
cf_block_open_kwd ::= '%cf{'
cf_block_close_kwd ::= '%cf}'
code_block_open_kwd ::= '{:'
code_block_close_kwd ::= ':}'
non_kwd ::= 'non'
ignore_kwd ::= 'ignore'
terminal_kwd ::= 'terminal'
class_kwd ::= 'class'
precedence_kwd ::= 'precedence'
disambiguate_kwd ::= 'disambiguate'
start_kwd ::= 'start'
with_kwd ::= 'with'
in_kwd ::= 'in'
assoctypes_kwd ::= 'left' | 'right' | 'nonassoc'
name_tok ::= [A-Za-z][0-9A-Za-z]*
prec_number ::= '0' | [1-9][0-9]*
plus ::= '+'
star ::= '*'
question ::= '?'
bar ::= '|'
dash ::= '-'
colon ::= ':'
not ::= '^'
lbrack ::= '['
rbrack ::= ']'
lparen ::= '('
rparen ::= ')'
lbrace ::= '{'
rbrace ::= '}'
wildcard ::= '.'
character ::= ''
termname ::= ''
escaped ::= '\'
code_t ::= '%:'
ws ::= '///***/\t-\n\t-\n'
ws_no_line ::= '/***/\t-\n\t-\n'
Here is the ableC-prolog extension EBNF.
Copy and paste the EBNF shown bellow on https://www.bottlecaps.de/rr/ui on the tab Edit Grammar the click on the tab View Diagram to see/download a navigable railroad diagram.
grammar_start_at ::= a_Root
| notes_for_railroad
notes_for_railroad ::=
| 'a_ prefix for edu:umn:cs:melt:ableC:concretesyntax:'
| 'b_ prefix for edu:umn:cs:melt:ableC:concretesyntax:gcc_exts:'
| 'c_ prefix for edu:umn:cs:melt:ableC:concretesyntax:c11:'
| 'd_ prefix for edu:umn:cs:melt:exts:ableC:algebraicDataTypes:datatype:concretesyntax:'
| 'e_ prefix for edu:umn:cs:melt:exts:ableC:prolog:core:concretesyntax:'
| 'f_ prefix for edu:umn:cs:melt:exts:ableC:templateAlgebraicDataTypes:datatype:concretesyntax:'
| 'g_ prefix for edu:umn:cs:melt:exts:ableC:templating:concretesyntax:templateParameters:'
| 'h_ prefix for edu:umn:cs:melt:exts:ableC:templating:concretesyntax:templateFunctionDecl:'
| 'i_ prefix for edu:umn:cs:melt:exts:ableC:templating:concretesyntax:templateStructDecl:'
| 'j_ prefix for edu:umn:cs:melt:exts:ableC:string:concretesyntax:'
| 'k_ prefix for edu:umn:cs:melt:exts:ableC:unification:concretesyntax:unification:'
| 'l_ prefix for edu:umn:cs:melt:exts:ableC:algebraicDataTypes:patternmatching:concretesyntax:'
| 'm_ prefix for edu:umn:cs:melt:exts:ableC:prolog:list:concretesyntax:'
| 'n_ prefix for edu:umn:cs:melt:exts:ableC:templating:concretesyntax:instantiationExpr:'
| 'o_ prefix for edu:umn:cs:melt:exts:ableC:templating:concretesyntax:templateArguments:'
| 'p_ prefix for edu:umn:cs:melt:exts:ableC:vector:concretesyntax:'
| 'q_ prefix for edu:umn:cs:melt:exts:ableC:closure:concretesyntax:typeExpr:'
| 'r_ prefix for edu:umn:cs:melt:exts:ableC:templating:concretesyntax:instantiationTypeExpr:'
| 's_ prefix for edu:umn:cs:melt:exts:ableC:templating:concretesyntax:maybeAttributes:'
a_AbstractDeclarator_c ::= a_Pointer_c a_DirectAbstractDeclarator_c
a_AbstractDeclarator_c ::= a_DirectAbstractDeclarator_c
a_AbstractDeclarator_c ::= a_Pointer_c
a_AddMulLeftOp_c ::= 'AddMulLeft_Never!!!nevernever1234567890'
a_AddMulLeft_c ::= a_AddMulRight_c
a_AddMulLeft_c ::= a_AddMulLeft_c a_AddMulLeftOp_c a_AddMulRight_c
a_AddMulNoneOp_c ::= 'AddMulNone_Never!!!nevernever1234567890'
a_AddMulNone_c ::= a_MultiplicativeExpr_c
a_AddMulNone_c ::= a_MultiplicativeExpr_c a_AddMulNoneOp_c a_MultiplicativeExpr_c
a_AddMulRightOp_c ::= 'AddMulRight_Never!!!nevernever1234567890'
a_AddMulRight_c ::= a_AddMulNone_c
a_AddMulRight_c ::= a_AddMulNone_c a_AddMulRightOp_c a_AddMulRight_c
a_AdditiveExpr_c ::= a_AddMulLeft_c
a_AdditiveExpr_c ::= a_AdditiveExpr_c a_AdditiveOp_c a_AddMulLeft_c
a_AdditiveOp_c ::= '+'
a_AdditiveOp_c ::= '-'
a_AndExpr_c ::= a_EqualityExpr_c
a_AndExpr_c ::= a_AndExpr_c a_AndOp_c a_EqualityExpr_c
a_AndOp_c ::= '&'
a_ArgumentExprList_c ::= a_AssignExpr_c
a_ArgumentExprList_c ::= a_ArgumentExprList_c ',' a_AssignExpr_c
a_ArrayDesignator_c ::= '[' a_ConstantExpr_c '...' a_ConstantExpr_c ']'
a_ArrayDesignator_c ::= '[' a_ConstantExpr_c ']'
a_AssignExpr_c ::= a_ConditionalExpr_c
a_AssignExpr_c ::= a_UnaryExpr_c a_AssignOp_c a_AssignExpr_c
a_AssignOp_c ::= '='
a_AssignOp_c ::= '*='
a_AssignOp_c ::= '/='
a_AssignOp_c ::= '%='
a_AssignOp_c ::= '+='
a_AssignOp_c ::= '-='
a_AssignOp_c ::= '<<='
a_AssignOp_c ::= '>>='
a_AssignOp_c ::= '&='
a_AssignOp_c ::= '^='
a_AssignOp_c ::= '|='
a_BlockItemList_c ::= a_BlockItem_c
a_BlockItemList_c ::= a_BlockItemList_c a_BlockItem_c
a_BlockItem_c ::= a_Stmt_c
a_BlockItem_c ::= '__extension__' a_Declaration_c
a_BlockItem_c ::= b_NestedFunctionDefinition_c
a_BlockItem_c ::= a_Declaration_c
a_CastExpr_c ::= a_UnaryExpr_c
a_CastExpr_c ::= '(' a_TypeName_c ')' a_CastExpr_c
a_CompoundStatement_c ::= '{' b_LabelDeclarations_c a_BlockItemList_c '}'
a_CompoundStatement_c ::= '{' a_BlockItemList_c '}'
a_CompoundStatement_c ::= '{' '}'
a_ConditionalExpr_c ::= a_LogicalOrExpr_c '?' ':' a_ConditionalExpr_c
a_ConditionalExpr_c ::= a_LogicalOrExpr_c '?' a_Expr_c ':' a_ConditionalExpr_c
a_ConditionalExpr_c ::= a_LogicalOrExpr_c
a_ConstantExpr_c ::= a_ConditionalExpr_c
a_Constant_c ::= b_IDecConstant_t
a_Constant_c ::= b_IDecConstantU_t
a_Constant_c ::= b_IDecConstantL_t
a_Constant_c ::= b_IDecConstantUL_t
a_Constant_c ::= b_IDecConstantLL_t
a_Constant_c ::= b_IDecConstantULL_t
a_Constant_c ::= b_IFloatConstant_t
a_Constant_c ::= b_IFloatConstantFloat_t
a_Constant_c ::= b_IFloatConstantLongDouble_t
a_Constant_c ::= b_IHexFloatConstant_t
a_Constant_c ::= b_IHexFloatConstantFloat_t
a_Constant_c ::= b_IHexFloatConstantLongDouble_t
a_Constant_c ::= a_DecConstant_t
a_Constant_c ::= a_DecConstantU_t
a_Constant_c ::= a_DecConstantL_t
a_Constant_c ::= a_DecConstantUL_t
a_Constant_c ::= a_DecConstantLL_t
a_Constant_c ::= a_DecConstantULL_t
a_Constant_c ::= a_OctConstant_t
a_Constant_c ::= a_OctConstantU_t
a_Constant_c ::= a_OctConstantL_t
a_Constant_c ::= a_OctConstantUL_t
a_Constant_c ::= a_OctConstantLL_t
a_Constant_c ::= a_OctConstantULL_t
a_Constant_c ::= a_OctConstantError_t
a_Constant_c ::= a_HexConstant_t
a_Constant_c ::= a_HexConstantU_t
a_Constant_c ::= a_HexConstantL_t
a_Constant_c ::= a_HexConstantUL_t
a_Constant_c ::= a_HexConstantLL_t
a_Constant_c ::= a_HexConstantULL_t
a_Constant_c ::= a_FloatConstant_t
a_Constant_c ::= a_FloatConstantFloat_t
a_Constant_c ::= a_FloatConstantLongDouble_t
a_Constant_c ::= a_HexFloatConstant_t
a_Constant_c ::= a_HexFloatConstantFloat_t
a_Constant_c ::= a_HexFloatConstantLongDouble_t
a_Constant_c ::= a_CharConstant_t
a_Constant_c ::= a_CharConstantL_t
a_Constant_c ::= a_CharConstantU_t
a_Constant_c ::= a_CharConstantUBig_t
a_DeclarationList_c ::=
a_DeclarationList_c ::= a_Declaration_c a_DeclarationList_c
a_DeclarationSpecifiers_c ::= c_AlignmentSpecifier_c a_DeclarationSpecifiers_c
a_DeclarationSpecifiers_c ::= c_AlignmentSpecifier_c
a_DeclarationSpecifiers_c ::= b_Attributes_c a_DeclarationSpecifiers_c
a_DeclarationSpecifiers_c ::= b_Attributes_c
a_DeclarationSpecifiers_c ::= a_TypeSpecifierItem_c
a_DeclarationSpecifiers_c ::= a_TypeQualifier_c a_DeclarationSpecifiers_c
a_DeclarationSpecifiers_c ::= a_TypeQualifier_c
a_DeclarationSpecifiers_c ::= a_FunctionSpecifier_c a_DeclarationSpecifiers_c
a_DeclarationSpecifiers_c ::= a_FunctionSpecifier_c
a_DeclarationSpecifiers_c ::= a_StorageClassSpecifier_c a_DeclarationSpecifiers_c
a_DeclarationSpecifiers_c ::= a_StorageClassSpecifier_c
a_DeclarationSpecifiers_c ::= a_TypeSpecifierItem_c a_DeclarationSpecifiers_c
a_Declaration_c ::= c_StaticAssertDeclaration_c
a_Declaration_c ::= a_DeclarationSpecifiers_c a_InitDeclaratorList_c ';'
a_Declaration_c ::= a_DeclarationSpecifiers_c ';'
a_Declaration_c ::= 'datatype' b_Attributes_c a_Identifier_c '{' d_ConstructorList_c '}'
a_Declaration_c ::= 'datatype' a_Identifier_c '{' d_ConstructorList_c '}'
a_Declaration_c ::= 'prolog' '{' e_LogicStmts_c '}'
a_Declaration_c ::= 'template' f_TemplateInitialDatatypeDeclaration_c '{' d_ConstructorList_c '}' ';'
a_Declaration_c ::= 'template' f_TemplateInitialDatatypeDeclaration_c ';'
a_Declaration_c ::= 'template' '<' g_TemplateParameters_c '>' h_TemplateInitialFunctionDefinition_c a_CompoundStatement_c
a_Declaration_c ::= 'template' '<' g_TemplateParameters_c '>' a_DeclarationSpecifiers_c a_InitDeclaratorList_c ';'
a_Declaration_c ::= 'template' i_TemplateInitialStructDeclaration_c '{' a_StructDeclarationList_c '}' ';'
a_Declaration_c ::= 'template' i_TemplateInitialStructDeclaration_c ';'
a_Declaration_c ::= 'using' a_Identifier_c '<' g_TemplateParameters_c '>' '=' a_TypeName_c ';'
a_Declaration_c ::= 'var_reference' 'datatype' a_Identifier_t 'with' a_Identifier_c ';'
a_Declaration_c ::= 'var_reference' 'datatype' a_Identifier_t 'with' a_Identifier_t 'prefix' a_Identifier_c ';'
a_Declaration_c ::= 'template' 'var_reference' 'datatype' a_Identifier_t 'with' a_Identifier_c ';'
a_Declaration_c ::= 'template' 'var_reference' 'datatype' a_Identifier_t 'with' a_Identifier_t 'prefix' a_Identifier_c ';'
a_Declarator_c ::= a_Pointer_c a_DirectDeclarator_c
a_Declarator_c ::= a_DirectDeclarator_c
a_Designation_c ::= a_ArrayDesignator_c
a_Designation_c ::= a_Identifier_c ':'
a_Designation_c ::= a_DesignatorList_c '='
a_DesignatorList_c ::= a_DesignatorList_c a_Designator_c
a_DesignatorList_c ::= a_Designator_c
a_Designator_c ::= a_ArrayDesignator_c
a_Designator_c ::= '.' a_Identifier_c
a_DirectAbstractDeclarator_c ::= '(' a_AbstractDeclarator_c ')'
a_DirectAbstractDeclarator_c ::= a_PostfixModifier_c
a_DirectAbstractDeclarator_c ::= a_DirectAbstractDeclarator_c a_PostfixModifier_c
a_DirectDeclarator_c ::= '(' a_Declarator_c ')'
a_DirectDeclarator_c ::= a_DirectDeclarator_c '(' a_IdentifierList_c ')' a_OptTypeQualifierList_c
a_DirectDeclarator_c ::= a_Identifier_c
a_DirectDeclarator_c ::= a_DirectDeclarator_c a_PostfixModifier_c
a_EnumSpecifier_c ::= 'enum' '{' a_EnumeratorList_c '}'
a_EnumSpecifier_c ::= 'enum' a_Identifier_c '{' a_EnumeratorList_c '}'
a_EnumSpecifier_c ::= 'enum' '{' a_EnumeratorList_c ',' '}'
a_EnumSpecifier_c ::= 'enum' a_Identifier_c '{' a_EnumeratorList_c ',' '}'
a_EnumSpecifier_c ::= 'enum' a_Identifier_c
a_EnumeratorList_c ::= a_Enumerator_c
a_EnumeratorList_c ::= a_EnumeratorList_c ',' a_Enumerator_c
a_Enumerator_c ::= a_Identifier_c
a_Enumerator_c ::= a_Identifier_c '=' a_ConstantExpr_c
a_EqualityExpr_c ::= a_RelationalExpr_c
a_EqualityExpr_c ::= a_EqualityExpr_c a_EqualityOp_c a_RelationalExpr_c
a_EqualityOp_c ::= '=='
a_EqualityOp_c ::= '!='
a_ExclusiveOrExpr_c ::= a_AndExpr_c
a_ExclusiveOrExpr_c ::= a_ExclusiveOrExpr_c a_ExclusiveOrOp_c a_AndExpr_c
a_ExclusiveOrOp_c ::= '^'
a_ExprStmt_c ::= ';'
a_ExprStmt_c ::= a_Expr_c ';'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c ')'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c '{'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c '}'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c '>'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c ';'
a_Expr_c ::= 'TypeNames_NEVER_t!!!nevernever1234567890' a_TypeNames_c a_AllowSEUDecl_t
a_Expr_c ::= 'Names_NEVER_t!!!nevernever1234567890' a_Names_c ')'
a_Expr_c ::= 'Names_NEVER_t!!!nevernever1234567890' a_Names_c '}'
a_Expr_c ::= 'Names_NEVER_t!!!nevernever1234567890' a_Names_c '>'
a_Expr_c ::= 'Names_NEVER_t!!!nevernever1234567890' a_Names_c ';'
a_Expr_c ::= 'Declarator_NEVER_t!!!nevernever1234567890' a_Declarator_c '>'
a_Expr_c ::= 'DirectDeclarator_NEVER_t!!!nevernever1234567890' a_DirectDeclarator_c '>'
a_Expr_c ::= a_AssignExpr_c ',' a_Expr_c
a_Expr_c ::= 'Expr_NEVER_t!!!nevernever1234567890' a_Expr_c a_AllowSEUDecl_t
a_Expr_c ::= a_AssignExpr_c
a_Expr_c ::= 'TypeIdName_Never!!!nevernever1234567890' a_TypeIdName_c '<'
a_ExternalDeclaration_c ::= '__extension__' a_ExternalDeclaration_c
a_ExternalDeclaration_c ::= b_SimpleAsmStatement_c
a_ExternalDeclaration_c ::= '#' 'pragma' b_Pack_t
a_ExternalDeclaration_c ::= '#' 'pragma' 'redefine_extname' a_Identifier_c a_Identifier_c
a_ExternalDeclaration_c ::= '#' 'pragma' b_GCC_t
a_ExternalDeclaration_c ::= a_Declaration_c
a_ExternalDeclaration_c ::= a_FunctionDefinition_c
a_ExternalDeclaration_c ::= 'show' '(' a_TypeName_c ')' 'with' a_Identifier_t
a_ExternalDeclaration_c ::= 'show' a_TypeName_t 'with' a_Identifier_t
a_ExternalDeclaration_c ::= 'show' j_TagKeyword_c a_TypeName_t 'with' a_Identifier_t
a_ExternalDeclaration_c ::= 'unify' '(' a_TypeName_c ')' 'with' a_Identifier_t
a_ExternalDeclaration_c ::= 'unify' a_TypeName_t 'with' a_Identifier_t
a_ExternalDeclaration_c ::= 'unify' j_TagKeyword_c a_TypeName_t 'with' a_Identifier_t
a_FunctionDefinition_c ::= a_InitialFunctionDefinition_c a_CompoundStatement_c
a_FunctionSpecifier_c ::= '_Noreturn'
a_FunctionSpecifier_c ::= '__inline__'
a_FunctionSpecifier_c ::= '__inline'
a_FunctionSpecifier_c ::= 'inline'
a_IdentifierList_c ::= a_Identifier_c
a_IdentifierList_c ::= a_IdentifierList_c ',' a_Identifier_c
a_Identifier_c ::= a_Identifier_t
a_InclusiveOrExpr_c ::= a_ExclusiveOrExpr_c
a_InclusiveOrExpr_c ::= a_InclusiveOrExpr_c a_InclusiveOrOp_c a_ExclusiveOrExpr_c
a_InclusiveOrOp_c ::= '|'
a_InitDeclaratorList_c ::= a_InitDeclarator_c
a_InitDeclaratorList_c ::= a_InitDeclaratorList_c ',' a_InitDeclarator_c
a_InitDeclarator_c ::= a_Declarator_c b_Attributes_c
a_InitDeclarator_c ::= a_Declarator_c b_Attributes_c '=' a_Initializer_c
a_InitDeclarator_c ::= a_Declarator_c b_SimpleAsmStatement_c
a_InitDeclarator_c ::= a_Declarator_c b_SimpleAsmStatement_c b_Attributes_c
a_InitDeclarator_c ::= a_Declarator_c
a_InitDeclarator_c ::= a_Declarator_c '=' a_Initializer_c
a_InitialFunctionDefinition_c ::= a_DeclarationSpecifiers_c a_Declarator_c a_InitiallyUnqualifiedDeclarationList_c
a_InitialFunctionDefinition_c ::= a_Declarator_c a_InitiallyUnqualifiedDeclarationList_c
a_InitializerList_c ::= a_Initializer_c
a_InitializerList_c ::= a_Designation_c a_Initializer_c
a_InitializerList_c ::= a_InitializerList_c ',' a_Initializer_c
a_InitializerList_c ::= a_InitializerList_c ',' a_Designation_c a_Initializer_c
a_Initializer_c ::= '{' '}'
a_Initializer_c ::= a_AssignExpr_c
a_Initializer_c ::= '{' a_InitializerList_c '}'
a_Initializer_c ::= '{' a_InitializerList_c ',' '}'
a_InitiallyUnqualifiedDeclarationList_c ::=
a_InitiallyUnqualifiedDeclarationList_c ::= a_InitiallyUnqualifiedDeclaration_c a_DeclarationList_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_StorageClassSpecifier_c a_DeclarationSpecifiers_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_StorageClassSpecifier_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_TypeSpecifierItem_c a_DeclarationSpecifiers_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_TypeSpecifierItem_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_FunctionSpecifier_c a_DeclarationSpecifiers_c
a_InitiallyUnqualifiedDeclarationSpecifiers_c ::= a_FunctionSpecifier_c
a_InitiallyUnqualifiedDeclaration_c ::= a_InitiallyUnqualifiedDeclarationSpecifiers_c a_InitDeclaratorList_c ';'
a_InitiallyUnqualifiedDeclaration_c ::= a_InitiallyUnqualifiedDeclarationSpecifiers_c ';'
a_IterationStmt_c ::= 'for' '(' a_ExprStmt_c a_ExprStmt_c ')' a_Stmt_c
a_IterationStmt_c ::= 'for' '(' a_Declaration_c a_ExprStmt_c a_Expr_c ')' a_Stmt_c
a_IterationStmt_c ::= 'for' '(' a_Declaration_c a_ExprStmt_c ')' a_Stmt_c
a_IterationStmt_c ::= 'while' '(' a_Expr_c ')' a_Stmt_c
a_IterationStmt_c ::= 'do' a_Stmt_c 'while' '(' a_Expr_c ')' ';'
a_IterationStmt_c ::= 'for' '(' a_ExprStmt_c a_ExprStmt_c a_Expr_c ')' a_Stmt_c
a_JumpStmt_c ::= 'goto' '*' a_Expr_c ';'
a_JumpStmt_c ::= b_Asm_Starter_c 'goto' '(' a_StringConstant_c ':' ':' ':' ':' a_IdentifierList_c ')'
a_JumpStmt_c ::= 'goto' a_Identifier_c ';'
a_JumpStmt_c ::= 'continue' ';'
a_JumpStmt_c ::= 'break' ';'
a_JumpStmt_c ::= 'return' ';'
a_JumpStmt_c ::= 'return' a_Expr_c ';'
a_LabeledStmt_c ::= a_Identifier_c ':' b_Attributes_c a_Stmt_c
a_LabeledStmt_c ::= 'case' a_ConstantExpr_c '...' a_ConstantExpr_c ':' a_Stmt_c
a_LabeledStmt_c ::= a_Identifier_c ':' a_Stmt_c
a_LabeledStmt_c ::= 'case' a_ConstantExpr_c ':' a_Stmt_c
a_LabeledStmt_c ::= 'default' ':' a_Stmt_c
a_LogicalAndExpr_c ::= a_InclusiveOrExpr_c
a_LogicalAndExpr_c ::= a_LogicalAndExpr_c a_LogicalAndOp_c a_InclusiveOrExpr_c
a_LogicalAndOp_c ::= '&&'
a_LogicalOrExpr_c ::= a_LogicalAndExpr_c
a_LogicalOrExpr_c ::= a_LogicalOrExpr_c a_LogicalOrOp_c a_LogicalAndExpr_c
a_LogicalOrOp_c ::= '||'
a_MultiplicativeExpr_c ::= a_CastExpr_c
a_MultiplicativeExpr_c ::= a_MultiplicativeExpr_c a_MultiplicativeOp_c a_CastExpr_c
a_MultiplicativeOp_c ::= '*'
a_MultiplicativeOp_c ::= '/'
a_MultiplicativeOp_c ::= '%'
a_Names_c ::= a_Identifier_c ',' a_Names_c
a_Names_c ::= a_Identifier_c
a_Names_c ::=
a_OptTypeQualifierList_c ::=
a_OptTypeQualifierList_c ::= a_TypeQualifierList_c
a_ParameterDeclaration_c ::= a_DeclarationSpecifiers_c a_Declarator_c b_Attributes_c
a_ParameterDeclaration_c ::= a_DeclarationSpecifiers_c a_AbstractDeclarator_c b_Attributes_c
a_ParameterDeclaration_c ::= a_DeclarationSpecifiers_c a_Declarator_c
a_ParameterDeclaration_c ::= a_DeclarationSpecifiers_c a_AbstractDeclarator_c
a_ParameterDeclaration_c ::= a_DeclarationSpecifiers_c
a_ParameterList_c ::= a_ParameterDeclaration_c
a_ParameterList_c ::= a_ParameterList_c ',' a_ParameterDeclaration_c
a_ParameterTypeList_c ::= a_ParameterList_c
a_ParameterTypeList_c ::= a_ParameterList_c ',' '...'
a_Pointer_c ::= '*'
a_Pointer_c ::= '*' a_TypeQualifierList_c
a_Pointer_c ::= '*' a_Pointer_c
a_Pointer_c ::= '*' a_TypeQualifierList_c a_Pointer_c
a_Pointer_c ::= '?' a_Pointer_c
a_Pointer_c ::= '?' k_InitiallyUnattributedTypeQualifierList_c a_Pointer_c
a_Pointer_c ::= '?'
a_Pointer_c ::= '?' k_InitiallyUnattributedTypeQualifierList_c
a_PostfixExpr_c ::= '(' a_TypeName_c ')' '{' '}'
a_PostfixExpr_c ::= a_PrimaryExpr_c
a_PostfixExpr_c ::= a_PostfixExpr_c '[' a_Expr_c ']'
a_PostfixExpr_c ::= a_PostfixExpr_c '(' a_ArgumentExprList_c ')'
a_PostfixExpr_c ::= a_PostfixExpr_c '(' a_ArgumentExprList_c ',' ')'
a_PostfixExpr_c ::= a_PostfixExpr_c '(' ')'
a_PostfixExpr_c ::= a_PostfixExpr_c a_PostfixOp_c
a_PostfixExpr_c ::= '(' a_TypeName_c ')' '{' a_InitializerList_c '}'
a_PostfixExpr_c ::= '(' a_TypeName_c ')' '{' a_InitializerList_c ',' '}'
a_PostfixModifier_c ::= '[' ']'
a_PostfixModifier_c ::= '[' a_TypeQualifierList_c a_AssignExpr_c ']'
a_PostfixModifier_c ::= '[' a_AssignExpr_c ']'
a_PostfixModifier_c ::= '[' a_TypeQualifierList_c ']'
a_PostfixModifier_c ::= '[' 'static' a_TypeQualifierList_c a_AssignExpr_c ']'
a_PostfixModifier_c ::= '[' 'static' a_AssignExpr_c ']'
a_PostfixModifier_c ::= '[' a_TypeQualifierList_c 'static' a_AssignExpr_c ']'
a_PostfixModifier_c ::= '[' a_TypeQualifierList_c '*' ']'
a_PostfixModifier_c ::= '[' '*' ']'
a_PostfixModifier_c ::= '(' a_ParameterTypeList_c ')' a_OptTypeQualifierList_c
a_PostfixModifier_c ::= '(' ')' a_OptTypeQualifierList_c
a_PostfixOp_c ::= '.' a_Identifier_c
a_PostfixOp_c ::= '->' a_Identifier_c
a_PostfixOp_c ::= '++'
a_PostfixOp_c ::= '--'
a_PrimaryExpr_c ::= c_GenericSelection_c
a_PrimaryExpr_c ::= '(' '{' a_BlockItemList_c '}' ')'
a_PrimaryExpr_c ::= '__builtin_va_arg' '(' a_AssignExpr_c ',' a_TypeName_c ')'
a_PrimaryExpr_c ::= '__builtin_offsetof' '(' a_TypeName_c ',' b_MemberDesignator_c ')'
a_PrimaryExpr_c ::= '__builtin_types_compatible_p' '(' a_TypeName_c ',' a_TypeName_c ')'
a_PrimaryExpr_c ::= '__builtin_constant_p' '(' a_AssignExpr_c ')'
a_PrimaryExpr_c ::= '__builtin_va_arg_pack' '(' ')'
a_PrimaryExpr_c ::= '__builtin_expect' '(' a_AssignExpr_c ',' a_ConstantExpr_c ')'
a_PrimaryExpr_c ::= '__builtin_va_start' '(' a_Identifier_c ',' a_Identifier_c ')'
a_PrimaryExpr_c ::= '__builtin_va_end' '(' a_Identifier_c ')'
a_PrimaryExpr_c ::= a_Identifier_c
a_PrimaryExpr_c ::= a_Constant_c
a_PrimaryExpr_c ::= a_StringConstant_c
a_PrimaryExpr_c ::= '(' a_Expr_c ')'
a_PrimaryExpr_c ::= 'match' '(' a_ArgumentExprList_c ')' '(' l_ExprClauses_c ')'
a_PrimaryExpr_c ::= 'new' a_SpecifierQualifierList_c '(' ')'
a_PrimaryExpr_c ::= 'new' a_SpecifierQualifierList_c '(' a_ArgumentExprList_c ')'
a_PrimaryExpr_c ::= 'query' e_Body_c '{' a_BlockItemList_c '}'
a_PrimaryExpr_c ::= 'query' e_Body_c '{' '}'
a_PrimaryExpr_c ::= 'term' '<' a_TypeName_c '>' '(' a_AssignExpr_c ')' '{' e_LogicExpr_c '}'
a_PrimaryExpr_c ::= 'term' '(' a_AssignExpr_c ')' '{' e_LogicExpr_c '}'
a_PrimaryExpr_c ::= 'newlist' '<' a_TypeName_c '>' '(' a_Expr_c ')' '[' m_ListInitializerList_c ']'
a_PrimaryExpr_c ::= 'newlist' '(' a_Expr_c ')' '[' m_ListInitializerList_c ']'
a_PrimaryExpr_c ::= n_TemplateIdentifier_t '<' o_TemplateArguments_c '>' '(' a_ArgumentExprList_c ')'
a_PrimaryExpr_c ::= n_TemplateIdentifier_t '<' o_TemplateArguments_c '>' '(' ')'
a_PrimaryExpr_c ::= n_TemplateIdentifier_t '(' a_ArgumentExprList_c ')'
a_PrimaryExpr_c ::= n_TemplateIdentifier_t '(' ')'
a_PrimaryExpr_c ::= 'inst' a_Identifier_c '<' o_TemplateArguments_c '>' '(' a_ArgumentExprList_c ')'
a_PrimaryExpr_c ::= 'inst' a_Identifier_c '<' o_TemplateArguments_c '>' '(' ')'
a_PrimaryExpr_c ::= 'freevar' '<' a_TypeName_c '>' '(' a_AssignExpr_c ')'
a_PrimaryExpr_c ::= 'boundvar' '(' a_AssignExpr_c ',' a_AssignExpr_c ')'
a_PrimaryExpr_c ::= 'vec' '<' a_TypeName_c '>' '[' p_VectorConstructorExprList_c ']'
a_PrimaryExpr_c ::= 'vec' '<' a_TypeName_c '>' '[' ']'
a_PrimaryExpr_c ::= 'vec' '(' a_ArgumentExprList_c ')' '[' p_VectorConstructorExprList_c ']'
a_PrimaryExpr_c ::= 'vec' '(' a_ArgumentExprList_c ')' '[' ']'
a_PrimaryExpr_c ::= 'vec' '[' p_VectorConstructorExprList_c ']'
a_PrimaryExpr_c ::= 'vec' '[' ']'
a_PrimaryExpr_c ::= 'vec' '<' a_TypeName_c '>' '(' a_ArgumentExprList_c ')' '[' p_VectorConstructorExprList_c ']'
a_PrimaryExpr_c ::= 'vec' '<' a_TypeName_c '>' '(' a_ArgumentExprList_c ')' '[' ']'
a_RelationalExpr_c ::= a_ShiftExpr_c
a_RelationalExpr_c ::= a_RelationalExpr_c a_RelationalOp_c a_ShiftExpr_c
a_RelationalOp_c ::= '<'
a_RelationalOp_c ::= '>'
a_RelationalOp_c ::= '<='
a_RelationalOp_c ::= '>='
a_Root ::= a_TranslationUnit_c
a_Root ::=
a_SelectionStmt_c ::= 'if' '(' a_Expr_c ')' a_Stmt_c
a_SelectionStmt_c ::= 'if' '(' a_Expr_c ')' a_Stmt_c 'else' a_Stmt_c
a_SelectionStmt_c ::= 'switch' '(' a_Expr_c ')' a_Stmt_c
a_SelectionStmt_c ::= 'match' '(' a_ArgumentExprList_c ')' '{' l_StmtClauses_c '}'
a_ShiftExpr_c ::= a_AdditiveExpr_c
a_ShiftExpr_c ::= a_ShiftExpr_c a_ShiftOp_c a_AdditiveExpr_c
a_ShiftOp_c ::= '<<'
a_ShiftOp_c ::= '>>'
a_SpecifierQualifierList_c ::= b_Attributes_c a_SpecifierQualifierList_c
a_SpecifierQualifierList_c ::= b_Attributes_c
a_SpecifierQualifierList_c ::= a_TypeSpecifierItem_c a_SpecifierQualifierList_c
a_SpecifierQualifierList_c ::= a_TypeSpecifierItem_c
a_SpecifierQualifierList_c ::= a_TypeQualifier_c a_SpecifierQualifierList_c
a_SpecifierQualifierList_c ::= a_TypeQualifier_c
a_Stmt_c ::= a_ExprStmt_c
a_Stmt_c ::= '#' 'pragma' b_OMP_t
a_Stmt_c ::= '#' 'pragma' b_OMPFor_t
a_Stmt_c ::= b_Asm_Statement_c
a_Stmt_c ::= a_LabeledStmt_c
a_Stmt_c ::= a_CompoundStatement_c
a_Stmt_c ::= a_SelectionStmt_c
a_Stmt_c ::= a_IterationStmt_c
a_Stmt_c ::= a_JumpStmt_c
a_Stmt_c ::= 'delete' a_Expr_c ';'
a_StorageClassSpecifier_c ::= '_Thread_local'
a_StorageClassSpecifier_c ::= '__thread'
a_StorageClassSpecifier_c ::= 'typedef'
a_StorageClassSpecifier_c ::= 'extern'
a_StorageClassSpecifier_c ::= 'static'
a_StorageClassSpecifier_c ::= 'auto'
a_StorageClassSpecifier_c ::= 'register'
a_StringConstant_c ::= a_StringLiteral_c
a_StringConstant_c ::= a_StringLiteral_c a_StringConstant_c
a_StringLiteral_c ::= a_StringConstant_t
a_StringLiteral_c ::= a_StringConstantU8_t
a_StringLiteral_c ::= a_StringConstantL_t
a_StringLiteral_c ::= a_StringConstantU_t
a_StringLiteral_c ::= a_StringConstantUBig_t
a_StructDeclarationList_c ::= a_StructDeclaration_c
a_StructDeclarationList_c ::= a_StructDeclarationList_c a_StructDeclaration_c
a_StructDeclaration_c ::= a_StructOrUnion_c a_Identifier_c '{' a_StructDeclarationList_c '}' ';'
a_StructDeclaration_c ::= a_StructOrUnion_c '{' a_StructDeclarationList_c '}' ';'
a_StructDeclaration_c ::= a_StructOrUnion_c b_Attributes_c a_Identifier_c '{' a_StructDeclarationList_c '}' ';'
a_StructDeclaration_c ::= a_StructOrUnion_c b_Attributes_c '{' a_StructDeclarationList_c '}' ';'
a_StructDeclaration_c ::= a_StructOrUnion_c a_Identifier_c '{' a_StructDeclarationList_c '}' b_Attributes_c ';'
a_StructDeclaration_c ::= a_StructOrUnion_c '{' a_StructDeclarationList_c '}' b_Attributes_c ';'
a_StructDeclaration_c ::= '__extension__' a_StructDeclaration_c
a_StructDeclaration_c ::= a_SpecifierQualifierList_c a_StructDeclaratorList_c ';'
a_StructDeclaratorList_c ::= a_StructDeclarator_c
a_StructDeclaratorList_c ::= a_StructDeclaratorList_c ',' a_StructDeclarator_c
a_StructDeclarator_c ::= a_Declarator_c b_Attributes_c
a_StructDeclarator_c ::= a_Declarator_c ':' a_ConstantExpr_c b_Attributes_c
a_StructDeclarator_c ::= ':' a_ConstantExpr_c b_Attributes_c
a_StructDeclarator_c ::= a_Declarator_c
a_StructDeclarator_c ::= a_Declarator_c ':' a_ConstantExpr_c
a_StructDeclarator_c ::= ':' a_ConstantExpr_c
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c a_Identifier_c '{' '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c '{' '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c b_Attributes_c a_Identifier_c '{' a_StructDeclarationList_c '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c a_Identifier_c '{' a_StructDeclarationList_c '}' b_Attributes_c
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c b_Attributes_c a_Identifier_c '{' '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c a_Identifier_c '{' '}' b_Attributes_c
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c b_Attributes_c '{' '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c '{' '}' b_Attributes_c
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c a_Identifier_c '{' a_StructDeclarationList_c '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c '{' a_StructDeclarationList_c '}'
a_StructOrUnionSpecifier_c ::= a_StructOrUnion_c a_Identifier_c
a_StructOrUnionSpecifier_c ::= 'datatype' a_Identifier_c
a_StructOrUnion_c ::= 'struct'
a_StructOrUnion_c ::= 'union'
a_TranslationUnit_c ::= a_TranslationUnit_c ';'
a_TranslationUnit_c ::= a_ExternalDeclaration_c
a_TranslationUnit_c ::= a_TranslationUnit_c a_ExternalDeclaration_c
a_TypeIdName_c ::= a_TypeName_t
a_TypeName_c ::= a_SpecifierQualifierList_c
a_TypeName_c ::= a_SpecifierQualifierList_c a_AbstractDeclarator_c
a_TypeNames_c ::= a_TypeName_c ',' a_TypeNames_c
a_TypeNames_c ::= a_TypeName_c
a_TypeNames_c ::=
a_TypeQualifierList_c ::= b_Attributes_c a_TypeQualifierList_c
a_TypeQualifierList_c ::= b_Attributes_c
a_TypeQualifierList_c ::= a_TypeQualifier_c
a_TypeQualifierList_c ::= a_TypeQualifier_c a_TypeQualifierList_c
a_TypeQualifier_c ::= '_Atomic'
a_TypeQualifier_c ::= '__const'
a_TypeQualifier_c ::= '__restrict'
a_TypeQualifier_c ::= '__restrict__'
a_TypeQualifier_c ::= '__volatile__'
a_TypeQualifier_c ::= '__volatile'
a_TypeQualifier_c ::= 'const'
a_TypeQualifier_c ::= 'volatile'
a_TypeQualifier_c ::= 'restrict'
a_TypeSpecifierItem_c ::= a_TypeSpecifier_c
a_TypeSpecifier_c ::= c_C11_Atomic_Specifier_t a_TypeName_c ')'
a_TypeSpecifier_c ::= '__builtin_va_list'
a_TypeSpecifier_c ::= '__signed__'
a_TypeSpecifier_c ::= b_TypeofStarter_c '(' a_TypeName_c ')'
a_TypeSpecifier_c ::= b_TypeofStarter_c '(' a_Expr_c ')'
a_TypeSpecifier_c ::= '_Float128'
a_TypeSpecifier_c ::= '__int128'
a_TypeSpecifier_c ::= 'void'
a_TypeSpecifier_c ::= 'char'
a_TypeSpecifier_c ::= 'short'
a_TypeSpecifier_c ::= 'int'
a_TypeSpecifier_c ::= 'long'
a_TypeSpecifier_c ::= 'float'
a_TypeSpecifier_c ::= 'double'
a_TypeSpecifier_c ::= 'signed'
a_TypeSpecifier_c ::= 'unsigned'
a_TypeSpecifier_c ::= '_Bool'
a_TypeSpecifier_c ::= '_Imaginary'
a_TypeSpecifier_c ::= '_Complex'
a_TypeSpecifier_c ::= a_StructOrUnionSpecifier_c
a_TypeSpecifier_c ::= a_EnumSpecifier_c
a_TypeSpecifier_c ::= a_TypeIdName_c
a_TypeSpecifier_c ::= 'closure' '<' q_ClosureTypeExpr_c '>'
a_TypeSpecifier_c ::= 'list' '<' a_TypeName_c '>'
a_TypeSpecifier_c ::= 'string'
a_TypeSpecifier_c ::= r_TemplateTypeName_t '<' o_TemplateArguments_c '>'
a_TypeSpecifier_c ::= 'inst' a_TypeIdName_c '<' o_TemplateArguments_c '>'
a_TypeSpecifier_c ::= 'vector' '<' a_TypeName_c '>'
a_UnaryExpr_c ::= '_Alignof' '(' a_TypeName_c ')'
a_UnaryExpr_c ::= '__alignof' a_UnaryExpr_c
a_UnaryExpr_c ::= '__alignof' '(' a_TypeName_c ')'
a_UnaryExpr_c ::= '__alignof__' a_UnaryExpr_c
a_UnaryExpr_c ::= '__alignof__' '(' a_TypeName_c ')'
a_UnaryExpr_c ::= '&&' a_Identifier_c
a_UnaryExpr_c ::= a_PostfixExpr_c
a_UnaryExpr_c ::= '++' a_UnaryExpr_c
a_UnaryExpr_c ::= '--' a_UnaryExpr_c
a_UnaryExpr_c ::= a_UnaryOp_c a_CastExpr_c
a_UnaryExpr_c ::= 'sizeof' a_UnaryExpr_c
a_UnaryExpr_c ::= 'sizeof' '(' a_TypeName_c ')'
a_UnaryExpr_c ::= n_TemplateIdentifier_t '<' o_TemplateArguments_c '>'
a_UnaryExpr_c ::= 'inst' a_Identifier_c '<' o_TemplateArguments_c '>'
a_UnaryOp_c ::= '__extension__'
a_UnaryOp_c ::= '__real'
a_UnaryOp_c ::= '__real__'
a_UnaryOp_c ::= '__imag'
a_UnaryOp_c ::= '__imag__'
a_UnaryOp_c ::= '&'
a_UnaryOp_c ::= '*'
a_UnaryOp_c ::= '+'
a_UnaryOp_c ::= '-'
a_UnaryOp_c ::= '~'
a_UnaryOp_c ::= '!'
c_AlignmentSpecifier_c ::= '_Alignas' '(' a_TypeName_c ')'
c_AlignmentSpecifier_c ::= '_Alignas' '(' a_ConstantExpr_c ')'
c_GenericAssocList_c ::= c_GenericAssoc_c
c_GenericAssocList_c ::= c_GenericAssocList_c ',' c_GenericAssoc_c
c_GenericAssoc_c ::= a_TypeName_c ':' a_AssignExpr_c
c_GenericAssoc_c ::= 'default' ':' a_AssignExpr_c
c_GenericSelection_c ::= '_Generic' '(' a_AssignExpr_c ',' c_GenericAssocList_c ')'
c_StaticAssertDeclaration_c ::= '_Static_assert' '(' a_ConstantExpr_c ',' a_StringConstant_c ')' ';'
b_AsmArgument_c ::= a_StringConstant_c ':' ':' ':' b_AsmClobbers_c
b_AsmArgument_c ::= a_StringConstant_c
b_AsmArgument_c ::= a_StringConstant_c ':' b_AsmOperands_c
b_AsmArgument_c ::= a_StringConstant_c ':'
b_AsmArgument_c ::= a_StringConstant_c ':' b_AsmOperands_c ':' b_AsmOperands_c
b_AsmArgument_c ::= a_StringConstant_c ':' ':' b_AsmOperands_c
b_AsmArgument_c ::= a_StringConstant_c ':' b_AsmOperands_c ':'
b_AsmArgument_c ::= a_StringConstant_c ':' ':'
b_AsmArgument_c ::= a_StringConstant_c ':' b_AsmOperands_c ':' b_AsmOperands_c ':' b_AsmClobbers_c
b_AsmArgument_c ::= a_StringConstant_c ':' ':' b_AsmOperands_c ':' b_AsmClobbers_c
b_AsmArgument_c ::= a_StringConstant_c ':' b_AsmOperands_c ':' ':' b_AsmClobbers_c
b_AsmClobbers_c ::= a_StringConstant_t
b_AsmClobbers_c ::= b_AsmClobbers_c ',' a_StringConstant_t
b_AsmOperand_c ::= a_StringConstant_t '(' a_Expr_c ')'
b_AsmOperand_c ::= '[' a_Identifier_c ']' a_StringConstant_t '(' a_Expr_c ')'
b_AsmOperands_c ::= b_AsmOperand_c
b_AsmOperands_c ::= b_AsmOperands_c ',' b_AsmOperand_c
b_Asm_Starter_c ::= 'asm'
b_Asm_Starter_c ::= '__asm__'
b_Asm_Starter_c ::= '__asm'
b_Asm_Statement_c ::= b_Asm_Starter_c a_TypeQualifier_c '(' b_AsmArgument_c ')' ';'
b_Asm_Statement_c ::= b_Asm_Starter_c '(' b_AsmArgument_c ')' ';'
b_AttribName_c ::= b_AttributeNameUnfetterdByKeywords_t
b_Attrib_c ::=
b_Attrib_c ::= b_AttribName_c
b_Attrib_c ::= b_AttribName_c '(' a_ArgumentExprList_c ')'
b_AttributeList_c ::= b_Attrib_c
b_AttributeList_c ::= b_AttributeList_c ',' b_Attrib_c
b_Attribute_c ::= '__attribute__' '(' '(' b_AttributeList_c ')' ')'
b_Attribute_c ::= '__attribute' '(' '(' b_AttributeList_c ')' ')'
b_Attributes_c ::= b_Attribute_c
b_Attributes_c ::= b_Attribute_c b_Attributes_c
b_InitialNestedFunctionDefinition_c ::= a_DeclarationSpecifiers_c a_Declarator_c
b_LabelDeclaration_c ::= '__label__' a_IdentifierList_c ';'
b_LabelDeclarations_c ::= b_LabelDeclaration_c
b_LabelDeclarations_c ::= b_LabelDeclarations_c b_LabelDeclaration_c
b_MemberDesignator_c ::= b_MemberDesignator_c '->' a_Identifier_c
b_MemberDesignator_c ::= b_MemberDesignator_c '[' a_ConstantExpr_c ']'
b_MemberDesignator_c ::= a_Identifier_c
b_MemberDesignator_c ::= b_MemberDesignator_c '.' a_Identifier_c
b_NestedFunctionDefinition_c ::= b_InitialNestedFunctionDefinition_c a_CompoundStatement_c
b_SimpleAsmStatement_c ::= b_Asm_Starter_c '(' a_StringConstant_c ')'
b_TypeofStarter_c ::= 'typeof'
b_TypeofStarter_c ::= '__typeof__'
b_TypeofStarter_c ::= '__typeof'
d_ConstructorList_c ::= d_Constructor_c d_ConstructorList_c
d_ConstructorList_c ::=
d_Constructor_c ::= a_Identifier_c '(' a_ParameterTypeList_c ')' ';'
d_Constructor_c ::= a_Identifier_c '(' ')' ';'
l_BasicPattern_c ::= a_Identifier_c '(' l_PatternList_c ')'
l_BasicPattern_c ::= a_Identifier_c '(' ')'
l_BasicPattern_c ::= '{' l_StructPatternList_c '}'
l_BasicPattern_c ::= '{' '}'
l_BasicPattern_c ::= a_Identifier_t
l_BasicPattern_c ::= 'when' '(' a_Expr_c ')'
l_BasicPattern_c ::= '(' l_Pattern_c ')'
l_BasicPattern_c ::= '[' m_ListPatternList_c ']'
l_BasicPattern_c ::= 'freevar'
l_ExprClause_c ::= l_OpenScope_t l_PatternList_c '->' a_Expr_c ';'
l_ExprClauses_c ::= l_ExprClause_c l_ExprClauses_c
l_ExprClauses_c ::=
l_NonConstPattern_c ::= l_NonConstPattern_c '@' l_NonConstPattern_c
l_NonConstPattern_c ::= '!' l_NonConstPattern_c
l_NonConstPattern_c ::= '&' l_NonConstPattern_c
l_NonConstPattern_c ::= l_BasicPattern_c
l_PatternList_c ::= l_Pattern_c ',' l_PatternList_c
l_PatternList_c ::= l_Pattern_c
l_Pattern_c ::= a_Constant_c
l_Pattern_c ::= '(' a_TypeName_c ')' a_Constant_c
l_Pattern_c ::= a_StringConstant_c
l_Pattern_c ::= l_NonConstPattern_c '@' l_Pattern_c
l_Pattern_c ::= '!' l_Pattern_c
l_Pattern_c ::= '&' l_Pattern_c
l_Pattern_c ::= l_BasicPattern_c
l_Pattern_c ::= 'PatternNEVER_t123456789!!!never' l_Pattern_c ']'
l_Pattern_c ::= 'PatternNEVER_t123456789!!!never' l_Pattern_c '|'
l_Pattern_c ::= '?&' l_Pattern_c
l_StmtClause_c ::= l_OpenScope_t l_PatternList_c '->' '{' a_BlockItemList_c '}'
l_StmtClause_c ::= l_OpenScope_t l_PatternList_c '->' '{' '}'
l_StmtClauses_c ::= l_StmtClause_c l_StmtClauses_c
l_StmtClauses_c ::=
l_StructPatternList_c ::= l_StructPattern_c ',' l_StructPatternList_c
l_StructPatternList_c ::= l_StructPattern_c
l_StructPattern_c ::= l_Pattern_c
l_StructPattern_c ::= '.' a_Identifier_c '=' l_Pattern_c
q_ClosureParameterList_c ::= a_ParameterDeclaration_c
q_ClosureParameterList_c ::= q_ClosureParameterList_c ',' a_ParameterDeclaration_c
q_ClosureTypeExpr_c ::= '(' q_ClosureTypeExpr_c ')' '->' a_TypeName_c
q_ClosureTypeExpr_c ::= '(' q_ClosureTypeExpr_c ')' '->' q_ClosureTypeExpr_c
q_ClosureTypeExpr_c ::= '(' q_ClosureParameterList_c ')' '->' q_ClosureTypeExpr_c
q_ClosureTypeExpr_c ::= '(' q_ClosureParameterList_c ')' '->' a_TypeName_c
q_ClosureTypeExpr_c ::= '(' ')' '->' q_ClosureTypeExpr_c
q_ClosureTypeExpr_c ::= '(' ')' '->' a_TypeName_c
e_Body_c ::= e_Goal_c ',' e_Body_c
e_Body_c ::= e_Goal_c
e_Goal_c ::= a_Identifier_c '<' o_TemplateArguments_c '>' '(' e_LogicExprs_c ')'
e_Goal_c ::= a_Identifier_c '<' o_TemplateArguments_c '>' '(' ')'
e_Goal_c ::= a_Identifier_c '(' e_LogicExprs_c ')'
e_Goal_c ::= a_Identifier_c '(' ')'
e_Goal_c ::= e_LogicExpr_c 'is' e_PrologPrimaryExpr_c
e_Goal_c ::= e_LogicExpr_c '=' e_LogicExpr_c
e_Goal_c ::= e_LogicExpr_c '\=' e_LogicExpr_c
e_Goal_c ::= e_PrologPrimaryExpr_c '=:=' e_PrologPrimaryExpr_c
e_Goal_c ::= e_PrologPrimaryExpr_c '=\=' e_PrologPrimaryExpr_c
e_Goal_c ::= e_PrologPrimaryExpr_c '<' e_PrologPrimaryExpr_c
e_Goal_c ::= e_PrologPrimaryExpr_c '=<' e_PrologPrimaryExpr_c
e_Goal_c ::= e_PrologPrimaryExpr_c '>' e_PrologPrimaryExpr_c
e_Goal_c ::= e_PrologPrimaryExpr_c '>=' e_PrologPrimaryExpr_c
e_Goal_c ::= '\+' e_Goal_c
e_Goal_c ::= '!'
e_Goal_c ::= 'initially' '{' a_BlockItemList_c '}'
e_Goal_c ::= 'initially' '{' '}'
e_Goal_c ::= 'finally' '{' a_BlockItemList_c '}'
e_Goal_c ::= 'finally' '{' '}'
e_Head_c ::= a_Identifier_c '(' e_LogicExprs_c ')'
e_Head_c ::= a_Identifier_c '(' ')'
e_LogicExpr_c ::= a_Identifier_t
e_LogicExpr_c ::= e_PrologConstant_c
e_LogicExpr_c ::= '-' e_PrologConstant_c
e_LogicExpr_c ::= a_StringConstant_t
e_LogicExpr_c ::= a_Identifier_c '(' e_LogicExprs_c ')'
e_LogicExpr_c ::= a_Identifier_c '(' ')'
e_LogicExpr_c ::= 'LogicExprNEVER_t123456789!!!never' e_LogicExpr_c ']'
e_LogicExpr_c ::= 'LogicExprNEVER_t123456789!!!never' e_LogicExpr_c '|'
e_LogicExpr_c ::= '[' m_ListLogicExprList_c ']'
e_LogicExprs_c ::= e_LogicExpr_c ',' e_LogicExprs_c
e_LogicExprs_c ::= e_LogicExpr_c
e_LogicStmt_c ::= a_Identifier_c '(' a_ParameterTypeList_c ')' ';'
e_LogicStmt_c ::= a_Identifier_c '(' ')' ';'
e_LogicStmt_c ::= e_Head_c '.'
e_LogicStmt_c ::= e_Head_c ':-' e_Body_c '.'
e_LogicStmt_c ::= a_Identifier_c '<' g_TemplateParameters_c '>' '(' a_ParameterTypeList_c ')' ';'
e_LogicStmt_c ::= a_Identifier_c '<' g_TemplateParameters_c '>' '(' ')' ';'
e_LogicStmts_c ::= e_LogicStmt_c e_LogicStmts_c
e_LogicStmts_c ::=
e_PrologConstant_c ::= a_DecConstant_t
e_PrologConstant_c ::= a_DecConstantU_t
e_PrologConstant_c ::= a_DecConstantL_t
e_PrologConstant_c ::= a_DecConstantUL_t
e_PrologConstant_c ::= a_DecConstantLL_t
e_PrologConstant_c ::= a_DecConstantULL_t
e_PrologConstant_c ::= a_OctConstant_t
e_PrologConstant_c ::= a_OctConstantU_t
e_PrologConstant_c ::= a_OctConstantL_t
e_PrologConstant_c ::= a_OctConstantUL_t
e_PrologConstant_c ::= a_OctConstantLL_t
e_PrologConstant_c ::= a_OctConstantULL_t
e_PrologConstant_c ::= a_OctConstantError_t
e_PrologConstant_c ::= a_HexConstant_t
e_PrologConstant_c ::= a_HexConstantU_t
e_PrologConstant_c ::= a_HexConstantL_t
e_PrologConstant_c ::= a_HexConstantUL_t
e_PrologConstant_c ::= a_HexConstantLL_t
e_PrologConstant_c ::= a_HexConstantULL_t
e_PrologConstant_c ::= a_FloatConstant_t
e_PrologConstant_c ::= a_FloatConstantFloat_t
e_PrologConstant_c ::= a_FloatConstantLongDouble_t
e_PrologConstant_c ::= a_HexFloatConstant_t
e_PrologConstant_c ::= a_HexFloatConstantFloat_t
e_PrologConstant_c ::= a_HexFloatConstantLongDouble_t
e_PrologConstant_c ::= a_CharConstant_t
e_PrologConstant_c ::= a_CharConstantL_t
e_PrologConstant_c ::= a_CharConstantU_t
e_PrologConstant_c ::= a_CharConstantUBig_t
e_PrologPrimaryExpr_c ::= a_Identifier_t
e_PrologPrimaryExpr_c ::= e_PrologConstant_c
e_PrologPrimaryExpr_c ::= a_StringConstant_t
e_PrologPrimaryExpr_c ::= '(' a_Expr_c ')'
m_ListInitializerList_c ::= a_AssignExpr_c ',' m_ListInitializerList_c
m_ListInitializerList_c ::= a_AssignExpr_c
m_ListInitializerList_c ::=
m_ListLogicExprList_c ::= e_LogicExpr_c ',' m_ListLogicExprList_c
m_ListLogicExprList_c ::= e_LogicExpr_c
m_ListLogicExprList_c ::= e_LogicExpr_c '|' e_LogicExpr_c
m_ListLogicExprList_c ::=
m_ListPatternList_c ::= l_Pattern_c ',' m_ListPatternList_c
m_ListPatternList_c ::= l_Pattern_c
m_ListPatternList_c ::= l_Pattern_c '|' l_Pattern_c
m_ListPatternList_c ::=
j_TagKeyword_c ::= 'datatype'
j_TagKeyword_c ::= 'enum'
j_TagKeyword_c ::= 'struct'
j_TagKeyword_c ::= 'union'
f_TemplateInitialDatatypeDeclaration_c ::= '<' g_TemplateParameters_c '>' 'datatype' a_Identifier_c
s_MaybeAttributes_c ::= b_Attributes_c
s_MaybeAttributes_c ::=
o_TemplateArgument_c ::= a_TypeName_c
o_TemplateArgument_c ::= a_Identifier_c
o_TemplateArgument_c ::= a_Constant_c
o_TemplateArguments_c ::= o_TemplateArgument_c ',' o_TemplateArguments_c
o_TemplateArguments_c ::= o_TemplateArgument_c
o_TemplateArguments_c ::=
h_TemplateInitialFunctionDefinition_c ::= a_DeclarationSpecifiers_c a_Declarator_c a_InitiallyUnqualifiedDeclarationList_c
h_TemplateInitialFunctionDefinition_c ::= a_Declarator_c a_InitiallyUnqualifiedDeclarationList_c
g_TemplateParameter_c ::= 'typename' a_Identifier_c
g_TemplateParameter_c ::= a_DeclarationSpecifiers_c a_Declarator_c
g_TemplateParameters_c ::= g_OpenScope_t g_TemplateParams_c
g_TemplateParams_c ::= g_TemplateParameter_c ',' g_TemplateParams_c
g_TemplateParams_c ::= g_TemplateParameter_c
g_TemplateParams_c ::=
i_TemplateInitialStructDeclaration_c ::= '<' g_TemplateParameters_c '>' 'struct' s_MaybeAttributes_c a_Identifier_c
k_InitiallyUnattributedTypeQualifierList_c ::= a_TypeQualifier_c
k_InitiallyUnattributedTypeQualifierList_c ::= a_TypeQualifier_c a_TypeQualifierList_c
p_VectorConstructorExprList_c ::= a_AssignExpr_c
p_VectorConstructorExprList_c ::= p_VectorConstructorExprList_c ',' a_AssignExpr_c
I've created a script to extract an EBNF to be viewed on https://www.bottlecaps.de/rr/ui from the --copperdump report generated by silver[-ableC]:
//auto fname = "ableC-sample-projects/down_on_the_farm/Parser_artifact_extendedParser.html";
//auto fname = "ableC/Parser_edu_umn_cs_melt_ableC_host_ablecParser.html";
//auto fname = "silver/build/Parser_silver_compiler_composed_Default_svParse.html";
auto fname = "ableC-bundle/extensions/ableC-prolog/examples/Parser_artifact_extendedParser.html";
auto fd = file(fname, "r");
auto line = "";
auto inProduction = false;
auto startProduction = 0;
auto endProduction = 0;
auto last_short_prefix = 'a';
auto short_prefixes = {};
auto grammar_start_at;
auto ebnf_lines = [];
while((line = fd.read_line())) {
//print(line);
//break;
if(line == " <h1>Productions</h1>") {
//print(line); break;
inProduction = true;
startProduction = fd.tell();
}
if(inProduction) {
//print(line);
if(line == " </table>") {
endProduction = fd.tell();
print(startProduction, endProduction);
fd.seek(startProduction);
auto html = fd.read(endProduction-startProduction);
html.gmatch(
"<tr[^>]+>(.-)</tr>",
function(m)
{
m = m.replace("\n", " ");
m = m.gsub("<[^>]+>", " ");
m = m.gsub("^%s+%d+%s+", "");
m = m.replace("<", "<");
m = m.replace(">", ">");
m = m.replace("&", "&");
m = m.gsub("%(%w[^%s)]+%)", "");
if(m[0] == '^') {
//m = "//" + m;
grammar_start_at = m.match("::=%s+(%S+)");
return true;
}
//m = m.gsub("%s+", " ");
m = m.gsub("%S+%s+$", "");
m.gmatch(
"%w+:%S+",
function(m) {
auto prefix = m.match("(.-:)[^:]+$");
auto rec = table_rawget(short_prefixes, prefix, false);
if(!rec) {
table_rawset(short_prefixes, prefix, last_short_prefix++);
}
//print(prefix, m);
return true;
}
);
//print(m);
ebnf_lines.append(m);
return true;
}
);
//html = html.gsub("<td class=\"fixedcell\">.-</td>(%s+</tr>)", "%1");
//html = html.gsub("<[^>]+>", "");
//print(html);
break;
}
}
}
function getWithShortPrefix(name) {
if(table_len(short_prefixes) == 0) return name;
auto prefix = name.match("(.-:)[^:]+$");
auto rec = table_rawget(short_prefixes, prefix, false);
if(!rec) {
throw("unexpected prefix = ", prefix);
}
//print(prefix, m);
return name.gsub("(.-:)([^:]+)$", rec.tochar() + "_%2");
}
//write short_prefixes
printf("grammar_start_at ::= %s\n\t| notes_for_railroad\nnotes_for_railroad ::=\n", getWithShortPrefix(grammar_start_at));
auto ary = table_toarray(short_prefixes);
ary.sort(@(a,b) a[1] <=> b[1]);
foreach(elm in ary) printf("\t| '%s_ prefix for %s'\n", elm[1].tochar(), elm[0]);
foreach(line in ebnf_lines) {
line = line.gsub("%w+:%S+",
function(m) {
return getWithShortPrefix(m);
}
);
print(line);
}
It uses Lua pattern matching/regex to search and replace transformations on the html generated by --copperdump it's written in SquiLu (https://github.com/mingodad/squilu).