我有两本 T.Parr 写的关于 ANTLR 的书,我看到到处都是美元符号和符号的引用。它也对我有用:
term : IDENT -> { new TokenNode($IDENT) };
或更复杂的东西:
type_enum : 'enum' name=IDENT '=' val+=IDENT (',' val+=IDENT)* ';'
-> { new EnumNode($name,$val) };
但是这条线给了我荒谬的错误:
not_expr : term
| NOT ex=not_expr -> { new UnaryExpression($NOT,$ex) };
错误说missing attribute access on rule scope: ex
。你知道修复是什么吗?删除“ex”上的美元符号。就是这样。
出于好奇,我检查了上面提到的规则并删除了美元符号——它们像以前一样工作(即我没有收到任何错误)。
问题:那么这个带有美元符号的故事是什么?我不应该使用它吗?或者我应该使用它直到出现错误?
如果我没有看到这个约定几乎被用作 ANTLR 中的标准,我不会问这个问题。