私のDSL変数は動的ですが、最初に値が割り当てられたときに作成されます。だから、これは有効なコードは次のとおりです。Xtext文法を使用した動的変数の処理
a = 0
b = 2 // new variable created
a = 3 // existing variable reassigned
私の素朴なアプローチは、「:2を以下の選択肢がマッチすることはできません」文句を言う、それは動作しません。この
Identifier:
ID; // ID from Terminals
Assignable:
{Assignable} ref=[Identifier|ID] |
{Assignable} newVar=Identifier;
のようなルールを持つことです。生成されたANTLRデバッグ文法はルールが含まれているので、理解しやすいです:
ruleAssignable: ruleIdentifier | ruleIdentifier;
([Identifier|ID]
のトリックはquestion on cross-referencingへの応答から来て、私はちょうど私もそれが解決していますか完全に理解しようとした:)完全に理解せずに、それをコピーしました。
{XAssignment} /* (declaringType=[types::JvmDeclaredType] '::')? */ feature=[types::JvmIdentifiableElement|ValidID] OpSingleAssign value=XAssignment
相互参照のみを使用しているようで、新しい変数宣言の処理方法はわかりません。
これはcoffeescriptの既存の文法なので変更できません。私はあなたの答えから、相互参照の方が簡単で、割り当てのコンテキストでエラーメッセージを無効にするという印象を受けます。 –
はい、それはあまり効果がないようです。 –