(57)【要約】【課題】  アプリケーションジェネレータ開発支援装置及び支援方法に係り、出力するプログラムの断片を、ジェネレータの変換規則中に変換規則の記述を容易すると同時に、構文解析器の作成を容易し、アプリケーションジェネレータの開発の効率化を図る。【解決手段】  ジェネレータの動作仕様である字句解析仕様及び文法仕様から字句解析器と構文解析器及び抽象構文木のデータ構造とを生成し、ジェネレータ出力プログラムの動作仕様を規定する入力仕様の構文解析結果を抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成する手段(101)と、ジェネレータの動作仕様である変換規則定義中の出力プログラム断片記述を変換規則に変換する手段(102）と、前記入力仕様抽象構文木を前記変換規則処理手段からの変換規則に基づき実行し、実行結果をジェネレータ出力プログラムとして出力する手段(103)とを備える。【選択図】      図１
2004246924.tif 000002
【特許請求の範囲】
【請求項１】
ジェネレータの動作仕様として与えられる字句解析仕様及び文法仕様から字句解析器と構文解析器及び抽象構文木のデータ構造とを生成し、ジェネレータ出力プログラムの動作仕様を規定する入力仕様の構文解析結果を抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成する構文解析手段と、ジェネレータの動作仕様として与えられる変換規則定義中の出力プログラム断片記述を変換規則に変換する変換規則処理手段と、前記入力仕様抽象構文木を前記変換規則処理手段からの変換規則に基づき実行し、実行結果をジェネレータ出力プログラムとして出力する変換規則実行手段とを備えることを特徴とするアプリケーションジェネレータ開発支援装置。
【請求項２】
請求項１に記載のアプリケーションジェネレータ開発支援装置において、前記変換規則定義が、ジェネレータ変換規則と前記プログラム断片記述とテキスト整形記述との組み合わせからなり、前記変換規則処理手段が、前記変換規則定義中の出力プログラム断片記述を抽出する手段と、前記テキスト整形記述に対応するテキスト整形規則が格納される記憶手段と、前記抽出した出力プログラム断片記述にテキスト整形記述が含まれているとき、前記記憶手段から取り出したテキスト整形規則による解釈結果を前記抽出した出力プログラム断片記述に記述する手段と、前記解釈結果が記述された出力プログラム断片記述と等価な出力プログラムを出力する変換規則を生成する手段とを備えることを特徴とするアプリケーションジェネレータ開発支援装置。
【請求項３】
請求項１または請求項２に記載のアプリケーションジェネレータ開発支援装置において、前記構文解析手段が、文法仕様から、構文解析器と、構文解析の結果得られる抽象構文木を表現するための抽象構文木のデータ構造とを生成する手段として、記憶部と、前記文法仕様から非終端記号の情報を取り出して各非終端記号の型名を決定し、型名決定済み非終端記号の情報を前記記憶部に格納する手段と、前記文法仕様からノードの情報を取り出し、構文木に組み入れる必要のあるノードを選択し、選択したノード情報を前記記憶部に格納する手段と、前記記憶部から決定された非終端記号の型名及び前記選択されたノード情報を取り出し、それらに基づき各ノードの型を決定し、決定したノードの型を前記記憶部に格納する手段と、前記文法仕様のルールに付随する値構成子と前記記憶部から取り出した前記決定された非終端記号の型名及び前記決定したノードの型とに基づき非終端記号のデータ型を生成する手段と、前記文法仕様と前記生成した非終端記号のデータ型と前記記憶部から取り出した前記選択されたノード情報とに基づき抽象構文木を構築する動作を生成する手段と、前記文法仕様と前記生成した非終端記号のデータ型と前記生成した抽象構文木を構築する動作とに基づき構文解析器を生成する手段と、前記生成した非終端記号のデータ型に基づき抽象構文木データ型を出力する手段とを備えることを特徴とするアプリケーションジェネレータ開発支援装置。
【請求項４】
ジェネレータの動作仕様として与えられる字句解析仕様及び文法仕様から字句解析器と構文解析器及び抽象構文木のデータ構造とを生成し、ジェネレータ出力プログラムの動作仕様を規定する入力仕様の構文解析結果を抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成する工程と、ジェネレータの動作仕様として与えられる変換規則定義中の出力プログラム断片記述を変換規則に変換する工程と、前記入力仕様抽象構文木を前記変換規則処理手段からの変換規則に基づき実行し、実行結果をジェネレータ出力プログラムとして出力する工程とを備えることを特徴とするアプリケーションジェネレータ開発支援方法。
【請求項５】
請求項１に記載のアプリケーションジェネレータ開発支援方法において、前記変換規則定義が、ジェネレータ変換規則と前記プログラム断片記述とテキスト整形記述との組み合わせからなり、前記変換規則に変換する工程が、前記変換規則定義中の出力プログラム断片記述を抽出する手順と、前記抽出した出力プログラム断片記述にテキスト整形記述が含まれているとき、記憶手段から取り出したテキスト整形規則による解釈結果を前記抽出した出力プログラム断片記述に記述する手順と、前記解釈結果が記述された出力プログラム断片記述と等価な出力プログラムを出力する変換規則へ変換する手順とを備えることを特徴とするアプリケーションジェネレータ開発支援方法。
【請求項６】
請求項１または請求項２に記載のアプリケーションジェネレータ開発支援方法において、前記文法仕様から、構文解析器と、構文解析の結果得られる抽象構文木を表現するための抽象構文木のデータ構造とを生成する手順として、前記文法仕様から非終端記号の情報を取り出して各非終端記号の型名を決定し、型名決定済み非終端記号の情報を記憶部に格納する手順と、前記文法仕様からノードの情報を取り出し、構文木に組み入れる必要のあるノードを選択し、選択したノード情報を前記記憶部に格納する手順と、前記記憶部から決定された非終端記号の型名及び前記選択されたノード情報を取り出し、それらに基づき各ノードの型を決定し、決定したノードの型を前記記憶部に格納する手順と、前記文法仕様のルールに付随する値構成子と前記記憶部から取り出した前記決定された非終端記号の型名及び前記決定したノードの型とに基づき非終端記号のデータ型を生成する手順と、前記文法仕様と前記生成した非終端記号のデータ型と前記記憶部から取り出した前記選択されたノード情報とに基づき抽象構文木を構築する動作を生成する手順と、前記文法仕様と前記生成した非終端記号のデータ型と前記生成した抽象構文木を構築する動作とに基づき構文解析器を生成する手順と、前記生成した非終端記号のデータ型に基づき抽象構文木データ型を出力する手順とを備えることを特徴とするアプリケーションジェネレータ開発支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム開発支援装置及びプログラム開発支援方法に係り、特にプログラムを、そのプログラムの動作仕様から自動的に生成するアプリケーションジェネレータの開発を支援するために用いる、アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法に関する。
【背景技術】
【０００２】
コンピュータ上で動作するプログラムの開発支援では、プログラムの動作仕様の記述から、その動作仕様をみたすプログラムを自動的に生成するアプリケーションジェネレータを用いる方法が広く採用されている。
アプリケーションジェネレータには、広義にはコンパイラも広く含まれる。通常コンパイラは、Ｃ／C++言語といった、分野を特定しない汎用の高級言語からコンピュータハードウェア上で直接実行可能なアセンブラ言語を生成する。このコンパイラの入力となる高級言語には、特定のオペレーティングシステムやハードウェアに依存しない言語としてC/C++言語が広く用いられている。
【０００３】
現在、このような高級言語が広く用いられるようになったため、特定の分野でのアプリケーションプログラムをさらに効率良く開発するための手段としてアプリケーションジェネレータが広く用いられるようになった。アプリケーションジェネレータは、ジェネレータの生成するプログラムが用いられる特定の分野に適切なプログラムの動作仕様記述を入力として、その動作仕様を満たす高級言語で記述されたプログラムを自動的に生成できる。
【０００４】
アプリケーションジェネレータでは、特定の分野に限定したプログラムの動作仕様の記述を行えば良いので、汎用の高級言語に比較して簡便な方法で動作仕様の記述を行うことができる利点がある。
【０００５】
このアプリケーションジェネレータの代表的なものに、例えばyaccがある。 yaccは、構文解析という分野を対象にしたアプリケーションジェネレータである。yaccでは、プログラムの動作仕様として、入力となる構文の文法と抽象構文木を生成するための動作とを記述することにより自動的に構文解析器を生成することができる。yaccの動作に関しては、エイホ/セシィ/ウルマン著、" コンパイラI/II 原理・技法・ツール" サイエンス社に詳しい。
【０００６】
yaccは、構文解析器という特定の分野に限定されたアプリケーションジェネレータであるが、さまざまな分野のプログラムを対象にアプリケーションジェネレータを効率良く構築するためには、アプリケーションジェネレータの開発を支援するシステムないしは支援方法が必要となる。
【０００７】
近年、ドメイン指向言語（Domain Specific Language）に基づくアプリケーション開発手法が用いられている(文献「エンサイクロペディア電子情報通信ハンドブック(オーム社,平成１０年１１月３０日発行)」の１０８３頁参照）。
このドメイン指向言語では、分野を特定しない汎用のアプリケーションジェネレータを開発するために、アプリケーションジェネレータ構築を支援する環境をアプリケーションジェネレータ開発者に提供する。
【０００８】
したがって、アプリケーションジェネレータ開発者は、ドメイン指向言語を用いてアプリケーションジェネレータを開発することにより、さまざまな分野のアプリケーションジェネレータを効率良く構築することができる。
【０００９】
ここでは、ドメイン指向言語を用いたアプリケーションジェネレータ構築支援システムの例として、文献「Rickard E.Faith著"KHEPERA" (USENIX The Con-frence on Domain-Specific Languages Proceedings 243頁)」に記載の技術を説明する。なお、以下の説明では、ドメイン指向言語を用いた開発支援装置をＤＳＬ開発支援装置と称している。
図２８は、ドメイン指向言語を用いたアプリケーションジェネレータの構成ブロック図である。図２８において、字句解析仕様６０１と構文解析仕様６０２は、特定分野固有の仕様記述表現を決定することにより定められる。字句解析仕様６０１を字句解析器生成装置６０３に与えて字句解析器プログラム６０５を生成する。また、構文解析仕様６０２を構文解析器生成装置６０４に与えて構文解析器プログラム６０６を生成する。なお、字句解析器生成装置６０３には、lex（lexical analyzer generator）が広く用いられ、また構文解析器生成装置６０４には、yacc(yet another control chart)が広く用いられている。
【００１０】
これらの字句解析器生成装置６０３、構文解析器生成装置６０４から生成される字句解析器プログラム６０５、構文解析器プログ ラム６０６は、字句仕様、構文仕様から生成される抽象構文の仕様を字句仕様中、構文仕様中に記述し、字句解析、構文解析を行った際の動作として、この抽象構文を出力する動作を記述する。
これらの動作の記述や抽象構文木の表現方法に、関数型言語等で多く見られる厳密な型定義を可能とする型構成子を用いたデータ型を積極的に利用すれば記述力や保守性を向上させ得ることが広く知られている。
【００１１】
抽象構文木定義６０７は、前述の字句解析器プログラム６０５、構文解析器プログラム６０６によって入力仕様の構文解析が行われ、その出力として得られる入力仕様の抽象構文木の定義である。
【００１２】
図２８の例では、ＤＳＬ開発支援装置６１０が、この抽象構文木定義６０７に変換規則６０９を繰り返し適用する変換実行装置プログラム６１１を出力する。変換規則６０９は、抽象構文木に対してパターンマッチを行い、 適合した抽象構文木を変換規則６０９に記述された規則に沿って異なる抽象構文木への書き替えを行い、最終的に出力プログラムとなる抽象構文木への変換を行うプログラムである。
ＤＳＬ開発支援装置６１０は、テキスト整形規則６０８からテキスト整形装置プログラム６１２を生成する。テキスト整形装置プログラム６１２は、与えられた抽象構文を各抽象構文に対応したテキスト整形規則に基づき整形を行う。即ち、出力プログラムの抽象構文木は、テキスト整形装置プログラム６１２によって出力プログラムに整形され出力される。
【００１３】
テキスト整形の手法には、文献「Blashek著"User-adaptable Prettyprinting"SOFTWARE PRACTICE AND EXEPERIENCE,VOL19(7),687-702頁」に記載の技術が公知である。
また、ＤＳＬ開発支援装置６１０は、ライブラリプログラム６１３を出力する。このライブラリプログラム６１３は、アプリケーションジェネレータ６１５の実行に必要なプログラムである。コンパイラ６１４は、このライブラリプログラム６１３と、字句解析器プログラム６０５と、構文解析器プログラム６０６と、変換実行装置プログラム６１１と、テキスト整形装置プログラム６１２とをコンパイルすることにより、実行可能なアプリケーションジェネレータ６１５を作成する。
【００１４】
【非特許文献１】電子情報通信学会編「エンサイクロペディア電子情報通信ハンドブック」オーム社、平成１０年１１月３０日、１０８３頁
【非特許文献２】ブラシェク（Blashek）著、「ユーザ・アダプタブル  プリティ  プリンティング(User-adaptable Prettyprinting)」、ソフトウエア  プラクティス  アンド  エクスペリエンス(SOFTWARE PRACTICE AND EXEPERIENCE),１９巻第７号(VOL19(7)),１９８９年、687-702頁
【非特許文献３】リカード  イー・フェイス(Rickard E.Faith)著「ケペラ(KHEPERA)」 (ユウスニクス  ザ  コンファレンスオン  ドメイン  スペシフィック  ラングエージズ  プロシーディングス(USENIX The Con-frence on Domain-Specific Languages Proceedings)、1997年、 243頁
【発明の開示】
【発明が解決しようとする課題】
【００１５】
上述した従来の構成には、次のような課題がある。第１の課題として、変換規則中に現れる出力プログラムの断片が抽象構文木で表現されるため、変換規則を抽象構文上で記述すると、ジェネレータの生成する出力プログラムを変換規則中に直接記述することができない。そのため、ジェネレータの出力するプログラムの構造が理解しづらくなり、ジェネレータの開発効率並びに保守性が悪化する点が挙げられる。
【００１６】
第２の課題として、変換規則中に現れる出力プログラムの断片にテキスト整形規則を埋め込むことができないため、出力プログラムの抽象構文木を作成する際に、出力の対象とするプログラム言語の構文を詳細に検討し、各構文要素の定義を厳密におこない、それに対応したテキスト整形規則を定義しなければならない。そのため、ジェネレータの開発作業が煩雑になる点が挙げられる。
【００１７】
第３の課題として、構文解析した結果を内部表現へ変換する手順を開発者が記述しなくてはならない点が挙げられる。その理由は、従来の手法では、内部表現への変換手順を自動生成する手段が無く、また厳密な型定義を可能とする型構成子を用いた表現方法に基づいていないためである。
【００１８】
第４の課題として、抽象構文木の表現形式を開発者が記述しなくてはならない点が挙げられる。その理由は、従来の手法では、内部表現の形式を自動生成する手段が無く、また厳密な型定義を可能とする型構成子を用いた表現方法に基づいていないためである。
本発明の目的は、第１、第２の課題を解決するため、変換規則中に直接出力される出力プログラムの断片を記述可能な手段、並びに、出力時のテキスト整形規則を埋め込む手段を備えるアプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法を提供することにある。
【００１９】
また本発明の他の目的は、第３、第４の課題を解決するため、構文解析器の仕様から自動的に抽象構文木を表現するための内部表現を表すデータ構造定義を生成し、文法仕様から抽象構文木を自動生成する手段を備えるアプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法を提供することにある。
【課題を解決するための手段】
【００２０】
請求項１に記載の発明に係るアプリケーションジェネレータ開発支援装置は、抽象構文木の部分木のパターンマッチングにより当該構文木を別の構文木へ書き換える変換規則を用いて、ジェネレータ入力仕様に従ってジェネレータ出力プログラムを生成するアプリケーションジェネレータ開発支援装置において、字句解析仕様および文法仕様と、前記ジェネレータ出力プログラムのテキストを直接記述可能にする出力プログラム断片記述、前記出力プログラムの改行及び字下げを含む制御を行うテキスト整形記述および第１変換規則の組合せからなる変換規則定義と、を含むジェネレータ動作仕様を読み込むジェネレータ動作仕様読込手段と、前記字句解析仕様から字句解析器を生成し、前記文法仕様から構文解析器及び抽象構文木のデータ構造を生成し、前記字句解析器および構文解析器を用いて前記ジェネレータ入力仕様を解析し、その構文解析結果を前記抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成する構文解析手段と、前記出力プログラム断片記述および前記テキスト整形記述に基づいて第２変換規則を生成する変換規則生成手段と、前記第１変換規則と前記第２変換規則とを前記変換規則として記憶する変換規則記憶手段と、前記変換規則に基づいて、前記入力仕様抽象構文木のうち前記変換規則で書き換え可能な部分の書き換えを実行し、実行結果をジェネレータ出力プログラムとして出力する変換規則実行手段と、を備えることを特徴とする。
【００２１】
請求項１に記載の発明によれば、構文解析手段がジェネレータ動作仕様に基づき字句解析器、構文解析器及び抽象構文木データ型を生成し、変換規則処理手段がジェネレータ入力仕様に基づき出力プログラム断片記述から、その出力プログラム断片記述をジェネレータ出力プログラムとして出力する変換規則を生成し、変換規則実行手段がジェネレータ入力仕様を構文解析した前記入力仕様抽象構文木を変換規則に基づき実行し、ジェネレータ出力プログラムを出力する。
【００２２】
したがって、ある分野に適切なプログラムの動作仕様を入力すると、その動作仕様を満たすプログラムを自動的に生成できる。このとき、構文解析手段に構文解析器を効率良く作成させることができ、変換規則処理手段に変換規則の開発効率並びに保守性の向上を可能にする措置を採らせることができる。
【００２３】
請求項２に記載の発明に係るアプリケーションジェネレータ開発支援装置は、請求項１に記載のアプリケーションジェネレータ開発支援装置において、前記変換規則定義が、ジェネレータ変換規則と前記プログラム断片記述とテキスト整形記述との組み合わせからなり、前記変換規則処理手段が、前記変換規則定義中の出力プログラム断片記述を抽出する手段と、前記テキスト整形記述に対応するテキスト整形規則が格納される記憶手段と、前記抽出した出力プログラム断片記述にテキスト整形記述が含まれているとき、前記記憶手段から取り出したテキスト整形規則による解釈結果を前記抽出した出力プログラム断片記述に記述する手段と、前記解釈結果が記述された出力プログラム断片記述と等価な出力プログラムを出力する変換規則を生成する手段とを備えることを特徴とする。
【００２４】
変換規則定義から抽出した出力プログラム断片記述を、その出力プログラム断片記述をジェネレータ出力プログラムとして出力させるための変換規則へ変換し、テキスト整形記述が記述されているとき、テキスト整形記述を解釈し、その出力プログラム断片記述並びにテキスト整形規則を解釈した結果から、その出力プログラム断片記述をジェネレータ出力プログラムとして出力させるための変換規則へ変換する。
したがって、変換規則定義中のプログラムの断片記述を出力結果であるジェネレータ出力プログラムと同様に記述することができるので、変換規則の開発効率並びに保守性を向上させることができる。
【００２５】
請求項２に記載の発明に係るアプリケーションジェネレータ開発支援装置は、請求項１に記載のアプリケーションジェネレータ開発支援装置において、前記構文解析手段は、前記文法仕様から非終端記号の情報を取り出して各非終端記号の型名を決定する手段と、前記文法仕様からノードの情報を取り出し、構文木に組み入れる必要のあるノードを選択する手段と、前記記憶部から決定された非終端記号の型名及び前記選択されたノードの情報を取り出し、それらに基づき各ノードの型を決定する手段と、前記文法仕様のルールに付随する値構成子と前記決定された非終端記号の型名及び前記決定したノードの型とに基づき非終端記号のデータ型を生成する手段と、前記文法仕様と前記生成した非終端記号のデータ型と前記選択されたノード情報とに基づき抽象構文木を構築する動作を生成する手段と、前記文法仕様と前記生成した非終端記号のデータ型と前記生成した抽象構文木を構築する動作とに基づき構文解析器を生成する手段と、前記生成した非終端記号のデータ型に基づき抽象構文木データ型を出力する手段とを備えることを特徴とする。
【００２６】
請求項２に記載の発明によれば、記憶部に、非終端記号の型名、構文木に組み入れる必要のあるノード、そのノードの型を順々に記憶し、文法仕様と記憶内容から、非終端記号のデータ型、抽象構文木を構築する動作、構文解析器、抽象構文木データ型を順々に生成する。
【００２７】
したがって、文法仕様を入力するだけで、その文法に沿った入力仕様の抽象構文木を表現するためのデータ構造と、データ構造を出力する構文解析木を自動的に出力することができ、抽象構文木を表現するための内部表現を表すデータ構造定義を自動生成することできる。
【００２８】
請求項３に記載の発明に係るアプリケーションジェネレータ開発支援方法は、抽象構文木の部分木のパターンマッチングにより当該構文木を別の構文木へ書き換える変換規則を用いて、ジェネレータ入力仕様に従ってジェネレータ出力プログラムを生成するアプリケーションジェネレータ開発支援方法において、字句解析仕様および文法仕様と、前記ジェネレータ出力プログラムのテキストを直接記述可能にする出力プログラム断片記述、前記出力プログラムの改行及び字下げを含む制御を行うテキスト整形記述および第１変換規則の組合せからなる変換規則定義と、を含むジェネレータ動作仕様を読み込み、前記字句解析仕様から字句解析器を生成し、前記文法仕様から構文解析器及び抽象構文木のデータ構造をそれぞれ生成し、前記字句解析器および構文解析器を用いて前記ジェネレータ入力仕様を解析し、前記構文解析結果を前記抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成し、前記出力プログラム断片記述および前記テキスト整形記述に基づいて第２変換規則を生成し、前記第１変換規則と前記第２変換規則とを前記変換規則として記憶する変換規則記憶手段と、前記変換規則に基づいて、前記入力仕様抽象構文木のうち前記変換規則で書き換え可能な部分の書き換えを実行することでジェネレータ出力プログラムを生成する、ことを特徴とする。
【００２９】
請求項５に記載の発明に係るアプリケーションジェネレータ開発支援方法は、請求項１に記載のアプリケーションジェネレータ開発支援方法において、前記変換規則定義が、ジェネレータ変換規則と前記プログラム断片記述とテキスト整形記述との組み合わせからなり、前記変換規則に変換する工程が、前記変換規則定義中の出力プログラム断片記述を抽出する手順と、前記抽出した出力プログラム断片記述にテキスト整形記述が含まれているとき、記憶手段から取り出したテキスト整形規則による解釈結果を前記抽出した出力プログラム断片記述に記述する手順と、前記解釈結果が記述された出力プログラム断片記述と等価な出力プログラムを出力する変換規則へ変換する手順とを備えることを特徴とする。
請求項４に記載の発明に係るアプリケーションジェネレータ開発支援方法は、請求項３に記載のアプリケーションジェネレータ開発支援方法において、前記構文解析器および前記抽象構文木のデータ構造を生成するステップは、前記文法仕様から非終端記号の情報を取り出して各非終端記号の型名を決定し、前記文法仕様からノードの情報を取り出し、構文木に組み入れる必要のあるノードを選択し、前記非終端記号の型名及び前記選択されたノードの情報を取り出し、それらに基づき各ノードの型を決定し、前記文法仕様のルールに付随する値構成子と前記決定された非終端記号の型名及び前記決定したノードの型とに基づき非終端記号のデータ型を生成し、前記文法仕様と前記生成した非終端記号のデータ型と前記選択されたノード情報とに基づき抽象構文木を構築する動作を生成し、前記文法仕様と前記生成した非終端記号のデータ型と前記生成した抽象構文木を構築する動作とに基づき構文解析器を生成し、前記生成した非終端記号のデータ型に基づき抽象構文木データ型を出力する、ことを特徴とする。
【発明の効果】
【００３０】
以上詳述したように、本発明によれば、ジェネレータ動作仕様である変換規則定義中に記述するプログラム断片を、ジェネレータが出力する出力プログラムの断片と同様に記述でき、またジェネレータ動作仕様である文法仕様から自動的に構文解析器並びにジェネレータ入力仕様を表す抽象構文木データ型定義を生成できるので、アプリケーションジェネレータの開発を効率よく行うことが可能となる。
【発明を実施するための最良の形態】
【００３１】
以下、本発明の実施形態について図面を参照して詳細に説明する。
【００３２】
図１は、本発明の実施形態に係るアプリケーションジェネレータ開発支援装置の構成ブロック図である。図１において、このアプリケーションジェネレータ開発支援装置１０は、当該アプリケーションジェネレータ開発支援装置１０の動作仕様を与えるジェネレータ動作仕様２０と、当該アプリケーションジェネレータ開発支援装置１０が出力するプログラムの動作仕様を与えるジェネレータ入力仕様３０とに基づきジェネレータ出力プログラム４０を生成出力するように構成される。
【００３３】
アプリケーションジェネレータ開発支援装置１０は、構文解析手段１０１、変換規則処理手段１０２、変換規則実行手段１０３の３つの手段を備える。
【００３４】
構文解析手段１０１は、字句解析器生成手段１０１ａと、字句解析器生成手段１０１ａが生成する字句解析器１０１ｂと、構文解析器及び抽象構文木データ型生成手段１０１ｃと、構文解析器及び抽象構文木データ型生成手段１０１ｃが生成する構文解析器１０１ｄ及び抽象構文データ型１０１ｅと、入力仕様抽象構文木１０１ｆとで構成される。
【００３５】
変換規則処理手段１０２は、ジェネレータ動作仕様読込手段１０２ａと、出力プログラム断片記述処理手段１０２ｂと、テキスト整形記述解釈手段１０２ｃと、テキスト整形規則記憶部１０２ｄと、出力プログラム断片記述記憶部１０２ｅと、変換規則生成手段１０２ｆと、変換規則記憶部１０２ｇとで構成される。
【００３６】
また、変換規則実行手段１０３は、変換規則コンパイル手段１０３ａと、実行コード記憶部１０３ｂと、変換実行手段１０３ｃとで構成される。
そして、ジェネレータ動作仕様２０は、構文規則定義２０１と、変換規則定義２０２とで構成される。
【００３７】
構文規則定義２０１は、アプリケーションジェネレータ開発支援装置１０に入力される仕様記述の字句定義に関わる、字句解析仕様２０１ａと文法仕様２０１ｂとで構成される。
変換規則定義２０２は、アプリケーションジェネレータ開発支援装置１０の動作仕様記述に関わる、ジェネレータ変換規則２０２ａと、出力プログラム断片記述２０２ｂと、テキスト整形記述２０２ｃとで構成される。
【００３８】
ここで、アプリケーションジェネレータ開発支援装置１０の各処理手段は、コンピュータ（ＣＰＵ）で実現され、記憶部は、半導体メモリや磁気ディスク装置等の記憶装置で構成される。そして、ジェネレータ動作仕様２０やジェネレータ入力仕様３０は、記憶装置に格納される。
【００３９】
以下、本実施形態のアプリケーションジェネレータ開発支援装置の動作について図１〜図１８を参照して詳細に説明する。なお、図２は、構文解析手段１０１の一部と変換規則処理手段１０２との動作フローチャートである。図３は、構文解析手段１０１の一部と変換規則実行手段１０３との動作フローチャートである。
【００４０】
図４は、ジェネレータ動作仕様２０の記述文法を記述した図である。図５は、字句解析仕様２０１ａの記述文法を記述した図である。図６は、字句解析仕様２０１ａの記述文法の具体的な記述の図である。図７は、文法仕様２０１ｂの文法記述を記述した図である。図８は、文法仕様２０１ｂの記述文法の具体的な記述の図である。
【００４１】
図９は、ジェネレータ変換規則２０２ａの記述文法を記述した図である。図１０は、ジェネレータ変換規則２０２ａの記述文法の具体的な記述を示す図である。図１１は、出力プログラム断片記述２０２ｂの記述文法を記述した図である。図１２は、出力プログラム断片記述２０２ｂの記述文法のうちのパターンを記述した図である。
【００４２】
図１３は、出力プログラム断片記述２０２ｂの記述文法及びテキスト整形記述２０２ｃの具体的な記述を示す図である。図１４は、テキスト整形記述２０２ｃの例を示した図である。図１５は、テキスト整形規則記憶部１０２ｄに記憶されるテキスト整形規則の例を示した図である。
【００４３】
図１６は、出力プログラム断片記述２０２ｂの具体的な記述を示す図である。図１７は、図１６の記述から生成された出力プログラムを示す図である。図１８は、変換規則生成手段１０２ｆが生成する変換規則（抽出した出力プログラム断片記述と等価な出力プログラムを出力する変換規則）の定義である。
【００４４】
まず、図２の動作フローチャートに沿って構文解析手段１０１の一部と変換規則処理手段１０２との動作を説明する。図２において、Ｓ２〜Ｓ５は構文解析手段１０１の動作、Ｓ６〜Ｓ１４は変換規則処理手段１０２の動作である。
【００４５】
Ｓ１では、ジェネレータ動作仕様読込手段１０２ａが、ジェネレータ動作仕様２０を記憶装置から読み込み、その記述内容に応じて、字句解析器生成手段１０１ａ、構文解析器及び抽象構文木データ型生成手段１０１ｂ、変換規則記憶部１０２ｇ、出力プログラム断片記述処理手段１０２ｂの対応する手段に与える（Ｓ２，Ｓ４，Ｓ６，Ｓ８）。
このジェネレータ動作仕様２０は、図４に示すような文法で記述される。図４において、仕様種類とは、ジェネレータ動作仕様２０を構成する、字句解析仕様２０１ａ、文法仕様２０１ｂ、ジェネレータ変換規則２０２ａ、出力プログラム断片記述２０２ｂ、テキスト整形記述２０２ｃを区別するための識別子である。このように各仕様種類毎に名称を識別子として付加することにより、他の仕様定義からの参照が可能となる。
【００４６】
Ｓ２では、ジェネレータ動作仕様読込手段１０２ａは、読み込んだジェネレータ動作仕様２０が字句解析仕様２０１ａであると、それを字句解析器生成手段１０１ａに渡し、起動する。
【００４７】
この字句解析仕様２０１ａは、図５に示すような文法で記述される。字句解析仕様２０１ａでは、後述する構文解析で用いるトークンの定義を正規表現を用いて記述される。例えば、図６では識別子を表すトークンIDENTIFIERを正規表現を用いて記述し、calc_tokenという名称で定義した例を示している。
【００４８】
字句解析器生成手段１０１ａは、そのような字句解析仕様２０１ａに基づき字句解析器生成処理を実行し、字句解析器１０１ｂの生成を行う（Ｓ３）。
なお、字句解析生成手段や字句解析器の動作に関しては、文献「エイホ/セシィ/ウルマン著、"コンパイラ I/II 原理・技法・ツール" サイ エンス社」に詳しい。
Ｓ４では、ジェネレータ動作仕様読込手段１０２ａは、読み込んだジェネレータ動作仕様１０１が文法仕様２０１ｂであると、それを構文解析器及び抽象構文木データ生成手段１０１ｃに渡し、起動する。
【００４９】
この文法仕様２０１ｂは、図７に示すような文法で記述される。この文法仕様２０１ｂは、後述する構文解析器生成装置（図１９）が扱う文法仕様（図２１参照））と同じ形式で記述される。図８に文法仕様の具体的記述例を示してある。図８の記述例では、簡単な加減演算を行う文法仕様の記述文法の定義を行い、 calc_grammerという名称で定義している。
【００５０】
構文解析器及び抽象構文木データ生成手段１０１ｃは、後述するようにしてこの文法仕様２０１ｂに基づき構文解析器及び抽象構文木データ生成処理を実行し、構文解析器１０１ｄと抽象構文木データ型１０２１ｅを生成する（Ｓ５）。
Ｓ６では、ジェネレータ動作仕様読込手段１０２ａは、読み込んだジェネレータ動作仕様２０がジェネレータ変換規則２０２ａであると、そのジェネレータ変換規則２０２ａを変換規則コンパイル手段１０２３ａで処理できる内部表現に変換し、変換規則記憶部１０２ｇに格納する（Ｓ７）。
【００５１】
ジェネレータ変換規則２０２ａは、図９に示すような文法で記述される。このジェネレータ変換規則２０２ａの記述方法は、本実施形態では、ＭＬに準じた記述方法で記述する。なお、ＭＬに関しては、文献「 L.C. Paulson著 "ＭＬ forthe Working Programmer" Cambridge University Press」に詳しい。
【００５２】
図１０では、具体的なジェネレータ変換規則の定義として、図５〜図７に示すように記述された字句解析仕様及び文法仕様に基づき構文解析器１０１ｄを呼び出し、その結果得られた抽象構文木を変数specに束縛し、関数generateを呼び出すことにより出力プログラムの生成を行うという動作を記述している。
【００５３】
このように記述されたジェネレータ変換規則の記憶方法は、文献「Andrew W.Appel著 "Compiling with Continuations" Cambridge University Press」に詳しい。
Ｓ８では、ジェネレータ動作仕様読込手段１０２ａは、読み込んだジェネレータ動作仕様２０が出力プログラム断片記述２０２ｂであると、それを出力プログラム断片記述処理手段１０２ｂに渡し、起動する。
【００５４】
出力プログラム断片記述２０２ｂは、当該ジェネレータの出力するプログラムの一部を記述したものである。出力プログラム断片記述２０２ｂには、２種類の記述を行うことができる。１つは、出力するプログラムそのものの記述である。この場合には、出力されるプログラムのテキストイメージを直接記述して構わない。他の１つは、ジェネレータ入力仕様３０から与えられる抽象構文木に記述された情報に基づき他のプログラム断片の展開等を行うテキスト整形記述の記述である。このテキスト整形記述には、字下げや改行の文字と、テキスト整形規則とがある。なお、これらの２種の記述は、出力プログラム断片中に混在して記述することもできる。
【００５５】
この出力プログラム断片記述２０２ｂは、図１１に示すように、パターンの並びとして記述される。パターンは、図１２に示すように、引数とプログラム断片の並びとして記述される。図１３は、Ｃ言語のmain関数を出力するプログラムの断片を記述している。
プログラム断片中に他のプログラム断片を記述する際に行うテキスト整形記述は、例えば図１３に示すように記述できる。即ち、図１３の例では、insertというテキスト整形記述を行うことにより、main関数を展開する際にinsertの部分に名称switch_outで指定された出力プログラム断片を埋め込むことを指定している。
【００５６】
また、出力プログラム断片記述中のパターンの引数として渡される変数、即ち、図１３中のbranchesという変数で表される部分には、ジェネレータ入力仕様３０を構文解析器１０１ｄが構文解析した結果に抽象構文木データ型１０１ｅを適用して得られる入力仕様抽象構文木１０１ｆを、変換規則によって変換した結果が渡される。
【００５７】
したがって、パターンの引数として渡される変数branchesを出力プログラム断片に埋め込むことにより、ジェネレータ入力仕様３０に即したジェネレータ出力プログラム４０を得ることができる。
【００５８】
Ｓ９では、出力プログラム断片記述処理手段１０２ｂは、受け取った出力プログラム断片記述２０２ｂ中にテキスト整形記述２０２ｃがあるか否かを調べる。出力プログラム断片記述処理手段１０２ｂは、テキスト整形記述２０２ｃがなければ受け取った出力プログラム断片記述２０２ｂを出力プログラム断片記述記憶部１０２ｅ記憶する（Ｓ１０）。
【００５９】
一方、出力プログラム断片記述処理手段１０２ｂは、受け取った出力プログラム断片記述２０２ｂ中にテキスト整形記述２０２ｃがあると、それを取り出し、テキスト整形記述２０２ｃの内容調べ（Ｓ１１）、まず、テキスト整形記述２０２ｃの字下げや改行の文字についての処理を行い（Ｓ１２）、その後変換規則の処理をテキスト整形記述解釈手段１０２ｃに委ねる（Ｓ１３〜Ｓ１５）。
即ち、出力プログラム断片記述処理手段１０２ｂは、テキスト整形記述２０２ｃから字下げや改行の文字を取り出し、その字下げや改行の位置情報を内部記憶するとともに（Ｓ１２）、その字下げや改行の文字を出力プログラム断片記述記憶部１０２ｅに記憶する（Ｓ１０）。
【００６０】
そして、出力プログラム断片記述処理手段１０２ｂは、字下げや改行の文字についての処理を終了したテキスト整形記述２０２ｃをテキスト整形記述解釈手段１０２ｃに渡す。これにより、テキスト整形記述解釈手段１０２ｃは、Ｓ１３〜Ｓ１５の処理を行う。
図１４は、本実施形態で記述可能なテキスト整形記述の一覧を示す。また、テキスト整形規則記憶部１０２ｄには、テキスト整形方法を記述したテキスト整形規則が格納される。図１５に一例を示してある。
【００６１】
テキスト整形記述２０２ｃは、テキスト整形記述解釈手段１０２ｃがテキスト整形規則記憶部１０２ｄを検索する際に使用する。したがって、新たなテキスト整形記述が必要になった場合は、そのテキスト整形記述に対応したテキスト整形規則をテキスト整形規則記憶部１０２ｄに登録することにより自由に追加することが可能である。
【００６２】
テキスト整形記述解釈手段１０２ｃは、図１５に示されるようなテキスト整形規則をテキスト整形規則記憶部１０２５ｄから検索し（Ｓ１３）、テキスト整形規則の各引数にテキスト整形記述２０２ｃの値を束縛することにより、テキスト整形記述の解釈を行い（Ｓ１４）、解釈結果とＳ１２で内部記憶した字下げや改行の位置情報とに基づきテキスト整形を行うための情報を付加した出力プログラム断片記述２０２ｂを生成し（Ｓ１５）、それを変換規則生成手段１０２ｆに渡す（Ｓ１６）。
【００６３】
変換規則生成手段１０２ｆは、出力プログラム断片記述記憶部１０２ｅに記憶された、出力プログラム断片記述、字下げや改行の文字、テキスト整形記述解釈手段１０２ｃから取得したテキスト整形を行うための情報を付加した出力プログラム断片記述２０２ｂから、それと等価な出力プログラムを得ることのできる変換規則の生成を行い（Ｓ１６）、生成した変換規則を変換規則記憶部１０２ｇに格納する（Ｓ７）。
なお、ここで言う変換規則は、従来技術の項でも説明したが、入力として与えられる抽象構文木と規則で定義された抽象構文木との間でパターンマッチを行い、パターンマッチが成功した場合、規則に定義された出力となる抽象構文木に書き替えを行うプログラムである。
【００６４】
図１６は、テキスト整形記述を用いて記述したプログラム断片記述の例である。この例では、図１３で示したinsert整形記述を用いて参照したプログラム断片記述switch_outを定義している。プログラム断片記述switch_outでは、Ｃ言語のswitch文を記述しており、switch文の内部に引数branchesの各要素に対してＣ言語のcase文を展開する記述を行っている。
【００６５】
図１３の出力プログラム断片記述、図１６の出力プログラム断片記述に対して、[ "1" , "2" ]のような文字列のリストを入力し、ジェネレータ入力仕様３０を実行すると、図１７に示すような字下げ等を考慮した出力プログラム断片記述が、ジェネレ−タ出力プログラム４０として出力される。
【００６６】
図１８は、図１６に示した出力プログラム断片記述から生成した変換規則の記述例である。この例では、テキスト整形記述のないプログラム断片記述が、そのまま出力プログラム中に文字列として出力されるようにする変換規則が示されている。また、テキスト整形記述のあるプログラム断片記述が、テキスト整形規則定義に記述されている字下げや改行の位置情報とともに、出力プログラム中に記述されるようにする変換規則が示されている。
【００６７】
そして、Ｓ１６では、以上のＳ１〜Ｓ１６までの処理を全てのジェネレータ動作仕様２０に対して実行する。その結果、構文解析手段１０１では、字句解析器１０１ｂ、構文解析器１０１ｄ及び抽象構文木データ型１０１ｅが生成され、変換規則処理手段１０１では、、変換規則記憶部１０２ｇには、ジェネレータ変換規則２０２ａの変換規則と出力プログラム断片記述２０２ｂの変換規則が逐一格納される。
【００６８】
次に、図１、図３を参照して構文解析手段１０１の一部と変換規則実行手段１０３の動作を説明する。図３において、Ｓ２０〜Ｓ２３までが構文解析手段１０１の動作、Ｓ２４〜Ｓ２９までが変換規則実行手段１０３の動作である。
【００６９】
図１，図３において、構文解析手段１０１では、ジェネレータ入力仕様３０を読み込み（Ｓ２０）、字句解析器１０１ｂがジェネレータ入力仕様３０の字句解析を行い（Ｓ２１）、構文解析器１０１ｄが字句解析結果を用いてジェネレータ入力仕様３０の構文解析を行う（Ｓ２２）。そして、構文解析した入力仕様３０の抽象構文木を抽象構文木データ型１０１ｄを用いた内部表現である入力仕様抽象構文木１０１ｆで表現する（Ｓ２３）。
【００７０】
次に、変換規則実行手段１０３では、変換規則コンパイル手段１０３ａが、入力仕様抽象構文木１０１ｆを実行コードにコンパイルする（Ｓ２４）。また、変換規則コンパイル手段１０３ａは、変換規則記憶部１０１ｇから変換に必要な変換規則を検索し、それを実行可能な実行コードに変換する（Ｓ２５、Ｓ２６）。
【００７１】
そして、変換規則コンパイル手段１０３ａは、Ｓ２４で得られたジェネレータ入力仕様３０に対応する実行コードと、Ｓ２６で得られたジェネレータ変換規則２０２ａや変化規則生成手段１０２ｆが生成した変化規則に対応する実行コードとを実行コード記憶部１０３ｂに記憶する（Ｓ２７）。
【００７２】
なお、変換規則コンパイル手段１０３ａに関しては、前述した文献「Andrew W.Appel著 "Compiling with Continuations" Cambridge University Press」に詳しい。
【００７３】
次いで、変換実行手段１０３ｃが、実行コード記憶部１０３ｂに記憶された実行コードを用いてジェネレータ入力仕様３０を変換し、その変換結果をジェネレータ出力プログラム４０として出力する（Ｓ２８、Ｓ２９）。
【００７４】
次に、図１９は、本発明の実施形態に係る構文解析器生成装置の構成ブロック図である。この構文解析器生成装置は、図１における、構文解析器及び抽象構文木データ型生成手段１０１ｃ，構文解析器１０１ｄ、抽象構文木データ型１０１ｅの全体に対応する。
【００７５】
図１９において、この構文解析器生成装置は、プログラム制御により動作するデータ処理装置５０１と、情報を記憶する記憶装置５０２とを備え、入力される文法仕様５０３から、抽象構文木データ型５０４及び構文解析器５０５を自動的に出力するように構成される。
【００７６】
データ処理装置５０１は、文法記述読込手段５０１１と、非終端記号型名決定手段５０１２と、要素選択手段５０１３と、各ノード型決定手段５０１４と、非終端記号データ型生成手段５０１５と、構文木構築動作生成手段５０１６と、構文解析器生成手段５０１７と、抽象構文木データ型出力手段５０１８とを備える。これらの手段は、コンピュータ（ＣＰＵ）により実現される。
【００７７】
記憶装置５０２は、文法情報記憶部５０２１と、抽象構文木データ型記憶部５０２２とを備える。記憶装置５０２は、半導体メモリや磁気ディスク装置等である。なお、文法情報記憶部５０２１には、文法記述の内部表現や、非終端記号の型名や、選択されたノードやその型などが記憶される。また、抽象構文木データ型記憶部５０２２には、抽象構文木データ型が記憶される。
【００７８】
次に、以上のように構成される本実施形態の構文解析器生成装置の動作を図１９〜図２７を参照して詳細に説明する。なお、図２０は、構文解析器生成装置の動作フローチャートである。図２１は、文法規則の記述方法を具体例で示した図である。図２２は、文法規則中に記述することのできる構文木の種類を示した図である。図２３は、文法記述の例を示す図である。図２４は、図２３の文法で記述された入力の例を示す図である。図２５は、図２４の入力を内部表現で表した例を示す図である。図２６は、図２５の内部表現から生成されたデータ型を示す図である。図２７は、図２５の内部表現に動作を付加した図である。
【００７９】
まず、文法仕様５０３について説明する。本実施形態で対象となる文法記述は、これから示すＢＮＦ文法（以下「ＢＮＦ１」という）により記述される。ＢＮＦ１は、図２１に示すように、ルールの集合からなる。ルールは、そのルールで定義される非終端記号の１つと1つ以上のブランチとから構成される。各ブランチは、値構成子名と、0 個以上のノードの列とからなる。
【００８０】
このうち、各ブランチの先頭に記述される値構成子名は、本実施形態の手法（以下「本手法」という）で利用するＢＮＦ１特有の要素である。即ち、この値構成子名は、抽象構文木用のデータ型を自動的に生成する際の値構成子の名前として利用される。
ノードの列は、一般的なＢＮＦ文法であれば必ず持っている要素である。このノードの列は、そのルールが表す非終端記号がどういった文法要素に展開されるかを示している。各ノードは、図２２の表で１〜７に示す７つのいずれかである。
【００８１】
このうち、１のトークンと２の非終端記号は、一般的なＢＮＦ文法には必ず存在する要素である。１のトークンは、構文解析の最小単位であるトークンを意味する。２の非終端記号は、他のルールによって定義される非終端記号を意味する。３，４，５のノードは、ＢＮＦ文法によっては存在する要素で、対象となるノードの繰り返しや、そのノードが出現するかどうかを意味する。
【００８２】
また、６，７のノードにおけるデリミタとは、ノードが２回以上繰り返される場合に各要素の間にデリミタに対応するノードが挟まることを意味する。この６，７のノードにおけるデリミタの記法は、本手法特有の要素である。
【００８３】
なお、以下の説明で利用している、:: = | < ＞ [ ] * +、等の記号は、他の記号と置き換えても本手法は、適用することができる。
また、本手法で使用するＢＮＦ１文法のうち、図２２中の３〜７の各ノドは、必ずしも一般的なＢＮＦではないが、このリスト表現の使用を一部または全部制限しても本手法は、適用できる。
【００８４】
なお、文法情報記憶部５０２１には、初期状態においては、文法自体に関する情報は格納されておらず、構文解析前の字句解析段階に関する情報のみが入っている。字句解析段階に関する情報とは、識別子や文字列、整数といったトークンの種類、それらのトークンの型などである。
【００８５】
以下、図２０の動作フローチャートに沿って説明する。Ｓ３１では、文法仕様５０３として与えられる文法記述が、文法記述読込手段５０１１に供給される。この文法記述は、例えば、図２３、図２４に示すようになっている。図２３は、図２１で示した文法に基づく文法記述例である。図２４は、図２３の文法で記述した入力例である。
【００８６】
文法記述読込手段５０１１は、この文法記述をデータ処理装置５０１内で扱える内部表現（図２５）へ変換し、文法情報記憶部５０２１へ格納する。なお、この時点での内部表現は、図２５に含まれる情報のうち、型名と、各ノードの情報内の選択か非選択かのラベルと、型の情報とは含んでいない。これらの要素は、以降の手順で導き出される。この内部表現に関しては、データ処理装置で扱える形であればどのようなものでも構わない。
Ｓ３２では、非終端記号型名決定手段５０１２が、文法情報記憶部５０２１に格納されている文法の内部表現（図２５）の各ルールから非終端記号名を取り出し、その非終端記号名に文字列"Type"を付けてそのルールの型名とし、文法情報記憶部５０２１に格納する。この時点で、図２５における型名の情報が付加されたことになる。ここで、各非終端記号の型の名前は、非終端記号ごとに一意であればどんなものでもかまわない。一例として、非終端記号の名前そのものでもよい。
【００８７】
Ｓ３３では、要素選択手段５０１３が、文法情報記憶部５０２１に格納されている内部表現（図２５）からノードに関する情報を取り出し、構文木に組み入れる必要のある（即ち構文解析後に保持する必要のある）ノードを選択し、どのノードが選択されたかというノードの情報を文法情報記憶部５０２１へ格納する。
【００８８】
ここで、構文木に組み入れる必要のあるノードとは、そのノードの表す内容が可変であるノードである。内容が可変であるノードとは、例えば非終端記号や文字列トークンなどである。現在扱っている図２３の例では、Arg(非終端記号)やINTEGER(整数を表すトークン)などがそれにあたる。
【００８９】
内容が可変でないノードとは、内容が変化しないトークンであり、例えばキーワードやカッコその他、文法上の区切りのために存在するようなトークンのノードなどである。現在扱っている図２４の例では、"+"や"｛"、などがそれにあたる。
【００９０】
そして、文法情報記憶部５０２１に格納されている内部表現のうち、必要と判定されたノードには選択というラベルを付け、不必要とされたノードには非選択というラベルを付ける。この時点で、 図２５における選択、非選択情報が付加されたことになる。ただし、ここでいう「必要なノード」の基準は、変更しても本手法の適用は可能である。例えば、すべてのノードを必要とすることにしてもよい。
【００９１】
Ｓ３４では、各ノード型決定手段５０１４が、文法情報記憶部５０２１から各非終端記号の型名及び選択されたノードの情報を取り出し、それらの情報から選択された各ノードの型を決定し、その情報を文法情報記憶部５０２１に格納する。
この決定は、各ノードの種類に基づき行われる。図２２において、対象となるノードが１のトークンの場合は、そのトークン自身の型とする。一例として、整数を表すトークンなら整数型、文字列を表すトークンなら文字列型、などである。２の非終端記号の場合は、Ｓ３２で付けた非終端記号の名前を持つ型として定義する。
【００９２】
型の実体はこの時点では定義されていないが、後の手順で定義されるので、名前で対応がとれればよい。３、４，５，６、７の場合は、内包するノードの型のリスト型とする。これに従い選択されたノードすべての型を決定する。
【００９３】
例えば、図２５において、ルール３のブランチ１のノード１のトークンINTEGERは、整数を表すので、int型となる。 非終端記号の場合は、その非終端記号を定義しているルールの型名を持つ型となる。例えばルール１のブランチ１，２のノード２は、非終端記号Argであり、Argを定義しているルール2を参照すると型名は、ArgTypeとなっている。
【００９４】
したがって、型は、ArgTypeとなる。同じ非終端記号でも、'['']'、で囲まれているノードの場合は、その非終端記号を定義しているルールの型名の型をリスト型にしたものとなる。
【００９５】
例えば、ルール２のブランチ１のノード２は、[ AtExpr; "," ]+、となっているので、型は、AtExpType listとなる。
【００９６】
以下同様に選択されているノードの型を付けていき、その情報を文法情報記憶部５０２１の内部表現（図２５）に格納する。この時点で、図２５における各ノードに付いている型の情報が付加されたことになる。
【００９７】
Ｓ３５では、非終端記号データ型生成手段５０１５が、文法情報記憶部５０２１から、文法の内部表現（図２５）のルールに付随する値構成子の情報を取り出し、さらに各非終端記号の型名及び各ノードの型の情報を取り出し、それらの情報に基づいてそのルールで定義されている非終端記号のデータ型を生成する。
【００９８】
このデータ型は、データ型名を非終端記号型名決定手段５０１２が付けた名前とし、取り出した値構成子を持つ型となる。各値構成子に付随する型は、Ｓ３４で各ノード型決定手段５０１４が決定したノードの型を組にしたものとなる。
換言すれば、生成されるデータ型においては、型名がデータ型の名前となり、各ブランチの値構成子名がそのデータ型の持つ値構成子となり、各ブランチ中の選択されているノードの型がその値構成子に付随する型となる。
【００９９】
このように生成した非終端記号のデータ型が抽象構文木のデータ型となる。生成したデータ型を抽象構文木データ型記憶部５０２２に格納する。現在扱っている例の場合、生成されるデータ型は図２６のようになる。
【０１００】
Ｓ３６では、抽象構文木構築動作生成手段５０１６が、文法情報記憶部５０２１から文法の内部表現及び選択されたノードの情報を、抽象構文木データ型記憶部５０２２から抽象構文木のデータ型をそれぞれ取り出し、抽象構文木を構築する動作を生成する。
【０１０１】
本手法で定義する非終端記号のデータ型は、各ノードの型を反映したものであるため、生成する抽象構文木構築の動作は、各ノードの内容を組にし、値構成子に適用する動作であり、対応する内容をその部分に埋め込むものとなる。
【０１０２】
例えば、ノードの型がlist型である場合は、その部分に相当する要素をリスト化したものをノードの値とする。現在扱っている例では、ここで定義する動作が生成すべきブランチの値は、図２７に示すようなものとなる。ただし、図２７中の各ブランチにおいて、各ノード(番号)の内容を$(番号)としている。
【０１０３】
Ｓ３７では、構文解析器生成手段５０１７が、文法情報記憶部５０２１から文法の情報を、抽象構文木データ型記憶部５０２２から抽象構文木のデータ型を、それぞれ取り出し、抽象構文木構築動作生成手段５０１６から抽象構文木を構築する動作を受け取り、それらの情報から構文解析器５０５を生成する。
【０１０４】
なお、文法、抽象構文木のデータ型、抽象構文木を構築する動作の３つをもとに構文解析器を生成する手法については、従来の手法と同様である。
Ｓ３８では、構文解析器生成手段５０１７が生成した構文解析器５０５を出力する。
また、Ｓ３９では、抽象構文木データ型出力手段５０１８が、抽象構文木データ型記憶部５０２２から抽象構文木のデータ構造を取り出し、抽象構文木データ型５０４として出力する。
【０１０５】
その結果、図１におけるジェネレータ入力仕様３０の構文解析において、構文解析器５０５（１０１ｄ）の解析結果と抽象構文木データ型５０４（１０１ｅ）とから内部表現である入力仕様抽象構文木１０１ｆが自動的に生成される。
【０１０６】
なお、本実施形態で生成される抽象構文木データ型５０４は、多相型を持つ厳密な型システムを持つデータ型を実現している代表的な言語であるＭＬを対象とするものである。ＭＬに関する文献は、先に紹介した。
【産業上の利用可能性】
【０１０７】
本発明によれば、プログラムを開発する際に、そのプログラムの動作仕様から自動的に生成するアプリケーションジェネレータの開発を支援支援するために用いることができる。
【図面の簡単な説明】
【０１０８】
【図１】本発明の実施形態に係るアプリケーションジェネレータ開発支援装置の構成ブロック図である。
【図２】構文解析手段の一部と変換規則処理手段との動作フローチャートである。
【図３】構文解析手段の一部と変換規則実行手段との動作フローチャートである。
【図４】ジェネレータ動作仕様の記述文法を記述した図である。
【図５】字句解析仕様の記述文法を記述した図である。
【図６】字句解析仕様の記述文法の具体的な記述の図である。
【図７】文法仕様の記述文法を記述した図である。
【図８】文法仕様の記述文法の具体的な記述の図である。
【図９】ジェネレータ変換規則の記述文法を記述した図である。
【図１０】ジェネレータ変換規則の記述文法の具体的な記述を示す図である
【図１１】出力プログラム断片記述の記述文法を記述した図である。
【図１２】出力プログラム断片記述の記述文法のうちのパターンを記述した図である。
【図１３】出力プログラム断片記述の記述文法及びテキスト整形記述の具体的な記述示す図である。
【図１４】テキスト整形記述の例を示した図である。
【図１５】テキスト整形規則記憶部に記憶されるテキスト整形規則の例を示した図である。
【図１６】テキスト整形記述を用いて記述した出力プログラム断片記述の具体的な記述の図である。
【図１７】図１６の記述から生成された出力プログラムの図である。
【図１８】変換規則生成手段が生成する変換規則（抽出した出力プログラム断片記述から生成した、その出力プログラム断片記述をジェネレータ出力プログラムとして出力できるようにする変換規則）の定義である。
【図１９】実施形態の構文解析器生成装置の構成ブロック図である。
【図２０】構文解析器生成装置の動作フローチャートである。
【図２１】文法規則の記述方法を具体例で示した図である。
【図２２】文法規則中に記述することのできる構文木の種類を示した図である。
【図２３】文法記述の例を示す図である。
【図２４】図２４の文法で記述された入力の例を示す図である。
【図２５】図２５の入力を内部表現で表した例を示す図である。
【図２６】図２６の内部表現から生成されたデータ型を示す図である。
【図２７】図２６の内部表現に動作を付加した図である。
【図２８】従来のアプリケーションジェネレータ開発支援装置の構成ブロック図である。
【符号の説明】
【０１０９】
１０  アプリケーションジェネレータ開発支援装置
２０  ジェネレータ動作仕様
３０  ジェネレータ入力仕様
４０  ジェネレータ出力プログラム
１０１  構文解析手段
１０１ａ  字句解析器生成手段
１０１ｂ  字句解析器
１０１ｃ  構文解析器及び抽象器データ型生成手段
１０１ｄ、５０４  抽象構文木データ型
１０１ｅ、５０５  構文解析器
１０１ｆ  入力仕様抽象構文木
１０２  変換規則処理手段
１０２ａ  ジェネレータ動作仕様読込手段
１０２ｂ  出力プログラム断片処理手段
１０２ｃ  テキスト整形記述解釈手段
１０２ｄ  テキスト整形規則記憶部
１０２ｅ  出力プログラム断片記述記憶部
１０２ｆ  変換規則生成手段
１０２ｇ  変換規則記憶部
１０３  変換規則実行手段
１０３ａ  変換規則コンパイル手段
１０３ｂ  実行コード記憶部
１０３ｃ  変換実行手段
２０１  構文規則定義
２０１ａ  字句解析仕様
２０１ｂ、５０３  文法仕様
２０２  変換規則定義
２０２ａ  ジェネレータ変換規則
２０２ｂ  出力プログラム断片記述
２０２ｃ  テキスト整形記述
５０１  データ処理装置
５０２  記憶装置
５０１１  文法記述読込手段
５０１２  非終端記号名決定手段
５０１３  要素選択手段
５０１４  各ノード型決定手段
５０１５  非終端記号データ型生成手段
５０１６  抽象構文木構築動作生成手段
５０１７  構文解析器生成手段
５０１８  抽象構文木データ型出力手段
５０２１  文法情報記憶部
【図１】
2004246924.tif 000003
【図２】
2004246924.tif 000004
【図３】
2004246924.tif 000005
【図４】
2004246924.tif 000006
【図５】
2004246924.tif 000007
【図６】
2004246924.tif 000008
【図７】
2004246924.tif 000009
【図８】
2004246924.tif 000010
【図９】
2004246924.tif 000011
【図１０】
2004246924.tif 000012
【図１１】
2004246924.tif 000013
【図１２】
2004246924.tif 000014
【図１３】
2004246924.tif 000015
【図１４】
2004246924.tif 000016
【図１５】
2004246924.tif 000017
【図１６】
2004246924.tif 000018
【図１７】
2004246924.tif 000019
【図１８】
2004246924.tif 000020
【図１９】
2004246924.tif 000021
【図２０】
2004246924.tif 000022
【図２１】
2004246924.tif 000023
【図２２】
2004246924.tif 000024
【図２３】
2004246924.tif 000025
【図２４】
2004246924.tif 000026
【図２５】
2004246924.tif 000027
【図２６】
2004246924.tif 000028
【図２７】
2004246924.tif 000029
【図２８】
2004246924.tif 000030