我有T.Parr关于ANTLR的两本书,我看到所有的符号都是美元符号。它的工作(ED)对我来说太:
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的一个标准。
那么,我不想做任何事情:-),我想要传递一棵树到另一个树的构造函数。谢谢你的解释。 – greenoldman 2012-08-10 10:55:21
不客气@macias。 – 2012-08-10 13:28:38
我假设'ex = not_expr'中的标签'ex'是对'ParserRuleReturnScope'的引用,因为它是一个解析规则(而'IDENT'是一个标记)? – Alexander 2013-10-31 18:26:52