0

私の DSL には、次のようなものがあります。

x = 14
y = $x + 1

そのため、要素はその名前だけで定義されますが、参照する場合は何らかのシジルを追加する必要があります。要素を参照する場合、記号と名前の間の空白は禁止されています。

これらの要素間の相互参照を許可しながら、Xtext でこれを行うにはどうすればよいですか?

これには2つの異なる端末を使用する必要があるように思われるため、1つは一致xし、もう1つは一致し$xますが、相互参照メカニズムはどのようにそれらを関連付けますか? あるいは、次のように定義した場合:

ElementRef: '$' [Element|ELEMENT_NAME];

その場合、Xtext はシジルと名前の間に空白を許可しますが、これは私の DSL では違法です。「この時点で空白を受け入れない」などのオプションは素晴らしいと思いますが、そのようなことについての Xtext ドキュメントには何も見つかりませんでした。

4

1 に答える 1

1

相互参照トークンにデータ型ルールを使用し、$ 記号を削除する値コンバーターを登録する必要があります。

ElementRef: [Element|ReferenceID];
ReferenceID hidden(): '$' ID;

値コンバーターは、トークンの抽象構文 (ID) と具象構文 ($ID) の間の変換を担当します。詳細については、ドキュメントを参照してください。

于 2012-07-22T11:18:50.707 に答える