相互左递归规则

时间:2018-03-11 07:05:17

标签: antlr4

我在语法中有以下规则:

CCExpression
    : LiteralExpression
    | CCParenthesizedExpression
    | CCSimpleNameExpression
    | CCCastExpression
    | CCOperatorExpression
    | CCConditionalExpression
    ;

CCOperatorExpression
    : CCUnaryOperator CCExpression
    | CCExpression CCBinaryOperator CCExpression
    ;

我收到以下错误:

  

以下几组规则是相互左递归的[CCExpression,CCOperatorExpression]

我尝试将CCOperatorExpression规则折叠为CCExpression规则:

CCExpression
    : CCExpression CCBinaryOperator CCExpression
    | CCUnaryOperator CCExpression
    | '(' CCExpression ')'
    | LiteralExpression
    | CCSimpleNameExpression
    | CCCastExpression
    | CCConditionalExpression
    ;

但这似乎没有帮助。我还是得到了:

  

以下规则集是相互左递归的[CCExpression]

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这是因为词法分析器规则不能保持递归,只有解析器规则可以。

请参阅:Practical difference between parser rules and lexer rules in ANTLR?