是否有人有使用语言工作台工具(例如XTEXT,SPOOFAX和JETBRAINS的MPS)的经验?我想尝试一个,很难找到对不同工具的良好比较。每个人的利弊是什么?

我希望构建生成Python代码的DSL,因此我特别有兴趣听到与Python一起使用这些工具之一的人的消息(这三个看起来很漂亮,这是专注于Java的……为什么?)。 DLSS主要用于我自己的使用,因此我不关心建立一个非常漂亮的IDE,而是我对定义语法并编写代码生成器的亲吻。键入检查 /对DLSS进行静态分析的能力也很酷。

我有点害怕走一条路,撞墙,意识到我所有的代码都是无法移植到其他任何东西的格式 - 这是这些工具的风险吗?特别是国会议员似乎有些可怕,因为我理解,您并没有真正生成基于文本的语法,而是为ASTS构建专业编辑器。

有帮助吗?

解决方案

Markus Voelter在比较SE-Radio和软件Architektour播客中的三个方面做得很好。基本思想是,Xtext最常使用,因此最稳定和记录,它基于流行的Eclipse平台和对周围的EMF进行建模。另一方面,它是基于解析器的,并在内部使用antlr,这意味着您可以定义的语法是有限的,并且语言无法轻松组合。 Spoofax是一种学术产品,这三种产品最少。它也是基于解析器的,但在内部使用自己的解析器发电机,可以使用语言组合。 Jetbrains MPS是基于投影的,它为语言设计师提供了很大的自由,并允许语言组合。 *t也有坚实的支持。缺点可能是学习曲线。这些工具都不是Java作为代码生成器的目标语言的重点。 Xtext使用Xpand模板,这是纯文本。我真的不知道Spoofax中的代码生成如何工作。国会议员有其基本语言,据说这是Java的子集,但是有不同的选择。我个人使用Xtext是因为它的简单性和成熟度,但是其设计给出的强大限制使其并不是一个非常未来的证明选择。

其他提示

两周前,我选择了Xtext,但我对Spoofax一无所知。我的第一印象 - Xtext非常简单且富有成效。我在30分钟内完成了第一个Realife(但非常简单)的项目,我生成了一个GraphViz Dot Graph和HTML报告。我不喜欢MPS,因为我更喜欢纯文本源和目标文件。

还有其他用于做这种事情的系统。如果您的目标是构建工具,则不一定必须使用集成工具来寻找IDE;有时您可以找到专注于效用而不是IDE集成的更好的工具

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

  • TXL(实用,单个范式)
  • Stratego(将其移植到Eclipse之前)
  • Rascal(研究,在许多方面设计得很好)
  • DMS软件重新设计工具包(恰好是我的;商业;用于进行重型DSL/常规Langauge分析和转换,包括在C ++上)

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

真正重要的是支撑机制用于“解析后的生活”。

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

看看马库斯·沃特的书。它对这三种技术进行了非常全面的比较。http://dslbook.org

Xtext维护得很好,但这并不意味着它没有问题。获取类型系统,范围和发电的运行并不像广告宣传那样容易。

Spoofax是无扫描仪的(简化语法组成)。并没有得到充分记录,但似乎很完整。

MPS是投影。语言组成和编辑的专业。支持AST的多个编辑器,甚至很快就会支持一个漂亮的图表编辑器。基本语言文档不是那么好。型,范围,检查的处理非常好。模型转换由求解器完成。我的同事使用它抱怨文本语言的模型。 (我的看法M2M也不是直觉的。)

几年前,微软拥有奥斯陆项目。板块,尤其是象限非常有前途。可以在表,表单,文本或图表视图中表示您的模型。但是突然他们已经取消了该项目(也许开枪射击了从事该项目的人)

我尝试了几天 XTEXT 尽管该工具看起来很有希望,但我最终被与 生态系统和痛苦必须经历,只是为了解决开箱即用的麻烦:您实现的代码生成器的无头运行。看 这里 对于某些细节,必须经过(甚至还没有正确记录在 XTEXT 网站,而是在博客上,这意味着它的临时补丁很可能会在下一个版本中打破)。

将在半年后再看一下,看看这方面是否有任何改进。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top