我想設計一個小的DSL檢查變量的約束。我此刻的語法如下:生成用於評估Xtext中Xbase表達式的類?
Start:
varDeclarations += XVariableDeclaration*
rules+=Constraint*;
Constraint:
{Constraint}
'FOR' 'PAYLOAD' payload=PAYLOAD 'ELEMENT' element=ID 'CONSTRAINED BY' constraint=XExpression;
PAYLOAD:
"SimulationSessionEvents"
|"stacons"
|"any"
;
我要生成一個只包含一個方法,需要輸入一個數值,它映射到包含在約束中的唯一變量(這也是一個類的實例只聲明變量),並檢查約束是否滿足。
這些實例將被另一個類使用,它將一個值傳遞給每個實例,檢查它是否滿足約束條件。
正如我看到它,我有2種選擇:
顯式生成用於約束類代碼,在這種情況下,我可以只使用
XBaseCompiler
以產生表達式求值的代碼。然而,如果有直接在內存對象中創建的方法,我將不得不以某種方式加載這些類,這看起來很不雅觀。使用
ModelInferrer
直接在內存中生成可傳遞給其他類的對象,因此不需要類加載。在這種情況下,我不確定如何生成xbase表達式評估代碼。
閱讀完所有的XTEXT文檔/教程,並用實例玩弄後,我留下了以下問題:
這是在可伸縮性方面的「最佳」的做法(我以後可能想要擴展語法,和/或他生成的類的功能)? 如果我遵循ModelInferrer方法,我會如何處理事情? 有沒有其他方法可以做到這一點?
任何幫助,將不勝感激
好吧,聽起來不錯,但是如何訪問生成的類?例如,如果我希望在將解析DSL模型文件時創建的所有實例添加到矢量中,那麼我該如何以及在哪裏執行此操作?這是我在xtext教程中找不到的東西,因爲一旦創建了這些類型可以訪問的類型,就不會澄清它。 –
我已經提出了上面的評論一個問題,以便它更清楚我的意思:http://stackoverflow.com/questions/11260216/how-to-use-xtext-inferred-jvm-model-outside-of-xtext-項目 –