我想要的记号来描述简单的语法与AND
和OR
,但失败并出现以下错误Antlr4:规则的以下几组相互左递归
的规则下集是相互左递归
语法是以下:
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' | '&';
确实编译。
为什么?
但我需要为每个操作都有合适的节点,比如分析树中的AND和OR。如果有一条规则会解析所有这些规则,这是如何实现的? – Dims
你可以通过查看现有的语法学到很多东西(例如https://github.com/antlr/grammars-v4)。您可以定义您的规则,以便将左递归部分最终放入单个规则中,或者可以以非递归方式进行操作。 –