0

我已经实现了一个简单的小 DSL,它使用 JvmModelInferrer 方法从输入文件生成类。我试图弄清楚如何在常规 java 项目的代码中调用解析器和代码生成器。因此,在我的非 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);
4

1 回答 1

2

基本上,您可以将 DSL 作为 EMF 模型打开:创建 EMF ResourceSet,然后使用 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 模型后以编程方式调用它。
于 2012-07-05T14:03:19.190 回答