Antlr4:以下规则集相互左递归 [英] Antlr4: The following sets of rules are mutually left-recursive
本文介绍了Antlr4:以下规则集相互左递归的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图用AND
和OR
描述简单的语法,但是由于以下错误而失败
I am trying to describle simple grammar with AND
and OR
, but fail with the following error
以下规则是相互左递归的
The following sets of rules are mutually left-recursive
语法如下:
expr:
NAME |
and |
or;
and:
expr AND expr;
or:
expr OR expr;
NAME : 'A' .. 'B' + ;
OR: 'OR' | '|';
AND: 'AND' | '&';
同时,下面的语法
expr:
NAME |
expr AND expr |
expr OR expr;
NAME : 'A' .. 'B' + ;
OR: 'OR' | '|';
AND: 'AND' | '&';
可以编译.
为什么?
推荐答案
如前所述:ANTLR4仅支持直接左递归.您可以标记其他选项,以在生成的访问者或侦听器中进行区分:
As already mentioned: ANTLR4 only supports direct left recursion. You can label the alternatives to make a distiction in your generated visitor or listener:
expr
: NAME #NameExpr
| expr AND expr #AndExpr
| expr OR expr #OrExpr
;
NAME : 'A' .. 'B' + ;
OR : 'OR' | '|';
AND : 'AND' | '&';
请注意,'A'..'Z'+
是旧的v3语法,在v4中,您可以这样做:[A-Z]+
Note that 'A'..'Z'+
is the old v3 syntax, in v4 you can do this: [A-Z]+
请参阅: https://github .com/antlr/antlr4/blob/master/doc/parser-rules.md#alternative-labels
这篇关于Antlr4:以下规则集相互左递归的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文