16

是否有人有使用 Xtext、Spoofax 和 JetBrains 的 MPS 等语言工作台工具的经验?我正在尝试一个,并且很难找到不同工具的良好比较。各自的优缺点是什么?

我正在寻找构建生成 python 代码的 DSL,所以我特别想听听那些在 python 中使用过这些工具之一的人的来信(这三个工具似乎都非常关注 Java ......为什么会这样?)。DLS 主要是供我自己使用的,所以我不太关心构建一个非常漂亮的 IDE,而是关心它是 KISS 来定义语法和编写代码生成器。对 DLS 进行类型检查/静态分析的能力也很酷。

我有点害怕走得太远,碰壁,并意识到我所有的代码都是一种无法移植到其他任何东西的格式——这些工具有风险吗?特别是 MPS 似乎有点可怕,因为据我了解,您并没有真正生成基于文本的语法,而是为 AST 构建专门的编辑器。

4

6 回答 6

18

Markus Voelter 在 se-radio 和 Software ArchitekTOUR 播客中比较这三个方面做得很好。基本思想是,Xtext 使用最多,因此最稳定和文档化,它基于流行的 Eclipse 平台和建模生态系统 - 围绕它的 EMF。另一方面,它基于解析器并在内部使用 ANTLR,这意味着您可以定义的语法类型是有限的,并且语言不能轻松组合。恶搞是一种学术产品,采用这三者最少。它也是基于解析器的,但在内部使用自己的解析器生成器,允许语言组合。Jetbrains MPS 是基于投影的,它为语言设计者提供了很大的自由度,并允许语言组合。*t 也有坚实的支持。缺点可能是学习曲线。这些工具都不是严格专注于 Java 作为代码生成器的目标语言。Xtext 使用 Xpand 模板,它们是纯文本。我真的不知道 Spoofax 中的代码生成是如何工作的。MPS 有它的基础语言,据说它是 Java 的子集,但有不同的替代方案。我个人使用 Xtext 是因为它的简单性和成熟度,但是它的设计所带来的强大限制使它不是一个面向未来的选择。

于 2011-01-02T09:29:33.630 回答
7

两周前我在同一个案例中选择了 XText,但我对 Spoofax 一无所知。我的第一印象 - Xtext 非常简单且高效。我在 30 分钟内完成了我的第一个真实(但非常简单)项目,我生成了一个 graphviz 点图和 html 报告。我不喜欢 MPS,因为我更喜欢纯文本源文件和目标文件。

于 2010-12-23T14:16:55.153 回答
5

还有其他系统可以做这种事情。如果您的目标是构建工具,那么您不一定要寻找具有集成工具的 IDE;有时您可以找到专注于实用程序而不是 IDE 集成的更好工具

考虑任何纯程序转换工具:

  • TXL(实用,单一范式)
  • Stratego(移植到 Eclipse 之前的 Spoofax)
  • 流氓(研究,在许多方面设计得非常好)
  • DMS Software Reengineering Toolkit(碰巧是我的;商业的;用于进行重型 DSL/传统语言分析和转换,包括在 C++ 上)

这些都为定义 DSL 和转换它们提供了良好的机制。

真正重要的是执行“解析后的生活”的支持机制。

于 2014-06-12T07:19:35.210 回答
2

我已经用Xtext进行了几天的试验,虽然该工具看起来很有希望,但我最终被与Eclipse生态系统的紧密集成所推迟,并且为了解决应该轻松解决的问题而不得不经历的痛苦盒子:您实现的代码生成器的无头运行。请参阅此处了解一些必须经历的细节(它甚至没有在Xtext网站上正确记录,而是在博客上,这意味着它是一个临时补丁,很可能在下一个版本中中断)。

半年后再看一下,看看这方面有没有改善。

于 2012-08-05T12:14:37.410 回答
2

看看 Markus Völter 的书。它对这三种技术进行了非常全面的比较。 http://dslbook.org

XText 维护得很好,但这并不意味着它没有问题。让类型系统、作用域和生成运行起来并不像宣传的那么容易。

恶搞是无扫描的,(简化语法组合)。没有很好的记录,但似乎完整。

MPS 是投影的。语言写作方面的专家和编辑方面的专家。支持 AST 的多个编辑器,并且很快甚至会支持一个不错的图表编辑器。基本语言文档不是那么好。类型系统,范围,检查处理得很好。模型到模型的转换由求解器完成。我的同事使用它抱怨模型到文本语言。(我认为 M2M 也不是那么直观。)

多年前,微软有 OSLO 项目。MGrammar 尤其是 Quadrant 非常有前途。可以在表格、表格、文本或图表视图中表示您的模型。但突然间他们取消了这个项目(也许还枪杀了从事它的人)

于 2014-03-16T00:56:16.370 回答
1

也许今天比较不同语言工作台的最佳位置是http://www.languageworkbenches.net/那里http://www.languageworkbenches.net/past-editions/显示了一组语言工作台如何实现类似的任务: 特定域的 dsl。

2022 年更新:由于链接已断开,有关该主题的更新文章已写入,请参阅上述网站: https ://web.archive.org/web/20160324201529/http://www.languageworkbenches.net/

对文章审查语言工作台的参考包括:1) 最新技术:https ://link.springer.com/chapter/10.1007/978-3-319-02654-1_11和 2) 实证评估:https://hal。 archives-ouvertes.fr/file/index/docid/706841/filename/Evaluation_of_Modeling_Tools_Adaptation.pdf

于 2014-06-12T07:02:16.850 回答