簡體   English   中英

在解析Xtext資源時初始化(瞬態)EAttribute

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM