Antlr3 用ANTLR(双向左递归)编码语法
我在ANTLR中有这个代码语法Antlr3 用ANTLR(双向左递归)编码语法,antlr3,Antlr3,我在ANTLR中有这个代码语法 grammar Booleanos; //lexico AND : 'AND' || 'and' ; OR : 'OR' || 'or' ; NOT : 'NOT' || 'not'; TRUE : 'TRUE' || 'true' ; FALSE : 'FALSE' || 'false' ; LPAREN : '(' ;
grammar Booleanos;
//lexico
AND : 'AND' || 'and' ;
OR : 'OR' || 'or' ;
NOT : 'NOT' || 'not';
TRUE : 'TRUE' || 'true' ;
FALSE : 'FALSE' || 'false' ;
LPAREN : '(' ;
RPAREN : ')' ;
//sintactico
start : bexpr;
bexpr : bexpr OR bterm | bterm;
bterm : bterm AND bfactor | bfactor;
bfactor : NOT bfactor | LPAREN bexpr RPAREN | TRUE | FALSE;
但是我在bexpr:和bterm:上有一个相互左递归的问题。如何删除此警告?我不会编译。感谢您的帮助。ANTLR3无法隐式处理此情况,因此您会收到错误。使用ANTLR4,将自动处理直接左递归(那些没有扩展到多个规则的递归)。如果你能升级,考虑一下。
然而,解决左递归并不是那么困难。最简单的方法可能是使用一个菜单项开始解析左递归。您可以尝试重写bexpr和bterm规则,如下所示:
bexpr : bterm (OR bterm)*;
bterm : bfactor (AND bfactor)*;