假设我有一个简单的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 "!";
可以做到这一点,但似乎不允许这些行为......
答案 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;
我不知道这是否是正确的方法,但它确实有效。