IDEA MPS和Eclipse Xtext的实际用途是什么?

10

这两个框架都涉及元模型:

你有使用这些工具进行元模型转换的实际应用示例吗?

3个回答

11
我们使用MPS创建了一个完整的缺陷跟踪器。代码生成不是目标,而是获取可执行代码的手段。目标是为开发人员提供一种工具,使其能够用最少的努力创建DSL。
MPS的酷炫之处在于它还为您的语言提供IDE。您创建的不同DSL是兼容的,即您可以创建扩展Java闭包的DSL和启用外部方法的另一个DSL,这些扩展将一起工作。

请问您能帮我找一下Java的闭包扩展吗?我找不到如何扩展Java语法的示例。 - Igor Konoplyanko
要在MPS中为Java使用闭包,您只需要导入语言jetbrains.mps.baseLanguage.closures。 - Maxim Mazin

7

JetBrains MPS和Eclipse XText在存储元模型的文档方面有所不同

关于XText这篇文章介绍了一种用法,即创建自己的编程语言和特定领域语言(DSL)。

一旦你有了一种语言,你想要处理它,这通常意味着将你的模型转换为另一种表示形式。
负责这种转换的设施称为生成器,由一堆转换模板(例如XPand)和执行它们的一些代码组成。在某些事件上,读入模型并应用转换以生成代码。

这是一个模型转换的示例

dot3zest带有一个将DOT转换为Zest的解释器(现在使用为DOT语法生成的Xtext switch API),支持特定的DOT边缘定义。

alt text


关于MPS,你可以看到这里有一系列实际示例
比如这个用于生成GPL的代码,例如Java、C#、C++或XML

alt text
(来源:googlecode.com)


注意:2010年10月的一次会议将用两个框架展示一个实际例子。有关差异,请参见此处。 - VonC
代码生成是最终目标吗?还是我没有看到更远的东西? - S.R
@S.R:最终目标仍然是模型转换。你将一个AST(抽象语法树)转换成另一个,这将给你带来:代码(代码生成),或节点(第一个示例中的节点图),或任何其他AST,它将代表目标模型应该是什么。 - VonC

2
我认为XText的主要用途首先是从您定义的语法和自动生成的eclipse工作台中创建DSL。其次,它可以将您使用DSL编写的脚本转换为Java代码。XText2中内置的表达式是一个加分项。
该框架提供了一个免费的IDE来支持您创建的DSL的编写。而DSL则是最终提供的产品。它可以用于将规则和逻辑从现实世界中抽象出来。例如,在我们的项目中,有一个产品配置规则,只有专家才知道这些规则,因此他们会在您创建的DSL中编写一些规则。

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