所以,我想知道解析器是什么样的:
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
不引入作用于两个以上操作数的操作。
答案 0 :(得分:1)
行调用表达式调用m_expression调用basic调用表达式...这对于v3 antlr和v4都是间接的递归和坏的。左递归的定义意味着您可以在不使用令牌的情况下返回相同的规则。在第二个实例中,表达式前面有OPENING标记。