互左递归规则
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?
我的语法规则如下:
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?