gpt4 book ai didi

java - 通过 Xtext 和 Java 程序提供自动化

转载 作者:搜寻专家 更新时间:2023-11-01 03:08:23 25 4
gpt4 key购买 nike

在我当前的项目中,我使用 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 来调用您的“其他”程序。后者仅在另一个生成器快速运行时才可取,因为每当您保存 *.mydsl 文件时都会调用它。第一种方法仅在另一个程序没有内存泄漏并且没有太多 jar 依赖项时才可取。

关于java - 通过 Xtext 和 Java 程序提供自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com