2

我已经开始使用 Eclipse,但我还是个初学者。所以我想从这里得到一些帮助。我使用 Xtext 来阅读我的 DSL。然后我想用我已经用 GMF 定义的图表来展示实例。但是Xtext中的ecore(MFilesystem)和GMF中的ecore(Filesystem)是不同的。所以我使用 Xtend 来改变模型并创建一个 EObject(Filesystem)。但我不知道 GMF 如何使用 Xtent 的资源来创建图表。我在这里展示我的问题:

1:我在 xtext(Grammmar) 中定义了 ecore:

grammar org.xtext.Filesystem with org.eclipse.xtext.common.Terminals

 generate filesystem "http://www.xtext.org/Filesystem"

 MFilesystem:
(mfiles+=MFile | mfolder+=MFolder)* ;

 MFile:
'myfile' name=ID ';'
;

 MFolder:
'myfolder' name = ID ';'
;

http://i.stack.imgur.com/QrFrk.jpg

2:我在GMF中定义了ecore

http://farm9.staticflickr.com/8048/8082263442_149b8e8b0f.jpg

http://farm9.staticflickr.com/8336/8082305888_824c467570.jpg

3:我尝试运行 Xtext 的运行时

http://farm9.staticflickr.com/8475/8082313936_d06206d838.jpg

并从我的 DSL 文件(test.filesystem)创建图表。

http://farm9.staticflickr.com/8323/8082338379_f35894ba57_z.jpg

4:那我有这个问题

http://farm9.staticflickr.com/8332/8082347529_3ca68fd520.jpg

5:所以我尝试使用 Xtend 在 Xtext 中更改我的模型

http://farm9.staticflickr.com/8476/8082347146_dc220f9ca9.jpg

package org.xtext.generator

import org.eclipse.emf.ecore.resource.Resource

import org.eclipse.xtext.generator.IFileSystemAccess

import org.eclipse.xtext.generator.IGenerator

import org.gmf.filesystem.filesystem.Filesystem

import org.gmf.filesystem.filesystem.FilesystemFactory

import org.gmf.filesystem.filesystem.impl.FilesystemFactoryImpl

import org.xtext.filesystem.MFile

import org.xtext.filesystem.MFolder


class FilesystemGenerator implements IGenerator  {

    Filesystem myfilesystem

    FilesystemFactory myfilesystemFactory

    override void doGenerate(Resource resource, IFileSystemAccess fsa) {

        //TODO implement me

        val ast = resource.contents.get(0)

        myfilesystemFactory = new FilesystemFactoryImpl()

        myfilesystem = myfilesystemFactory.createFilesystem()

        val fi = myfilesystemFactory.createFile()

        var astFi = (ast.eContents.get(0)) as MFile

        fi.name = astFi.name

        val fo = myfilesystemFactory.createFolder()

        var astFo = (ast.eContents.get(1)) as MFolder

        fo.name = astFo.name

       }

}

6:但它不起作用。我想,我做错了什么。所以我想知道,我怎样才能让 GMFmyfilesystem用来创建图表。

谢谢。

4

1 回答 1

1

Xtext 指令

generate filesystem "http://www.xtext.org/Filesystem"

生成一个新的元模型,而不是导入现有的元模型。相反,指定

import "platform:/resource/org.gmf.filesystem/model/filesystem.ecore"

引用您的 GMF 编辑器正在使用的元模型。有关更多信息,请参阅此帖子

于 2013-06-27T08:25:32.903 回答