繁体   English   中英

如何从Java项目调用Xtext解析器/ JvmModelInferrer

[英]How to invoke Xtext parser/JvmModelInferrer from a Java project

我已经实现了一个简单的小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);

基本上,您可以将DSL作为EMF模型打开:创建EMF资源集,然后使用ResourceSet API打开文件(通过创建表示文件的文件或平台uri),并打开其内容。

但是,这仅在您不使用Xbase时才有效。 如果使用Xbase,则必须使用Xtext API提供的Guice注入器来实例化ResourceSet。 如果初始化ResourceSet,它的工作方式与以前相同。

要使用注入器,请使用StandaloneSetup类对其进行实例化 - 如果您计划将Eclipse IDE中的代码与您自己的编辑器一起使用,或者通过向基于Xtext的执行工厂注册eclipse扩展,请不要这样做。 例如,在我的Xtext Reflective Tree编辑器项目中查看已注册的编辑

要调用代码生成器,您还有以下几种可能性:

  1. 您可以使用具有Xtext项目性质的Eclipse项目。 如果它已经设置好了,你只需创建/修改你的DSL文件,然后构建器神奇地完成我之前提到的所有内容 - 无处可做。
  2. 您也可以在代码中注入IGenerator(当有一个注入的类时),这样您就可以在打开原始的基于EMF的Xtext模型后以编程方式调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM