我有一个模型的转换序列,最终输出一个EMF模型,一些EMF Meta模型的实例(我自己定义的元模型)。
我正在寻找一种从中生成代码的好方法。当然,有XPand,我曾经将它用于其他项目,但我想知道XText或XTend是否是一个合适的选择(因为它是如此积极开发)。
换句话说,我有一个EMF模型,不需要它的编辑器(因此不需要XText),但我需要构建一个代码生成器。我可以只为那部分使用XText吗?
并建议使用XPand或Acceleo吗?
任何建议都会很棒。
答案 0 :(得分:3)
我尝试在工具之间做一个公平的比较,但这真的很难。
Xtext与代码生成无关 - 它用于创建编辑器和解析器。
Xtend2被设计为具有类似语法的Xpand的后继者 - 但是,它不是专门为代码生成而定制的,而是作为一种通用语言,也可以很好地用于代码生成。其他生成引擎之间的主要区别在于您在源代码级别上工作(基本上,Xtend2转换为Java),并且您必须提供自己的引擎来驱动生成 - 尽管当然可以使用Modeling Workflow Engine来实现这个原因 - 就像Xpand一样。
Acceleo更适合简单的代码生成。它的语法基于用于代码生成的OMG规范,并提供了用于开发代码生成的全功能IDE。但是,如果在代码生成期间需要复杂的控制结构,则可能不是最佳解决方案。
关于M2T-JET,正如克里斯所建议的那样,除了非常具体的需求外,我会投反对票。它的开发支持要弱得多(例如它的编辑器),而且更多的是基于单个模板的输出与Xpand / Xtend / Acceleo的更高级别,基于规则的方法相对的想法。这会在代码生成过程中产生更好的性能,但是,它通常会导致更难理解模板。忽略此段落,因为它太过消极。
总而言之,如果您只使用EMF模型,则Acceleo和Xtend都是代码生成的不错选择,您应该根据您(或您的团队)的专业知识和更具体的需求在它们之间进行选择。如果您需要同时支持EMF模型和其他数据源,那么Acceleo不是最佳选择;但是,JET和Xtend都不是基于您的输入是EMF模型这一事实,而是提供了调用任何可用Java代码的简便方法。
答案 1 :(得分:-1)
我推荐使用M2T-JET。这是一个基于文本模板的转换,它使用多个模板从单个输入模型生成项目,文件夹和文件。该模型可以是EMF,模板允许您浏览并迭代模型以生成您想到的Eclipse资源。