11

在规则expr : expr '<' expr | ...; 中,ANTLR 解析器将接受类似1 < 2 < 3( 并构造对应于括号的左关联树的表达式(1 < 2) < 3

您可以告诉 ANTLR 将运算符视为右关联,例如

expr : expr '<'<assoc=right> expr | ...; 

产生解析树1 < (2 < 3)

但是,在许多语言中,关系运算符是非关联1 < 2 < 3运算符,即禁止表达式。这可以在 YACC 及其衍生物中指定。

也可以在ANTLR中指定吗?例如,作为expr : expr '<'<assoc=no> expr | ...;

到目前为止,我无法在 ANTLR4 书中找到任何内容。

4

1 回答 1

1

下面的方法怎么样。基本上,“结果”的类型与 operator ora < b的另一个应用程序不兼容:<>

expression
    :   boolExpression
    |   nonBoolExpression
    ;

boolExpression
    :   nonBoolExpression '<' nonBoolExpression
    |   nonBoolExpression '>' nonBoolExpression
    |   ...
    ;

nonBoolExpression
    :   expression '*' expression
    |   expression '+' expression
    |   ...
    ;

虽然我个人会选择Darien ,而是在解析后检测错误。

于 2014-04-10T12:42:50.280 回答