2
在我的DSL中,變量是動態的,它們是在第一次給它們賦值時創建的。因此,這是一個有效的代碼:使用Xtext語法處理動態變量
a = 0
b = 2 // new variable created
a = 3 // existing variable reassigned
我天真的做法是有規則這樣
Identifier:
ID; // ID from Terminals
Assignable:
{Assignable} ref=[Identifier|ID] |
{Assignable} newVar=Identifier;
它不工作,抱怨「有以下兩個選項不能匹配:2」。這是可以理解的,因爲生成的ANTLR的調試語法包含一個規則:
ruleAssignable: ruleIdentifier | ruleIdentifier;
(的[Identifier|ID]
訣竅來自於question on cross-referencing響應我只是複製它沒有完全理解:)我還試圖神交它是如何解決的。在Xbase語法中:
{XAssignment} /* (declaringType=[types::JvmDeclaredType] '::')? */ feature=[types::JvmIdentifiableElement|ValidID] OpSingleAssign value=XAssignment
它似乎只使用交叉引用,並且我看不到如何處理新的變量聲明。
這是coffeescript的現有語法,所以我無法更改它。我從你的回答中得到的印象是,交叉引用更容易,並且在分配上下文中禁用錯誤消息。 –
是的,這似乎是較少的工作。 –