解释器与代码生成器Xtext

时间:2013-01-12 18:29:59

标签: eclipse interpreter dsl xtext

我使用Xtext编写了一个DSL。我想要的是执行该DSL以执行其中的好事。

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

我有两个问题;

  1. Interpreter和Code Generator有什么区别? 是不是都要执行DSL?
  2. 如何写口译员?任何一步一步的教程链接?我找到了许多使用xtend生成代码的教程,但找不到任何用于编写解释器的内容。
  3. 谢谢,

    萨勒曼

1 个答案:

答案 0 :(得分:4)

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

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

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