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