Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Antlr3 用ANTLR(双向左递归)编码语法_Antlr3 - Fatal编程技术网

Antlr3 用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 : '(' ;

我在ANTLR中有这个代码语法

    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)*;