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:しかし、それは動作しません。私は何か間違ったことをしたと思います。myfilesystemですから、GMF がダイアグラムを作成するために使用する方法を知りたいのです。

ありがとう。

4

1 に答える 1