diff options
| author | Georg Brandl <georg@python.org> | 2021-01-18 21:24:00 +0100 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2021-01-18 22:08:36 +0100 |
| commit | 2a3d3a7d5b9c60dedf6638d876161d9563faebcf (patch) | |
| tree | 809c0b4a686db98f5954afa1944404cd9652c6b2 /tests/lexers/antlr | |
| parent | f0445be718da83541ea3401aad882f3937147263 (diff) | |
| download | pygments-git-examplefiles.tar.gz | |
Move test_examplefiles to new tests/lexers scheme.examplefiles
Diffstat (limited to 'tests/lexers/antlr')
| -rw-r--r-- | tests/lexers/antlr/example.txt | 24 | ||||
| -rw-r--r-- | tests/lexers/antlr/example2.txt | 3829 |
2 files changed, 3853 insertions, 0 deletions
diff --git a/tests/lexers/antlr/example.txt b/tests/lexers/antlr/example.txt new file mode 100644 index 00000000..5828bfc4 --- /dev/null +++ b/tests/lexers/antlr/example.txt @@ -0,0 +1,24 @@ +---input--- +public f throws a, b, c : x ; + +---tokens--- +'public' Keyword +' ' Text.Whitespace +'f' Name.Label +' ' Text.Whitespace +'throws' Keyword +' ' Text.Whitespace +'a' Name.Label +',' Punctuation +' ' Text.Whitespace +'b' Name.Label +',' Punctuation +' ' Text.Whitespace +'c' Name.Label +' ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'x' Name.Variable +' ' Text.Whitespace +';' Punctuation +'\n' Text.Whitespace diff --git a/tests/lexers/antlr/example2.txt b/tests/lexers/antlr/example2.txt new file mode 100644 index 00000000..776adaa7 --- /dev/null +++ b/tests/lexers/antlr/example2.txt @@ -0,0 +1,3829 @@ +---input--- +/* + [The "BSD licence"] + Copyright (c) 2005-2007 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** ANTLR v3 grammar written in ANTLR v3 with AST construction */ +grammar ANTLRv3; + +options { + output=AST; + ASTLabelType=CommonTree; +} + +tokens { + DOC_COMMENT; + PARSER; + LEXER; + RULE; + BLOCK; + OPTIONAL; + CLOSURE; + POSITIVE_CLOSURE; + SYNPRED; + RANGE; + CHAR_RANGE; + EPSILON; + ALT; + EOR; + EOB; + EOA; // end of alt + ID; + ARG; + ARGLIST; + RET; + LEXER_GRAMMAR; + PARSER_GRAMMAR; + TREE_GRAMMAR; + COMBINED_GRAMMAR; + INITACTION; + LABEL; // $x used in rewrite rules + TEMPLATE; + SCOPE='scope'; + SEMPRED; + GATED_SEMPRED; // {p}? => + SYN_SEMPRED; // (...) => it's a manually-specified synpred converted to sempred + BACKTRACK_SEMPRED; // auto backtracking mode syn pred converted to sempred + FRAGMENT='fragment'; + TREE_BEGIN='^('; + ROOT='^'; + BANG='!'; + RANGE='..'; + REWRITE='->'; +} + +@members { + int gtype; +} + +grammarDef + : DOC_COMMENT? + ( 'lexer' {gtype=LEXER_GRAMMAR;} // pure lexer + | 'parser' {gtype=PARSER_GRAMMAR;} // pure parser + | 'tree' {gtype=TREE_GRAMMAR;} // a tree parser + | {gtype=COMBINED_GRAMMAR;} // merged parser/lexer + ) + g='grammar' id ';' optionsSpec? tokensSpec? attrScope* action* + rule+ + EOF + -> ^( {adaptor.create(gtype,$g)} + id DOC_COMMENT? optionsSpec? tokensSpec? attrScope* action* rule+ + ) + ; + +tokensSpec + : TOKENS tokenSpec+ '}' -> ^(TOKENS tokenSpec+) + ; + +tokenSpec + : TOKEN_REF + ( '=' (lit=STRING_LITERAL|lit=CHAR_LITERAL) -> ^('=' TOKEN_REF $lit) + | -> TOKEN_REF + ) + ';' + ; + +attrScope + : 'scope' id ACTION -> ^('scope' id ACTION) + ; + +/** Match stuff like @parser::members {int i;} */ +action + : '@' (actionScopeName '::')? id ACTION -> ^('@' actionScopeName? id ACTION) + ; + +/** Sometimes the scope names will collide with keywords; allow them as + * ids for action scopes. + */ +actionScopeName + : id + | l='lexer' -> ID[$l] + | p='parser' -> ID[$p] + ; + +optionsSpec + : OPTIONS (option ';')+ '}' -> ^(OPTIONS option+) + ; + +option + : id '=' optionValue -> ^('=' id optionValue) + ; + +optionValue + : id + | STRING_LITERAL + | CHAR_LITERAL + | INT + | s='*' -> STRING_LITERAL[$s] // used for k=* + ; + +rule +scope { + String name; +} + : DOC_COMMENT? + ( modifier=('protected'|'public'|'private'|'fragment') )? + id {$rule::name = $id.text;} + '!'? + ( arg=ARG_ACTION )? + ( 'returns' rt=ARG_ACTION )? + throwsSpec? optionsSpec? ruleScopeSpec? ruleAction* + ':' altList ';' + exceptionGroup? + -> ^( RULE id {modifier!=null?adaptor.create(modifier):null} ^(ARG $arg)? ^(RET $rt)? + optionsSpec? ruleScopeSpec? ruleAction* + altList + exceptionGroup? + EOR["EOR"] + ) + ; + +/** Match stuff like @init {int i;} */ +ruleAction + : '@' id ACTION -> ^('@' id ACTION) + ; + +throwsSpec + : 'throws' id ( ',' id )* -> ^('throws' id+) + ; + +ruleScopeSpec + : 'scope' ACTION -> ^('scope' ACTION) + | 'scope' id (',' id)* ';' -> ^('scope' id+) + | 'scope' ACTION + 'scope' id (',' id)* ';' + -> ^('scope' ACTION id+ ) + ; + +block + : lp='(' + ( (opts=optionsSpec)? ':' )? + a1=alternative rewrite ( '|' a2=alternative rewrite )* + rp=')' + -> ^( BLOCK[$lp,"BLOCK"] optionsSpec? alternative+ EOB[$rp,"EOB"] ) + ; + +altList +@init { + // must create root manually as it's used by invoked rules in real antlr tool. + // leave here to demonstrate use of {...} in rewrite rule + // it's really BLOCK[firstToken,"BLOCK"]; set line/col to previous ( or : token. + CommonTree blkRoot = (CommonTree)adaptor.create(BLOCK,input.LT(-1),"BLOCK"); +} + : a1=alternative rewrite ( '|' a2=alternative rewrite )* + -> ^( {blkRoot} (alternative rewrite?)+ EOB["EOB"] ) + ; + +alternative +@init { + Token firstToken = input.LT(1); + Token prevToken = input.LT(-1); // either : or | I think +} + : element+ -> ^(ALT[firstToken,"ALT"] element+ EOA["EOA"]) + | -> ^(ALT[prevToken,"ALT"] EPSILON[prevToken,"EPSILON"] EOA["EOA"]) + ; + +exceptionGroup + : ( exceptionHandler )+ ( finallyClause )? + | finallyClause + ; + +exceptionHandler + : 'catch' ARG_ACTION ACTION -> ^('catch' ARG_ACTION ACTION) + ; + +finallyClause + : 'finally' ACTION -> ^('finally' ACTION) + ; + +element + : elementNoOptionSpec + ; + +elementNoOptionSpec + : id (labelOp='='|labelOp='+=') atom + ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] ^($labelOp id atom) EOA["EOA"]) EOB["EOB"])) + | -> ^($labelOp id atom) + ) + | id (labelOp='='|labelOp='+=') block + ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] ^($labelOp id block) EOA["EOA"]) EOB["EOB"])) + | -> ^($labelOp id block) + ) + | atom + ( ebnfSuffix -> ^(BLOCK["BLOCK"] ^(ALT["ALT"] atom EOA["EOA"]) EOB["EOB"]) + | -> atom + ) + | ebnf + | ACTION + | SEMPRED ( '=>' -> GATED_SEMPRED | -> SEMPRED ) + | treeSpec + ; + +atom: range ( (op='^'|op='!') -> ^($op range) | -> range ) + | terminal + | notSet ( (op='^'|op='!') -> ^($op notSet) | -> notSet ) + | RULE_REF ( arg=ARG_ACTION )? ( (op='^'|op='!') )? + -> {$arg!=null&&op!=null}? ^($op RULE_REF $arg) + -> {$arg!=null}? ^(RULE_REF $arg) + -> {$op!=null}? ^($op RULE_REF) + -> RULE_REF + ; + +notSet + : '~' + ( notTerminal -> ^('~' notTerminal) + | block -> ^('~' block) + ) + ; + +treeSpec + : '^(' element ( element )+ ')' -> ^(TREE_BEGIN element+) + ; + +/** Matches ENBF blocks (and token sets via block rule) */ +ebnf +@init { + Token firstToken = input.LT(1); +} +@after { + $ebnf.tree.getToken().setLine(firstToken.getLine()); + $ebnf.tree.getToken().setCharPositionInLine(firstToken.getCharPositionInLine()); +} + : block {Token op=input.LT(1);} + ( '?' -> ^(OPTIONAL[op] block) + | '*' -> ^(CLOSURE[op] block) + | '+' -> ^(POSITIVE_CLOSURE[op] block) + | '^' -> ^('^' block) + | '!' -> ^('!' block) + | '=>' // syntactic predicate + -> {gtype==COMBINED_GRAMMAR && + Character.isUpperCase($rule::name.charAt(0))}? + // if lexer rule in combined, leave as pred for lexer + ^(SYNPRED["=>"] block) + // in real antlr tool, text for SYN_SEMPRED is predname + -> SYN_SEMPRED + | -> block + ) + ; + +range! + : c1=CHAR_LITERAL RANGE c2=CHAR_LITERAL -> ^(CHAR_RANGE[$c1,".."] $c1 $c2) + ; + +terminal + : ( CHAR_LITERAL -> CHAR_LITERAL + // Args are only valid for lexer rules + | TOKEN_REF + ( ARG_ACTION -> ^(TOKEN_REF ARG_ACTION) + | -> TOKEN_REF + ) + | STRING_LITERAL -> STRING_LITERAL + | '.' -> '.' + ) + ( '^' -> ^('^' $terminal) + | '!' -> ^('!' $terminal) + )? + ; + +notTerminal + : CHAR_LITERAL + | TOKEN_REF + | STRING_LITERAL + ; + +ebnfSuffix +@init { + Token op = input.LT(1); +} + : '?' -> OPTIONAL[op] + | '*' -> CLOSURE[op] + | '+' -> POSITIVE_CLOSURE[op] + ; + + + +// R E W R I T E S Y N T A X + +rewrite +@init { + Token firstToken = input.LT(1); +} + : (rew+='->' preds+=SEMPRED predicated+=rewrite_alternative)* + rew2='->' last=rewrite_alternative + -> ^($rew $preds $predicated)* ^($rew2 $last) + | + ; + +rewrite_alternative + : rewrite_template + | rewrite_tree_alternative + | /* empty rewrite */ -> ^(ALT["ALT"] EPSILON["EPSILON"] EOA["EOA"]) + ; + +rewrite_template_block + : lp='(' rewrite_template ')' -> ^(BLOCK[$lp,"BLOCK"] rewrite_template EOB[$lp,"EOB"]) + ; + +rewrite_tree_block + : lp='(' rewrite_tree_alternative ')' + -> ^(BLOCK[$lp,"BLOCK"] rewrite_tree_alternative EOB[$lp,"EOB"]) + ; + +rewrite_tree_alternative + : rewrite_tree_element+ -> ^(ALT["ALT"] rewrite_tree_element+ EOA["EOA"]) + ; + +rewrite_tree_element + : rewrite_tree_atom + | rewrite_tree_atom ebnfSuffix + -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] rewrite_tree_atom EOA["EOA"]) EOB["EOB"])) + | rewrite_tree + ( ebnfSuffix + -> ^(BLOCK["BLOCK"] ^(ALT["ALT"] rewrite_tree EOA["EOA"]) EOB["EOB"]) + | -> rewrite_tree + ) + | rewrite_tree_ebnf + ; + +rewrite_tree_atom + : CHAR_LITERAL + | TOKEN_REF ARG_ACTION? -> ^(TOKEN_REF ARG_ACTION?) // for imaginary nodes + | RULE_REF + | STRING_LITERAL + | d='$' id -> LABEL[$d,$id.text] // reference to a label in a rewrite rule + | ACTION + ; + +rewrite_tree_ebnf +@init { + Token firstToken = input.LT(1); +} +@after { + $rewrite_tree_ebnf.tree.getToken().setLine(firstToken.getLine()); + $rewrite_tree_ebnf.tree.getToken().setCharPositionInLine(firstToken.getCharPositionInLine()); +} + : rewrite_tree_block ebnfSuffix -> ^(ebnfSuffix rewrite_tree_block) + ; + +rewrite_tree + : '^(' rewrite_tree_atom rewrite_tree_element* ')' + -> ^(TREE_BEGIN rewrite_tree_atom rewrite_tree_element* ) + ; + +/** Build a tree for a template rewrite: + ^(TEMPLATE (ID|ACTION) ^(ARGLIST ^(ARG ID ACTION) ...) ) + where ARGLIST is always there even if no args exist. + ID can be "template" keyword. If first child is ACTION then it's + an indirect template ref + + -> foo(a={...}, b={...}) + -> ({string-e})(a={...}, b={...}) // e evaluates to template name + -> {%{$ID.text}} // create literal template from string (done in ActionTranslator) + -> {st-expr} // st-expr evaluates to ST + */ +rewrite_template + : // -> template(a={...},...) "..." inline template + {input.LT(1).getText().equals("template")}? + id lp='(' rewrite_template_args ')' + st=( DOUBLE_QUOTE_STRING_LITERAL | DOUBLE_ANGLE_STRING_LITERAL ) + -> ^(TEMPLATE[$lp,"TEMPLATE"] id rewrite_template_args $st) + + | // -> foo(a={...}, ...) + rewrite_template_ref + + | // -> ({expr})(a={...}, ...) + rewrite_indirect_template_head + + | // -> {...} + ACTION + ; + +/** -> foo(a={...}, ...) */ +rewrite_template_ref + : id lp='(' rewrite_template_args ')' + -> ^(TEMPLATE[$lp,"TEMPLATE"] id rewrite_template_args) + ; + +/** -> ({expr})(a={...}, ...) */ +rewrite_indirect_template_head + : lp='(' ACTION ')' '(' rewrite_template_args ')' + -> ^(TEMPLATE[$lp,"TEMPLATE"] ACTION rewrite_template_args) + ; + +rewrite_template_args + : rewrite_template_arg (',' rewrite_template_arg)* + -> ^(ARGLIST rewrite_template_arg+) + | -> ARGLIST + ; + +rewrite_template_arg + : id '=' ACTION -> ^(ARG[$id.start] id ACTION) + ; + +id : TOKEN_REF -> ID[$TOKEN_REF] + | RULE_REF -> ID[$RULE_REF] + ; + +// L E X I C A L R U L E S + +SL_COMMENT + : '//' + ( ' $ANTLR ' SRC // src directive + | ~('\r'|'\n')* + ) + '\r'? '\n' + {$channel=HIDDEN;} + ; + +ML_COMMENT + : '/*' {if (input.LA(1)=='*') $type=DOC_COMMENT; else $channel=HIDDEN;} .* '*/' + ; + +CHAR_LITERAL + : '\'' LITERAL_CHAR '\'' + ; + +STRING_LITERAL + : '\'' LITERAL_CHAR LITERAL_CHAR* '\'' + ; + +fragment +LITERAL_CHAR + : ESC + | ~('\''|'\\') + ; + +DOUBLE_QUOTE_STRING_LITERAL + : '"' LITERAL_CHAR* '"' + ; + +DOUBLE_ANGLE_STRING_LITERAL + : '<<' .* '>>' + ; + +fragment +ESC : '\\' + ( 'n' + | 'r' + | 't' + | 'b' + | 'f' + | '"' + | '\'' + | '\\' + | '>' + | 'u' XDIGIT XDIGIT XDIGIT XDIGIT + | . // unknown, leave as it is + ) + ; + +fragment +XDIGIT : + '0' .. '9' + | 'a' .. 'f' + | 'A' .. 'F' + ; + +INT : '0'..'9'+ + ; + +ARG_ACTION + : NESTED_ARG_ACTION + ; + +fragment +NESTED_ARG_ACTION : + '[' + ( options {greedy=false; k=1;} + : NESTED_ARG_ACTION + | ACTION_STRING_LITERAL + | ACTION_CHAR_LITERAL + | . + )* + ']' + {setText(getText().substring(1, getText().length()-1));} + ; + +ACTION + : NESTED_ACTION ( '?' {$type = SEMPRED;} )? + ; + +fragment +NESTED_ACTION : + '{' + ( options {greedy=false; k=3;} + : NESTED_ACTION + | SL_COMMENT + | ML_COMMENT + | ACTION_STRING_LITERAL + | ACTION_CHAR_LITERAL + | . + )* + '}' + {$channel = DEFAULT_TOKEN_CHANNEL;} + ; + +fragment +ACTION_CHAR_LITERAL + : '\'' (ACTION_ESC|~('\\'|'\'')) '\'' + ; + +fragment +ACTION_STRING_LITERAL + : '"' (ACTION_ESC|~('\\'|'"'))+ '"' + ; + +fragment +ACTION_ESC + : '\\\'' + | '\\"' + | '\\' ~('\''|'"') + ; + +TOKEN_REF + : 'A'..'Z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +RULE_REF + : 'a'..'z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +/** Match the start of an options section. Don't allow normal + * action processing on the {...} as it's not a action. + */ +OPTIONS + : 'options' WS_LOOP '{' {$channel=DEFAULT_TOKEN_CHANNEL;} // WS_LOOP sets channel + ; + +TOKENS + : 'tokens' WS_LOOP '{' {$channel=DEFAULT_TOKEN_CHANNEL;} + ; + +/** Reset the file and line information; useful when the grammar + * has been generated so that errors are shown relative to the + * original file like the old C preprocessor used to do. + */ +fragment +SRC : 'src' ' ' file=ACTION_STRING_LITERAL ' ' line=INT {$channel=HIDDEN;} + ; + +WS : ( ' ' + | '\t' + | '\r'? '\n' + )+ + {$channel=HIDDEN;} + ; + +fragment +WS_LOOP + : ( WS + | SL_COMMENT + | ML_COMMENT + )* + {$channel=HIDDEN;} + ; + + +---tokens--- +'/*\n [The "BSD licence"]\n Copyright (c) 2005-2007 Terence Parr\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n 3. The name of the author may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS\'\' AND ANY EXPRESS OR\n IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/' Comment +'\n\n' Text.Whitespace + +'/** ANTLR v3 grammar written in ANTLR v3 with AST construction */' Comment +'\n' Text.Whitespace + +'grammar' Keyword +' ' Text.Whitespace +'ANTLRv3' Name.Class +';' Punctuation +'\n\n' Text.Whitespace + +'options' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n\t' Text.Whitespace +'output' Name.Variable +'=' Punctuation +'AST' Text +';' Punctuation +'\n\t' Text.Whitespace +'ASTLabelType' Name.Variable +'=' Punctuation +'CommonTree' Text +';' Punctuation +'\n' Text.Whitespace + +'}' Punctuation +'\n\n' Text.Whitespace + +'tokens' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n\t' Text.Whitespace +'DOC_COMMENT' Name.Label +';' Punctuation +'\n\t' Text.Whitespace +'PARSER' Name.Label +';' Punctuation +'\t\n ' Text.Whitespace +'LEXER' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'RULE' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'BLOCK' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'OPTIONAL' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'CLOSURE' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'POSITIVE_CLOSURE' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'SYNPRED' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'RANGE' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'CHAR_RANGE' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'EPSILON' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'ALT' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'EOR' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'EOB' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'EOA' Name.Label +';' Punctuation +' ' Text.Whitespace +'// end of alt' Comment +'\n ' Text.Whitespace +'ID' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'ARG' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'ARGLIST' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'RET' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'LEXER_GRAMMAR' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'PARSER_GRAMMAR' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'TREE_GRAMMAR' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'COMBINED_GRAMMAR' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'INITACTION' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'LABEL' Name.Label +';' Punctuation +' ' Text.Whitespace +'// $x used in rewrite rules' Comment +'\n ' Text.Whitespace +'TEMPLATE' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'SCOPE' Name.Label +'=' Punctuation +"'scope'" Literal.String +';' Punctuation +'\n ' Text.Whitespace +'SEMPRED' Name.Label +';' Punctuation +'\n ' Text.Whitespace +'GATED_SEMPRED' Name.Label +';' Punctuation +' ' Text.Whitespace +'// {p}? =>' Comment +'\n ' Text.Whitespace +'SYN_SEMPRED' Name.Label +';' Punctuation +' ' Text.Whitespace +"// (...) => it's a manually-specified synpred converted to sempred" Comment +'\n ' Text.Whitespace +'BACKTRACK_SEMPRED' Name.Label +';' Punctuation +' ' Text.Whitespace +'// auto backtracking mode syn pred converted to sempred' Comment +'\n ' Text.Whitespace +'FRAGMENT' Name.Label +'=' Punctuation +"'fragment'" Literal.String +';' Punctuation +'\n ' Text.Whitespace +'TREE_BEGIN' Name.Label +'=' Punctuation +"'^('" Literal.String +';' Punctuation +'\n ' Text.Whitespace +'ROOT' Name.Label +'=' Punctuation +"'^'" Literal.String +';' Punctuation +'\n ' Text.Whitespace +'BANG' Name.Label +'=' Punctuation +"'!'" Literal.String +';' Punctuation +'\n ' Text.Whitespace +'RANGE' Name.Label +'=' Punctuation +"'..'" Literal.String +';' Punctuation +'\n ' Text.Whitespace +'REWRITE' Name.Label +'=' Punctuation +"'->'" Literal.String +';' Punctuation +'\n' Text.Whitespace + +'}' Punctuation +'\n\n' Text.Whitespace + +'@member' Name.Label +'s' Name.Label +' ' Text.Whitespace +'{' Punctuation +'\n\tint gtype;\n' Other + +'}' Punctuation +'\n\n' Text.Whitespace + +'grammarDef' Name.Label +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'DOC_COMMENT' Name.Constant +'?' Operator +'\n \t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +"'lexer'" Literal.String.Single +' ' Text.Whitespace +'{' Punctuation +'gtype=LEXER_GRAMMAR;' Other +'}' Punctuation +' ' Text.Whitespace +'// pure lexer' Comment +'\n \t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +"'parser'" Literal.String.Single +' ' Text.Whitespace +'{' Punctuation +'gtype=PARSER_GRAMMAR;' Other +'}' Punctuation +' ' Text.Whitespace +'// pure parser' Comment +'\n \t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +"'tree'" Literal.String.Single +' ' Text.Whitespace +'{' Punctuation +'gtype=TREE_GRAMMAR;' Other +'}' Punctuation +' ' Text.Whitespace +'// a tree parser' Comment +'\n \t' Text.Whitespace +'|' Operator +'\t\t ' Text.Whitespace +'{' Punctuation +'gtype=COMBINED_GRAMMAR;' Other +'}' Punctuation +' ' Text.Whitespace +'// merged parser/lexer' Comment +'\n \t' Text.Whitespace +')' Operator +'\n \t' Text.Whitespace +'g' Name.Variable +'=' Operator +"'grammar'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +"';'" Literal.String.Single +' ' Text.Whitespace +'optionsSpec' Name.Variable +'?' Operator +' ' Text.Whitespace +'tokensSpec' Name.Variable +'?' Operator +' ' Text.Whitespace +'attrScope' Name.Variable +'*' Operator +' ' Text.Whitespace +'action' Name.Variable +'*' Operator +'\n \t' Text.Whitespace +'rule' Name.Variable +'+' Operator +'\n \t' Text.Whitespace +'EOF' Name.Constant +'\n \t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +' ' Text.Whitespace +'{' Punctuation +'adaptor.create(gtype,' Other +'$g' Name.Variable +')' Other +'}' Punctuation +'\n \t\t ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'DOC_COMMENT' Name.Constant +'?' Operator +' ' Text.Whitespace +'optionsSpec' Name.Variable +'?' Operator +' ' Text.Whitespace +'tokensSpec' Name.Variable +'?' Operator +' ' Text.Whitespace +'attrScope' Name.Variable +'*' Operator +' ' Text.Whitespace +'action' Name.Variable +'*' Operator +' ' Text.Whitespace +'rule' Name.Variable +'+' Operator +'\n \t\t' Text.Whitespace +')' Operator +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'tokensSpec' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'TOKENS' Name.Constant +' ' Text.Whitespace +'tokenSpec' Name.Variable +'+' Operator +' ' Text.Whitespace +"'}'" Literal.String.Single +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'TOKENS' Name.Constant +' ' Text.Whitespace +'tokenSpec' Name.Variable +'+' Operator +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'tokenSpec' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'TOKEN_REF' Name.Constant +'\n\t\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +"'='" Literal.String.Single +' ' Text.Whitespace +'(' Operator +'lit' Name.Variable +'=' Operator +'STRING_LITERAL' Name.Constant +'|' Operator +'lit' Name.Variable +'=' Operator +'CHAR_LITERAL' Name.Constant +')' Operator +'\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'='" Literal.String.Single +' ' Text.Whitespace +'TOKEN_REF' Name.Constant +' ' Text.Whitespace +'$lit' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +'\t\t\t\t\t\t\t\t\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'TOKEN_REF' Name.Constant +'\n\t\t' Text.Whitespace +')' Operator +'\n\t\t' Text.Whitespace +"';'" Literal.String.Single +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'attrScope' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'scope'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'ACTION' Name.Constant +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'scope'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'ACTION' Name.Constant +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'/** Match stuff like @parser::members {int i;} */' Comment +'\n' Text.Whitespace + +'action' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'@'" Literal.String.Single +' ' Text.Whitespace +'(' Operator +'actionScopeName' Name.Variable +' ' Text.Whitespace +"'::'" Literal.String.Single +')' Operator +'?' Operator +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'ACTION' Name.Constant +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'@'" Literal.String.Single +' ' Text.Whitespace +'actionScopeName' Name.Variable +'?' Operator +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'ACTION' Name.Constant +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'/** Sometimes the scope names will collide with keywords; allow them as\n * ids for action scopes.\n */' Comment +'\n' Text.Whitespace + +'actionScopeName' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'id' Name.Variable +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'l' Name.Variable +'=' Operator +"'lexer'" Literal.String.Single +'\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'ID' Name.Constant +'[' Punctuation +'$l' Name.Variable +']' Punctuation +'\n ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'p' Name.Variable +'=' Operator +"'parser'" Literal.String.Single +'\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'ID' Name.Constant +'[' Punctuation +'$p' Name.Variable +']' Punctuation +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'optionsSpec' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'OPTIONS' Name.Constant +' ' Text.Whitespace +'(' Operator +'option' Name.Variable +' ' Text.Whitespace +"';'" Literal.String.Single +')' Operator +'+' Operator +' ' Text.Whitespace +"'}'" Literal.String.Single +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'OPTIONS' Name.Constant +' ' Text.Whitespace +'option' Name.Variable +'+' Operator +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'option' Name.Label +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +"'='" Literal.String.Single +' ' Text.Whitespace +'optionValue' Name.Variable +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'='" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'optionValue' Name.Variable +')' Operator +'\n \t' Text.Whitespace +';' Punctuation +'\n \t\n' Text.Whitespace + +'optionValue' Name.Label +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'id' Name.Variable +'\n ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'STRING_LITERAL' Name.Constant +'\n ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'CHAR_LITERAL' Name.Constant +'\n ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'INT' Name.Constant +'\n ' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'s' Name.Variable +'=' Operator +"'*'" Literal.String.Single +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'STRING_LITERAL' Name.Constant +'[' Punctuation +'$s' Name.Variable +']' Punctuation +' ' Text.Whitespace +'// used for k=*' Comment +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'rule' Name.Label +'\n' Text.Whitespace + +'scope' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n\tString name;\n' Other + +'}' Punctuation +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'DOC_COMMENT' Name.Constant +'?' Operator +'\n\t\t' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'modifier' Name.Variable +'=' Operator +'(' Operator +"'protected'" Literal.String.Single +'|' Operator +"'public'" Literal.String.Single +'|' Operator +"'private'" Literal.String.Single +'|' Operator +"'fragment'" Literal.String.Single +')' Operator +' ' Text.Whitespace +')' Operator +'?' Operator +'\n\t\t' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'{' Punctuation +'$rule' Name.Variable +'::name = ' Other +'$id' Name.Variable +'.' Punctuation +'text' Name.Property +';' Other +'}' Punctuation +'\n\t\t' Text.Whitespace +"'!'" Literal.String.Single +'?' Operator +'\n\t\t' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'arg' Name.Variable +'=' Operator +'ARG_ACTION' Name.Constant +' ' Text.Whitespace +')' Operator +'?' Operator +'\n\t\t' Text.Whitespace +'(' Operator +' ' Text.Whitespace +"'returns'" Literal.String.Single +' ' Text.Whitespace +'rt' Name.Variable +'=' Operator +'ARG_ACTION' Name.Constant +' ' Text.Whitespace +')' Operator +'?' Operator +'\n\t\t' Text.Whitespace +'throwsSpec' Name.Variable +'?' Operator +' ' Text.Whitespace +'optionsSpec' Name.Variable +'?' Operator +' ' Text.Whitespace +'ruleScopeSpec' Name.Variable +'?' Operator +' ' Text.Whitespace +'ruleAction' Name.Variable +'*' Operator +'\n\t\t' Text.Whitespace +"':'" Literal.String.Single +'\t' Text.Whitespace +'altList' Name.Variable +'\t' Text.Whitespace +"';'" Literal.String.Single +'\n\t\t' Text.Whitespace +'exceptionGroup' Name.Variable +'?' Operator +'\n\t ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +' ' Text.Whitespace +'RULE' Name.Constant +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'{' Punctuation +'modifier!=null?adaptor.create(modifier):null' Other +'}' Punctuation +' ' Text.Whitespace +'^' Operator +'(' Operator +'ARG' Name.Constant +' ' Text.Whitespace +'$arg' Name.Variable +')' Operator +'?' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'RET' Name.Constant +' ' Text.Whitespace +'$rt' Name.Variable +')' Operator +'?' Operator +'\n\t \t ' Text.Whitespace +'optionsSpec' Name.Variable +'?' Operator +' ' Text.Whitespace +'ruleScopeSpec' Name.Variable +'?' Operator +' ' Text.Whitespace +'ruleAction' Name.Variable +'*' Operator +'\n\t \t ' Text.Whitespace +'altList' Name.Variable +'\n\t \t ' Text.Whitespace +'exceptionGroup' Name.Variable +'?' Operator +'\n\t \t ' Text.Whitespace +'EOR' Name.Constant +'[' Punctuation +'"EOR"' Other +']' Punctuation +'\n\t \t' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'/** Match stuff like @init {int i;} */' Comment +'\n' Text.Whitespace + +'ruleAction' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'@'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'ACTION' Name.Constant +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'@'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'ACTION' Name.Constant +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'throwsSpec' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'throws'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +"','" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +')' Operator +'*' Operator +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'throws'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +'+' Operator +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'ruleScopeSpec' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'scope'" Literal.String.Single +' ' Text.Whitespace +'ACTION' Name.Constant +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'scope'" Literal.String.Single +' ' Text.Whitespace +'ACTION' Name.Constant +')' Operator +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'scope'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'(' Operator +"','" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +')' Operator +'*' Operator +' ' Text.Whitespace +"';'" Literal.String.Single +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'scope'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +'+' Operator +')' Operator +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'scope'" Literal.String.Single +' ' Text.Whitespace +'ACTION' Name.Constant +'\n\t\t' Text.Whitespace +"'scope'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'(' Operator +"','" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +')' Operator +'*' Operator +' ' Text.Whitespace +"';'" Literal.String.Single +'\n\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'scope'" Literal.String.Single +' ' Text.Whitespace +'ACTION' Name.Constant +' ' Text.Whitespace +'id' Name.Variable +'+' Operator +' ' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'block' Name.Label +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'lp' Name.Variable +'=' Operator +"'('" Literal.String.Single +'\n\t\t' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'(' Operator +'opts' Name.Variable +'=' Operator +'optionsSpec' Name.Variable +')' Operator +'?' Operator +' ' Text.Whitespace +"':'" Literal.String.Single +' ' Text.Whitespace +')' Operator +'?' Operator +'\n\t\t' Text.Whitespace +'a1' Name.Variable +'=' Operator +'alternative' Name.Variable +' ' Text.Whitespace +'rewrite' Name.Variable +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +"'|'" Literal.String.Single +' ' Text.Whitespace +'a2' Name.Variable +'=' Operator +'alternative' Name.Variable +' ' Text.Whitespace +'rewrite' Name.Variable +' ' Text.Whitespace +')' Operator +'*' Operator +'\n ' Text.Whitespace +'rp' Name.Variable +'=' Operator +"')'" Literal.String.Single +'\n ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +' ' Text.Whitespace +'BLOCK' Name.Constant +'[' Punctuation +'$lp' Name.Variable +',"BLOCK"' Other +']' Punctuation +' ' Text.Whitespace +'optionsSpec' Name.Variable +'?' Operator +' ' Text.Whitespace +'alternative' Name.Variable +'+' Operator +' ' Text.Whitespace +'EOB' Name.Constant +'[' Punctuation +'$rp' Name.Variable +',"EOB"' Other +']' Punctuation +' ' Text.Whitespace +')' Operator +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'altList' Name.Label +'\n' Text.Whitespace + +'@init' Name.Label +' ' Text.Whitespace +'{' Punctuation +'\n\t// must create root manually as it\'s used by invoked rules in real antlr tool.\n\t// leave here to demonstrate use of {...} in rewrite rule\n\t// it\'s really BLOCK[firstToken,"BLOCK"]; set line/col to previous ( or : token.\n CommonTree blkRoot = (CommonTree)adaptor.create(BLOCK,input.LT(-1),"BLOCK");\n' Other + +'}' Punctuation +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'a1' Name.Variable +'=' Operator +'alternative' Name.Variable +' ' Text.Whitespace +'rewrite' Name.Variable +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +"'|'" Literal.String.Single +' ' Text.Whitespace +'a2' Name.Variable +'=' Operator +'alternative' Name.Variable +' ' Text.Whitespace +'rewrite' Name.Variable +' ' Text.Whitespace +')' Operator +'*' Operator +'\n\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +' ' Text.Whitespace +'{' Punctuation +'blkRoot' Other +'}' Punctuation +' ' Text.Whitespace +'(' Operator +'alternative' Name.Variable +' ' Text.Whitespace +'rewrite' Name.Variable +'?' Operator +')' Operator +'+' Operator +' ' Text.Whitespace +'EOB' Name.Constant +'[' Punctuation +'"EOB"' Other +']' Punctuation +' ' Text.Whitespace +')' Operator +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'alternative' Name.Label +'\n' Text.Whitespace + +'@init' Name.Label +' ' Text.Whitespace +'{' Punctuation +'\n\tToken firstToken = input.LT(1);\n\tToken prevToken = input.LT(-1); // either : or | I think\n' Other + +'}' Punctuation +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'element' Name.Variable +'+' Operator +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'ALT' Name.Constant +'[' Punctuation +'firstToken,"ALT"' Other +']' Punctuation +' ' Text.Whitespace +'element' Name.Variable +'+' Operator +' ' Text.Whitespace +'EOA' Name.Constant +'[' Punctuation +'"EOA"' Other +']' Punctuation +')' Operator +'\n ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'ALT' Name.Constant +'[' Punctuation +'prevToken,"ALT"' Other +']' Punctuation +' ' Text.Whitespace +'EPSILON' Name.Constant +'[' Punctuation +'prevToken,"EPSILON"' Other +']' Punctuation +' ' Text.Whitespace +'EOA' Name.Constant +'[' Punctuation +'"EOA"' Other +']' Punctuation +')' Operator +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'exceptionGroup' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'exceptionHandler' Name.Variable +' ' Text.Whitespace +')' Operator +'+' Operator +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'finallyClause' Name.Variable +' ' Text.Whitespace +')' Operator +'?' Operator +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'finallyClause' Name.Variable +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'exceptionHandler' Name.Label +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +"'catch'" Literal.String.Single +' ' Text.Whitespace +'ARG_ACTION' Name.Constant +' ' Text.Whitespace +'ACTION' Name.Constant +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'catch'" Literal.String.Single +' ' Text.Whitespace +'ARG_ACTION' Name.Constant +' ' Text.Whitespace +'ACTION' Name.Constant +')' Operator +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'finallyClause' Name.Label +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +"'finally'" Literal.String.Single +' ' Text.Whitespace +'ACTION' Name.Constant +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'finally'" Literal.String.Single +' ' Text.Whitespace +'ACTION' Name.Constant +')' Operator +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'element' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'elementNoOptionSpec' Name.Variable +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'elementNoOptionSpec' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'(' Operator +'labelOp' Name.Variable +'=' Operator +"'='" Literal.String.Single +'|' Operator +'labelOp' Name.Variable +'=' Operator +"'+='" Literal.String.Single +')' Operator +' ' Text.Whitespace +'atom' Name.Variable +'\n\t\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +'ebnfSuffix' Name.Variable +'\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +' ' Text.Whitespace +'ebnfSuffix' Name.Variable +' ' Text.Whitespace +'^' Operator +'(' Operator +'BLOCK' Name.Constant +'[' Punctuation +'"BLOCK"' Other +']' Punctuation +' ' Text.Whitespace +'^' Operator +'(' Operator +'ALT' Name.Constant +'[' Punctuation +'"ALT"' Other +']' Punctuation +' ' Text.Whitespace +'^' Operator +'(' Operator +'$labelOp' Name.Variable +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'atom' Name.Variable +')' Operator +' ' Text.Whitespace +'EOA' Name.Constant +'[' Punctuation +'"EOA"' Other +']' Punctuation +')' Operator +' ' Text.Whitespace +'EOB' Name.Constant +'[' Punctuation +'"EOB"' Other +']' Punctuation +')' Operator +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +'\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'$labelOp' Name.Variable +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'atom' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'(' Operator +'labelOp' Name.Variable +'=' Operator +"'='" Literal.String.Single +'|' Operator +'labelOp' Name.Variable +'=' Operator +"'+='" Literal.String.Single +')' Operator +' ' Text.Whitespace +'block' Name.Variable +'\n\t\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +'ebnfSuffix' Name.Variable +'\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +' ' Text.Whitespace +'ebnfSuffix' Name.Variable +' ' Text.Whitespace +'^' Operator +'(' Operator +'BLOCK' Name.Constant +'[' Punctuation +'"BLOCK"' Other +']' Punctuation +' ' Text.Whitespace +'^' Operator +'(' Operator +'ALT' Name.Constant +'[' Punctuation +'"ALT"' Other +']' Punctuation +' ' Text.Whitespace +'^' Operator +'(' Operator +'$labelOp' Name.Variable +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'block' Name.Variable +')' Operator +' ' Text.Whitespace +'EOA' Name.Constant +'[' Punctuation +'"EOA"' Other +']' Punctuation +')' Operator +' ' Text.Whitespace +'EOB' Name.Constant +'[' Punctuation +'"EOB"' Other +']' Punctuation +')' Operator +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +'\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'$labelOp' Name.Variable +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'block' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'atom' Name.Variable +'\n\t\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +'ebnfSuffix' Name.Variable +'\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'BLOCK' Name.Constant +'[' Punctuation +'"BLOCK"' Other +']' Punctuation +' ' Text.Whitespace +'^' Operator +'(' Operator +'ALT' Name.Constant +'[' Punctuation +'"ALT"' Other +']' Punctuation +' ' Text.Whitespace +'atom' Name.Variable +' ' Text.Whitespace +'EOA' Name.Constant +'[' Punctuation +'"EOA"' Other +']' Punctuation +')' Operator +' ' Text.Whitespace +'EOB' Name.Constant +'[' Punctuation +'"EOB"' Other +']' Punctuation +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +'\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'atom' Name.Variable +'\n\t\t' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'ebnf' Name.Variable +'\n\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'ACTION' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'SEMPRED' Name.Constant +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +"'=>'" Literal.String.Single +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'GATED_SEMPRED' Name.Constant +' ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'SEMPRED' Name.Constant +' ' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'treeSpec' Name.Variable +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'atom' Name.Label +':' Punctuation +' ' Text.Whitespace +'range' Name.Variable +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'(' Operator +'op' Name.Variable +'=' Operator +"'^'" Literal.String.Single +'|' Operator +'op' Name.Variable +'=' Operator +"'!'" Literal.String.Single +')' Operator +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'$op' Name.Variable +' ' Text.Whitespace +'range' Name.Variable +')' Operator +' ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'range' Name.Variable +' ' Text.Whitespace +')' Operator +'\n ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'terminal' Name.Variable +'\n ' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'notSet' Name.Variable +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'(' Operator +'op' Name.Variable +'=' Operator +"'^'" Literal.String.Single +'|' Operator +'op' Name.Variable +'=' Operator +"'!'" Literal.String.Single +')' Operator +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'$op' Name.Variable +' ' Text.Whitespace +'notSet' Name.Variable +')' Operator +' ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'notSet' Name.Variable +' ' Text.Whitespace +')' Operator +'\n ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'RULE_REF' Name.Constant +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'arg' Name.Variable +'=' Operator +'ARG_ACTION' Name.Constant +' ' Text.Whitespace +')' Operator +'?' Operator +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'(' Operator +'op' Name.Variable +'=' Operator +"'^'" Literal.String.Single +'|' Operator +'op' Name.Variable +'=' Operator +"'!'" Literal.String.Single +')' Operator +' ' Text.Whitespace +')' Operator +'?' Operator +'\n \t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'{' Punctuation +'$arg' Name.Variable +'!=null&&op!=null' Other +'}' Punctuation +'?' Operator +'\t' Text.Whitespace +'^' Operator +'(' Operator +'$op' Name.Variable +' ' Text.Whitespace +'RULE_REF' Name.Constant +' ' Text.Whitespace +'$arg' Name.Variable +')' Operator +'\n \t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'{' Punctuation +'$arg' Name.Variable +'!=null' Other +'}' Punctuation +'?' Operator +'\t\t\t' Text.Whitespace +'^' Operator +'(' Operator +'RULE_REF' Name.Constant +' ' Text.Whitespace +'$arg' Name.Variable +')' Operator +'\n \t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'{' Punctuation +'$op' Name.Variable +'!=null' Other +'}' Punctuation +'?' Operator +'\t\t\t\t' Text.Whitespace +'^' Operator +'(' Operator +'$op' Name.Variable +' ' Text.Whitespace +'RULE_REF' Name.Constant +')' Operator +'\n \t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'RULE_REF' Name.Constant +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'notSet' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'~'" Literal.String.Single +'\n\t\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +'notTerminal' Name.Variable +'\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'~'" Literal.String.Single +' ' Text.Whitespace +'notTerminal' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'block' Name.Variable +'\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'~'" Literal.String.Single +' ' Text.Whitespace +'block' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'treeSpec' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'^('" Literal.String.Single +' ' Text.Whitespace +'element' Name.Variable +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'element' Name.Variable +' ' Text.Whitespace +')' Operator +'+' Operator +' ' Text.Whitespace +"')'" Literal.String.Single +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'TREE_BEGIN' Name.Constant +' ' Text.Whitespace +'element' Name.Variable +'+' Operator +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'/** Matches ENBF blocks (and token sets via block rule) */' Comment +'\n' Text.Whitespace + +'ebnf' Name.Label +'\n' Text.Whitespace + +'@init' Name.Label +' ' Text.Whitespace +'{' Punctuation +'\n Token firstToken = input.LT(1);\n' Other + +'}' Punctuation +'\n' Text.Whitespace + +'@after' Name.Label +' ' Text.Whitespace +'{' Punctuation +'\n\t' Other +'$ebnf' Name.Variable +'.' Punctuation +'tree.getToken().setLine(firstToken.getLine());\n\t' Other +'$ebnf' Name.Variable +'.' Punctuation +'tree.getToken().setCharPositionInLine(firstToken.getCharPositionInLine());\n' Other + +'}' Punctuation +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'block' Name.Variable +' ' Text.Whitespace +'{' Punctuation +'Token op=input.LT(1);' Other +'}' Punctuation +'\n\t\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +"'?'" Literal.String.Single +'\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'OPTIONAL' Name.Constant +'[' Punctuation +'op' Other +']' Punctuation +' ' Text.Whitespace +'block' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'*'" Literal.String.Single +'\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'CLOSURE' Name.Constant +'[' Punctuation +'op' Other +']' Punctuation +' ' Text.Whitespace +'block' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'+'" Literal.String.Single +'\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'POSITIVE_CLOSURE' Name.Constant +'[' Punctuation +'op' Other +']' Punctuation +' ' Text.Whitespace +'block' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +"'^'" Literal.String.Single +'\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'^'" Literal.String.Single +' ' Text.Whitespace +'block' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +"'!'" Literal.String.Single +'\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'!'" Literal.String.Single +' ' Text.Whitespace +'block' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +"'=>'" Literal.String.Single +'\t' Text.Whitespace +'// syntactic predicate' Comment +'\n\t\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'{' Punctuation +'gtype==COMBINED_GRAMMAR &&\n\t\t\t\t\t Character.isUpperCase(' Other +'$rule' Name.Variable +'::name.charAt(0))' Other +'}' Punctuation +'?' Operator +'\n\t\t\t\t\t ' Text.Whitespace +'// if lexer rule in combined, leave as pred for lexer' Comment +'\n\t\t\t\t\t ' Text.Whitespace +'^' Operator +'(' Operator +'SYNPRED' Name.Constant +'[' Punctuation +'"=>"' Other +']' Punctuation +' ' Text.Whitespace +'block' Name.Variable +')' Operator +'\n\t\t\t\t\t' Text.Whitespace +'// in real antlr tool, text for SYN_SEMPRED is predname' Comment +'\n\t\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'SYN_SEMPRED' Name.Constant +'\n ' Text.Whitespace +'|' Operator +'\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'block' Name.Variable +'\n\t\t' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'range' Name.Label +'!' Punctuation +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'c1' Name.Variable +'=' Operator +'CHAR_LITERAL' Name.Constant +' ' Text.Whitespace +'RANGE' Name.Constant +' ' Text.Whitespace +'c2' Name.Variable +'=' Operator +'CHAR_LITERAL' Name.Constant +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'CHAR_RANGE' Name.Constant +'[' Punctuation +'$c' Name.Variable +'1,".."' Other +']' Punctuation +' ' Text.Whitespace +'$c1' Name.Variable +' ' Text.Whitespace +'$c2' Name.Variable +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'terminal' Name.Label +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +'CHAR_LITERAL' Name.Constant +'\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'CHAR_LITERAL' Name.Constant +'\n \t\t' Text.Whitespace +'// Args are only valid for lexer rules' Comment +'\n\t\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'TOKEN_REF' Name.Constant +'\n\t\t\t' Text.Whitespace +'(' Operator +' ' Text.Whitespace +'ARG_ACTION' Name.Constant +'\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'TOKEN_REF' Name.Constant +' ' Text.Whitespace +'ARG_ACTION' Name.Constant +')' Operator +'\n\t\t\t' Text.Whitespace +'|' Operator +'\t\t\t\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'TOKEN_REF' Name.Constant +'\n\t\t\t' Text.Whitespace +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'STRING_LITERAL' Name.Constant +'\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'STRING_LITERAL' Name.Constant +'\n\t\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +"'.'" Literal.String.Single +'\t\t\t\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +"'.'" Literal.String.Single +'\n\t\t' Text.Whitespace +')' Operator +'\t\n\t\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +"'^'" Literal.String.Single +'\t\t\t\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'^'" Literal.String.Single +' ' Text.Whitespace +'$terminal' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'!'" Literal.String.Single +' \t\t\t\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +"'!'" Literal.String.Single +' ' Text.Whitespace +'$terminal' Name.Variable +')' Operator +'\n\t\t' Text.Whitespace +')' Operator +'?' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'notTerminal' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'CHAR_LITERAL' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'TOKEN_REF' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'STRING_LITERAL' Name.Constant +'\n\t' Text.Whitespace +';' Punctuation +'\n\t\n' Text.Whitespace + +'ebnfSuffix' Name.Label +'\n' Text.Whitespace + +'@init' Name.Label +' ' Text.Whitespace +'{' Punctuation +'\n\tToken op = input.LT(1);\n' Other + +'}' Punctuation +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'?'" Literal.String.Single +'\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'OPTIONAL' Name.Constant +'[' Punctuation +'op' Other +']' Punctuation +'\n \t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'*'" Literal.String.Single +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'CLOSURE' Name.Constant +'[' Punctuation +'op' Other +']' Punctuation +'\n \t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'+'" Literal.String.Single +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'POSITIVE_CLOSURE' Name.Constant +'[' Punctuation +'op' Other +']' Punctuation +'\n\t' Text.Whitespace +';' Punctuation +'\n\t\n\n\n' Text.Whitespace + +'// R E W R I T E S Y N T A X' Comment +'\n\n' Text.Whitespace + +'rewrite' Name.Label +'\n' Text.Whitespace + +'@init' Name.Label +' ' Text.Whitespace +'{' Punctuation +'\n\tToken firstToken = input.LT(1);\n' Other + +'}' Punctuation +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'(' Operator +'rew' Name.Variable +'+' Operator +'=' Operator +"'->'" Literal.String.Single +' ' Text.Whitespace +'preds' Name.Variable +'+' Operator +'=' Operator +'SEMPRED' Name.Constant +' ' Text.Whitespace +'predicated' Name.Variable +'+' Operator +'=' Operator +'rewrite_alternative' Name.Variable +')' Operator +'*' Operator +'\n\t\t' Text.Whitespace +'rew2' Name.Variable +'=' Operator +"'->'" Literal.String.Single +' ' Text.Whitespace +'last' Name.Variable +'=' Operator +'rewrite_alternative' Name.Variable +'\n ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'$rew' Name.Variable +' ' Text.Whitespace +'$preds' Name.Variable +' ' Text.Whitespace +'$predicated' Name.Variable +')' Operator +'*' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'$rew2' Name.Variable +' ' Text.Whitespace +'$last' Name.Variable +')' Operator +'\n\t' Text.Whitespace +'|' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'rewrite_alternative' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'rewrite_template' Name.Variable +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'rewrite_tree_alternative' Name.Variable +'\n \t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'/* empty rewrite */' Comment +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'ALT' Name.Constant +'[' Punctuation +'"ALT"' Other +']' Punctuation +' ' Text.Whitespace +'EPSILON' Name.Constant +'[' Punctuation +'"EPSILON"' Other +']' Punctuation +' ' Text.Whitespace +'EOA' Name.Constant +'[' Punctuation +'"EOA"' Other +']' Punctuation +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\t\n' Text.Whitespace + +'rewrite_template_block' Name.Label +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'lp' Name.Variable +'=' Operator +"'('" Literal.String.Single +' ' Text.Whitespace +'rewrite_template' Name.Variable +' ' Text.Whitespace +"')'" Literal.String.Single +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'BLOCK' Name.Constant +'[' Punctuation +'$lp' Name.Variable +',"BLOCK"' Other +']' Punctuation +' ' Text.Whitespace +'rewrite_template' Name.Variable +' ' Text.Whitespace +'EOB' Name.Constant +'[' Punctuation +'$lp' Name.Variable +',"EOB"' Other +']' Punctuation +')' Operator +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'rewrite_tree_block' Name.Label +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'lp' Name.Variable +'=' Operator +"'('" Literal.String.Single +' ' Text.Whitespace +'rewrite_tree_alternative' Name.Variable +' ' Text.Whitespace +"')'" Literal.String.Single +'\n \t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'BLOCK' Name.Constant +'[' Punctuation +'$lp' Name.Variable +',"BLOCK"' Other +']' Punctuation +' ' Text.Whitespace +'rewrite_tree_alternative' Name.Variable +' ' Text.Whitespace +'EOB' Name.Constant +'[' Punctuation +'$lp' Name.Variable +',"EOB"' Other +']' Punctuation +')' Operator +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'rewrite_tree_alternative' Name.Label +'\n ' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'rewrite_tree_element' Name.Variable +'+' Operator +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'ALT' Name.Constant +'[' Punctuation +'"ALT"' Other +']' Punctuation +' ' Text.Whitespace +'rewrite_tree_element' Name.Variable +'+' Operator +' ' Text.Whitespace +'EOA' Name.Constant +'[' Punctuation +'"EOA"' Other +']' Punctuation +')' Operator +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'rewrite_tree_element' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'rewrite_tree_atom' Name.Variable +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'rewrite_tree_atom' Name.Variable +' ' Text.Whitespace +'ebnfSuffix' Name.Variable +'\n\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +' ' Text.Whitespace +'ebnfSuffix' Name.Variable +' ' Text.Whitespace +'^' Operator +'(' Operator +'BLOCK' Name.Constant +'[' Punctuation +'"BLOCK"' Other +']' Punctuation +' ' Text.Whitespace +'^' Operator +'(' Operator +'ALT' Name.Constant +'[' Punctuation +'"ALT"' Other +']' Punctuation +' ' Text.Whitespace +'rewrite_tree_atom' Name.Variable +' ' Text.Whitespace +'EOA' Name.Constant +'[' Punctuation +'"EOA"' Other +']' Punctuation +')' Operator +' ' Text.Whitespace +'EOB' Name.Constant +'[' Punctuation +'"EOB"' Other +']' Punctuation +')' Operator +')' Operator +'\n\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'rewrite_tree' Name.Variable +'\n\t\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +'ebnfSuffix' Name.Variable +'\n\t\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'BLOCK' Name.Constant +'[' Punctuation +'"BLOCK"' Other +']' Punctuation +' ' Text.Whitespace +'^' Operator +'(' Operator +'ALT' Name.Constant +'[' Punctuation +'"ALT"' Other +']' Punctuation +' ' Text.Whitespace +'rewrite_tree' Name.Variable +' ' Text.Whitespace +'EOA' Name.Constant +'[' Punctuation +'"EOA"' Other +']' Punctuation +')' Operator +' ' Text.Whitespace +'EOB' Name.Constant +'[' Punctuation +'"EOB"' Other +']' Punctuation +')' Operator +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'rewrite_tree' Name.Variable +'\n\t\t' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'rewrite_tree_ebnf' Name.Variable +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'rewrite_tree_atom' Name.Label +'\n ' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'CHAR_LITERAL' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'TOKEN_REF' Name.Constant +' ' Text.Whitespace +'ARG_ACTION' Name.Constant +'?' Operator +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'TOKEN_REF' Name.Constant +' ' Text.Whitespace +'ARG_ACTION' Name.Constant +'?' Operator +')' Operator +' ' Text.Whitespace +'// for imaginary nodes' Comment +'\n ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'RULE_REF' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'STRING_LITERAL' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'d' Name.Variable +'=' Operator +"'$'" Literal.String.Single +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'LABEL' Name.Constant +'[' Punctuation +'$d' Name.Variable +',' Other +'$id' Name.Variable +'.' Punctuation +'text' Name.Property +']' Punctuation +' ' Text.Whitespace +'// reference to a label in a rewrite rule' Comment +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'ACTION' Name.Constant +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'rewrite_tree_ebnf' Name.Label +'\n' Text.Whitespace + +'@init' Name.Label +' ' Text.Whitespace +'{' Punctuation +'\n Token firstToken = input.LT(1);\n' Other + +'}' Punctuation +'\n' Text.Whitespace + +'@after' Name.Label +' ' Text.Whitespace +'{' Punctuation +'\n\t' Other +'$rewrite' Name.Variable +'_tree_ebnf.tree.getToken().setLine(firstToken.getLine());\n\t' Other +'$rewrite' Name.Variable +'_tree_ebnf.tree.getToken().setCharPositionInLine(firstToken.getCharPositionInLine());\n' Other + +'}' Punctuation +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'rewrite_tree_block' Name.Variable +' ' Text.Whitespace +'ebnfSuffix' Name.Variable +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'ebnfSuffix' Name.Variable +' ' Text.Whitespace +'rewrite_tree_block' Name.Variable +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\t\n' Text.Whitespace + +'rewrite_tree' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'^('" Literal.String.Single +' ' Text.Whitespace +'rewrite_tree_atom' Name.Variable +' ' Text.Whitespace +'rewrite_tree_element' Name.Variable +'*' Operator +' ' Text.Whitespace +"')'" Literal.String.Single +'\n\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'TREE_BEGIN' Name.Constant +' ' Text.Whitespace +'rewrite_tree_atom' Name.Variable +' ' Text.Whitespace +'rewrite_tree_element' Name.Variable +'*' Operator +' ' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'/** Build a tree for a template rewrite:\n ^(TEMPLATE (ID|ACTION) ^(ARGLIST ^(ARG ID ACTION) ...) )\n where ARGLIST is always there even if no args exist.\n ID can be "template" keyword. If first child is ACTION then it\'s\n an indirect template ref\n\n -> foo(a={...}, b={...})\n -> ({string-e})(a={...}, b={...}) // e evaluates to template name\n -> {%{$ID.text}} // create literal template from string (done in ActionTranslator)\n\t-> {st-expr} // st-expr evaluates to ST\n */' Comment +'\n' Text.Whitespace + +'rewrite_template' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'// -> template(a={...},...) "..." inline template' Comment +'\n\t\t' Text.Whitespace +'{' Punctuation +'input.LT(1).getText().equals("template")' Other +'}' Punctuation +'?' Operator +'\n\t\t' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'lp' Name.Variable +'=' Operator +"'('" Literal.String.Single +' ' Text.Whitespace +'rewrite_template_args' Name.Variable +'\t' Text.Whitespace +"')'" Literal.String.Single +'\n\t\t' Text.Whitespace +'st' Name.Variable +'=' Operator +'(' Operator +' ' Text.Whitespace +'DOUBLE_QUOTE_STRING_LITERAL' Name.Constant +' ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'DOUBLE_ANGLE_STRING_LITERAL' Name.Constant +' ' Text.Whitespace +')' Operator +'\n\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'TEMPLATE' Name.Constant +'[' Punctuation +'$lp' Name.Variable +',"TEMPLATE"' Other +']' Punctuation +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'rewrite_template_args' Name.Variable +' ' Text.Whitespace +'$st' Name.Variable +')' Operator +'\n\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'// -> foo(a={...}, ...)' Comment +'\n\t\t' Text.Whitespace +'rewrite_template_ref' Name.Variable +'\n\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'// -> ({expr})(a={...}, ...)' Comment +'\n\t\t' Text.Whitespace +'rewrite_indirect_template_head' Name.Variable +'\n\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'// -> {...}' Comment +'\n\t\t' Text.Whitespace +'ACTION' Name.Constant +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'/** -> foo(a={...}, ...) */' Comment +'\n' Text.Whitespace + +'rewrite_template_ref' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'lp' Name.Variable +'=' Operator +"'('" Literal.String.Single +' ' Text.Whitespace +'rewrite_template_args' Name.Variable +'\t' Text.Whitespace +"')'" Literal.String.Single +'\n\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'TEMPLATE' Name.Constant +'[' Punctuation +'$lp' Name.Variable +',"TEMPLATE"' Other +']' Punctuation +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'rewrite_template_args' Name.Variable +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'/** -> ({expr})(a={...}, ...) */' Comment +'\n' Text.Whitespace + +'rewrite_indirect_template_head' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'lp' Name.Variable +'=' Operator +"'('" Literal.String.Single +' ' Text.Whitespace +'ACTION' Name.Constant +' ' Text.Whitespace +"')'" Literal.String.Single +' ' Text.Whitespace +"'('" Literal.String.Single +' ' Text.Whitespace +'rewrite_template_args' Name.Variable +' ' Text.Whitespace +"')'" Literal.String.Single +'\n\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'TEMPLATE' Name.Constant +'[' Punctuation +'$lp' Name.Variable +',"TEMPLATE"' Other +']' Punctuation +' ' Text.Whitespace +'ACTION' Name.Constant +' ' Text.Whitespace +'rewrite_template_args' Name.Variable +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'rewrite_template_args' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'rewrite_template_arg' Name.Variable +' ' Text.Whitespace +'(' Operator +"','" Literal.String.Single +' ' Text.Whitespace +'rewrite_template_arg' Name.Variable +')' Operator +'*' Operator +'\n\t\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'ARGLIST' Name.Constant +' ' Text.Whitespace +'rewrite_template_arg' Name.Variable +'+' Operator +')' Operator +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'ARGLIST' Name.Constant +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'rewrite_template_arg' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +"'='" Literal.String.Single +' ' Text.Whitespace +'ACTION' Name.Constant +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'^' Operator +'(' Operator +'ARG' Name.Constant +'[' Punctuation +'$id' Name.Variable +'.' Punctuation +'start' Other +']' Punctuation +' ' Text.Whitespace +'id' Name.Variable +' ' Text.Whitespace +'ACTION' Name.Constant +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'id' Name.Label +'\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'TOKEN_REF' Name.Constant +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'ID' Name.Constant +'[' Punctuation +'$TOKEN' Name.Variable +'_REF' Other +']' Punctuation +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'RULE_REF' Name.Constant +' ' Text.Whitespace +'->' Operator +' ' Text.Whitespace +'ID' Name.Constant +'[' Punctuation +'$RULE' Name.Variable +'_REF' Other +']' Punctuation +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'// L E X I C A L R U L E S' Comment +'\n\n' Text.Whitespace + +'SL_COMMENT' Name.Label +'\n \t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'//'" Literal.String.Single +'\n \t \t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +"' $ANTLR '" Literal.String.Single +' ' Text.Whitespace +'SRC' Name.Constant +' ' Text.Whitespace +'// src directive' Comment +'\n \t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'~' Operator +'(' Operator +"'\\r'" Literal.String.Single +'|' Operator +"'\\n'" Literal.String.Single +')' Operator +'*' Operator +'\n\t\t' Text.Whitespace +')' Operator +'\n\t\t' Text.Whitespace +"'\\r'" Literal.String.Single +'?' Operator +' ' Text.Whitespace +"'\\n'" Literal.String.Single +'\n\t\t' Text.Whitespace +'{' Punctuation +'$channel' Name.Variable +'=HIDDEN;' Other +'}' Punctuation +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'ML_COMMENT' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'/*'" Literal.String.Single +' ' Text.Whitespace +'{' Punctuation +"if (input.LA(1)=='*') " Other +'$type' Name.Variable +'=DOC_COMMENT; else ' Other +'$channel' Name.Variable +'=HIDDEN;' Other +'}' Punctuation +' ' Text.Whitespace +'.' Operator +'*' Operator +' ' Text.Whitespace +"'*/'" Literal.String.Single +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'CHAR_LITERAL' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'\\''" Literal.String.Single +' ' Text.Whitespace +'LITERAL_CHAR' Name.Constant +' ' Text.Whitespace +"'\\''" Literal.String.Single +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'STRING_LITERAL' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'\\''" Literal.String.Single +' ' Text.Whitespace +'LITERAL_CHAR' Name.Constant +' ' Text.Whitespace +'LITERAL_CHAR' Name.Constant +'*' Operator +' ' Text.Whitespace +"'\\''" Literal.String.Single +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'fragment' Keyword +'\n' Text.Whitespace + +'LITERAL_CHAR' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'ESC' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'~' Operator +'(' Operator +"'\\''" Literal.String.Single +'|' Operator +"'\\\\'" Literal.String.Single +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'DOUBLE_QUOTE_STRING_LITERAL' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'\'"\'' Literal.String.Single +' ' Text.Whitespace +'LITERAL_CHAR' Name.Constant +'*' Operator +' ' Text.Whitespace +'\'"\'' Literal.String.Single +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'DOUBLE_ANGLE_STRING_LITERAL' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'<<'" Literal.String.Single +' ' Text.Whitespace +'.' Operator +'*' Operator +' ' Text.Whitespace +"'>>'" Literal.String.Single +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'fragment' Keyword +'\n' Text.Whitespace + +'ESC' Name.Label +'\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'\\\\'" Literal.String.Single +'\n\t\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +"'n'" Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'r'" Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'t'" Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'b'" Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'f'" Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'\'"\'' Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'\\''" Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'\\\\'" Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'>'" Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'u'" Literal.String.Single +' ' Text.Whitespace +'XDIGIT' Name.Constant +' ' Text.Whitespace +'XDIGIT' Name.Constant +' ' Text.Whitespace +'XDIGIT' Name.Constant +' ' Text.Whitespace +'XDIGIT' Name.Constant +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'.' Operator +' ' Text.Whitespace +'// unknown, leave as it is' Comment +'\n\t\t' Text.Whitespace +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'fragment' Keyword +'\n' Text.Whitespace + +'XDIGIT' Name.Label +' ' Text.Whitespace +':' Punctuation +'\n\t\t' Text.Whitespace +"'0'" Literal.String.Single +' ' Text.Whitespace +'..' Operator +' ' Text.Whitespace +"'9'" Literal.String.Single +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'a'" Literal.String.Single +' ' Text.Whitespace +'..' Operator +' ' Text.Whitespace +"'f'" Literal.String.Single +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'A'" Literal.String.Single +' ' Text.Whitespace +'..' Operator +' ' Text.Whitespace +"'F'" Literal.String.Single +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'INT' Name.Label +'\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'0'" Literal.String.Single +'..' Operator +"'9'" Literal.String.Single +'+' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'ARG_ACTION' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'NESTED_ARG_ACTION' Name.Constant +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'fragment' Keyword +'\n' Text.Whitespace + +'NESTED_ARG_ACTION' Name.Label +' ' Text.Whitespace +':' Punctuation +'\n\t' Text.Whitespace +"'['" Literal.String.Single +'\n\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +'options' Keyword +' ' Text.Whitespace +'{' Punctuation +'greedy' Name.Variable +'=' Punctuation +'false' Text +';' Punctuation +' ' Text.Whitespace +'k' Name.Variable +'=' Punctuation +'1' Text +';' Punctuation +'}' Punctuation +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'NESTED_ARG_ACTION' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'ACTION_STRING_LITERAL' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'ACTION_CHAR_LITERAL' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'.' Operator +'\n\t' Text.Whitespace +')' Operator +'*' Operator +'\n\t' Text.Whitespace +"']'" Literal.String.Single +'\n\t' Text.Whitespace +'{' Punctuation +'setText(getText().substring(1, getText().length()-1));' Other +'}' Punctuation +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'ACTION' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'NESTED_ACTION' Name.Constant +' ' Text.Whitespace +'(' Operator +' ' Text.Whitespace +"'?'" Literal.String.Single +' ' Text.Whitespace +'{' Punctuation +'$type' Name.Variable +' = SEMPRED;' Other +'}' Punctuation +' ' Text.Whitespace +')' Operator +'?' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'fragment' Keyword +'\n' Text.Whitespace + +'NESTED_ACTION' Name.Label +' ' Text.Whitespace +':' Punctuation +'\n\t' Text.Whitespace +"'{'" Literal.String.Single +'\n\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +'options' Keyword +' ' Text.Whitespace +'{' Punctuation +'greedy' Name.Variable +'=' Punctuation +'false' Text +';' Punctuation +' ' Text.Whitespace +'k' Name.Variable +'=' Punctuation +'3' Text +';' Punctuation +'}' Punctuation +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'NESTED_ACTION' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'SL_COMMENT' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'ML_COMMENT' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'ACTION_STRING_LITERAL' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'ACTION_CHAR_LITERAL' Name.Constant +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'.' Operator +'\n\t' Text.Whitespace +')' Operator +'*' Operator +'\n\t' Text.Whitespace +"'}'" Literal.String.Single +'\n\t' Text.Whitespace +'{' Punctuation +'$channel' Name.Variable +' = DEFAULT_TOKEN_CHANNEL;' Other +'}' Punctuation +'\n ' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'fragment' Keyword +'\n' Text.Whitespace + +'ACTION_CHAR_LITERAL' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'\\''" Literal.String.Single +' ' Text.Whitespace +'(' Operator +'ACTION_ESC' Name.Constant +'|' Operator +'~' Operator +'(' Operator +"'\\\\'" Literal.String.Single +'|' Operator +"'\\''" Literal.String.Single +')' Operator +')' Operator +' ' Text.Whitespace +"'\\''" Literal.String.Single +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'fragment' Keyword +'\n' Text.Whitespace + +'ACTION_STRING_LITERAL' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'\'"\'' Literal.String.Single +' ' Text.Whitespace +'(' Operator +'ACTION_ESC' Name.Constant +'|' Operator +'~' Operator +'(' Operator +"'\\\\'" Literal.String.Single +'|' Operator +'\'"\'' Literal.String.Single +')' Operator +')' Operator +'+' Operator +' ' Text.Whitespace +'\'"\'' Literal.String.Single +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'fragment' Keyword +'\n' Text.Whitespace + +'ACTION_ESC' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'\\\\\\''" Literal.String.Single +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'\'\\\\"\'' Literal.String.Single +'\n\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'\\\\'" Literal.String.Single +' ' Text.Whitespace +'~' Operator +'(' Operator +"'\\''" Literal.String.Single +'|' Operator +'\'"\'' Literal.String.Single +')' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'TOKEN_REF' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'A'" Literal.String.Single +'..' Operator +"'Z'" Literal.String.Single +' ' Text.Whitespace +'(' Operator +"'a'" Literal.String.Single +'..' Operator +"'z'" Literal.String.Single +'|' Operator +"'A'" Literal.String.Single +'..' Operator +"'Z'" Literal.String.Single +'|' Operator +"'_'" Literal.String.Single +'|' Operator +"'0'" Literal.String.Single +'..' Operator +"'9'" Literal.String.Single +')' Operator +'*' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'RULE_REF' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'a'" Literal.String.Single +'..' Operator +"'z'" Literal.String.Single +' ' Text.Whitespace +'(' Operator +"'a'" Literal.String.Single +'..' Operator +"'z'" Literal.String.Single +'|' Operator +"'A'" Literal.String.Single +'..' Operator +"'Z'" Literal.String.Single +'|' Operator +"'_'" Literal.String.Single +'|' Operator +"'0'" Literal.String.Single +'..' Operator +"'9'" Literal.String.Single +')' Operator +'*' Operator +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +"/** Match the start of an options section. Don't allow normal\n * action processing on the {...} as it's not a action.\n */" Comment +'\n' Text.Whitespace + +'OPTIONS' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'options'" Literal.String.Single +' ' Text.Whitespace +'WS_LOOP' Name.Constant +' ' Text.Whitespace +"'{'" Literal.String.Single +' ' Text.Whitespace +'{' Punctuation +'$channel' Name.Variable +'=DEFAULT_TOKEN_CHANNEL;' Other +'}' Punctuation +' ' Text.Whitespace +'// WS_LOOP sets channel' Comment +'\n\t' Text.Whitespace +';' Punctuation +'\n\t\n' Text.Whitespace + +'TOKENS' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'tokens'" Literal.String.Single +' ' Text.Whitespace +'WS_LOOP' Name.Constant +' ' Text.Whitespace +"'{'" Literal.String.Single +' ' Text.Whitespace +'{' Punctuation +'$channel' Name.Variable +'=DEFAULT_TOKEN_CHANNEL;' Other +'}' Punctuation +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'/** Reset the file and line information; useful when the grammar\n * has been generated so that errors are shown relative to the\n * original file like the old C preprocessor used to do.\n */' Comment +'\n' Text.Whitespace + +'fragment' Keyword +'\n' Text.Whitespace + +'SRC' Name.Label +'\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +"'src'" Literal.String.Single +' ' Text.Whitespace +"' '" Literal.String.Single +' ' Text.Whitespace +'file' Name.Variable +'=' Operator +'ACTION_STRING_LITERAL' Name.Constant +' ' Text.Whitespace +"' '" Literal.String.Single +' ' Text.Whitespace +'line' Name.Variable +'=' Operator +'INT' Name.Constant +' ' Text.Whitespace +'{' Punctuation +'$channel' Name.Variable +'=HIDDEN;' Other +'}' Punctuation +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'WS' Name.Label +'\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +"' '" Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'\\t'" Literal.String.Single +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +"'\\r'" Literal.String.Single +'?' Operator +' ' Text.Whitespace +"'\\n'" Literal.String.Single +'\n\t\t' Text.Whitespace +')' Operator +'+' Operator +'\n\t\t' Text.Whitespace +'{' Punctuation +'$channel' Name.Variable +'=HIDDEN;' Other +'}' Punctuation +'\n\t' Text.Whitespace +';' Punctuation +'\n\n' Text.Whitespace + +'fragment' Keyword +'\n' Text.Whitespace + +'WS_LOOP' Name.Label +'\n\t' Text.Whitespace +':' Punctuation +'\t' Text.Whitespace +'(' Operator +'\t' Text.Whitespace +'WS' Name.Constant +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'SL_COMMENT' Name.Constant +'\n\t\t' Text.Whitespace +'|' Operator +'\t' Text.Whitespace +'ML_COMMENT' Name.Constant +'\n\t\t' Text.Whitespace +')' Operator +'*' Operator +'\n\t\t' Text.Whitespace +'{' Punctuation +'$channel' Name.Variable +'=HIDDEN;' Other +'}' Punctuation +'\n\t' Text.Whitespace +';' Punctuation +'\n' Text.Whitespace |
