ANTLR Cheat Sheet
Example
grammar T;
def : modifier+ 'int' ID '=' INT ';'
| modifier+ 'int' ID ';'
;
modifier : 'public' | 'static' ;
INT : '0'..'9'+ ;
ID : 'a'..'z'+ ;
WS : (' '|'\r'|'\n')+ {$channel = HIDDEN;} ;
Matches input such as public static int i = 3;.
Here's a main program to invoke the parser on the file argument from command-line.
import java.io.*;
import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
public class Test {
public static void main(String args[]) throws Exception {
TLexer lex = new TLexer(new ANTLRFileStream(args[0]));
CommonTokenStream tokens = new CommonTokenStream(lex);
TParser parser = new TParser(tokens);
TParser.startRule_return r = parser.startRule(); // launch parsing
// print tree if building trees
if ( r!=null ) System.out.println(((CommonTree)r.tree).toStringTree());
}
}
Here is a test rig for building an AST with a parser and walking it with a tree parser:
import java.io.*;
import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
public class Test {
public static void main(String args[]) throws Exception {
TLexer lex = new TLexer(new ANTLRFileStream(args[0]));
CommonTokenStream tokens = new CommonTokenStream(lex);
TParser parser = new TParser(tokens); // created from T.g
TParser.startRule_return r = parser.startRule(); // launch parsing
if ( r!=null ) System.out.println(((CommonTree)r.tree).toStringTree());
CommonTreeNodeStream nodes = new CommonTreeNodeStream((Tree)r.tree);
nodes.setTokenStream(tokens);
TP walker = new TP(nodes); // created from TP.g
TP.startRule_return r2 = walker.startRule();
CommonTree rt = ((CommonTree)r2.tree);
// if tree parser constructs trees
if ( rt!=null ) System.out.println(((CommonTree)r2.tree).toStringTree());
}
}
ANTLR Symbols
See also Grammars and Special symbols in actions.
Symbol |
Description |
|---|---|
$ |
Attribute |
@ |
Action |
:: |
action or dynamically-scoped attribute scope specifier |
: |
rule definition |
; |
end rule |
| |
alternative |
's' |
char or string literal |
. |
wildcard |
= |
label assignment |
+= |
list label assignment |
[..] |
argument or return value spec |
{...} |
action |
{{ |
forced action; execute even while backtracking |
(...) |
subrule |
+ |
1 or more |
* |
0 or more |
? |
optional or semantic predicate |
~ |
match not |
! |
don't include in AST |
^ |
make AST root node |
=> |
always execute predicate |
-> |
rewrite rule |
<token options> |
token option spec like ID<node=VarNode> |
^(...) |
tree grammar or rewrite element |
// ... |
single-line comment |
/* ... */ |
multi-line comment |
Keyword |
Description |
|---|---|
scope |
Dynamically-scoped attribute |
fragment |
lexer rule is a helper rule, not real token for parser |
lexer |
grammar type |
tree |
grammar type |
parser |
grammar type |
grammar |
grammar header |
returns |
rule return value(s) |
throws |
rule throws exception(s) |
catch |
catch rule exceptions |
finally |
do this no matter what |
options |
grammar or rule options |
tokens |
can add tokens with this; usually imaginary tokens |
import |
import grammar(s) |