【问题标题】:What exactly makes grammar rules left-recursive in antlr?究竟是什么让 antlr 中的语法规则左递归?
【发布时间】:2013-10-08 22:06:11
【问题描述】:

所以,我想知道是什么让解析器像这样:

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

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

【问题讨论】:

    标签: parsing antlr grammar left-recursion


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-09-05
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多