以下是我的语法快照:
Sort:
name=ID
;
Variable
name=ID ':' type=[Sort]
我的要求是预定义排序让我们称之为 Loc 。用户无需定义此排序,因此当使用 Loc 类型定义变量时,Xtext应自动将其引用到我的预定义排序。如何启动程序以便在开始时生成Sort实例?我已经在我的验证器类中使用了Factory方法'CreateSort',但没有用。任何想法?
答案 0 :(得分:1)
您对createSort Factory方法的直觉很好,但您必须在合适的时间调用它。 必须在链接步骤之前创建 Loc 实例。为此,您必须绑定自定义链接器并覆盖它。
public class CustomLinker extends LazyLinker {
@Override
protected void beforeModelLinked(EObject model,
IDiagnosticConsumer diagnosticsConsumer) {
super.beforeModelLinked(model, diagnosticsConsumer);
if (model instanceof Root) {
Root root = (Root) model;
Sort locSort = MyDslFactory.eINSTANCE.createSort();
locSort.setName("Loc");
root.getContent().add(locSort);
}
}
}
然后,在运行时模块中绑定此自定义链接器类:
public class MyDslRuntimeModule extends org.xtext.example.mydsl.AbstractMyDslRuntimeModule {
@Override
public Class<? extends ILinker> bindILinker() {
return CustomLinker.class;
}
}
现在您可以编写包含
的文件变量:Loc
参考将被解决。