我尝试解析 antlr 3 中的语法,但我的左递归有问题,而且我是解析语法的初学者。
答案 0 :(得分:2)
问题是轮次 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
)