---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