用Xtext和Java程序提供自动化

用Xtext和Java程序提供自动化,java,xtext,Java,Xtext,在我当前的项目中,我正在使用xText编辑器编写dsl规范(即voc.mydsl、arch.mydsl和network.mydsl)。我喜欢xText编辑器,因为它的代码完整性和其他功能 但是,我有一个单独的Java程序。这个java程序将文本文件(即voc.txt、arch.txt、network.txt)作为输入,使用ANTLR解析器解析这些文件,并使用StringTemplate文件生成代码 现在,我的问题是,目前,我必须手动执行以下步骤: (1) 我在XText编辑器(voc.mydsl

在我当前的项目中,我正在使用xText编辑器编写dsl规范(即voc.mydsl、arch.mydsl和network.mydsl)。我喜欢xText编辑器,因为它的代码完整性和其他功能

但是,我有一个单独的Java程序。这个java程序将文本文件(即voc.txt、arch.txt、network.txt)作为输入,使用ANTLR解析器解析这些文件,并使用StringTemplate文件生成代码

现在,我的问题是,目前,我必须手动执行以下步骤:
(1) 我在XText编辑器(voc.mydsl、arch.mydsl和network.mydsl)中编写dsl规范。
(2) 我将这些规范复制粘贴到三个文本文件中(即voc.txt、arch.txt、network.txt)。
(3) 最后,我运行Java程序来解析这些.txt文件并生成代码

是否有任何方法可以将上述三个步骤自动化(单击一次即可执行)?如果您需要任何详细信息,请告诉我。

您可以为您的DSL编写一个“特殊”生成器。每当您编辑并保存*.mydsl文件时,XText将调用此生成器。Xtext对这个“生成器”的实际操作不感兴趣。因此,您的
MydslGenerator.xtend
生成器可以如下所示:

// whereever Xtext generates your empty version of this file
package mydsl.xtext.generator

// add imports

@Singleton
class MydslGenerator implements IGenerator {

    override void doGenerate(Resource resource, IFileSystemAccess fsa) {

        // calculate new filename
        val newFilename= resource.URI.lastSegment.replaceAll(".mydsl", ".txt")

        // get text representation of parsed model
        val textContent = resource.contents.map[NodeModelUtils::getNode(it).text].join

        // write text content to new file
        fsa.generateFile(newFilename, textContent);

        // TODO: call ANTLR parser on new file here
    }
}

在最后一步中,您可以通过直接从Eclipse调用其
main
方法或调用新的JVM来调用“other”程序。只有当另一个生成器工作得很快时,才建议使用后者,因为每当保存*.mydsl文件时都会调用它。第一种方法只有在另一个程序没有内存泄漏并且没有太多jar依赖项时才可取。

谢谢A.H.的回答。然而,我并不清楚。你能用一个例子详细说明你的答案并提供一个详细的答案吗?