[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