4

我有一个模型转换序列,最终输出一个 EMF 模型,一些 EMF 元模型的实例(我自己定义的元模型)。

我正在寻找一种从中生成代码的好方法。当然,还有 XPand,我曾经在其他项目中使用它,但我想知道 XText 或 XTend 是否是合适的替代品(因为它是如此积极地开发)。

换句话说,我有一个 EMF 模型,不需要它的编辑器(所以不需要 XText 来达到这个目的),但我确实需要构建一个代码生成器。我可以只对那部分使用 XText 吗?

是否建议使用 XPand 或 Acceleo?

任何建议都会很棒。

4

2 回答 2

3

我试图在这些工具之间进行公平的比较,但这真的很难。

Xtext 与代码生成无关——它用于创建编辑器和解析器。

Xtend2 被设计为具有相似语法的 Xpand 的继任者 - 但是,它不是专门为代码生成量身定制的,而是作为一种通用语言,也可以很好地用于代码生成。其他生成引擎的主要区别在于您在源代码级别工作(基本上,Xtend2 转换为 Java),并且您必须提供自己的引擎来驱动生成 - 尽管当然可以使用建模工作流引擎这个原因 - 就像 Xpand 的情况一样。

Acceleo 更适合简单的代码生成。它的语法基于代码生成的 OMG 规范,并为开发代码生成提供了一个功能齐全的 IDE。但是,如果您在代码生成过程中需要复杂的控制结构,它可能不是最好的解决方案。

关于 M2T-JET,正如 Chris 所建议的,我会投反对票,除非有非常具体的需求。它的开发支持要弱得多(例如它的编辑器),并且更多地基于具有单个输出模板的想法,而不是 Xpand/Xtend/Acceleo 的更高级别、基于规则的方法。这会在代码生成期间带来更好的性能,但是,它通常会导致更难理解模板。忽略这一段,因为它太消极了。

总之,如果您只使用 EMF 模型,Acceleo 和 Xtend 都是代码生成的不错选择,您应该根据您(或您的团队)的专业知识和更具体的需求在它们之间进行选择。如果您需要同时支持 EMF 模型和其他数据源,那么 Acceleo 不是最佳选择;但是,JET 和 Xtend 都不是基于您的输入是 EMF 模型这一事实,而是提供了调用任何可用 Java 代码的简便方法。

于 2012-09-05T20:14:35.297 回答
-1

我推荐 M2T-JET。这是一个基于文本模板的转换,它使用多个模板从单个输入模型生成项目、文件夹和文件。模型可以是 EMF,模板让您可以浏览和迭代模型,以生成您想要的 Eclipse 资源。

于 2012-09-05T16:59:13.110 回答