使用Xtext或XTend构建现有EMF模型的代码生成器

4
我有一个模型转换序列,最终输出一个EMF模型,该模型是我自己定义的某个EMF元模型的实例。
我正在寻找一种从中生成代码的好方法。当然,有XPand,我曾经在其他项目中使用过它,但我想知道XText或XTend是否是一个合适的替代品(因为它们正在积极开发)。
换句话说,我有一个EMF模型,不需要为其创建编辑器(因此不需要XText),但我确实需要构建一个代码生成器。我能否仅使用XText来实现这一部分呢?
相比于XPand或Acceleo,使用XText是否更加可取?
任何建议都将非常重要。
2个回答

3
我尝试在这些工具之间进行公正的比较,但这确实很难。
Xtext 与代码生成无关 - 它是用于创建编辑器和解析器的。
Xtend2 被设计为 Xpand 的继承者,具有类似的语法 - 然而,它不是专门针对代码生成而设计的,而是作为一种通用编程语言,也可用于代码生成。其他生成引擎的主要区别在于您可以在源代码级别上工作(基本上,Xtend2会转换为Java),并且您必须提供自己的驱动生成引擎的引擎 - 尽管当然可能使用建模工作流引擎来完成此目的 - 就像在Xpand的情况下一样。
Acceleo 更适合简单的代码生成。它的语法基于用于代码生成的OMG规范,并提供了完整功能的IDE用于开发代码生成。但是,如果您需要在代码生成期间进行复杂的控制结构,则可能不是最佳选择。
总的来说,如果您只使用EMF模型,则Acceleo和Xtend都可以成为代码生成的不错选择,并且应根据您(或您的团队)的专业知识和更具体的需求来选择它们。如果您需要支持EMF模型和其他数据源,则Acceleo不是最佳选择;然而,JET和Xtend都不依赖于您的输入是EMF模型,而是提供了调用任何可用Java代码的简单方法。

好的,你是对的 - 我很抱歉。我并不想对JET持那么消极的态度。它的功能确实存在,只是对我来说使用起来更加繁琐。我已将该段落标记为已删除。 - Zoltán Ujhelyi
我会尝试使用XTend,正如Sven Eftinge在Twitter上建议我的那样。我知道我需要做一些工作来将模型作为输入,但从宏观角度来看,这可能并不需要太多的工作量。我在某个地方读到过,XTend的执行速度比XPand快得多。 - Marten Sytema
@ChrisGerken 我使用Acceleo来生成Swing编辑器(甚至是CRUDS)、ESB中介和Spring/JPA/Flex应用程序。JET比Acceleo/XTend更复杂的事实并不意味着JET不够完整。 - Tcharl

-1
我推荐使用M2T-JET。它是一种基于文本模板的转换工具,可以使用多个模板从单个输入模型生成项目、文件夹和文件。该模型可以是EMF格式,而模板则允许您浏览和迭代模型,以生成您所需的Eclipse资源。

这只证明了你不理解JET。请不要评论你不理解的技术,特别是当你有如此明显的偏见时。 - Chris Gerken

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