1

ANTLR を使用して AST を構築しています。この文字列に一致するプロダクションを書きたい:

${identifier}

私の文法ファイルには次のものがあります。

reference
  : DOLLAR LBRACE IDENT RBRACE -> ^(NODE_VAR_REFERENCE IDENT)
;

これはうまくいきます。独自のアダプターを使用してツリー ノードを発行しています。使用される書き換えルールにより、2 つのノードが作成されます。1 つは 用でNODE_VAR_REFERENCE、もう 1 つは 用IDENTです。

私がやりたいことは、(NODE_VAR_REFERENCEトークン用に) ノードを 1 つだけ作成することです。このノードIDENTには、「トークン」フィールドにトークンが必要です。

これは書き換えルールを使用して可能ですか? ありがとう。

4

1 に答える 1

2

まあ、IDENTノードのトークンにNODE_VAR_REFERENCEするということは、まったく存在しないことを意味NODE_VAR_REFERENCEします。トークンは、タイプ (NODE_VAR_REFERENCEまたはIDENT) と、このトークンが一致したテキストで構成されます。ツリー ノードのトークンがなるようIDENTにすることは、型テキストの両方が(トークンまたは型IDENTを失う) の型になることを意味します。NODE_VAR_REFERENCE

あなたがおそらく意味することは、タイプNODE_VAR_REFERENCEとのテキストを持つ単一のノードを持つIDENTことです。その場合、次のようなことができます:

reference
 : DOLLAR LBRACE IDENT RBRACE -> NODE_VAR_REFERENCE[$IDENT.text]
 ;
于 2012-11-20T18:34:05.047 に答える