JAIST Repository
https://dspace.jaist.ac.jp/
Title
MDAフレームワークのEDA分野への適用
Author(s)
岩政, 幹人; 落水, 浩一郎
Citation
Research report (School of Information Science,
Japan Advanced Institute of Science and
Technology), IS-RR-2007-012: 1-50
Issue Date
2007-11-20
Type
Technical Report
Text version
publisher
URL
http://hdl.handle.net/10119/8441
Rights
Description
リサーチレポート(北陸先端科学技術大学院大学情報
MDAフ
レー ム ワ ー ク のEDA分
野 へ の 適 用
岩 政 幹人
落 水浩 一 郎
2007年11月20日
IS-RR-2007-012
北 陸 先 端 科 学 技 術 大 学 院 大 学
情 報 科 学 研 究 科
〒923-1292石
川 県 能 美 市 旭 台1-1
E-mail:{iwamasa,ochimizu}@jaist.ac.jp
OMikitoIwamasaandKoichiroOchimizu,2007
MDAフ
レー ム ワ ー ク のEDA分
野 へ の 適 用
岩政幹 人、落水浩 一郎
北 陸先端科学技術 大学院大学 情報科学研 究科
〒923-1292石
川 県能美市旭 台1-1
E-mail:{iwamasa,ochimizu}@jaist.ac.jp
Abstractソ フ トウエ ア 工 学 に お け るMDAフ レー ム7一 クに 基 づ く仕 様 の 変換 ・合 成 技 術 が 、EDA(Electric
DesignAutomation)シ ス テ ム の 自動 化 ・高 品 質 化 に ど の よ うに 寄 与 で き る か を検 証 した 。 変 換 定 義 の 言 語 と して 、 オ ー プ ン ソー ス プ ロ ジ ェ ク トで あ るATL(AtlasTranslationLanguage)を 選 択 し 、 ATLに お い て 、1)設 計 デ ー タDBか らの 目的 コ ー ド生 成 部 をATLに て 記 述 す る 。 ま た2)設 計 デ ー タ DB生 成 に 関 して は オ ー プ ン ソー ス プ ロ ジ ェ ク トで あ るEMF(EclipseModelingFramework)を 適 用 す る こ と に よ り メ タ モ デ ル か ら 自動 生 成 を構 築 で き る こ と を確 認 す る。 さ ら に3)2に お け るXMIフ ァ イ ル 保 存 形 式 か ら の 内 部DBへ の 読 み 取 り(デ シ リア ライ ズ)の 箇 所 を 対 象 プ ロ グ ラ ム と見 立 て て 、EMFで は な く てATLに て メ タ モ デ ル か らのAPI生 成 を行 うこ とに よ り、 メ タ モ デ ル を利 用 した プ ロ グ ラ ム 生 成 が EDAに お い て も有 効 で あ る こ とを 示 す 。 ま た これ らの 過 程 で 、 ど こ ま でimperativeな 定 義 を排 除 した 仕 様 書 が 記 述 で き るか を 検 証 した 。 結 果 と して 、EDAの 分 野 で は メ タ モ デ ル に 基 づ く モ デ ル 変 換 が イ ン ダ ス ト リア ル な事 例 に お い て も 自動 化 と高 品 質 化 に 寄 与 す る こ とが わ か っ た 。 ま た 木 言 語 理 論 に よ る モ デ ル 変 換 技 術 の 形 式 的 な 取 り扱 い に つ い て 考 察 した 。
目 次 1は じ め に 2背 景 2.1設 計 デ ー タDB事 例...,...,... 2.2事 例 に お け る 課 題...,.,...._.._.__ 3関 連 研 究 4メ タ モ デ ル 技 術 の 評 価 の ア ウ ト ラ イ ン 5モ デ ル 変 換 技 術 概 要 5.1モ デ ル 変 換QVT...。.... 6ATLの 紹 介 6.1ATL言 羊 細... 6.1.1Header. 6.1.2Helper 6.1.3MatchedRule 6.1.41mperativeなRule... 6.1.5CalledRule 6.2変 換 の 例... 7評 価1:ATLに よ る 目 的a‐ ド 生 成 の 構 築 7.1AsmLの 紹 介...,.。... 7.2VSMメ タ モ デ ル... 7.3AsmLメ タ モ デ ル...,.. 7.4単 純 変 換 ル ー ル.._... 7.5複 雑 変 換 ル ー ル... 8評 価2:EMFに よ る 設 計 デ ー タDBの 構 築 8.lEMFの 紹 介...1 8.2VSM設 計 デ ー タDBの 構 築.... 2 4 6 6 7 8 9 10 10 12 14 14 14 15 16 16 17 22 22 24 25 27 28 31 31 35
9評 価3:ATLに よ る デ シ リ ア ラ イ ズ の 生 成 の 構 築36 9.1デ シ リ ア ラ イ ズ 問 題 の 説 明...36 9.2ATLに よ る デ シ リ ア ラ イ ズ 変i換 の 実 現...,,.37 9.3メ タ な モ デ ル 変 換 の 導 入...40 10考 察43 10.1ル ー ル に 基 づ く モ デ ル 変 換 の ク ラ ス...43 10.2メ タ な モ デ ル 変 換 が 有 効 な 対 象 に つ い て...,..43 11木 言 語(TreeLanguage)理 論 と の 関 連44 11.1ATL事 例 と の 対 応 付 け...46 12ま と め とFutureWork48 3
1は
じめ に
報 告 者 はEDA(ElectricDesignAutomation)ツ
ー ル 作成 の プ ロ ジ ェ ク トに お い て 、EDA
ツ ー ル の 中 心 と な る 設 計 デ ー タDB(CADシ
ス テ ム の 内 部DB)を
構 築 す る に 当 た っ て 、
メ タ情 報(以 下 メ タモ デ ル と呼 ぶ)か らDBお
よび フ ァイ ル 入 出 力 処 理 を 自動 生 成 す る
変 換 ツー ル を 作 成 した。 こ の変 換 ツー ル は モ デ ル 構 造 の 変 更 へ の 耐 性 、他 の 設 計 デ ー タ
DBに
も メ タ モ デ ル を入 れ 替 え る だ け で 容 易 に適 用 可 能 と な る汎 用 性 、 生 成 され たbB
自体 にバ グ が ほ とん どな い とい う信 頼 性 へ の 寄 与 、ま た メ タモ デ ル を 元 に して い る の で 、
フ ァイ ル 構 造 、DBの
構 造 の 相 互 トレー サ ビ リテ ィ が 向 上 した 等 の メ リ ッ トが プ ロ ジ ェ
ク ト内 で 評 価 され た 。 一 方 、 同EDAツ
ー ル の 個 別 機 能 で あ る 、設 計 デ ー タDBか
らの
目的 コー ド生 成(言
語 はSpecC仕
様 記 述 言 語)部 分 に お い て は 、 変 換 処 理 が 手 続 き プ ロ
グ ラ ム で 直 接 的 に コー デ ィ ン グ され た の で 、 モ デ ル の 変 更 、 変 換 規 則 の 変 更 に対 して 、
前 記 、 設 計 デ ー タDB生
成 の 自動 化 で 挙 げ た メ リ ッ トを享 受 で き な か っ た とい う反 省 点
が あ った 。
目的 コー ド生 成 部 に お い て は 、設 計 デ ー タ の メ タ モ デ ル の変 更 お よ び 出 力 対 象 の コ ー
ド形 式 の変 更 に対 す る保 守 性 が 低 い とい う課 題 が あ った 。 これ は 変 換 元 と変 換 対 象 の メ
タモ デ ル の 構 造 が 異 な る こ と に よ り設 計 デ ー タDBと
出 カ コ ー ド形 式 に 一 対 一 の 対 応 が
取 れ ず 、 変 換 処 理 にimperativeな
処 理 が 必 要 に な り、結 果 と して 目的 コー ド生成 部 の 品
質(信
頼 性 、保 守 性 等)が 確 保 で き な か った こ とが 主 な理 由 に挙 げ られ る。 一 方 、設 計
デ ー タDBの
構 築 に お い て も、 変 換 ツ ー ル の 作 成 自体 が属 人 的 な職 人 芸 で 実 現 され 、 当
人 以 外 に よ る保 守 性 が 低 い とい う問題 が あ っ た 。
モ デ ル 変 換 技 術 は 変 換 元 モ デ ル 、 変 換 対 象 モ デ ル の メ タ モ デ ル を そ れ ぞ れ 定 義 して 、
こ の メ タ モ デ ル に基 づ い て 変 換 仕 様 を定 義 し変 換 仕 様 か ら変 換 プ ロ グ ラム を 自動 生 成 す
る仕 組 み で あ る 。 そ こで 、 モ デ ル 変 換 技 術 を 、上 記 対 象 に 適 用 し課 題 の 解 決 を は か った 。
着 眼 点 は 、 い か にimperativeで
な い 仕 様 記 述 の み で 変 換 仕 様 が 構 成 で き る か で あ る。 一
方 設 計 デ ー タDBの
構 築 も同 様 に モ デ ル 変 換 の 枠 組 み で 形 式 化 出 来 る こ とを 検 証 す る。
これ らの 着 眼 点 は プ ロ グ ラム に不 具 合 が 発 生 す るの は 、 プ ロ グ ラ ム を記 述 す る か らで あ
り、 プ ロ グ ラ ム レス す な わ ち 、 宣 言 的 な 仕 様 書 か ら 自動 生 成 で き れ ば 、 不 具 合 は整 合 性
の あ る仕 様 書 を作 成 す る こ とに 注 力 す れ ば 駆 逐 で き る とい う(個 人 的 な)信 念 に 基 づ い
て い る。
モ デ ル 変 換 フ レー ム ワー ク の例 と して 、 オ ー プ ン ソー ス プ ロ ジ ェ ク トで あ るATL[14]
を選 択 し、ATLに
て 、1)設
計 デ ー タDBか
らの 目的 コー ド生 成 部 をATLに
て 記 述 す る
こ とを 行 う。 ま た2)設
計 デ ー タDB生
成 に 関 して は オ ー プ ン ソー ス プ ロ ジ ェ ク トで あ
るEMF[4]を
適 用 す る こ とに よ り メ タ モ デ ル か ら 自動 生 成 を構 築 で き る こ と を確 認 し、
さ ら に3)2に
お け るXMIフ
ァイ ル 保 存 形 式 か らの 内 部DBへ
の 読 み 取 り(デ シ リア ラ
イ ズ)の 箇 所 を対 象 プ ロ グ ラ ム と見 立 て て 、EMFで
は な くてATLに
て メ タ モ デ ル か ら
のAPI生
成 を 行 う こ と に よ り、 メ タモ デル を利 用 した プ ロ グ ラ ム 生 成 がEDA分
野 に お
い て も有 効 で あ る こ と を示 す0ま た これ ら の過 程 で 、 ど こま でimperativeな
定 義 を 排 除
した 仕 様 書 が 記 述 で き る か を検 証 し た。
2背
景
EDA(ElectricDesignAutomation)に
お け る設 計 デ ー タDBと
は 、 設 計 情 報 を保 存 す る
内 部 デ ー タ ベ ー ス で あ る。EDAツ
ー ル とは 、GUIな
ど のCADツ
ー ル や 他 の 電 子 的 な
デ ー タ の イ ン ポー トに よ っ て 与 え られ た設 計 入 力 情 報 に対 して ツ ー ル 内 部 で 各 種 変 換 や
合 成(synthesisあ るい はrefinement)処 理 を行 っ て 、 最 終 的 に 下 流 の ツ ー ル が読 み 込 む こ
と が で き る 目的 コー ド(例 え ば 、C言 語 やVHDL)を
生 成 す る設 計 自動 化 の た め の ツ ー
ル で あ る。
こ こで 設 計 デ ー タDBは
、設 計 情 報 を 格 納 す るオ ブ ジ ェ ク ト指 向 の 内 部 デ ー タベ ー ス
で あ り、 入 力 情 報 か らの 設 計 デ ー タへ の 変 換 、 内 部 デ ー タベ ー ス 上 で の 各 種 合 成 処 理 、
お よび 目的 コ ー ド生 成 を行 うた め の デ ー タベ ー スAPIを
持 ち 、 ま た フ ァイ ル へ の保 存
(シ リア ラ イ ゼ ー シ ョン と呼 ぶ)と 読 み 込 み(デ
シ リア ラ イ ゼ ー シ ョ ン と呼 ぶ)用
のAPI
を持 っ て い る。 設 計 デ ー タDBは
多 くの 場 合 、 合 成 処 理 の 実 現 性や 、 下 流 ツ ー ル へ の 目
的 コ ー ド生 成 容 易性 を加 味 した ス キ ー マ に基 づ い て 設 計 され る。 ス キー マ は 合 成 処 理 の
正 し さ を保 証 す る た め に特 定 の 計 算 モ デ ル に 基 づ く こ と も あ る。
2.1設 計 デ ー タ1)B事 例SOC(SystemOnaChip)の
上流 設 計 の た め のEDAツ
ー ル で あ るMSCシ
ステ ム[16]は 、
MessageSequenceChartの
図 式 で 書 か れ た 設 計 デ ー タ を、 内 部 設 計 デ ー タ に 変 換 し、 内
部 設 計 デ ー タDB上
で様 々 な 仕 様 合 成 を 行 っ て 、 これ を 最 終 的 に 下 流 のEDAツ
ー ル の
形 式(SpecC言
語 で 記 述 され た 仕 様 モ デ ル)を 生 成 す る ツ ー ル で あ る。
MSCシ
ス テ ム め 設 計 デ ー タDBは
、C#言 語 に て 記 述 され 、C#の オ ブ ジ ェ ク ト指 向 の
特 徴 を利 用 して ク ラ ス 、 プ ロパ テ ィ、 イ ン ス タ ン ス を 管 理 し、 イ ン ス タ ンス 間 に成 立 す
る関 連 づ け 、合 成 関 係 を 記 録 す る た め の 独 自の フ レー ム ワー ク を有 して い る。 こ こで 設
計 デ ー タDBの
モ デ ル を仮 にVSM(VisualSpecificationModel)と
呼 ぶ こ と にす る。
MSCシ
ステ ム を製 造 す る に 当た って 作 成 した 変 換 ツー ル に 「DBビ ル ダ 」が あ る。 「DB
ビル ダ 」 は対 象 とす る設 計 デ ー タ の ス キ ー マ を ク ラス 図 に 準 拠 した 形 式(メ タ モ デ ル 相
当)で 与 え る と、 これ か らDBコ
ア の 生 成 、DB上
の 設 計 デ ー タ か らSpecC形
式 の テ キ
ス トフ ァイ ル へ の コ ー ド生 成 、DB上
の 設 計 デ ー タの 外 部 フ ァイ ル(XMI形
式 準 拠)へ の
出 力(シ
リア ラ イ ズ)と
読 み 込 み(デ
シ リア ラ イ ズり 機能 を備 え て い る。
VSMシ
ステ ム にお けるrDBビ
ル ダ 」
モデ ル 分 析 ・設 計 クラス 図(Visio) クラス図 同 を スクリプト形 式に書き 換 えて手 入 力 疑似メタクラスシステム クラス情報 をもとに 操作をするのでメタクラス システムといえる 自動 成 1)DB本 体 の クラスの 枠 +基 本 的 な アクセ スAPI 十再 帰 的 なXMIシ リアライズAPI 2)XMIフ ァイ ル か らDBを デ シ リアライズ す る 関 数 1)DB本 体 (C#) 2)DBリ ー ダ (C#) 図1:従 来 の シ ス テ ム2.2事
例 に お け る課 題
目的 コー ド(SpecC形
式)生 成 の た め に は 、VSMの
内部 デ ー タ を トラ バ ー ス して テ キ
ス ト形 式 の 目的 コ ー ドを生 成 す る処 理 をhand-codingさ
れ て お り、VSMの
ス キ ー マ の変
更 や 目的 コー ドの 記 述 形 式(こ れ は 下 流 ツー ル の 都 合 で 度 々 変 更 が あ る)の 変 更 に対 し
て修 正 が 発 生 した 場 合 は 品 質 を確 保 す る た め に に、 コ ス トの 高 い リグ レ ッシ ョンテ ス ト
(過 去 の 主 要 な 出 力 例 を全 て 通 して 目視 確 認 す る)を 繰 り返 す 必 要 が あ っ た
ま たDBビ
ル ダー 自体 がhand-codingさ
れ た プ ロ グ ラ ム な の で 、 不 具 合 対 応1の 容 易性
や 機 能 拡 張 性 が 低 い とい う課 題 を抱 えて い た 。 例 え ば ク ラ ス 定 義 に 合 成 関 係 の 再 帰 構 造
が あ る と、 これ を うま くDB用
プ ロ グ ラ ム に 展 開 で き な い とい う、 モ デ ル 構 造 に依 存 す
る シ ス テ ム運 用 上 の 制 限 が あ り、再 帰 構 造 を もっ プ ロ グ ラ ム構 造 にDBビ
ル ダー を 変 更
す れ ば 解 決 で き る こ とは判 っ て い た が 、 上 記 課 題 に よ り実 装 され る こ とは 無 か っ た 。
3関
連研究
ソ フ ト ウ エ ア 工 学 的 手 法 の 適 用 はDOA(DataOrientedApProach)を 含 め 過 去 多 数 行 わ れ て き た 。 特 に 近 年 はMDA(ModelDrivenArchitecture)[1]と 呼 ば れ る モ デ ル 駆 動 の 開 発 手 法 が 着 目 さ れ て い る 。 MDAで はPIM(PlatformIndependentModel)で プ ラ ッ トフ ォ ー ム に 依 存 し な い モ デ ル を 定 義 し、 こ れ か ら 、 プ ラ ッ ト フ ォ ー ム の 特 有 の モ デ ルPSM(PlatformSpecificModel) を 生 成 す る と い う 立 場 を と る 。 こ こ で はPIMを 定 義 す る た め の 技 術 が モ デ ル で あ りモ デ ル を 定 義 す る た め の 仕 組 み が メ タ モ デ ル と い う対 応 付 け に な る 。 モ デ ル 定 義(メ タ モ デ ル)を 形 式 的 に 定 義 で き れ ば 、 こ れ か らPSMで あ る 各 種 言 語(C/C++,C#等)を 生 成 す る こ と は 機 械 的 に で き る で あ ろ う と い う立 場 を と る 。 メ タ オ ブ ジ ェ ク トの 定 義 か ら 各 種 情 報 や プ ロ グ ラ ム を 出 力 す る 技 術 と し て はOMGの HUTN(Human-readabletextualnotation)やXMI(XMLMetadataInterchange)に 代 表 さ れ るMOFの 交 換 フ ォ ー マ ッ ト に 基 づ く も の や 、Anti-Yacc[6]な ど が 先 行 研 究 と して あ る 。4メ
タ モ デ ル 技 術 の 評 価 の ア ウ ト ラ イ ン
本 報 告 書 で は 、 メ タモ デ ル に 基 づ く仕 様 の 変 換 ・合 成 技 術 を用 い る こ とに よ り、EDA
に代 表 され るイ ン ダ ス トリア ル な適 用 対 象 に お い て 、 どこ ま で 自動 化 ・高 信 頼 化 が 図 れ
る か を 検 証 す る た め に 、MDA[1]の
モ デ ル 変 換 技 術 を用 い て 、VSM相
当 の 設 計 デ ー タ
DBを
構 築 して これ を 評 価 す る。
以 下 の3つ
の 部 位 を タ ー ゲ ッ トと して 評 価 を行 っ た。
1.設 計 情 報 の メ タモ デル(MMa)と
コ ー ドの メ タ モ デル(MMb)に
基 づ く対 象 目的 コー
ドの 生 成 部 の 自動 生 成
2.設 計 情 報 の メ タモ デ ル(MMa)か
ら設 計 デ ー タDBの
自動 生 成
3.設 計 情 報 の メ タ モ デ ル(MMa)か
ら設 計 デ ー タDBの
デ シ リア ライ ズ 機 能 の 自動
生 成
図2は 評 価 部 位 がVSM相
当 の シ ス テ ム の ど こ に 対 応 す る か を示 して い る。
設 計 惰 報 の
コー ドの
メタモ デ ル
メタモ デ ル
MM^'r-一
一IMM
(2)DB生
成
(3)API生
成
、
rDDBコ
ア(1)対
象 コー ド生 成c・d
シ リア
イズ
… 一
⑪
…
CAD
ア プ グケ ー ション
図2:評 価 の 対 象
5モ
デル変換技術概要
オ ブ ジェ ク ト指 向 の分 野 で は 、 モ デ ル を記 述 す るた め の モ デ ル は メ タオ ブ ジ ェ ク トと
呼 ば れ 、 代 表 的 なMOF(Meta-ObjectFacility)[17]はOMG(ObjectManagingGroup)に
よ
る メ タ オ ブ ジ ェ ク トの た め の フ レー ム ワー ク を提 供 して い る。
OMGに
お い て はMDAは4つ
の メ タ レベ ル か ら構 成 され る。MOFはM3層
の 標 準 言
語 で あ る。OMGで
はMOFの
例 と してUMLの
た め の メ タ モ デ ル を提 供 して い る。
M3:メ タ メ タ モ デ ルMOF。M2モ
デ ル を 記 述 す るた め の 言 語 の 定 義
M2:メ タ モ デ ル ク ラス 図 を 書 くた め の メ タ モ デ ル 。UMLの
メ タ モ デ ル に 相 当
M1:モ デ ル ク ラ ス 図 で 表 現 され る ク ラ ス 情 報 。UMLで
記 述 され た モ デ ル に相 当
M①:イ ンス タ ンス 実 世 界 す な わ ち イ ン ス タ ン ス の 世 界 。
UML形
式 で 記 述 され た ク ラ ス図 はMlレ
イ ヤ ー に対 応 す る。M2は
ク ラ ス 図 を定 義 す
るた め の用 語 を定 義 す る レイ ヤ ー で あ る。 ク ラス 図 を ドメイ ン特 化 の言 語 や 形 式 に変 換
す る とき の ル ー ル はM2レ
ベ ル で 記 述 され る。MOはMlの
ク ラ ス に 準 拠 す るイ ン ス タ
ンス 情 報 で あ る。
XMIはXMLフ
ォー マ ッ トでMOFを
表 現 す るOMGの
標 準 で 、M3∼1の
記 述 を サ ポ ー
トす る。
ま たM1をM:Model、M2をMM:Meta-Model、M3をMMM:Meta-Meta-Modelと
呼 ぶ
こ とが あ る。
5.1モ デ ル 変 換QVT モ デ ル 変 換 と は イ ン ス タ ン ス の 問 の 変 換 で 、 例 え ばUMLの ク ラ ス 図 で 記 述 さ れ た 対 象 ドメ イ ン の モ デ ル を プ ロ グ ラ ミ ン グ 言 語(例C#)で 記 述 さ れ た ク ラ ス 情 報 の モ デ ル に 変 換 す る こ と を 行 う。 モ デ ル 変 換 に は 様 々 な 技 術 が あ る[5]。 こ の モ デ ル 変i換 を メ タ モ デ ル(MM)を 使 っ て 組 織 的 に 行 お う と す るOMGの 標 準 の 一 つ がQvT(Queries/Views/Transformations)で あ る 。 図3はQVTに お け る モ デ ル 変 換 の 典 型 的 な パ タ ー ン で あ る 。MMMは メ タ メ タ モ デ ルで,Tabは 変 換 ル ー ル 。 変i換 ル ー ル 自 体 の メ タ モ デ ル がMMtで あ る 。TabはMMa,MMb
の メ タ モ デ ル を つ か っ て(basedOn)記 述 さ れ て い る 。
こ の 変 換 ル ー ルTabよ り変 換 プ ロ グ ラ ム が 実 行(execute)さ れ 、 モ デ ルA(Ma)が モ デ
のconfo「msT。 M3MMM conformsTa i M2MMaMMtMMb basOnbedOn
M・
匝]Tab匝]
xecute output input 図3:ModelTransferPattern メ タ モ デ ル が 同 一 の も の(MMa=MMb)の 間 の 変 換 をendogeneous、 そ う で な い も の (MMa≠MMb)をexogeneousと 呼 ぶ 。 QvTに 基 づ く代 表 的 な モ デ ル 変 換 シ ス テ ム にATL[15]やuMT[10]が あ る ・6ATLの
紹 介
ATL(ATLASTransformationLanguage)[14]は 仏INRIAに て 開 発 さ れ た モ デ ル 変 換 フ レ ー ム ワ ー ク で,oMGMoF/QvTRFPに 対 す る 一 つ の 回 答 と して 開 発 され た も の で あ る 。 ATLは モ デ ル 変 換 に 対 し て 、 宣 言 的(declarative)とimperativeな 変 換 処 理 記 述 を 混 在 で き る こ と を 特 徴 と し て お り、 基 本 的 に は 宣 言 的 に 変 換 処 理 を 記 述 し 、 ど う し て も 記 述 で き な い 処 理 に 関 し て はimperativeに 記 述 す る と い う ス タ イ ル を 採 用 し て い る 。 の ・・nform・T・conformsゾ
MOF/ecor
ATL
conformsToMMa
conformsTo basOnMMb
bedOnmrria2mmb.atl
conforms丁o execute匝]inputレ(=〉
一>Coutput]
図4:ATL概 要図4にATLの
概 要 を 示 す 。ATLで
は 終 端 モ デ ルa(Ma)を
終 端 モ デ ルb(Mb)に
変 換 す
る こ とを 目的 と し、そ の た め に終 端 モ デ ルaの
メ タモ デ ル(MMa)、
終 端 モ デ ルbの
メ タ
モ デ ル(MMb)、
メ タ モ デ ノ
燗
の 変 換 ノ
レー ル フ ァイ ル(mma2mmb.atl)を
入 力 と し て 、 モ
デ ル 問 の変 換 プ ロ グ ラ ム を生 成 す る、 こ こで モ デ ノ
ヒと はイ ン ス タ ンス 情 報 を指 して お り、
メ タモ デ ル は ク ラ ス 図 に相 当 す る。 ま たATLに
お い て は メ タ メ タモ デル(MMM)と
しで
EMFプ
ロジ ェ ク トで 提 供 され るecoreやOMGで
提 供 され るMOF(1.4)を
指 定 す る こ と
が で き る。 メ タ レベ ル の階 層 に 関 して メ タ メ タ モ デ ル をM3、
メ タ モ デ ル をM2、
終 端 モ
テ ル をMlと
呼 ぶ こ とが あ る。
MOFに
お い て はMOが
実 世 界 イ ンス タ ン ス 、M1が
モ デ ル(ク
ラ ス 図 相 当)、M2
が メ タモ デ ル(UMLの
モ デ ル 等)、M3が
メ タ メ タモ デ ル とい う分 類 が され る。 こ
こで 注 意 す べ き な の はATLに
お け る終 端 モ デ ル(Ml)はMOFに
お け るイ ン ス タ
ン ス(MO)に
相 当 し、ATLに
お け る メ タ モ デ ル(M2)はMOFに
お け るMlとM2
が 一 緒 に な った も の に 対 応 し、ATLの
メ タ メ タモ デ ル(M3)はMOFのM3に
相 当
して い る こ とで あ る。 これ はMOFはUMLを
前 提 に して い る の で 、M1とM2が
未 分 化 でM2がUMLの
用 語 の定 義M1がUMLで
定 義 され た ク ラス 図 な の に た い
して 、UMLを
前 提 と して い な いATLで
はM2もM1も
メ タ モ デ ル で あ る範 疇 で
は 同 じ と見 な しメ タモ デ ル を直 接 メ タ メ タ尾 デ ル(MOFやECORE)を
使 っ て 記 述
す る か らで あ る。M3はATLもMOFも
同 じで 、 こ こ は 自 己記 述 性 とい うこ とが
条 件 に な っ て い る の で紛 れ が な い 。
ま たeclipseの プ ラ グ イ ン と し て 提 供 さ れ るADT(ATLDevelopmentTooling)環 境[2] に よ り 、 変 換 ル ー ル の 入 力 、 変 換 プ ロ ジ ェ ク トの 構 成 、 ビル ド、 デ バ グ をeclipse環 境 に よ っ て 統 一 的 に 行 う こ と が で き るO6.1ATL詳 細
ATLで はeclipseにATL特 有 の 一 連 の 機 能 に 合 わ せ て 画 面 を カ ス タ マ イ ズ す
るperspec-tiveが 準 備 さ れ 、 実 行configuration画 面 に て 入 出 力 を 指 定 す る 。
入 力(rN)
出 力(OUT)
変換
入 カ モ デ ルMa(例:Familiesの イ ン ス タ ン ス) 入 力 メ タ モ デ ルMMa(例Familiesの メ タ モ デ ル)出 力 モ デ ルMb
出力 メ タモ デ ルMMB
変 換 ル ー ル フ ァ イ ル(.atl) 表1:ATLシ ス テ ム の 入 出 力ATLの コ ア と な る も の は 変i換 ル ー ル を 定 義 す る フ ァ イ ル(.atl)で あ る 。
変 換 ル ー ル は 入 力 メ タ モ デ ル(MMa)と 出 力 メ タ モ デ ル(MMb)の 間 の 関 係 を ル ー ル と
し て 記 述 す る 。 ル ー ル はHeader,Helper,-MatchedRule,CalledRuleで 構 成 さ れ る 。 ま た
宣 言 的 な ル ー ル 記 述 の ほ か にOCL(ObjectConstraintLanguage)に 準 拠 し たimperativeな
記 述 を 可 能 に す る 特 別 な 構 文 が 用 意 さ れ て い る 。
6.1.1Header
Headerに は 入 力 と し て モ デ ル(IN):メ タ モ デ ル(Families)、 出 力 の モ デ ル(OUT):メ タ
モ デ ル(Persons)を 定 義 し て い る 。 こ こ でIN,OUTはconfigurationで 指 定 さ れ た モ デ ル を 指 す 。 メ タ モ デ ル 名 は メ タ モ デ ル 定 義 の トッ プ ス キ ー ム を 指 定 す る 。 module create Families2Persons; OUTPersonsfromIN Families; 6.1.2Helper HelperはJavaの メ ソ ッ ド に 相 当 し 、 変 換 処 理 の 部 品 化 の 手 段 と し て 用 い る 。context
はhelperが 使 用 さ れ る コ ン テ キ ス ト、defはhelper名 、 リ タ ー ン 値 、ATL表 現(ATL
expression)で 構 成 され る 。helperは 引 数 を と る こ と が で き る。 下 記 の 例 は 整 数 のSequence
型(リ ス トの こ と)と 実 数 を 引 数 に と り 、 リ ス ト要 素 の 平 均 が 、 引 数 で 与 え られ た 値 よ り も 小 さ い か ど うか を 判 断 す る 関 数 と し て 定 義 さ れ て い る 。
helper def letavg avg<
averageLowerThan(s
Real= value;S->SUm()/
Sequence(工nteger),value:Real) Boolean= s->size()in
6.1.3MatchedRuleMatchedRuleは 入 力(from)と 出 力(to)の 間 で 関 連 を 定 義 す る 。
ソー ス 部(丘om)は"変 換 対 象:ソ ー ス モ デ ル の パ タ ー ン(合 致 条 件)"と い う形 式 を と り 、
タ ー ゲ ッ ト部(to)は"変 換 対 象 タ ー ゲ ッ トモ デ ル の パ タ ー ン(属 性 の 初 期 化 記 述)"と い
う形 式 を と る 。
下 記 の 例 で はfromに お い て1ま 入 力 コ ン テ キ ス ト(Biblio!Journal)と マ ッ チ ン グ 条 件
(notj.title.ocllsUndefinedQ)が 合 致 す る 要 素 ① が 選 択 さ れ 、toに お い て 変i換対 象(b)が
Biblio!Bookで あ り 、 ソ ー ス のtitle属 性+vol属 性+num属 性 が タ ー ゲ ッ トのtitle属 性 に
な り、 著 者 は ソ ー ス の 記 事(article)集 合 のauthor属 性 を 集 め た 集 合 を 割 り 当 て て い る 。 こ の よ う にOCL関 数(collect,flatten,asSetO)を 組 み 合 わ せ て 用 い る 。 ruleJournal2Book{ from jBiblio!]ournal(notj.title.oclIsUndefined()) to bBiblio!Book
し
ロ
ロ
title<-j.title+'_('+j.vol+'):'+j.num, authors<-j.articles->collect(ele.authors)一>flattenO-> asset() chaptersく 一j.articles, pagesNb<-j.articles->collect(ele.pagesNb)一>sum() ) }6.1.41mperativeなR11豆e
ル ー ル に はimperativeな コ ー ド を 記 述 す る こ と が で き る 。imperativeな コ ー ドはdoと
い う 予 約 語 で 導 入 さ れ 、ruleのto部 の 記 述 に よ る 属 性 初 期 化 の 後 に 任 意 の 手 続 き 的 な
コ ー ド を 記 述 で き る 。 例 え ば 後 述 す るcalledruleの 呼 び 出 し もdo部 の み に て 記 述 で き
る 。to部 に お け る 属 性 の 初 期 化 に お け るexpression間 は コ ン マ(,)に て 区 切 ら れ る の に
対 し 、do部 のstatement問 は セ ミ コ ロ ン(;)で 区 切 られ る 。 こ れ はdo部 のstatementは 記
述 順 に 逐 次 的 に 実 行 さ れ る こ と を 表 し て い る 。 ruletestCalIRule(){ from s:Vsm!Rule to t:AsmL!Rule do{ 一一 処 理 や 、calledruleの 呼 び 出 し t.rules<-thisModule.sampleCalledRules(); } } 6.1.5CalledRule
calledruleは 丘om部 が 無 い こ と を 除 け ばmatchedroteと 同 様 で あ る 。 ま たcaUedrule
は 引 数 を と る こ と が で き る 。 返 り値 はdo部 の 最 後 に 評 価 され た 式 で あ る 。 rulesampleCalledRule(){ to t:AsmL!Rule do{ t.location<一,/索s12rule索/,; t, } }
6。2変 換 の 例 こ こ で はATL変 換 を 簡 単 な 例 題 で 説 明 す る 。 こ れ はATLの 開 発 チ ー ム に よ る ユ ー ス ケ ー ス 「Faimlies2Persons例 題 」[9]よ'り 抜 粋 し た も の で あ る 。 変 換 概 要 変 換 の 概 要 を 図5に 示 す 。"Families2Persons.atl"が 変 換 定 義 フ ァ イ ル で 、Familiesメ タ モ デ ル(Families.ecore)、Personsメ タ モ デ ル(Persons.ecore)を メ タ モ デ ル と し て 変 換 仕 様 が 記 述 さ れ る 。ATLに よ る 変 換 定 義 フ ァ イ ル は コ ン パ イ ル さ れ て 、 モ デ ル(イ ン ス タ ン ス)間 の 変 換 が 実 現 さ れ る 。
し
藍C塵ipseModelingFramework(EMFD 」conformsToM3
一
ン∠
撃conformsTo
M2Families.e。oreATLpersons.ecore basOnbdOn conformsTol1_.___.IIconformsToF amilies2Persons.aU executeM1熟
叫 ρ
砺;還 嵐
図5:ATL変
換 例 概 要
メ タ モ デ ル図6はFamilyの メ タ モ デ ル を 表 し て い る 。Familyに はlastName属 性 が 、Memberに
はfirstName属 性 が つ い て お り そ れ ぞ れ ロ ー ル(father,mother,son,daughter)に よ る 合 成 関
係 でFamilyに 従 属 す る 。
図7はPersonの メ タ モ デ ル を 表 し て い る 。PersonはfUUName属 性 を 持 ち 、 サ ブ ク ラ
Famil IastName:String 0..1tamiiyratnerra[ner1 0.,1amlyoe「moe「1 D..1amityon son1 ..1amlyauguge「1 Member firstName:String Memberは 複 数 の 家 躾 に属 す る こ とが で きる こ とに注 意 図6:メ タ モ テ ル(Families) Person 一fullName:String Male Female 図7:メ タ モ デ ル(Persons) ATLフ ァ イ ル
helperで あ るisFemaleOは 、 ソ ー ス のMemberに 対 して 、 そ れ が 女 性 か ど う か を 判 断
す る 関 数(返 値BoOlean)を 定 義 し て お り、 こ れ を 用 い てMember2Female,Member2Male の ど ち ら が 起 動 さ れ る か が 選 択 され る 。isFemaleは メ タ モ デ ルFamiliesのMember要 素 で 有 効 なhelperでMemberが 女 性 で あ る か ど うか を 判 断 す る 。 こ こ でselfはMemberそ の も の 、ocllsUndefined()は モ デ ル に 該 当 す る 参 照 ポ イ ン タ が な い こ と を 表 すOCL関 数 で あ る 。 18
module Families2Persons;
create
OUT : Persons
from IN : Families;
helper
context
Families!Member
def:
familyName
: String
=
helper
context
Families!Member
def:
isFemale()
: Boolean
=
if not self.familyMother.ocllsUndefined()
then
true
else
if not self.familyDaughter.ocllsUndefined()
then
true
else
false
endif
endif;
rule
Member2Male {
from
s : Families!Member
(not
s.isFemale())
to
t : Persons!Male
(
fullName
<- s.firstName
+ ' ' + s.familyName
}
rule
Member2Female {
from
, 変 換 例 図6.2に 入 力 と な る フ ァ イ ル"sample-Families.ecore"の 例 を 示 す 。XMI形 式 で 記 述 さ れ た イ ン ス タ ン ス 情 報 で あ る 。 〈?xmlversion="1.0"encoding='`ISO-8859-1"?〉 <xmi:XMIxmi:version="2.0" xmins:㎜i=11httpl//㎜.omg.org細 工"㎜1ns="Families"〉 〈FamilylastName="March"〉 <fatherfirstName="Jim"/> arコotherfirstName="Cindy"/〉 〈sonsfirstName="Brandon"/〉 〈daughtersfirstName="Brenda"/〉 </Family> 〈FamilylastName="Sailor"〉 〈fatherfirstName="Peter"/〉 〈motherfirstNameニ"Jackie騨/〉 〈daughtersfirstName="Kelly"/〉 </Family> </xmi:XMI>
図8:入 力 フ ァ イ ル の 内 容
図6.2に 出 カ フ ァ イ ル"sample-Persons.ecore" た イ ン ス タ ン ス 情 報 で あ る 。 を 示 す 。
こ ち ら もXMI形
式 で 記 述 され
〈?xmlversion="1.0"encoding="ISO-8859-1"?〉 <xmi:XMIxmi:version="2.0" xmins:xmi="http://www.omg.org/XMI' 〈MalefullName="PeterSailor"/〉 〈MalefullName="BrandonMarch"/〉 〈MalefullName="JimMarch"/〉 〈FemalefullName="BrendaMarch"/〉 〈FemalefullName="JackieSailor"/〉 〈FemalefullName="CindyMarch"/〉 〈FemalefullName="KellySailor"/〉 </xmi:XMI> xmins="Persons"〉 図9:出力 フ ァイ ル の 内 容
7評
価1:ATLに
よ る 目 的 コ ー ド生 成 の 構 築
こ こで はATLを
用 い て 、VSMモ
デ ル か らASM(AbstractStateMachine)の
一 実 装 で あ
るAsmL形
式 の 目的 コ ー ドを 生成 す る 処 理 を 構 築 す る。ASMは
形 式 的 仕 様 記 述 言 語 の
一 種 で あ りVDM[3]と
同 様 に抽 象 度 の 高 い 仕 様 記 述 を行 うこ とが で き る
。
AsmLを
選 択 した の はEcore形
式 の メ タモ デ ル がATLの
プ ロ ジ ェ ク トサ イ トよ り取 得
可 能 で あ る こ と と、 も と も とASM言
語 の 実 行 セ マ ンテ ィ ク ス が 形 式 的 に 定 義 され て い
る の で 、 動 作 イ メ ー ジ に 対 す る 間 違 い が な い か らで あ る 。MSCツ
ー ル の 目的 コー ドで
あ るSpecC言
語 は コ ンパ イ ラ ・シ ミュ レー タ を 実 装 す るベ ン ダ ー に よ り動 作 セ マ ン テ ィ
クス 異 な っ て い た 。
変 換 に お け る 課 題
VSMは
設 計 モ デ ル を 表 して お り、 そ の 大 き な 構 造 は 、 実 行 形 式 で あ るAsmLと
一 対
一 対 応 して い る(例HUnitがClassに
対応 す る等)
。 しか し、VSMの
状 態 内 部 の処 理 コー
ドの 生 成 に 関 して は 、imperativeな 変 換 処 理 が 要 求 され る。 特 にVSMの
構 造 か ら計 算
して生 成 され るAsmLの
条 件 判 断 ロ ジ ック 生 成 の部 分 が 、 本 質 的 に リス ト構 造 を ツ リー
構 造 に 対 応 づ け て い る の で 、 単 純 にdeclarativeな 変 換 ル ー ル で 記 述 で き る範 囲 を超 え て
い る。
7.1AsmLの 紹 介AsmLはAbstractStateMachineのMicrosoft社 に よ る 実 装 で あ る 。ASM自 体 はYGurevich
が"evolvingalgebra"[ll]と い う名 前 で 導 入 し た よ う に 、 代 数 的 な 背 景 を も つ 仕 様 記 述 言 語 で あ り 、 主 に 仕 様 の 詳 細 化(refinement)を 意 識 し て 設 計 さ れ た も の で あ る が 、 本 報 告 の 中 で はVDM相 当 の 形 式 的 な 仕 様 記 述 言 語 と み な し て よ い 。ASMで はstepと い う最 小 単 位 で 動 作 セ マ ン テ ィ ク ス が 形 式 的 に 定 義 さ れ て お り、 ま た 並 列 処 理 を 記 述 す る こ と が で き る の で 、hardwareの 動 作 セ マ ン テ ィ ク ス やUML等 の 仕 様 記 述 形 式 の セ マ ン テ ィ ク ス を 提 供 す る も の と し て 用 い ら れ る 。 こ こ で は 、AsmLで 記 述 さ れ る 仕 様 の 例 を 、 以 下 に し め す 。
//VsmSampleimplemetationinAsmLV1.O class肌lnit//親 ク ラ ス を 定 義 し ま す classHUnitlextendsHUnit//ス レ ッ ド1の ク ラ ス Vara'a。 エnt。ger=O var_stateasString="stl"//state変 数 Execute()//状 態 遷 移 を 計 算 す る メ ソ ッ ド if(_state="stl")then WriteLine("hul:stl") _state:_"st2" else if(_state="st2")then WriteLine("hul;st2") _state:_"stl" classHUnit2extendsHUnit//ス レ ッ ド2の ク ラ ス varbasInteger=O var_stateasString="st211'//state変 数 ExecuteO//状 態 遷 移 を 計 算 す る メ ソ ッ ド if(_state="st21")then WriteLine("hu2:st21") _state:_"st21" hul=newHUnitl() hug=newHUnit2Q varcntasInteger=O Main()//main関 数
7.2VSMメ タ モ デ ル
図10にVSMの メ タ モ デ ル の 抜 粋 を 示 す 。VSMは 最 上 位 構 造 で あ るUnitComponent
の 下 位 構 造 にHUnitと 呼 ば れ る 動 作 モ ジ ュ ー ル が 配 置 さ れ る 構 成 を も つ 。HUnitは 並 列
動 作 す る プ ロ セ ス に 相 当 す る 。HUnitは 状 態(State)を 下 位 構 造 に も っ て 、 内 部 で 状 態 遷
移 を 行 う。 状 態(State)は さ ら に 、1StateActionを 下 位 構 造 に 持 ち 、StateActionに 、HUnit
の 外 部 通 信 路(Chanel)と の 入 力(lnput)、 出 力(Output)、 ポ ー リ ン グ(Condition)が 下 位
構 造 と し て 位 置 し 、 さ ら に 任 意 の 処 理 コ ー ド(Text)が 配 置 され る 。 VSM::UnitComoonent 一name:SVing cha 1 hu'ts 1.: NseTe 一COMPLETION -CONDITION VSM::HUnit 一name:SVing locale 1 riables .n VSM::StateAction nexcstaiee VSM::NextStateElement 一rype:NseType -condition:String 一name:String -body:String VSM::LocalVariable 一name:String -type:String -initval:String StasstarttateSt 1..1 nets .n VSM::Channel ..n tatec廿O in 11:n S is to 一name:String -type:String VSM::lnput outbutsconditions 1.1n1.: VSM::Outout VSM::Conditio VSM::State 一name:String 一condition:Stri 9 1anne VSM::lnOut 一value:String 図10:VSMの メ タ モ デ ル(抜 粋)
7.3AsmL、 メ タ モ デ ル
図11にAsmLの メ タ モ デ ル を 示 す 。AsmLの メ タ モ デ ル は 抽 象 構 文 木 の モ デ ル に 相
当 す る 。
AsmlFileが ル ー トモ デ ル で 、 こ れ にMain関 数 とMain以 外 の グ ロ ー バ ル な 定 義 が
AsmLEIementと し て 所 属 す る 。AslmElementに は グ ロ ー バ ル 変 数(ViarDeclaration)や ク
ラ ス 定 義(Class)、 列 挙 型(Enumeration)、 構 造 体(Structure)の 定 義 が 派 生 と し て 挙 げ ら
れ る 。 処 理 の 中 心 と な る の はBodyの 下 位 構 造 で あ るRuleで あ り、 こ こ にstep単 位 で の
処 理 が 記 述 され る 。 冠 ℃0 ∈ ca Φ = 」 ∈ ω a 奮 岳 ヨ 翌
ξ9野
羅
署雛
聾 § O J 'E AQ a § Q 0 R 署 § w 」的 m 雲 mE m T 0毒
垂 警蓋聾
蓄§ §書 き iacn d U7 H O A a 4》婁
塁垂
婁
uu a a E WT . 艶 。 勲 昌 器7;塁
難
辺c Q C塗葺
窪婁 岳 9§毒
冒
量
§ 韮 婁 c 禽 m葦
彗 C _X 3 c Sξ雲 a 量三 華o 蕪 刃♪ GO L C 7 嘱 ξ塞 m し a Os b f蕪
塁
購
誓蕪
曇
躍 塾§ 悪 e W6婁a
黛鶴
⑩ 隻 B}h
aS Fi Fと 茎ロ Φ で 0 ∈ 6
ぢ
Σ
d5
匡
言 Om 1 ,磯 6 L ミ コ a Cm e2 W 8駕 O J ξ警 の 冨 一』m蕪
嘱 蓬 三馨誓 §§ §窪 m C G L 3m ¢ Em r 三 Ed a コ 望理 e 壱 5v 首 岳 言8 wm-...,p ロ コ言辱
謹
d 3 隅m O E m 匡 m コ 匡s " Q E `m茎峯
嘉
Em茎
ヒ偶 〉 .噛. _一 ,甲 冒7塁 、 m 醒8 8L V 1 N D でi》 、奮メ
窮 脅
o 昂費 亙 π奮 凌 一 一 こ= 一コ1墾
5=. 陀防 o[← 、1■' 為i一 嘱と乙 曾 ∈ 煽 噛1 }一 O コ 些 竃 0 』 aa ヱ2 m tζ C塞髪
鑓
d a 匡 b m LL sa t a 喜 §≧ 邑琶 1 主o a mx 幽 §漏m 8 1鴛 呂i弩 三 竃 署 Σ 導… 三 〇 二 艶嘩 懸 2,コ 1 屡 }a; Y切 aai. h 留z ω 睾 誓輩 婁 コ E m Fお 〉 昌 モO m 言 2爵 驚 重畳 コ 7 喜 窪 匡 m 塁 §≒聴
誓1
琶 娼 w O LLa m 蕎 誓董 豊 ≧ 三 温 ン 竃 話 芒君 ax 匡震 a 需 O b § w my 巨 mM 二 〇'δう 窪 nx 曇C 9 あ L m L3 a mN 図12:Rule部 の メ タ モ デ ル 詳 細 267.4単
純 変 換 ル ー ル
・
一 対 一 に 宣 言 的 に ル ー ル を記 述 で き る部 分 を以 下 に 表 形 式 で ま とめ る
VSM要
素
→AsmL要 素 RootModel →AsmLFile HUnit →Class → 名 前 はHUnit.name → ロ ー カ ル 変 数 定 義 → 状 態 変 数( -state)追 加 →Executeメ ソ ッ ド(空)の 追 加 LocalVariable →VarDeclaration → 名 前 はLocalViariable.name 以 下 に 単 純 な 変 換 ル0ル の 例 と してLocalVariableの 変 換 ル ー ル を 示 す 。Vsm!LocalUariableがAsmL!ViarDeclarationに 対 応 し 、 タ ー ゲ ッ トのname属 性 は そ の ま ま ソ ー ス のname属
性 に 対 応 し 、 タ ー ゲ ッ トのtype属 性 は 、 一 端AsmL!NamedTypeモ デ ル を 生 成 した も の に 対 応 づ け る。ATLの 宣 言 的 な ル ー ル 記 述 機 能 を し か 使 っ て い な い が 、 こ の 例 の よ う に ソ ー ス の 属 性 の リ ス ト構 造(s.name,stype)を タ ー ゲ ッ トの モ デ ル の 木 構 造(ViarDeclaration) に 変 換 が 可 能 に な っ て い る 。
ruleLocalVariable2Var{
from
s:Vsm!LocalVariable
to
t:AsmL!VarDeclaration
name<-s.name,
type<-nt
),
nt:AsmL!NamedType
name<,s.type
)
ス トが木 構 造 に跨 っ て 展 開 で き る理 由 は ター ゲ ッ トとな る木 構 造 が構 造 的 に 一 意 に あ ら
か じめ決 ま っ て い る か らで あ る。
・一スモデへ
VSM1LocalVariable -name:String -type:String ターゲ ・・モデら AsmL1VarDeclaration -name:Stringtye AsmL1NamedTVpe -name:String図13:構
造 変 換 の 例
7.5複 雑 変 換 ル ー ル HUnit内 部 の 変 換 に 際 し て は 以 下 の 規 則 に 従 う ●HUnitはStateを も っ 、 、 ・HUnitはstartstate参 照 を も っ ・StateはStateAction(複 数)を も つ●StateActionはInput(複 数),Output(複 数)Condition(複 数),Text(1つ),NextSatateElement(複
数)を 持 っ ・StateActionの 実 行 動 作 は 、 1.外 部 通 信 路 か ら の 入 力(lnput) 2,条 件 判 断(条 件=Condition) 3.処 理 本 体 の 実 行(Text) 4.外 部 通 信 路 へ の 出 力(Output) 5.次 状 態 の 決 定(NextStateElement)
と し て 展 開 さ れ る 。
・State中 のStateActionに はConditionを 持 た な い も の が 少 な く と も1つ あ る 。
6Conditionが も つ 条 件 は 論 理 積 で 展 開 さ れ 、 こ の 条 件 が 成 立 し な い と 一 連 の 動 作 (Text→Output→NextStateElement)を 実 行 し な い 対 応 す るAsmlの コ ー ド断 片 を 以 下 に 示 す Execute() if(_state="st1")then//Stateに 対 応 letlreq=chan _req if(cndl)then//Condition有 り のStateActionに 対 応 //body1//Textに 対 応 _state:=蟹1st2"//NextStateElementに 対 応 elseif(cnd2)then//Condition有 り のStateActionに 対 応 //body2 _state:_"st3" else//Conditionが な いStateActionに 対 応 //body3 _state==1重st41署 elseif(_state='1st2")then//Stateに 対 応 WriteLine("hul:st2") _state==「1st1"//Condition無 し のStateActionし か な い 場 合 こ の 変 換 に は リ ス ト構 造 か ら木 構 造 へ の 変 換 が2重 の 入 れ 子 構 造(Stateのifthenelse 構 造 とStateActionのifthenelse構 造)に な っ て い る 。 さ ら に 前 出 のLocalVariableの 例 で の 宣 言 的 な ル ー ル に よ る 変 換 例 で は リ ス トの 要 素 数 が 固 定 で あ っ た も の が 不 定 に な っ て お り、 も は や 宣 言 的 な ル ー ル に よ る 変 換 の 範 囲 を 超 え て い る 。 こ こ で はATLのimperativeな ル ー ル 記 述 を 利 用 す る こ と に す る 。 ま たcalledruleは 再 帰 的 な 定 義 を 許 し て い る の で 、 ル ー ル のdo部(imperativeコ ー ド記 述 が で き る 箇 所)に
ruleStateList2CRuleBody(sl:Sequence(Vsm!State)){ using{ st:Vsm!State=sl.first(); tail:Sequence(Vsm!State)=sl.excluding(st).asSequence(); } to body:AsnL1Body( rules<-Set{t} ), t:Asmt.!ConditionalRule condition-cndOpe, thenRule<-st ), 一一 略 一一 do{ if(sl.size()>1){ t.elseRule<-thisModule.StateList2CRuleBody(tail);//再 帰 呼 び 出 し 層 } body; } }
AsmL::Bod 一略 es AsmL::Condi60nalRue 一condition:String therf2ule AsmL::Bod 一略 elseRule AsmL::Bod 一略 es AsmL::ConditionalRue 一condition:String therRule[璽 査 AsmL::Bod 一略 図14:AsmLの 木 構 造(ConditionalRule) 8評 価2:EMFに よ る 設 計 デ ー タDBの 構 築 本 節 で は 、 メ タ モ テラレに 基 づ い て 設 計 デ ー タ ベ ー ス を 生 成 し 、 こ れ をXMI形 式 に て 保 存(シ リア ラ イ ズ)、 読 み 込 み(デ シ リ ア ラ イ ズ)す る シ ス テ ム の 例 と し て 、ATLと 関 連
す るeclipseプ ロ ジ ェ ク トで あ るEMF(EclipseModelingFramework)[4】 を 説 明 し 、EMF
を 用 い てVSMデ ー タ ベ ー ス を 構 築 す る 。
8.1EMFの 紹 介
EMFで は メ タ モ デ ル に 基 づ くJavaコ ー ドの 自 動 生 成 を 行 うシ ス テ ム と し て 開 発 さ れ
た 。 メ タ モ デ ル を 実 現 す る リ ポ ジ ト リ(デ ー タ ベ ー ス)と し て のJavaコ ー ドを 生 成 す る こ
と と 、XMI形 式 に 従 っ た シ リ ア ラ イ ズ ・デ シ リ ア ラ イ ズ の 機 能 を 持 つ こ と が 特 徴 とす る 。
EMFで は メ タ モ デ ル をEcoreモ デ ル と呼 ぶ 。OMFに お け るMOFメ タ モ デ ル に 相 当
す る 。
EMFで は メ タ モ デ ル 情 報 か ら 生 成 さ れ たEMFgeneratorモ デ ル を ス タ ー トに し て 、
・ 設 計 デ ー タ ベ ー ス の 基 盤 コ ー ド(ModelCode)の 生 成
・ 設 計 デ ー タ ベ ー ス を 編 集 す る た め のAPIコ ー ド(EditCode)生 成
EMFgeneratorモ デ ル はXML形 式 で 記 述 さ れ た フ ァ イ ル で あ り し て 入 力 編 集 す る 以 外 にEMFに お い て は 、 ・AnnotatedJavaコ ー ドか ら の 生 成 ・RationalRoseモ デ ル(.mdl)か ら の イ ン ポ ー ト ・EMFの メ タ モ デ ル 形 式(ecore)か ら の イ ン ポ ー ト 等 の 機 能 を サ ポ ー ト し て い る 。 図15にEMFの 概 要 を 示 す 。
EMFの
例(Tutorialよ
り)
① メタモデ ル の作 成 とgeneratorモ デ ル 生 成 、これ を直接XMLと
w蹴9τs Writer name:String 《く 訓Library BookCategoryname:Stnng Myst剛 ScienceFictian Brognphy booksO9 ロロサ 痴rb。k、,、1,,号o蝋 pages=100 categoryBookCategorylo,費旦
②コード生 成→Build viewnommeoumenu,orsumiaouoi・冒鱒
{鴨
旨
G晦r勘 酬Co曲 CuteF.dRCa」e' GenerateEdtor.Code Ganerateτe虻 ⊂α」e Genoroヒe in 簡易エディタの例 '漏 鰍[舗
騨
臼
XMIで 像 存(シ リア ライズ)、読 み 込 み(デ シ リアライズ)i説 罫 欝蕪 灘舞
t-.概
鎧
↓謳M区 二 り 塊藩 藩
図15:EMFの 概 要(Tutoria1よ り) 32例 え ば 図16の よ う な メ タ モ デ ル が あ れ ば 、ModeCodeと し てBook,Writeの ク ラ ス お
よ び 、Bookに はsetA.uthor(Writer)、getAotherOメ ソ ッ ドが 生 成 さ れ る 。 ま たBook,Write
に た い す るFactoryク ラ ス が 生 成 さ れ る 。 :.. 一title:String -pages:lnteger
0..noOoau
hor Writer 一name:String 図16:Book,Writer 生 成 さ れ たModelCodeを コ ン パ イ ル す れ ば 、 デ ー タ ベ ー ス が 作 成 され 、 こ れ を 利 用 す る た め に は 所 定 のAPIを 介 し て 行 う。 以 下 に デ ー タ ベ ー ス 利 用 の 例 と し て コ ー ド断 片 を 以 下 に 示 す 。factoryに 対 し て"createク ラ ス 名"の ク ラ ス メ ソ ッ ドに て イ ン ス タ ン ス を 生 成 し、 イ ン ス タ ン ス に 属 性 を 設 定("setName"等)し 、 参 照 関 係 に 関 し て はbookイ ン ス タ ン ス にsetAuthor(writerイ ン ス タ ン ス)を 行 う こ と に よ り こ れ を 行 っ て い る 。 LibraryFactoryfactory=LibraryFactory.eINSTANCE;Bookbook=factory.createBook();
Writerwriter=factory.createWriter(); writer.setName("WilliamShakespeare'冒);book.setTitle("KingLear");
book.setAuthor(writer);
さ らに 、 自動 生 成 され たResourceSet機
能 を用 い て 、作 成 した イ ン ス タ ン ス を リン ク
情 報 を保 存 した ま ま ㎜iフ
ァイ ル に保 存(シ リア ラ イ ズ)が で き る。 下 の コ ー ド断 片 は シ
リア ライ ズ の 例 で あ る。
//GettheUR工ofthemodelfile・ UR工fileUR工=URI.createFileUR工(newFileClmylibrary.xmf1) .getAbsolutePath()); //Createaresourceforthisfile. Resourceresource=resourceSet.createResource(fileUR工); //Addthebookandwriterobjectstothecontents. resource.getContentsQ.add(book); resource.getContents().add(writer); //Savethecontentsoftheresourcetothefilesystem. try { resource.save(Collections.EMPTY_MAP); } catch(IOExceptione){}逆 にXMIか
らの 読 み込 み も、 同 様 にデ シ リア ライ ズ の た め のAPIが
用 意 され て い る。
8.2VSM設 計 デ ー タ1)Bの 構 築 節7.2で 説 明 し たVSMの メ タ モ デ ル(図10)をEcore入 力 と して 、ModelCode生 成 、 EditCode生 成 、 簡 易 エ デ ィ タ のEditorcode生 成 を 順 次 行 っ た 。 図17に 得 ら れ た 簡 易 エ デ ィ タ の 画 面 を 示 す 。 次 章 以 降 のVSMの イ ン ス タ ン ス デ ー タ は 、 こ の 簡 易 エ デ ィ タ を 利 用 し て 作 成 さ れ た 。 1 と r 「 1
髭 ㌔
繍 ・翼 幕 π
礎K、
r: LoRe$。urceSe# ロ 目1 }… ㎝}T㎝ マ ー漏 「 Variableok… ㎜{㎜ 「…} ㎝}… i圭}やStotest11 白 ∴やStatest12 ・亨iSt。t・A・ti… 。O C・',_NextStoteElementCOMPLET塾ON ・ ∈三1一やStateAc#ionsa1 ぞ 馳 ・くトConditionok NextStateElementrOMPLETIOPI ロ i≡}やHUnithu2 ・やLoc己1Variablereq l三卜 國やStξ 薗test21 幽 ∈…い ぐ》Stdte戸LctionsaO ;・ a・NextStateElementCOMPLE170rd iヨ・・やSt台teActions{ヨ1 1QコConditionreq やOutput1 ・uNextStateElementCOMPLETION 白 ・や$t。test22 ∈∋一やStateAotionsa〔 〕 塾 璽血 源翫 騨iT・e司T。bl・T・eewithalum・ ・i 鴫}一} 暫}}¶ 一}■ 一}}… 一,}}邸 嘱畠騨一朋一 一 一, ∼ ___一___..__,r_...,i 口l i ミ ミ目}i}
}
旨
i到
口
i 目l i ...._._i l》{ ; i l在}i } i… , i図17:生
成 され たVSM簡
易 エ デ ィ タ
359評
価3:ATLに
よるデ シ リアライズの生成 の構 築
9.1デ
シ リア ラ イ ズ 問 題 の説 明
EMF自
体 は メ タモ デ ル に 基 づ い て い る とい っ て も、 コー ド生 成 を意 図 した 一 プ ログ ラ
ム の 実 装 に過 ぎ ず 、 そ の点 で は ハ ン ドコー デ ィ ン グ され た設 計 デ ー タベ ー ス 生 成 プ ロ グ
ラム と 同等 の 位 置 づ け な の で 、 メ タ モ デ ル を 使 う真 の メ リ ッ トを享 受 して い な い 。
メ タモ デ ル か らの コー ド生 成(ModelCode)部
は 、比 較 的 実 装 対 象(EMFの
場 合 はJava)
と構 造 が 同等 で あ る こ と と、 メ タモ デ ル の 構 成 要 素(合 成 、 参 照 、 属 性)毎 に適 切 な 実 装
の パ ター ン が 定 義 で き る の で 、 ほ ぼ 自明 な コー ド生 成 で あ る とい え るが 、XMIフ
ァイ ル
との 問 で の(デ)シ
リア ラ イ ズ 処 理 は 、 メ タモ デ ル か らhnperativeな
コー ドを 生 成 す る
とい う点 で 、 自明 で は な い 。
シ リア ライ ズ は 、 も と とな る設 計 デ ー タDBの
構i造(メ タモ デ ル)が
、Ecoreメ
タ モ
デ ル(MOFに
相 当)に 従 っ て いれ ば オ ブ ジ ェ ク ト構 造 に対 す るXMIの
構 造 の 対 応 は 自明
な の で 、ModelCode生
成 時 に各 ク ラス 毎 に定 型 の パ タ ー ンの シ リア ライ ズ の コ ー ドを生
成 す れ ば 、全 体 一
部 品 構 造 の 最 上 位 の イ ン ス タ ン ス か らシ リア ラ イ ズ の メ ソ ッ ドを全 体 一
部 品構 造 に 沿 っ て 再 帰 的 に 呼 べ ば簡 単 に実 現 で き る 。 これ はVSMで
の 最 初 の 設 計 デ ー
タDB構
築 の 際 に取 っ た 戦 略 で あ る。
一 方 デ シ リア ライ ズ は
、 自明 で は な い 、XMIフ
ァイ ル の読 み 込 み とModeCodeで
提 供
され る 基 本APIを
つ か った イ ン ス タ ン ス の生 成 、参 照 の 張 り込 み とが混 在 す るimperative
な コー ドを生 成 す る 必 要 が あ る。VSMの
デ ー タベ ー ス で は メ タモ デ ル に基 づ い て デ シ
リア ライ ズ を1つ の メ ソ ッ ドと して 生 成 す るgenerateコ ー ドをハ ン ドコー デ ィ ン グ して
お り、 これ に は以 下 の 問 題 点 が あ っ た 。
・ ハ ン ドコー デ ィ ン グ な の で メ イ ンテ ナ ンス が 困 難 で あ る
・ 一 メ ソ ッ ドで 実 現 して い た の で 、 例 え ば 再 帰 的 な 構 造 を持 っ モ デ ル 要 素 は 取 り扱
え な い
デ シ リア ライ ズ は 、 「
モ デ ル(イ
ン ス タ ン ス)を
そ れ に 対 応 す るAPI列
」 に 変 換 す る
と捕 ら えれ ば モ デ ル 変 換 の 遡 上 に あ げ る こ とが で き る。 さ らに こ の変 換 方 法 自体 は 、 も
と も と の メ タ モ デ ル 情 報 に のみ 依 存 して い るの で 、 メ タモ デ ル か らデ シ リア ライ ズ の 全
て が 生 成 で き る は ず で あ る。
9.2ATLに
よ る デ シ リア ライ ズ 変 換 の実 現
こ こで は 、 デ シ リア ラ イ ズ の 問題 を、XMIで
か か れ た モ デ ル か ら設 計 デ ー タDBを
ス
ク ラ ッチ か ら順 に構 築 す るAPIを
呼 ぶ順 番 を記 述 した テ キ ス トフ ァイ ル を 生 成 す るモ デ
ル 変 換 処 理 に よ り実 現 す る。
こ こでAPIは
第8章
で 説 明 したEMFが
自動 生成 したModelCodeのAPIと
す る 。
ATLで
は 、モ デ ル を トラ バ ー ス して お も にテ キ ス ト出 力 処 理 を行 うた め の 手 段 と して
queryモ ー ドが 用 意 され て い る。 こ こ で はqueryモ
ー ドを利 用 して 、 入 力 モ デ ル を トラ
バ ー ス してAPIの
テ キ ス トを 生 成 す る こ とに した 。
図18にATLに
よ る変 換 の枠 組 み を しめ す 。 メ タ モ デ ル と してEcoreベ
ー ス で 定 義 さ
れ たVSMの
メ タモ デ ル を利 用 し、VSMの(イ
ン ス タ ン ス)モ デ ル を 変 換 して 、EMF
で 自動 生 成 され るAPIの
列 を 生 成 す る。
M・d・1丁 ・ansf・ ・r)・ ・nformsT・ EcoreLliVIG conformsToAT _Lquery-一一 一 一 一 一 VSM.elcore conformsTo ATL basOn US Vsm2ApiText.atl execute [VSM]input⊂ 〉 一一一一〇utput i一 一 一 一 一ilEMF㎎
聖ll
r-一 一 conformsTo l ……code/wAPI図18:モ
デ ル 変 換 に よ るデ シ リア ラ イ ズ
queryで は、ソー スモ デ ル それ ぞ れ に対 してheIper関 数 と して 返 値Stringを 持 つtoString20
を定 義 す る。 ま た 合 成 関係 に よ り全 体 部 分 関係 が あ る もの に 関 して は適 切 な 場 所 でEMF
が 生 成 したAPIを
使 っ て イ ン ス タ ン ス の 生 成 と、 親 オ ブ ジ ェ ク トへ の 登 録 を 実 現 し て
い る。
helper
context
Vsm!UnitComponent
def:
toString2()
:
let hunits
: Sequence(Vsm!HUnit)
= self.hunits
in
'UnitComponent
uc = factory
.CreateUnitComponent('
if hunits->size()
> 0 then
hunits->iterate(e;
acc : String
= "
I
acc
+ e.toString2()+';\r\n'+
'uc .addHUnit(hu_'+e.name+');\r\n'
else
endif
+
'//endof
code\r\n';
String = +self. name+);\r\n
38T
p~~aM}
AZ6.
TRWOJIL 6: C EMF to n 014
7a API ffi "bf
-C \
:1
UnitComponent
uc = factory.CreateUnitComponent(uc1);
HUnit hu_hul=
factory.CreateHUnit(hu1);
State
st_st11=
factory.createState(st11);
%st11 60Th
hu_hul . addState(st11)
;
0/21-7'.=
hu_hul
st11 OR
State
st_st12=
factory.createState(st12);
hu_hul.addState(st12);
hu_hul.setStartState(st11);
uc.addHUnit(hu_hul);
HUnit hu_hu2= factory.CreateHUnit(hu2);
State
st_st21=
factory.createState(st21);
hu_hu2.addState(st21);
State
st_st22=
factory.createState(st22);
hu_hu2.addState(st22);
hu_hu2.setStartState(st21);
uc.addHUnit(hu_hu2);
9.3メ タ な モ デ ル 変 換 の 導 入 .図18の 変 換 で は 、 メ タ モ デ ル が 変 わ る 毎 にATLの ル ー ル を 書 き 換 え な い と い け な い の で 、 メ タ モ デ ル の み を?か っ た 自動 化 は 実 現 さ れ て い な い 。 そ こ で メ タ 度 を1っ 上 げ て 、VSMの メ タ モ デ ル を 変 換 ソ ー ス モ デ ル と し 、Ecoreを メ タ モ デ ル と し て 上 記 ル ー ル (Vsrn2ApiText.atl)を 生 成 す る メ タ な モ デ ル 変 換(モ デ ル 変 換 の ル ー ル を モ デ ル 変 換 で 生 成 す る と い う 意 味)を 構 築 す る 。 Ecoreは 図19に あ る よ う な モ デ ル の 構 造 を も っ て い る 。ECIassが ク ラ ス に 相 当 し 、 合
成 関 係 はeReferences関 係 の な か でcontainment属 性 がtrueの も の で あ り、 こ れ を 取 得 し
て ル ー ル を 展 開 す る 。 ECIass 一name:String eHtinouteO ..n EAttribute eRefere 一name:String eAttrib ceTypeeRefe noes O.. R EReference 一name;String -containment:boolean EDataTe 図19:Ecoreモ デ ル(抜 粋) 図20にArLに よ る 変 換 の 枠 組 み を し め す 。 メ タ モ デ ル と し てEcoreを そ の ま ま 使 い 、 VSMの メ タ モ デ ル を 変 換 し て 、 図18の 変 換 ル ー ル(Vsm2ApiText.atl)相 当 を 得 る 。 M・t・M・d・IT・ansf・・0・ ・of・m・T・ Ecore
conformsTo/
EcoreIIATL basOnuses confortnsToE core2Writer.atlATL query executeコ コ VSM.・ …e input⊂)識iV・m・ApiText.・ ・J ModelT・an・fer-一 一 一 一 駈〒 一 一 一 lVSM!レ(〉 …一 ・レ陣1繭 日図20:メ
タ な モ デ ル 変 換 を組 み 合 わ せ た デ シ リア ライ ズ
query Ecore2Writer
= ecore!EClass.allInstances()
->select(eIe.name='UnitComponent')
->first().toString2().writeTo('C:/test/example.txt');
helper
context
ecore!EClass
def:
toString2O
:
String
=
let
containments
: Sequence(ecore!EClass)
= self.eReferences
->select(eIe
.containment=true)
in
'helper
context
= Vsm!'+self
.name+'
def:toString2():
String
=\r\n'+
if containments->size()
> 0 then
containments->iterate(e;
acc:String
= "I
acc +'
let
'+e.name+':
Sequence(Vsm!'+
e.eReferenceType.name+')
= self.'+e.name+'
in;\r\n'
else
Y1
endif+
'
\'
+self.name+'
uc= factory,Create'+self.name+
'(\'
self .name + \');\\r\\n\'\r\n'+
if containments->size()
> 0 then
containments->iterate(e;
acc:String
= "I
acc +'
if
'+e.name+'->size()
> 0 then\r\n'+
---
do something
with
'+e.name+'
\r\n'
else
endif;
helpercontext=Vsm!UnitComponentdef:toString2():String= lethunits:Sequence(Vsm!HUnit)=self.hunitsin; letchannels:Sequence(Vsm!Channel)=self.channelsin; 'UnitComponentuc=factory .CreateUnitComponent('selfname+'); ifhunits->size()>Othen -一 一dosomethingwithhunits ifchannels->size()>Othen -一 一dosomethingwithchannels
¥r¥n'
こ の よ うにモ デ ル 変 換 を 用 い る こ
ライ ズ の 仕 組 み を構 築 で き る こ とが
と に よ り 、 わ か っ た 。メ タ モ デ ル の み を入 力 と した 、 デ シ リア
10考
察
10.1ル
ー ル に 基 づ くモ デ ル 変 換 の ク ラ ス
ル}ル
に 基 づ く、 モ デ ル 変 換 に お い て は 、 個 々 のル ー ル は 、 ソー ス の 部 分 構 造 を タ ー
ゲ ッ トの 部 分 構 造 に 変 換 す る 仕 様 を 表 して い る 。 こ こで 部 分 構 造 は 木 構 造 を と る。6.2
章 で紹 介 した 変 換 事 例 は 、深 さ1の 木 を深 さNの
木 に 展 開 す るル0ル
につ い て の 評 価 で
あ っ た 。6.2章 の分 析 に もあ る よ うに 、 木 の長 さが 固 定 で あ るか 不 定 で あ る か 、 不 定 の
場 合 も最 大 長 が あ る か(有 限 不 定)か
最 大 長 が わ か っ て い な い か(無 限 不 定)の 場 合 に
分 け る こ とが で き る。
ソー ス 木 構 造
ター ゲ ッ ト木 構 造
ル ー ル の 種 別
固 定長
有 限不定長
無 限不定長
そ の 他
固定長
有 限不定長
無限不定長
の組合せ
宣 言 的 な 変 換 ル ー ル
宣 言 的 な 変 換 ル ー ル
宣 言 的 な変 換 ル ー ル+再 帰 ル ー ル
組 合 せ 例 が あ る か ど うか 不 明
表2:モ
デ ル 変 換 の ク ラス
10.2メ
タ な モ デ ル 変 換 が 有 効 な 対 象 に つ い て
メ タ な モ デ ル 変 換(メ
タ モ デ ル を メ タ メ タモ デ ル を 参 照 して 変 換 す る)が 有 効 な 対 象
は 、 モ デ ル 変 換 自体 が メ タ モ デ ル 特 有 の 情 報 に 依 存 せ ず 、 メ タ メ タ 情 報 に変 換 ル ー ル が
依 存 す る場 合 で あ る。9章 の 事 例 は デ シ リア ライ ズ は メ タ メ タ モ デ ル で あ るECoreに
依
存 して お り、個 々 の メ タモ デ ル(VSMの
メ タモ デ ル 等)に は依 存 して な い。
11木 言 語(TreeLanguage)理 論 と の 関 連 メ タ モ デ ル に 基 づ く モ デ ル 変 換 は 、ATLの 事 例 を み て も わ か る よ う に 、 中 間 ノ ー ド を メ タ モ デ ル の 情 報 で 、 リ ー フ を イ ン ス タ ン ス 固 有 の 情 報 で 構 成 さ れ る 木 構 造 間 の 変 換 で あ る と み な す こ と が で き る 。 木 構 造 を 基 盤 とす る 言 語 変 換 の 枠 組 み で 理 論 的 な 研 究 が な さ れ て き た 。 木 構 造 間 の 変 換 を 行 う機 能 はTreeTransducerと 呼 ば れ て い る 。Tree Transducerは 、 入 力 木 の ノ ー ドの パ タ ー ン に 対 し て 、 出 力 木 を 生 成 す る 関 数 を 呼 ぶ ル ー ル の 集 合 で 構 成 さ れ る 。 特 にMacroTreeTransducer(以 下MTTと 略 す)[8,71と 呼 ば れ る ク ラ ス は 、 入 力 パ タ ー ン に 引 数 を と る こ と が で き る こ と が 特 徴 で 、 木 を 生 成 す る 再 帰 的 な1階 関 数 プ ロ グ ラ ム と み な す こ と が で き る 。 ま た 単 項 二 階 論 理(MonadicSecondOrder)論 理 に 基 づ くTransduceは 、MTTを 制 限 し た も の と 同 等 で あ る こ と が 証 明 され て お り[7]、 形 式 的 な 取 り扱 い が 期 待 され る 枠 組 み で あ る 。 本 章 で はMTTを 用 い て モ デ ル 変 換 が 構 成 で き る こ と を 検 証 す る 。 TreeTranslationの 定 義 Σ お よ び △ をrank付 き の ア ル フ ァ ベ ッ ト、7Σ を Σ 上 の 木 構 造 の 集 合 で あ る と と き 、 写 像 τ:7Σ →T△ をtreetranslationと 呼 ぶ 。 MacroTreeTransducer(MTT)の 定 義 MacroTreeTransducer(MTT)はtreetranslationを 実 現 す る 手 段 一 つ で 、5つ の 組M= (Q,Σ,△,Qo,R)に て 構 成 さ れ 、 各 要 素 は 以 下 の 項 目 に 従 う ・Qは 有 限 の 状 態 の 集 合 で あ る 。 状 態 と は 入 力 ソ ー ス の ノ ー ドの 状 況 の パ タ ー ン に 対 応 す る 。 ・ Σ は 有 限 のrank付 入 力 記 号 、 △ は 出 力 記 号 で あ る 。 こ こ でrankと は 木 構 造 に お け る 直 近 の 枝 の 数(あ る い は 子 ノ ー ド の 数)に 相 当 す る 。 ・Qo⊂Qは 初 期 状 態 の 集 合 ・Rは 有 限 の ル ー ル の 集 合 で 、 以 下 の2つ の 形 式 を と る 1.q(a(xl,x2,_,Xn),ア1,_, ,vk)→t 2.q(xo,xl,_,xk)→t こ こ でg∈Qはkパ ラ メ ー タ を も つ 関 数 で 、 記 号R∈ Σ はrank数=n 図21が6.2章 で 説 明 し た 例 に お け るFamiliesに 相 当 す る イ ン ス タ ン ス 木 構 造 で あ る 。 属 性 情 報 、 汎 化 情 報 、 リ ス ト構 造 は す べ て 木 構 造 に 置 き 換 え て 表 現 し て い る 。