|
| 1 | +root ::= grammarSpec |
| 2 | +grammarSpec ::= grammarDecl prequelConstruct* rules modeSpec* EOF |
| 3 | +grammarDecl ::= grammarType identifier SEMI |
| 4 | +grammarType ::= (LEXER GRAMMAR) | (PARSER GRAMMAR) | GRAMMAR |
| 5 | +prequelConstruct ::= optionsSpec | delegateGrammars | tokensSpec | channelsSpec | action_ |
| 6 | +optionsSpec ::= OPTIONS (option SEMI)* RBRACE |
| 7 | +option ::= identifier ASSIGN optionValue |
| 8 | +optionValue ::= (identifier (DOT identifier)*) | STRING_LITERAL | actionBlock | INT |
| 9 | +delegateGrammars ::= IMPORT delegateGrammar (COMMA delegateGrammar)* SEMI |
| 10 | +delegateGrammar ::= (identifier ASSIGN identifier) | identifier |
| 11 | +tokensSpec ::= TOKENS idList? RBRACE |
| 12 | +channelsSpec ::= CHANNELS idList? RBRACE |
| 13 | +idList ::= identifier (COMMA identifier)* COMMA? |
| 14 | +action_ ::= AT (actionScopeName COLONCOLON)? identifier actionBlock |
| 15 | +actionScopeName ::= identifier | LEXER | PARSER |
| 16 | +actionBlock ::= BEGIN_ACTION ACTION_CONTENT* END_ACTION |
| 17 | +argActionBlock ::= BEGIN_ARGUMENT ARGUMENT_CONTENT* END_ARGUMENT |
| 18 | +modeSpec ::= MODE identifier SEMI lexerRuleSpec* |
| 19 | +rules ::= ruleSpec* |
| 20 | +ruleSpec ::= parserRuleSpec | lexerRuleSpec |
| 21 | +parserRuleSpec ::= ruleModifiers? RULE_REF argActionBlock? ruleReturns? throwsSpec? localsSpec? rulePrequel* COLON ruleBlock SEMI exceptionGroup |
| 22 | +exceptionGroup ::= exceptionHandler* finallyClause? |
| 23 | +exceptionHandler ::= CATCH argActionBlock actionBlock |
| 24 | +finallyClause ::= FINALLY actionBlock |
| 25 | +rulePrequel ::= optionsSpec | ruleAction |
| 26 | +ruleReturns ::= RETURNS argActionBlock |
| 27 | +throwsSpec ::= THROWS identifier (COMMA identifier)* |
| 28 | +localsSpec ::= LOCALS argActionBlock |
| 29 | +ruleAction ::= AT identifier actionBlock |
| 30 | +ruleModifiers ::= ruleModifier+ |
| 31 | +ruleModifier ::= PUBLIC | PRIVATE | PROTECTED | FRAGMENT |
| 32 | +ruleBlock ::= ruleAltList |
| 33 | +ruleAltList ::= labeledAlt (OR labeledAlt)* |
| 34 | +labeledAlt ::= alternative (POUND identifier)? |
| 35 | +lexerRuleSpec ::= FRAGMENT? TOKEN_REF optionsSpec? COLON lexerRuleBlock SEMI |
| 36 | +lexerRuleBlock ::= lexerAltList |
| 37 | +lexerAltList ::= lexerAlt (OR lexerAlt)* |
| 38 | +lexerAlt ::= (lexerElements lexerCommands?) | () |
| 39 | +lexerElements ::= lexerElement+ | () |
| 40 | +lexerElement ::= (lexerAtom ebnfSuffix?) | (lexerBlock ebnfSuffix?) | (actionBlock QUESTION?) |
| 41 | +lexerBlock ::= LPAREN lexerAltList RPAREN |
| 42 | +lexerCommands ::= RARROW lexerCommand (COMMA lexerCommand)* |
| 43 | +lexerCommand ::= (lexerCommandName LPAREN lexerCommandExpr RPAREN) | lexerCommandName |
| 44 | +lexerCommandName ::= identifier | MODE |
| 45 | +lexerCommandExpr ::= identifier | INT |
| 46 | +altList ::= alternative (OR alternative)* |
| 47 | +alternative ::= (elementOptions? element+) | () |
| 48 | +element ::= (labeledElement (ebnfSuffix | ())) | (atom (ebnfSuffix | ())) | ebnf | (actionBlock (QUESTION predicateOptions?)?) |
| 49 | +predicateOptions ::= LT predicateOption (COMMA predicateOption)* GT |
| 50 | +predicateOption ::= elementOption | (identifier ASSIGN actionBlock) |
| 51 | +labeledElement ::= identifier (ASSIGN | PLUS_ASSIGN) (atom | block) |
| 52 | +ebnf ::= block blockSuffix? |
| 53 | +blockSuffix ::= ebnfSuffix |
| 54 | +ebnfSuffix ::= (QUESTION QUESTION?) | (STAR QUESTION?) | (PLUS QUESTION?) |
| 55 | +lexerAtom ::= characterRange | terminalDef | notSet | LEXER_CHAR_SET | (DOT elementOptions?) |
| 56 | +atom ::= terminalDef | ruleref | notSet | (DOT elementOptions?) |
| 57 | +notSet ::= (NOT setElement) | (NOT blockSet) |
| 58 | +blockSet ::= LPAREN setElement (OR setElement)* RPAREN |
| 59 | +setElement ::= (TOKEN_REF elementOptions?) | (STRING_LITERAL elementOptions?) | characterRange | LEXER_CHAR_SET |
| 60 | +block ::= LPAREN (optionsSpec? ruleAction* COLON)? altList RPAREN |
| 61 | +ruleref ::= RULE_REF argActionBlock? elementOptions? |
| 62 | +characterRange ::= STRING_LITERAL RANGE STRING_LITERAL |
| 63 | +terminalDef ::= (TOKEN_REF elementOptions?) | (STRING_LITERAL elementOptions?) |
| 64 | +elementOptions ::= LT elementOption (COMMA elementOption)* GT |
| 65 | +elementOption ::= identifier | (identifier ASSIGN (identifier | STRING_LITERAL)) |
| 66 | +identifier ::= RULE_REF | TOKEN_REF |
0 commit comments