解释器与代码生成器Xtext

nom*_*ian 5 eclipse dsl interpreter xtext

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

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

我有两个问题;

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

谢谢,

萨尔曼

Zol*_*lyi 5

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

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

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