Java Xtext运行时编译

Java Xtext运行时编译,java,parsing,dsl,xtext,Java,Parsing,Dsl,Xtext,我试着去理解并找出它是否适合我的需要。我正在寻找一个工具,它允许我创建一个DSL,可以在执行期间在我的应用程序中编译和评估 Xtext似乎是一个非常好的工具,因为它提供了很多东西(语法编辑器、IDE集成、解析器生成器等)。据我所知,Xtext可以为我生成解析器和IDE扩展,但是如果我需要编译器,我必须自己编写它,或者创建Java映射,从而生成可以编译的Java源文件 我看不到的是,是否有可能将Xtext的解析器和生成器嵌入到我的应用程序中,并在运行时编译在DSL中编写的脚本,而无需预编译它们。我

我试着去理解并找出它是否适合我的需要。我正在寻找一个工具,它允许我创建一个DSL,可以在执行期间在我的应用程序中编译和评估

Xtext似乎是一个非常好的工具,因为它提供了很多东西(语法编辑器、IDE集成、解析器生成器等)。据我所知,Xtext可以为我生成解析器和IDE扩展,但是如果我需要编译器,我必须自己编写它,或者创建Java映射,从而生成可以编译的Java源文件


我看不到的是,是否有可能将Xtext的解析器和生成器嵌入到我的应用程序中,并在运行时编译在DSL中编写的脚本,而无需预编译它们。我们的目标是将脚本与我的应用程序一起发布,使发布后的更改成为可能。

是的,这是完全可能的,实际上相当简单。所有核心组件,即非IDE特性,都独立于Eclipse。文档中有一些示例Java代码展示了如何做到这一点。 这基本上是一个或多个问题

// creating the injector
Injector injector = new MyLanguageStandaloneSetup().createInjectorAndDoEMFRegistration()

// obtain a resource set
XtextResourceSet resourceSet = injector.get(XtextResourceSet.class);

// load file
Resource resource = resourceSet.getResource(URI.create("path/to/file.mylanguage"), true);

// obtain root AST element
MyModel model = (MyModel) resource.getContents().get(0);

谢谢我很快就会用这个做实验:)