在解析Xtext资源时初始化(瞬态)EAttribute

时间:2015-02-20 15:33:12

标签: java xtext eclipse-emf emf

假设我有一个简单的Xtext规则

Hello: "Hello" name=STRING "!";

但除了name EAttribute之外,我的(以前存在的)EClass Hello还有一个类型为source的EAttribute EString(或枚举类型,但是现在让我们假设一个EString)。

此字段不应在DSL本身中表示(因此,它在某种程度上是 transient )。相反,我希望在Xtext解析器读取和实例化对象时将此字段设置为"Xtext"。 (我有其他方法可以创建Hello的实例,我为其设置了其他值。)

是否可以在Hello:规则中添加一些自动设置source值的内容?或者我是否必须在某处拦截解析器?

我在Xtext语法中找到了一些关于“动作”的注释,我想,也许就像

Hello: { current.source = "Xtext" } "Hello" name=STRING "!";

可以做到这一点,但似乎不允许这些行为......

1 个答案:

答案 0 :(得分:0)

我找到了一种方法,将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;

我不知道这是否是正确的方法,但它确实有效。