非关联运算符如何“<”在ANTLR4语法中指定?

时间:2013-09-26 08:26:21

标签: antlr4

在规则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书中找到任何内容。

1 个答案:

答案 0 :(得分:0)

以下方法如何?基本上a < b的“结果”类型与运营商<>的其他应用程序不兼容:

expression
    :   boolExpression
    |   nonBoolExpression
    ;

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

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

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