在规则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书中找到任何内容。
答案 0 :(得分:0)
以下方法如何?基本上a < b
的“结果”类型与运营商<
或>
的其他应用程序不兼容:
expression
: boolExpression
| nonBoolExpression
;
boolExpression
: nonBoolExpression '<' nonBoolExpression
| nonBoolExpression '>' nonBoolExpression
| ...
;
nonBoolExpression
: expression '*' expression
| expression '+' expression
| ...
;
虽然我个人会选择Darien,而是在解析后检测错误。