Xtext / EMF如何进行模型到模型的转换?

时间:2012-11-14 01:07:09

标签: dsl xtext emf

我在Xtext中有一个DSL,我想重用我的.xtext文件中定义的规则,终端等,为项目中涉及的其他工具生成配置文件。配置文件使用类似于BNF的语法,因此它与实际的Xtext内容非常相似,并且它需要最少的转换。从理论上讲,我可以轻松编写一个脚本来解析Xtext并吐出我的配置......

问题是,我该如何实施它以适应整个生态系统?换句话说 - 如何在Xtext / EMF中进行模型转换?

2 个答案:

答案 0 :(得分:1)

如果您同时拥有元模型(ecore,xsd,...),那么最好的方法就是使用ATL(http://www.eclipse.org/atl/)。

答案 1 :(得分:1)

如果我理解你是正确的,你想从xtext模型转到它的EMF模型。下面是一个实现此目的的代码示例,在必要时替换您的模型。

    public static BeachScript loadScript(String file) throws BeachScriptLoaderException { 
    try {
        Injector injector = new BeachStandaloneSetup().createInjectorAndDoEMFRegistration();
        XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);
        resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE);
        Resource resource = resourceSet.createResource(URI.createURI("test.beach"));
        InputStream in = new ByteArrayInputStream(file.getBytes());
        resource.load(in, resourceSet.getLoadOptions());
        BeachScript model = (BeachScript) resource.getContents().get(0);
        return model;

    } catch (Exception e) {
        throw new BeachScriptLoaderException("Exception Loading Beach Script " + e.toString(),e );
    }