グラマー定義の基礎を一通り試すには、以下のチュートリアルがお勧めです。
Xtext 15 Minutes Tutorial
DSL例
datatype String
entity Blog {
title: String
many posts: Post
}
entity HasAuthor {
author: String
}
entity Post extends HasAuthor {
title: String
content: String
many comments: Comment
}
entity Comment extends HasAuthor {
content: String
}
entity Blog {
title: String
many posts: Post
}
entity HasAuthor {
author: String
}
entity Post extends HasAuthor {
title: String
content: String
many comments: Comment
}
entity Comment extends HasAuthor {
content: String
}
grammar org.example.domainmodel.DomainModel with
org.eclipse.xtext.common.Terminals
generate domainmodel "http://www.example.org/domainmodel/Domainmodel"
Domainmodel :
elements += Type*
;
Type:
DataType | Entity
;
DataType:
'datatype' name = ID
;
Entity:
'entity' name = ID ('extends' superType = [Entity])? '{'
features += Feature*
'}'
;
Feature:
many?='many'? name = ID ':' type = [Type]
;
org.eclipse.xtext.common.Terminals
generate domainmodel "http://www.example.org/domainmodel/Domainmodel"
Domainmodel :
elements += Type*
;
Type:
DataType | Entity
;
DataType:
'datatype' name = ID
;
Entity:
'entity' name = ID ('extends' superType = [Entity])? '{'
features += Feature*
'}'
;
Feature:
many?='many'? name = ID ':' type = [Type]
;
このチュートリアルでは、Eclipse上でのXtextプロジェクトの作り方を含めて、サンプルをもとにしたグラマー定義を体験できます。実際にDSLでよく現れる問題に、Xtextの構文定義をどのように行うべきかを学ぶことができます。
- 構文ルールの開始や有無を識別するキーワードの定義
- 構文ルール内の要素をモデルのフィールドへ割当
- 構文ルールが複数の子要素を持つ場合の定義と値の獲得
- 構文ルールが複数の構文ルールの選択である場合の定義
- ユーザ定義識別子へのクロスリファレンスの定義方法
このチュートリアルでは、グラマー定義の本質的な部分を学ぶことが出来ますが、例えば以下のようなことは含まれていません。
- 終端(Terminal)と値型の定義
- 列挙による終端定義
- ルールとEMFモデルとの対応のカスタマイズ
こうした、より深いテーマについては、以下のリファレンスで学ぶことが出来ます。リファレンスとは言っても、こちらもまた分かりやすいサンプルをもとにしているので、とても分かりやすいです。
The Xtext Grammar Language
このリファレンスでは、グラマーの細かい部分まで学ぶことができるので、15分チュートリアルが終わったら、さっと目を通してみると良いでしょう。
The Xtext Grammar Language
このリファレンスでは、グラマーの細かい部分まで学ぶことができるので、15分チュートリアルが終わったら、さっと目を通してみると良いでしょう。
0 件のコメント:
コメントを投稿