Dashboard > ANTLR 3 > ... > ANTLR v3 documentation > ANTLR Cheat Sheet
  ANTLR 3 Log In | Sign Up   View a printable version of the current page.  
  ANTLR Cheat Sheet
Added by Terence Parr, last edited by Terence Parr on May 16, 2008  (view change)
Labels: 
(None)

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)

Site powered by a free Open Source Project / Non-profit License (more) of Confluence - the Enterprise wiki.
Learn more or evaluate Confluence for your organisation.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.1 Build:#806 May 06, 2007) - Bug/feature request - Contact Administrators