在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
)
我尝试解析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
)