1
我收到错误:The following sets of rules are mutually left-recursive [symbolExpression]
。在我的语法中,symbolExpression
是直接左递归的,所以ANTLR4不应该处理这个问题吗?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;
为什么'''symbolExpression'''和''''''''''相互依赖地左递归? ''''SymbolExpression'''扩展到''''''',但''''''''操作规则从'''OPERATOR'''或''''开始('''。 –
相左递归是Antlr定义的,它包括'symbolExpression'的间接递归,取决于'operation'和'operation',这取决于'symbolExpression'。IIRC,文档指出左递归规则不能引用另一个引用左递归的规则规则(尽管目前我无法找到它)。另请参见此[答案](http://stackoverflow.com/questions/20791690/how-to-avoid-mutual-left-recursion-in-antlr-4)。 – GRosenberg
是的,我相信ANTLR可以处理自我左递归而不是相互左递归,但是我并不认为这是一个相互左递归的情况,因为“操作”没有扩展到''''symbolExpression'''在它的左边,在它的最左边,它扩展到''''('''''''OPERATOR'''都是终端。 –