究竟是什么让语法规则在antlr中左递归?

时间:2013-10-08 22:06:11

标签: parsing antlr grammar left-recursion

所以,我想知道解析器是什么样的:

line        :   expression EOF;
expression  :   m_expression (PLUS m_expression)?;
m_expression:   basic (TIMES basic)?;
basic       :   NUMBER | VARIABLE | (OPENING expression CLOSING) | expression;

左递归且无效,而像

这样的解析器
line        :   expression EOF;
expression  :   m_expression (PLUS m_expression)?;
m_expression:   basic (TIMES basic)?;
basic       :   NUMBER | VARIABLE | (OPENING expression CLOSING);
即使“基本”的定义仍然引用“表达式”,

仍然有效并且有效。特别是,我希望能够以

的形式解析表达式
a+b+c

不引入作用于两个以上操作数的操作。

1 个答案:

答案 0 :(得分:1)

行调用表达式调用m_expression调用basic调用表达式...这对于v3 antlr和v4都是间接的递归和坏的。左递归的定义意味着您可以在不使用令牌的情况下返回相同的规则。在第二个实例中,表达式前面有OPENING标记。