解释器 vs. 代码生成器 Xtext

5
我使用Xtext编写了DSL。我希望执行该DSL以实现其功能。
我编写了myDslGenerator类来实现xtend中的IGenerator接口,用于生成Java代码,它已经正常工作。
我有两个问题:
1. 解释器和代码生成器有什么区别?难道两者都是用于执行DSL吗? 2. 如何编写解释器?有逐步教程链接吗?我找到了许多使用xtend生成代码的教程,但找不到任何编写解释器的教程。
谢谢,
Salman
1个回答

5
基本上,解释器和代码生成器的工作方式非常不同。代码生成器类似于编译器:它们使用另一种语言创建DSL的可执行代码;另一方面,解释器用于遍历您的DSL并在您自己的环境中执行它们。这意味着生成的代码不必(但当然可以)依赖于您的DSL,可以更快/更优化;而解释器需要理解您的语言构造,但可以在您的开发IDE中执行,不需要运行其他应用程序。
据我所知,Xtext不支持编写解释器,它有点超出了它们的范围(不完全适用 - 对于Xbase表达式,有一个XbaseInterpreter实例,可以重用 - 前提是您正确设置了其类路径),因为它们是极端具体的语言。
我也不知道有关解释Xtext DSL的逐步教程(甚至没有针对XbaseInterpreter的教程),但基本上归结为AST的遍历,随着节点的遍历,相应的语句动态执行。为了使此遍历正常工作,解释器必须维护变量和其他引用的(可能是分层的)上下文。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接