鉴于我在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#编译器警告,指出“警告1规则'expr'在无法识别的位置包含'assoc'终端选项”
任何人都可以建议我应该指出指数的右关联性吗?这是我在很多例子中看到它的方式。
答案 0 :(得分:2)
答案是将标记提示放在规则的左上,而不是在操作符之后,正如我在许多示例中看到的那样:
expr:
<assoc=right> expr '^' expr # Power
| expr ('*'|'/') expr # Mult
...
;