[英]Use Xtext or XTend to build code generator for existing EMF Model [closed]
我有一个模型转换序列,最终输出一个EMF模型,一些EMF元模型的实例(我自己定义的元模型)。
我正在寻找一种从中生成代码的好方法。 当然,有XPand,我曾经把它用于其他项目,但我想知道XText或XTend是否是一个合适的选择(因为它是如此积极开发)。
换句话说,我有一个EMF模型,不需要它的编辑器(因此不需要XText),但我需要构建一个代码生成器。 我可以只为那部分使用XText吗?
XPand或Acceleo是否可取?
任何建议都会很棒。
我尝试在工具之间做一个公平的比较,但这真的很难。
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代码的简便方法。
我推荐M2T-JET。 这是一个基于文本模板的转换,它使用多个模板从单个输入模型生成项目,文件夹和文件。 该模型可以是EMF,模板允许您浏览并迭代模型以生成您想到的Eclipse资源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.