我收到错误:The following sets of rules are mutually left-recursive [symbolExpression]
。在我的语法中,symbolExpression
是直接左递归的,所以ANTLR4不应该处理这个吗?
以下是我的解析器的相关部分:
operation:
OPERATOR '(' (operation | values | value | symbolExpression) ')' #OperatorExpression
| bracketedSymbolExpression #BracketedOperatorExpression
;
symbolExpression:
(operation | values | value | symbolExpression) SYMBOL (operation | values | value | symbolExpression);
bracketedSymbolExpression:
'(' (operation | values | value | symbolExpression) SYMBOL (operation | values | value | symbolExpression) ')';
list: '[' (operation | value) (',' (operation | value))* ']';
values: (operation | value) (',' (operation | value))+;
value:
NUMBER
| IDENTIFIER
| list
| object;
答案 0 :(得分:0)
规则'symbolExpression'中的元素'symbolExpression'和'operation'是相互依赖的递归。
在不了解语言规范的情况下,无法说出语言本身是否具有不可挽回的模糊性。
尽管如此,尝试的一种途径是重构语法以移动重复的句子,例如
( operation | value )
和
(operation | values | value | symbolExpression)
以他们自己的规则为目标,将“操作”和“symbolExpression”(以及可能的“bracketedSymbolExpression”)规则统一到一个规则中 - 一个至多是自我左递归的规则。像
这样的东西a : value
| LPAREN a* RPAREN
| LBRACK a* LBRACK
| a SYMBOL a
| a ( COMMA a )+
;