我有一个使用 Xtext 编写的 DSL。我想要的是执行那个 DSL 来执行一些好的事情。
我在 xtend 中编写了实现接口 IGenerator 的 myDslGenerator 类来生成 java 代码,它工作正常。
我有两个问题;
- 解释器和代码生成器有什么区别?不是都用于执行 DSL 吗?
- 如何编写解释器?有分步教程链接吗?我找到了许多使用 xtend 生成代码的教程,但找不到任何用于编写解释器的教程。
谢谢,
萨尔曼
我有一个使用 Xtext 编写的 DSL。我想要的是执行那个 DSL 来执行一些好的事情。
我在 xtend 中编写了实现接口 IGenerator 的 myDslGenerator 类来生成 java 代码,它工作正常。
我有两个问题;
谢谢,
萨尔曼
基本上,解释器和代码生成器的工作方式完全不同。代码生成器就像一个编译器:它们用另一种语言创建你的 DSL 的可执行代码;另一方面,解释器用于遍历您的 DSL 并在您自己的环境中执行它们。这意味着,生成的代码不必(但当然可以)依赖于您的 DSL,可以更快/更优化;虽然解释器需要了解您的语言的结构,但可以在您的开发 IDE 中执行,而不需要运行其他应用程序。
AFAIK Xtext 不支持编写解释器,它有点超出了他们的范围(不完全——对于 Xbase 表达式,有一个 XbaseInterpreter 实例,可以重用——只要你正确设置它的类路径),因为它们是非常特定于语言的。
我也不知道任何关于解释 Xtext DSL(甚至不是 XbaseInterpreter)的分步教程,但它基本上归结为 AST 的遍历,并且随着节点的遍历,相应的语句被动态执行. 为了使这种遍历按预期工作,解释器必须维护变量和其他引用的(可能是分层的)上下文。