我在Xtext中有一个DSL,我想重用我的.xtext文件中定义的规则,终端等,为项目中涉及的其他工具生成配置文件。配置文件使用类似于BNF的语法,因此它与实际的Xtext内容非常相似,并且它需要最少的转换。从理论上讲,我可以轻松编写一个脚本来解析Xtext并吐出我的配置......
问题是,我该如何实施它以适应整个生态系统?换句话说 - 如何在Xtext / EMF中进行模型转换?
答案 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 );
}