当前位置: 首页 > 知识库问答 >
问题:

解释器与代码生成器Xtext

祁霖
2023-03-14

我用Xtext写了一个DSL。我想要的是执行DSL,从中获得一些好的结果。

我编写了myDslGenerator类,在xtend中实现接口IGenerator,以生成java代码,它运行良好。

我有两个问题;

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

谢谢你,

萨尔曼

共有1个答案

暴英达
2023-03-14

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

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

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

 类似资料:
  • 本文向大家介绍python生成器与迭代器详解,包括了python生成器与迭代器详解的使用技巧和注意事项,需要的朋友参考一下 列表生成式: 例一: a = [i+1 for i in range(10)] print(a) 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 例二: L = [1, 2, 3, 4, 5] print([i*i for i in L if i>3]

  • 本文向大家介绍python迭代器与生成器详解,包括了python迭代器与生成器详解的使用技巧和注意事项,需要的朋友参考一下 例子 老规矩,先上一个代码: 这个东西输出可以脑补一下, 结果是[20,21,22,23], 而不是[10, 11, 12, 13]。 当时纠结了半天,一直没搞懂,后来齐老师稍微指点了一下, 突然想明白了--真够笨的,唉。。好了--正好趁机会稍微小结一下python里面的生成

  • 问题内容: 我需要以下工具: 方便地解析Java源代码并轻松访问给定的元素。 轻松生成源代码文件,轻松将数据结构转换为代码 有什么好的技巧,库,框架,工具吗?谢谢你的帮助。 问题答案: 从Java 6开始,编译器在JDK中包含一个API。通过它,您可以通过API 访问Java解析器的结果。JDK5以Mirror API 的形式提供了相同的功能。有一个很好的介绍性文章在这里。 我见过的最好的代码生成

  • Jboot 内置了一个简易的代码生成器,可以用来生成model层和Service层的基础代码,在生成代码之前,请先配置jboot.properties关于数据库相关的配置信息,Jboot 代码生成器会通过该配置去链接数据库。 jboot.datasource.type=mysql jboot.datasource.url=jdbc:mysql://127.0.0.1:3306/jbootdemo

  • 遵照此规范,在实际操作中,有许多重复。接下来推荐一款专为本规范量身定做的代码生成器 Laravel 5.x Scaffold Generator。 本扩展支持 5.1 ~ 5.5 版本的 Laravel。 只需要一个命令: 即可生成: $ php artisan make:scaffold Projects --schema="name:string:index,description:text:

  • 问题内容: 为简单起见,请设想这种情况,我们有一台2位计算机,它具有一对称为r1和r2的2位寄存器,并且仅适用于立即寻址。 假设位序列 00 表示 添加 到我们的CPU中。也 01 的装置将数据移动到R 1和 10组 的装置将数据移动到R2。 因此,这台计算机和一个汇编器都有一种汇编语言,其中的示例代码将像 简而言之,当我将此代码汇编成本地语言时,文件将类似于: 上面的12位是以下代码的本机代码: