Xtext和MPS等不同语言工作台工具的优缺点?

jos*_*osh 16 dsl dsl-tools xtext mps workbench

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

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

我有点害怕走远一条路,撞墙,意识到我的所有代码都采用了无法移植到其他任何地方的格式 - 这些工具是否存在风险?特别是MPS看起来有点可怕,因为据我所知,你并没有真正生成基于文本的语法,而是为AST构建专门的编辑器.

Gab*_*bák 16

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

  • 谢谢,这是我正在寻找的那种比较.自从我提出这个问题以来,我已经离开了Spoofax路径的一点点,它的代码生成部分非常引人注目:它为您提供了一种强大的功能语言来操纵和转换您的AST.所以现在它超过了优势社区/支持其他工具,至少对我的项目而言. (2认同)

kol*_*nov 7

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


Ira*_*ter 5

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

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

  • TXL(实用,单一范式)
  • Stratego(将Spoofax移植到Eclipse之前)
  • Rascal(研究,在很多方面设计得很好)
  • DMS软件再造工具包(恰好是我的;商业;用于执行重型DSL /传统语言分析和转换,包括在C++上)

这些都为定义DSL并对其进行转换提供了良好的机制.

真正重要的是实施"解析后的生活"的支持机制.