[antlr-interest] more on left-recursive rules
Terence Parr
parrt at cs.usfca.edu
Wed Feb 23 13:40:53 PST 2011
Got these examples into unit tests. :) feeling good.
Ter
// simple, no AST
a : a ID
| ID ;
-------------
declarator
: declarator '['^ e ']'!
| declarator '['^ ']'!
| declarator '('^ ')'!
| '*'^ declarator
| '('! declarator ')'!
| ID
;
declarator
: declarator '[' e ']' -> ^('[' declarator e)
| declarator '[' ']' -> ^('[' declarator)
| declarator '(' ')' -> ^('(' declarator)
| '*' declarator -> ^('*' declarator)
| '(' declarator ')' -> declarator
| ID -> ID
;
String[] tests = {
"a", "a",
"*a", "(* a)",
"**a", "(* (* a))",
"a[3]", "([ a 3)",
"b[]", "([ b)",
"(a)", "a",
"a[]()", "(( ([ a))",
"a[][]", "([ ([ a))",
"*a[]", "(* ([ a))",
"(*a)[]", "([ (* a))",
};
---------------
e : e '.'^ ID
| e '.'^ 'this'
| '-'^ e
| e '*'^ e
| e ('+'^|'-'^) e
| INT
| ID
;
String[] tests = {
"a", "a",
"1", "1",
"a+1", "(+ a 1)",
"a*1", "(* a 1)",
"a.b", "(. a b)",
"a.this", "(. a this)",
"a+b*c", "(+ a (* b c))",
"a.b+1", "(+ (. a b) 1)",
"-a", "(- a)",
"-a+b", "(+ (- a) b)",
"-a.b", "(- (. a b))",
};
More information about the antlr-interest
mailing list