C# ANTLR4 右关联警告
C# ANTLR4 right-associative warning
鉴于我在 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]+ ;
我继续收到 C# 编译器警告,指出 "Warning 1 rule 'expr' contains an 'assoc' terminal option in an unrecognized location"
谁能建议我应该在哪里指示指数的右结合性?这是我在许多示例中看到的方式。
答案是将标记提示放在规则的左侧,而不是像我在许多示例中看到的那样紧跟在运算符之后:
expr:
<assoc=right> expr '^' expr # Power
| expr ('*'|'/') expr # Mult
...
;
鉴于我在 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]+ ;
我继续收到 C# 编译器警告,指出 "Warning 1 rule 'expr' contains an 'assoc' terminal option in an unrecognized location"
谁能建议我应该在哪里指示指数的右结合性?这是我在许多示例中看到的方式。
答案是将标记提示放在规则的左侧,而不是像我在许多示例中看到的那样紧跟在运算符之后:
expr:
<assoc=right> expr '^' expr # Power
| expr ('*'|'/') expr # Mult
...
;