0

我正在构建一个用于操作图形元素的编辑器,每个元素必须代表 API 规范中的一种元素。

API的元素基本上是一些类和接口,它们有一定的使用限制,比如元素A不能是元素B的子元素,或者不能与元素C连接等等……

编辑器应该允许您根据绘制的内容生成代码,并且生成的代码必须是与您绘制的内容相对应的 API 的实现。

我(在实践中)对模型驱动架构以及如何从图形模型生成代码到某些实现一无所知。

我不想将图形模型(包含大小和坐标等图形信息)与实现 API 规范的业务模型混合。

我正在使用 eclipse GEF 来构建编辑器,这是我面临的问题:

由于图形模型和业务模型是分开的,我正在考虑定义一个 emf 模型,编辑器将是该 emf 模型的编辑器。那么是否可以将编辑器中绘制的模型(使用 emf 模型作为基本构造元素)转换为 API 规范的相应实现?

我知道,因为图形模型和业务模型是分开的,所以我必须实现某种语法分离,使用限制非常适合我想做的事情(谈到代码生成和语法)或者我应该使用xtext ?

什么 Eclipse 框架工具可以帮助我做我想做的事?

4

1 回答 1

0

如果您已经有一个图形编辑器,那么似乎几乎没有必要创建一个较低级别的文本模型格式(例如使用 antlr/Xtext)来执行代码生成。特别是,如果您的模型已经在 EMF 中。

EMF 模型有多种代码生成器技术(例如 Acceleo 或 Xtend 也可用于此);这些生成器将使用 EMF 模型作为输入,并提供特定于您似乎正在使用的 API 的输出代码。在这两种工具中,您必须通过定义模板手动组装输出文件,然后序列化这些模板的结果。这种序列化在 Acceleo 中是自动的,或者您可以在 Xtend 中使用类似 Java 的 API 来完成。

如果您的模型现在不在 EMF 中,您仍然可以直接使用 Xtend - 但是,我相信 Acceleo 在这种情况下不会有用。

于 2013-04-15T11:44:30.307 回答