5

我有一个使用 Xtext 编写的 DSL。我想要的是执行那个 DSL 来执行一些好的事情。

我在 xtend 中编写了实现接口 IGenerator 的 myDslGenerator 类来生成 java 代码,它工作正常。

我有两个问题;

  1. 解释器和代码生成器有什么区别?不是都用于执行 DSL 吗?
  2. 如何编写解释器?有分步教程链接吗?我找到了许多使用 xtend 生成代码的教程,但找不到任何用于编写解释器的教程。

谢谢,

萨尔曼

4

1 回答 1

5

基本上,解释器和代码生成器的工作方式完全不同。代码生成器就像一个编译器:它们用另一种语言创建你的 DSL 的可执行代码;另一方面,解释器用于遍历您的 DSL 并在您自己的环境中执行它们。这意味着,生成的代码不必(但当然可以)依赖于您的 DSL,可以更快/更优化;虽然解释器需要了解您的语言的结构,但可以在您的开发 IDE 中执行,而不需要运行其他应用程序。

AFAIK Xtext 不支持编写解释器,它有点超出了他们的范围(不完全——对于 Xbase 表达式,有一个 XbaseInterpreter 实例,可以重用——只要你正确设置它的类路径),因为它们是非常特定于语言的。

我也不知道任何关于解释 Xtext DSL(甚至不是 XbaseInterpreter)的分步教程,但它基本上归结为 AST 的遍历,并且随着节点的遍历,相应的语句被动态执行. 为了使这种遍历按预期工作,解释器必须维护变量和其他引用的(可能是分层的)上下文。

于 2013-01-13T14:46:12.463 回答