summaryrefslogtreecommitdiff
path: root/tests/lexers/antlr
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2021-01-18 21:24:00 +0100
committerGeorg Brandl <georg@python.org>2021-01-18 22:08:36 +0100
commit2a3d3a7d5b9c60dedf6638d876161d9563faebcf (patch)
tree809c0b4a686db98f5954afa1944404cd9652c6b2 /tests/lexers/antlr
parentf0445be718da83541ea3401aad882f3937147263 (diff)
downloadpygments-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.txt24
-rw-r--r--tests/lexers/antlr/example2.txt3829
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