我已经实现了一个简单的小型DSL,它通过使用JvmModelInferrer方法从输入文件生成类。我试图找出如何在常规Java项目的代码中调用解析器和代码genarator。因此,在我的非Xtext项目的主类中的某些时候,我可以创建一个文件,将其传递给我的DSL的Xtext解析器/ codeGenerator,结果将类文件生成到我选择的文件夹中(在我的java项目中)。 此案例未在文档中介绍,因此非常感谢任何帮助,谢谢!
更新:到目前为止,我的代码如下所示:
private static IGenerator generator;
/**
* @param args
*/
public static void main(String[] args) {
// this line registers the EMF for our DSL
Injector injector = new HyRuleStandaloneSetup().createInjectorAndDoEMFRegistration();
ResourceSet rs = new ResourceSetImpl();
File file = new File(
"C:/Documents and Settings/chmamat2/runtime-EclipseXtext/hyrule.project/src/hyrule/project/main.hrule");
Resource resource = rs.getResource(URI.createURI(file.toURI().toString()), true);
//setup the generator
generator = injector.getInstance(IGenerator.class);
//setup the file system access
final EclipseResourceFileSystemAccess2 fsa = new EclipseResourceFileSystemAccess2();
generator.doGenerate(resource, fsa);
答案 0 :(得分:2)
基本上,您可以将DSL作为EMF模型打开:创建EMF资源集,然后使用ResourceSet API打开文件(通过创建表示文件的文件或平台uri),并打开其内容。 / p>
但是,这仅在您不使用Xbase时才有效。如果使用Xbase,则必须使用Xtext API提供的Guice注入器来实例化ResourceSet。如果初始化ResourceSet,它的工作方式与以前相同。
要使用注入器,请使用StandaloneSetup类对其进行实例化 - 如果您计划将Eclipse IDE中的代码与您自己的编辑器一起使用,或者通过注册带有基于Xtext的执行的eclipse扩展,请不要这样做厂。例如,请参阅我Xtext Reflective Tree editor project中注册的编辑器。
要同时调用代码生成器,您还有以下几种可能性: