DomainModelはsiriusのbasicfamilyを使用する。
model,edit,editorのprojectは下記zip参照
http://eclipse.org/sirius/doc/resources/getstarted/basicfamily.zip
プロジェクト作成
- New > Xtext > 「Xtext Project from Existing Ecore Model」
- Select Epackages で「Add...」 でBasicfamilyPackageを選択、Entry Rule を「Family」 を選択
- 既存のgenmodelを選択し、含まれているEPackageをインポート
- Entry RuleはDSLの包含関係のトップのEClassを指定
- New Xtext Projectは、新規作成と同じ
DSL作成
- generate 宣言を定義
- 新規作成では作成されるが、ecoreから作成だとgenerateが作成されないため、定義が必要
- トップのクラス定義
- 既存のecoreをインポートしただけだと、buildした時にxtext無いのpackageが空のため、例外packageにからのため、例外がでる。
Caused by: java.lang.IllegalStateException: Generated package 'mydsl' may not be empty. at org.eclipse.xtext.xtext.generator.XtextGeneratorLanguage$2.add(XtextGeneratorLanguage.java:346)
dslの設定例// automatically generated by Xtext grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals generate mydsl "http://www.eclipse.org/sirius/sample/basicfamily2" import "http://www.eclipse.org/emf/2002/Ecore" as ecore import "http://www.eclipse.org/sirius/sample/basicfamily" // ↓↓↓追加↓↓↓ Root: family=Family ; // ↑↑↑追加↑↑↑
- Generate Xtext Artifactを実行する
mode/generated/xxxx.ecoreが指定したecoreと関連付いている
- 既存のecoreをそのままDSLにすることが出来ないのかが調査できていない。
複数パッケージが定義されているecoreの場合
上記以外に「GenerateMyDsl.mwe2」を修正する。
module org.xtext.example.mydsl.GenerateMyDsl import org.eclipse.xtext.xtext.generator.* import org.eclipse.xtext.xtext.generator.model.project.* var rootPath = ".." Workflow { // ↓↓↓追加↓↓↓ bean = org.eclipse.emf.mwe.utils.StandaloneSetup{ registerGeneratedEPackage="org.eclipse.sirius.sample.basicfamily.BasicfamilyPackage" // 複数のEPackageを使用する場合には、StandaloneSetupを追加して、registerGeneratedEPackageに使用するEPackageのクラスを指定する。 // 単一の場合はgenmodelから解釈されるため、定義不要。 } // ↑↑↑追加↑↑↑
0 件のコメント:
コメントを投稿