[英]Initializing a (transient) EAttribute while parsing an Xtext resource
假設我有一個簡單的Xtext規則
Hello: "Hello" name=STRING "!";
但除了name
EAttribute之外,我的(以前存在的)EClass Hello
還有一個類型為EString
的EAttribute source
(或枚舉類型,但現在讓我們假設一個EString
)。
該字段不應在DSL本身中表示(因此,它在某種程度上是瞬態的 )。 相反,我希望在Xtext解析器讀取和實例化對象時將此字段設置為"Xtext"
。 (我有其他方法來創建Hello
實例,我為其設置了其他值)。
是否可以在我的Hello:
規則中添加一些能自動設置source
值的規則? 或者我是否必須在某處攔截解析器?
我在Xtext語法中找到了一些關於“動作”的注釋,我想,也許是類似的
Hello: { current.source = "Xtext" } "Hello" name=STRING "!";
會做的伎倆,但似乎不允許這些行為......
我通過org.eclipse.xtext.parser.DefaultEcoreElementFactory
和Guice-Injecting它為我的語言的org.eclipse.xtext.parser.IAstFactory
找到了一種方法。
我重寫create()並執行
EObject obj = super.create(...);
if(obj instanceof Hello)
((Hello)obj).setSource("Xtext");
return obj;
我不知道這是不是正確的方法,但它確實有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.