以编程方式将eObject添加到解析树中



下面是我的语法快照:

Sort:
 name=ID 
;
Variable
 name=ID ':' type=[Sort]

我的要求是有一个预定义的排序,我们称之为Loc。用户无需定义此排序,因此当变量定义为Loc类型时,Xtext应自动将其引用到我的预定义排序。我如何启动程序,以便在开始时生成排序实例?我已经在验证器类中使用了Factory方法"CreateSort",但没有使用。

您对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);
        }
    }
}

然后,在Runtime Module中绑定这个自定义链接器类:

public class MyDslRuntimeModule extends org.xtext.example.mydsl.AbstractMyDslRuntimeModule {
    @Override
    public Class<? extends ILinker> bindILinker() {
        return CustomLinker.class;
    }
}

现在您可以编写一个包含的文件

变量:Loc

将解析引用。

相关内容

  • 没有找到相关文章

最新更新