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屋!
查看全文