C# ANTLR4 右关联警告

Tom*_*rvo 4 c# antlr4

鉴于我在 C# 构建目标中的简单语法:

grammar Expr;

prog: stmt+ EOF;
stmt: expr NEWLINE+;

expr:
    expr '^' <assoc=right> expr # Power
|   expr ('*'|'/') expr         # Mult
|   expr ('+'|'-') expr         # Add
|   REAL                        # Real
|   '(' expr ')'                # Paren
;

NEWLINE : '\r\n';
REAL     : [0-9]+'.'[0-9]+ ;
Run Code Online (Sandbox Code Playgroud)

我继续收到 C# 编译器警告,指出“警告 1 规则 'expr' 在无法识别的位置包含一个 'assoc' 终端选项”

谁能建议我应该在哪里指示指数的右结合性?这是我在许多示例中看​​到的完成方式。

Tom*_*rvo 9

答案是将标签提示放置在规则的左侧,而不是像我在许多示例中看​​到的那样紧接在运算符之后:

expr:
<assoc=right> expr '^'  expr    # Power
|   expr ('*'|'/') expr         # Mult
...
;
Run Code Online (Sandbox Code Playgroud)

  • 相关文档:https://github.com/antlr/antlr4/blob/master/doc/left-recursion.md (3认同)