互左递归规则

Mutually left-recursive rules

我的语法规则如下:

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

CCOperatorExpression
    : CCUnaryOperator CCExpression
    | CCExpression CCBinaryOperator CCExpression
    ;

我收到以下错误:

The following sets of rules are mutually left-recursive [CCExpression, CCOperatorExpression]


我尝试将 CCOperatorExpression 规则折叠到 CCExpression 规则中:

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

但这似乎没有帮助。我仍然得到:

The following sets of rules are mutually left-recursive [CCExpression]

我该如何解决这个问题?

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

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