私は T.Parr による ANTLR に関する本を 2 冊持っていますが、ドル記号がいたるところにシンボルへの言及が見られます。それは私にとってもうまくいきました:
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の標準としてほとんど使用されているのを見なければ、私はこの質問をしません。