在antlr 3中相互左递归

Left recursion mutally in antlr 3

我尝试解析antlr 3中的语法,但是左递归有问题,我是解析语法的初学者

问题在于规则 b、e、t、f 在不消耗任何输入的情况下相互引用 - 例如一个数字可以被多个序列接受:

b -> NUM
b -> e -> t -> f -> b -> NUM
...

你那里的循环可能是为了表达一个子表达式 - 那里缺少的是括号:

start   : e;
e       : t (a t)*;
t       : f (m f)*;
f       : ID | NUM | '-'NUM | '(' e ')';
a       : '+' | '-';
m       : '*' | '/';

(我也把e : t | t a t改成了e : t | e a t来允许1 + 2 + 3