JP2004246924A - アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 - Google Patents
アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 Download PDFInfo
- Publication number
- JP2004246924A JP2004246924A JP2004129526A JP2004129526A JP2004246924A JP 2004246924 A JP2004246924 A JP 2004246924A JP 2004129526 A JP2004129526 A JP 2004129526A JP 2004129526 A JP2004129526 A JP 2004129526A JP 2004246924 A JP2004246924 A JP 2004246924A
- Authority
- JP
- Japan
- Prior art keywords
- generator
- description
- syntax tree
- conversion rule
- output program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
【課題】 アプリケーションジェネレータ開発支援装置及び支援方法に係り、出力するプログラムの断片を、ジェネレータの変換規則中に変換規則の記述を容易すると同時に、構文解析器の作成を容易し、アプリケーションジェネレータの開発の効率化を図る。
【解決手段】 ジェネレータの動作仕様である字句解析仕様及び文法仕様から字句解析器と構文解析器及び抽象構文木のデータ構造とを生成し、ジェネレータ出力プログラムの動作仕様を規定する入力仕様の構文解析結果を抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成する手段(101)と、ジェネレータの動作仕様である変換規則定義中の出力プログラム断片記述を変換規則に変換する手段(102)と、前記入力仕様抽象構文木を前記変換規則処理手段からの変換規則に基づき実行し、実行結果をジェネレータ出力プログラムとして出力する手段(103)とを備える。
【選択図】 図1
【解決手段】 ジェネレータの動作仕様である字句解析仕様及び文法仕様から字句解析器と構文解析器及び抽象構文木のデータ構造とを生成し、ジェネレータ出力プログラムの動作仕様を規定する入力仕様の構文解析結果を抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成する手段(101)と、ジェネレータの動作仕様である変換規則定義中の出力プログラム断片記述を変換規則に変換する手段(102)と、前記入力仕様抽象構文木を前記変換規則処理手段からの変換規則に基づき実行し、実行結果をジェネレータ出力プログラムとして出力する手段(103)とを備える。
【選択図】 図1
Description
本発明は、プログラム開発支援装置及びプログラム開発支援方法に係り、特にプログラムを、そのプログラムの動作仕様から自動的に生成するアプリケーションジェネレータの開発を支援するために用いる、アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法に関する。
コンピュータ上で動作するプログラムの開発支援では、プログラムの動作仕様の記述から、その動作仕様をみたすプログラムを自動的に生成するアプリケーションジェネレータを用いる方法が広く採用されている。
アプリケーションジェネレータには、広義にはコンパイラも広く含まれる。通常コンパイラは、C/C++言語といった、分野を特定しない汎用の高級言語からコンピュータハードウェア上で直接実行可能なアセンブラ言語を生成する。このコンパイラの入力となる高級言語には、特定のオペレーティングシステムやハードウェアに依存しない言語としてC/C++言語が広く用いられている。
アプリケーションジェネレータには、広義にはコンパイラも広く含まれる。通常コンパイラは、C/C++言語といった、分野を特定しない汎用の高級言語からコンピュータハードウェア上で直接実行可能なアセンブラ言語を生成する。このコンパイラの入力となる高級言語には、特定のオペレーティングシステムやハードウェアに依存しない言語としてC/C++言語が広く用いられている。
現在、このような高級言語が広く用いられるようになったため、特定の分野でのアプリケーションプログラムをさらに効率良く開発するための手段としてアプリケーションジェネレータが広く用いられるようになった。アプリケーションジェネレータは、ジェネレータの生成するプログラムが用いられる特定の分野に適切なプログラムの動作仕様記述を入力として、その動作仕様を満たす高級言語で記述されたプログラムを自動的に生成できる。
アプリケーションジェネレータでは、特定の分野に限定したプログラムの動作仕様の記述を行えば良いので、汎用の高級言語に比較して簡便な方法で動作仕様の記述を行うことができる利点がある。
このアプリケーションジェネレータの代表的なものに、例えばyaccがある。 yaccは、構文解析という分野を対象にしたアプリケーションジェネレータである。yaccでは、プログラムの動作仕様として、入力となる構文の文法と抽象構文木を生成するための動作とを記述することにより自動的に構文解析器を生成することができる。yaccの動作に関しては、エイホ/セシィ/ウルマン著、" コンパイラI/II 原理・技法・ツール" サイエンス社に詳しい。
yaccは、構文解析器という特定の分野に限定されたアプリケーションジェネレータであるが、さまざまな分野のプログラムを対象にアプリケーションジェネレータを効率良く構築するためには、アプリケーションジェネレータの開発を支援するシステムないしは支援方法が必要となる。
近年、ドメイン指向言語(Domain Specific Language)に基づくアプリケーション開発手法が用いられている(文献「エンサイクロペディア電子情報通信ハンドブック(オーム社,平成10年11月30日発行)」の1083頁参照)。
このドメイン指向言語では、分野を特定しない汎用のアプリケーションジェネレータを開発するために、アプリケーションジェネレータ構築を支援する環境をアプリケーションジェネレータ開発者に提供する。
このドメイン指向言語では、分野を特定しない汎用のアプリケーションジェネレータを開発するために、アプリケーションジェネレータ構築を支援する環境をアプリケーションジェネレータ開発者に提供する。
したがって、アプリケーションジェネレータ開発者は、ドメイン指向言語を用いてアプリケーションジェネレータを開発することにより、さまざまな分野のアプリケーションジェネレータを効率良く構築することができる。
ここでは、ドメイン指向言語を用いたアプリケーションジェネレータ構築支援システムの例として、文献「Rickard E.Faith著"KHEPERA" (USENIX The Con-frence on Domain-Specific Languages Proceedings 243頁)」に記載の技術を説明する。なお、以下の説明では、ドメイン指向言語を用いた開発支援装置をDSL開発支援装置と称している。
図28は、ドメイン指向言語を用いたアプリケーションジェネレータの構成ブロック図である。図28において、字句解析仕様601と構文解析仕様602は、特定分野固有の仕様記述表現を決定することにより定められる。字句解析仕様601を字句解析器生成装置603に与えて字句解析器プログラム605を生成する。また、構文解析仕様602を構文解析器生成装置604に与えて構文解析器プログラム606を生成する。なお、字句解析器生成装置603には、lex(lexical analyzer generator)が広く用いられ、また構文解析器生成装置604には、yacc(yet another control chart)が広く用いられている。
図28は、ドメイン指向言語を用いたアプリケーションジェネレータの構成ブロック図である。図28において、字句解析仕様601と構文解析仕様602は、特定分野固有の仕様記述表現を決定することにより定められる。字句解析仕様601を字句解析器生成装置603に与えて字句解析器プログラム605を生成する。また、構文解析仕様602を構文解析器生成装置604に与えて構文解析器プログラム606を生成する。なお、字句解析器生成装置603には、lex(lexical analyzer generator)が広く用いられ、また構文解析器生成装置604には、yacc(yet another control chart)が広く用いられている。
これらの字句解析器生成装置603、構文解析器生成装置604から生成される字句解析器プログラム605、構文解析器プログ ラム606は、字句仕様、構文仕様から生成される抽象構文の仕様を字句仕様中、構文仕様中に記述し、字句解析、構文解析を行った際の動作として、この抽象構文を出力する動作を記述する。
これらの動作の記述や抽象構文木の表現方法に、関数型言語等で多く見られる厳密な型定義を可能とする型構成子を用いたデータ型を積極的に利用すれば記述力や保守性を向上させ得ることが広く知られている。
これらの動作の記述や抽象構文木の表現方法に、関数型言語等で多く見られる厳密な型定義を可能とする型構成子を用いたデータ型を積極的に利用すれば記述力や保守性を向上させ得ることが広く知られている。
抽象構文木定義607は、前述の字句解析器プログラム605、構文解析器プログラム606によって入力仕様の構文解析が行われ、その出力として得られる入力仕様の抽象構文木の定義である。
図28の例では、DSL開発支援装置610が、この抽象構文木定義607に変換規則609を繰り返し適用する変換実行装置プログラム611を出力する。変換規則609は、抽象構文木に対してパターンマッチを行い、 適合した抽象構文木を変換規則609に記述された規則に沿って異なる抽象構文木への書き替えを行い、最終的に出力プログラムとなる抽象構文木への変換を行うプログラムである。
DSL開発支援装置610は、テキスト整形規則608からテキスト整形装置プログラム612を生成する。テキスト整形装置プログラム612は、与えられた抽象構文を各抽象構文に対応したテキスト整形規則に基づき整形を行う。即ち、出力プログラムの抽象構文木は、テキスト整形装置プログラム612によって出力プログラムに整形され出力される。
DSL開発支援装置610は、テキスト整形規則608からテキスト整形装置プログラム612を生成する。テキスト整形装置プログラム612は、与えられた抽象構文を各抽象構文に対応したテキスト整形規則に基づき整形を行う。即ち、出力プログラムの抽象構文木は、テキスト整形装置プログラム612によって出力プログラムに整形され出力される。
テキスト整形の手法には、文献「Blashek著"User-adaptable Prettyprinting"SOFTWARE PRACTICE AND EXEPERIENCE,VOL19(7),687-702頁」に記載の技術が公知である。
また、DSL開発支援装置610は、ライブラリプログラム613を出力する。このライブラリプログラム613は、アプリケーションジェネレータ615の実行に必要なプログラムである。コンパイラ614は、このライブラリプログラム613と、字句解析器プログラム605と、構文解析器プログラム606と、変換実行装置プログラム611と、テキスト整形装置プログラム612とをコンパイルすることにより、実行可能なアプリケーションジェネレータ615を作成する。
また、DSL開発支援装置610は、ライブラリプログラム613を出力する。このライブラリプログラム613は、アプリケーションジェネレータ615の実行に必要なプログラムである。コンパイラ614は、このライブラリプログラム613と、字句解析器プログラム605と、構文解析器プログラム606と、変換実行装置プログラム611と、テキスト整形装置プログラム612とをコンパイルすることにより、実行可能なアプリケーションジェネレータ615を作成する。
電子情報通信学会編「エンサイクロペディア電子情報通信ハンドブック」オーム社、平成10年11月30日、1083頁
ブラシェク(Blashek)著、「ユーザ・アダプタブル プリティ プリンティング(User-adaptable Prettyprinting)」、ソフトウエア プラクティス アンド エクスペリエンス(SOFTWARE PRACTICE AND EXEPERIENCE),19巻第7号(VOL19(7)),1989年、687-702頁
リカード イー・フェイス(Rickard E.Faith)著「ケペラ(KHEPERA)」 (ユウスニクス ザ コンファレンスオン ドメイン スペシフィック ラングエージズ プロシーディングス(USENIX The Con-frence on Domain-Specific Languages Proceedings)、1997年、 243頁
上述した従来の構成には、次のような課題がある。第1の課題として、変換規則中に現れる出力プログラムの断片が抽象構文木で表現されるため、変換規則を抽象構文上で記述すると、ジェネレータの生成する出力プログラムを変換規則中に直接記述することができない。そのため、ジェネレータの出力するプログラムの構造が理解しづらくなり、ジェネレータの開発効率並びに保守性が悪化する点が挙げられる。
第2の課題として、変換規則中に現れる出力プログラムの断片にテキスト整形規則を埋め込むことができないため、出力プログラムの抽象構文木を作成する際に、出力の対象とするプログラム言語の構文を詳細に検討し、各構文要素の定義を厳密におこない、それに対応したテキスト整形規則を定義しなければならない。そのため、ジェネレータの開発作業が煩雑になる点が挙げられる。
第3の課題として、構文解析した結果を内部表現へ変換する手順を開発者が記述しなくてはならない点が挙げられる。その理由は、従来の手法では、内部表現への変換手順を自動生成する手段が無く、また厳密な型定義を可能とする型構成子を用いた表現方法に基づいていないためである。
第4の課題として、抽象構文木の表現形式を開発者が記述しなくてはならない点が挙げられる。その理由は、従来の手法では、内部表現の形式を自動生成する手段が無く、また厳密な型定義を可能とする型構成子を用いた表現方法に基づいていないためである。
本発明の目的は、第1、第2の課題を解決するため、変換規則中に直接出力される出力プログラムの断片を記述可能な手段、並びに、出力時のテキスト整形規則を埋め込む手段を備えるアプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法を提供することにある。
本発明の目的は、第1、第2の課題を解決するため、変換規則中に直接出力される出力プログラムの断片を記述可能な手段、並びに、出力時のテキスト整形規則を埋め込む手段を備えるアプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法を提供することにある。
また本発明の他の目的は、第3、第4の課題を解決するため、構文解析器の仕様から自動的に抽象構文木を表現するための内部表現を表すデータ構造定義を生成し、文法仕様から抽象構文木を自動生成する手段を備えるアプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法を提供することにある。
請求項1に記載の発明に係るアプリケーションジェネレータ開発支援装置は、抽象構文木の部分木のパターンマッチングにより当該構文木を別の構文木へ書き換える変換規則を用いて、ジェネレータ入力仕様に従ってジェネレータ出力プログラムを生成するアプリケーションジェネレータ開発支援装置において、字句解析仕様および文法仕様と、前記ジェネレータ出力プログラムのテキストを直接記述可能にする出力プログラム断片記述、前記出力プログラムの改行及び字下げを含む制御を行うテキスト整形記述および第1変換規則の組合せからなる変換規則定義と、を含むジェネレータ動作仕様を読み込むジェネレータ動作仕様読込手段と、前記字句解析仕様から字句解析器を生成し、前記文法仕様から構文解析器及び抽象構文木のデータ構造を生成し、前記字句解析器および構文解析器を用いて前記ジェネレータ入力仕様を解析し、その構文解析結果を前記抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成する構文解析手段と、前記出力プログラム断片記述および前記テキスト整形記述に基づいて第2変換規則を生成する変換規則生成手段と、前記第1変換規則と前記第2変換規則とを前記変換規則として記憶する変換規則記憶手段と、前記変換規則に基づいて、前記入力仕様抽象構文木のうち前記変換規則で書き換え可能な部分の書き換えを実行し、実行結果をジェネレータ出力プログラムとして出力する変換規則実行手段と、を備えることを特徴とする。
請求項1に記載の発明によれば、構文解析手段がジェネレータ動作仕様に基づき字句解析器、構文解析器及び抽象構文木データ型を生成し、変換規則処理手段がジェネレータ入力仕様に基づき出力プログラム断片記述から、その出力プログラム断片記述をジェネレータ出力プログラムとして出力する変換規則を生成し、変換規則実行手段がジェネレータ入力仕様を構文解析した前記入力仕様抽象構文木を変換規則に基づき実行し、ジェネレータ出力プログラムを出力する。
したがって、ある分野に適切なプログラムの動作仕様を入力すると、その動作仕様を満たすプログラムを自動的に生成できる。このとき、構文解析手段に構文解析器を効率良く作成させることができ、変換規則処理手段に変換規則の開発効率並びに保守性の向上を可能にする措置を採らせることができる。
請求項2に記載の発明に係るアプリケーションジェネレータ開発支援装置は、請求項1に記載のアプリケーションジェネレータ開発支援装置において、前記変換規則定義が、ジェネレータ変換規則と前記プログラム断片記述とテキスト整形記述との組み合わせからなり、前記変換規則処理手段が、前記変換規則定義中の出力プログラム断片記述を抽出する手段と、前記テキスト整形記述に対応するテキスト整形規則が格納される記憶手段と、前記抽出した出力プログラム断片記述にテキスト整形記述が含まれているとき、前記記憶手段から取り出したテキスト整形規則による解釈結果を前記抽出した出力プログラム断片記述に記述する手段と、前記解釈結果が記述された出力プログラム断片記述と等価な出力プログラムを出力する変換規則を生成する手段とを備えることを特徴とする。
変換規則定義から抽出した出力プログラム断片記述を、その出力プログラム断片記述をジェネレータ出力プログラムとして出力させるための変換規則へ変換し、テキスト整形記述が記述されているとき、テキスト整形記述を解釈し、その出力プログラム断片記述並びにテキスト整形規則を解釈した結果から、その出力プログラム断片記述をジェネレータ出力プログラムとして出力させるための変換規則へ変換する。
したがって、変換規則定義中のプログラムの断片記述を出力結果であるジェネレータ出力プログラムと同様に記述することができるので、変換規則の開発効率並びに保守性を向上させることができる。
したがって、変換規則定義中のプログラムの断片記述を出力結果であるジェネレータ出力プログラムと同様に記述することができるので、変換規則の開発効率並びに保守性を向上させることができる。
請求項2に記載の発明に係るアプリケーションジェネレータ開発支援装置は、請求項1に記載のアプリケーションジェネレータ開発支援装置において、前記構文解析手段は、前記文法仕様から非終端記号の情報を取り出して各非終端記号の型名を決定する手段と、前記文法仕様からノードの情報を取り出し、構文木に組み入れる必要のあるノードを選択する手段と、前記記憶部から決定された非終端記号の型名及び前記選択されたノードの情報を取り出し、それらに基づき各ノードの型を決定する手段と、前記文法仕様のルールに付随する値構成子と前記決定された非終端記号の型名及び前記決定したノードの型とに基づき非終端記号のデータ型を生成する手段と、前記文法仕様と前記生成した非終端記号のデータ型と前記選択されたノード情報とに基づき抽象構文木を構築する動作を生成する手段と、前記文法仕様と前記生成した非終端記号のデータ型と前記生成した抽象構文木を構築する動作とに基づき構文解析器を生成する手段と、前記生成した非終端記号のデータ型に基づき抽象構文木データ型を出力する手段とを備えることを特徴とする。
請求項2に記載の発明によれば、記憶部に、非終端記号の型名、構文木に組み入れる必要のあるノード、そのノードの型を順々に記憶し、文法仕様と記憶内容から、非終端記号のデータ型、抽象構文木を構築する動作、構文解析器、抽象構文木データ型を順々に生成する。
したがって、文法仕様を入力するだけで、その文法に沿った入力仕様の抽象構文木を表現するためのデータ構造と、データ構造を出力する構文解析木を自動的に出力することができ、抽象構文木を表現するための内部表現を表すデータ構造定義を自動生成することできる。
請求項3に記載の発明に係るアプリケーションジェネレータ開発支援方法は、抽象構文木の部分木のパターンマッチングにより当該構文木を別の構文木へ書き換える変換規則を用いて、ジェネレータ入力仕様に従ってジェネレータ出力プログラムを生成するアプリケーションジェネレータ開発支援方法において、字句解析仕様および文法仕様と、前記ジェネレータ出力プログラムのテキストを直接記述可能にする出力プログラム断片記述、前記出力プログラムの改行及び字下げを含む制御を行うテキスト整形記述および第1変換規則の組合せからなる変換規則定義と、を含むジェネレータ動作仕様を読み込み、前記字句解析仕様から字句解析器を生成し、前記文法仕様から構文解析器及び抽象構文木のデータ構造をそれぞれ生成し、前記字句解析器および構文解析器を用いて前記ジェネレータ入力仕様を解析し、前記構文解析結果を前記抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成し、前記出力プログラム断片記述および前記テキスト整形記述に基づいて第2変換規則を生成し、前記第1変換規則と前記第2変換規則とを前記変換規則として記憶する変換規則記憶手段と、前記変換規則に基づいて、前記入力仕様抽象構文木のうち前記変換規則で書き換え可能な部分の書き換えを実行することでジェネレータ出力プログラムを生成する、ことを特徴とする。
請求項5に記載の発明に係るアプリケーションジェネレータ開発支援方法は、請求項1に記載のアプリケーションジェネレータ開発支援方法において、前記変換規則定義が、ジェネレータ変換規則と前記プログラム断片記述とテキスト整形記述との組み合わせからなり、前記変換規則に変換する工程が、前記変換規則定義中の出力プログラム断片記述を抽出する手順と、前記抽出した出力プログラム断片記述にテキスト整形記述が含まれているとき、記憶手段から取り出したテキスト整形規則による解釈結果を前記抽出した出力プログラム断片記述に記述する手順と、前記解釈結果が記述された出力プログラム断片記述と等価な出力プログラムを出力する変換規則へ変換する手順とを備えることを特徴とする。
請求項4に記載の発明に係るアプリケーションジェネレータ開発支援方法は、請求項3に記載のアプリケーションジェネレータ開発支援方法において、前記構文解析器および前記抽象構文木のデータ構造を生成するステップは、前記文法仕様から非終端記号の情報を取り出して各非終端記号の型名を決定し、前記文法仕様からノードの情報を取り出し、構文木に組み入れる必要のあるノードを選択し、前記非終端記号の型名及び前記選択されたノードの情報を取り出し、それらに基づき各ノードの型を決定し、前記文法仕様のルールに付随する値構成子と前記決定された非終端記号の型名及び前記決定したノードの型とに基づき非終端記号のデータ型を生成し、前記文法仕様と前記生成した非終端記号のデータ型と前記選択されたノード情報とに基づき抽象構文木を構築する動作を生成し、前記文法仕様と前記生成した非終端記号のデータ型と前記生成した抽象構文木を構築する動作とに基づき構文解析器を生成し、前記生成した非終端記号のデータ型に基づき抽象構文木データ型を出力する、ことを特徴とする。
請求項4に記載の発明に係るアプリケーションジェネレータ開発支援方法は、請求項3に記載のアプリケーションジェネレータ開発支援方法において、前記構文解析器および前記抽象構文木のデータ構造を生成するステップは、前記文法仕様から非終端記号の情報を取り出して各非終端記号の型名を決定し、前記文法仕様からノードの情報を取り出し、構文木に組み入れる必要のあるノードを選択し、前記非終端記号の型名及び前記選択されたノードの情報を取り出し、それらに基づき各ノードの型を決定し、前記文法仕様のルールに付随する値構成子と前記決定された非終端記号の型名及び前記決定したノードの型とに基づき非終端記号のデータ型を生成し、前記文法仕様と前記生成した非終端記号のデータ型と前記選択されたノード情報とに基づき抽象構文木を構築する動作を生成し、前記文法仕様と前記生成した非終端記号のデータ型と前記生成した抽象構文木を構築する動作とに基づき構文解析器を生成し、前記生成した非終端記号のデータ型に基づき抽象構文木データ型を出力する、ことを特徴とする。
以上詳述したように、本発明によれば、ジェネレータ動作仕様である変換規則定義中に記述するプログラム断片を、ジェネレータが出力する出力プログラムの断片と同様に記述でき、またジェネレータ動作仕様である文法仕様から自動的に構文解析器並びにジェネレータ入力仕様を表す抽象構文木データ型定義を生成できるので、アプリケーションジェネレータの開発を効率よく行うことが可能となる。
以下、本発明の実施形態について図面を参照して詳細に説明する。
図1は、本発明の実施形態に係るアプリケーションジェネレータ開発支援装置の構成ブロック図である。図1において、このアプリケーションジェネレータ開発支援装置10は、当該アプリケーションジェネレータ開発支援装置10の動作仕様を与えるジェネレータ動作仕様20と、当該アプリケーションジェネレータ開発支援装置10が出力するプログラムの動作仕様を与えるジェネレータ入力仕様30とに基づきジェネレータ出力プログラム40を生成出力するように構成される。
アプリケーションジェネレータ開発支援装置10は、構文解析手段101、変換規則処理手段102、変換規則実行手段103の3つの手段を備える。
構文解析手段101は、字句解析器生成手段101aと、字句解析器生成手段101aが生成する字句解析器101bと、構文解析器及び抽象構文木データ型生成手段101cと、構文解析器及び抽象構文木データ型生成手段101cが生成する構文解析器101d及び抽象構文データ型101eと、入力仕様抽象構文木101fとで構成される。
変換規則処理手段102は、ジェネレータ動作仕様読込手段102aと、出力プログラム断片記述処理手段102bと、テキスト整形記述解釈手段102cと、テキスト整形規則記憶部102dと、出力プログラム断片記述記憶部102eと、変換規則生成手段102fと、変換規則記憶部102gとで構成される。
また、変換規則実行手段103は、変換規則コンパイル手段103aと、実行コード記憶部103bと、変換実行手段103cとで構成される。
そして、ジェネレータ動作仕様20は、構文規則定義201と、変換規則定義202とで構成される。
そして、ジェネレータ動作仕様20は、構文規則定義201と、変換規則定義202とで構成される。
構文規則定義201は、アプリケーションジェネレータ開発支援装置10に入力される仕様記述の字句定義に関わる、字句解析仕様201aと文法仕様201bとで構成される。
変換規則定義202は、アプリケーションジェネレータ開発支援装置10の動作仕様記述に関わる、ジェネレータ変換規則202aと、出力プログラム断片記述202bと、テキスト整形記述202cとで構成される。
変換規則定義202は、アプリケーションジェネレータ開発支援装置10の動作仕様記述に関わる、ジェネレータ変換規則202aと、出力プログラム断片記述202bと、テキスト整形記述202cとで構成される。
ここで、アプリケーションジェネレータ開発支援装置10の各処理手段は、コンピュータ(CPU)で実現され、記憶部は、半導体メモリや磁気ディスク装置等の記憶装置で構成される。そして、ジェネレータ動作仕様20やジェネレータ入力仕様30は、記憶装置に格納される。
以下、本実施形態のアプリケーションジェネレータ開発支援装置の動作について図1〜図18を参照して詳細に説明する。なお、図2は、構文解析手段101の一部と変換規則処理手段102との動作フローチャートである。図3は、構文解析手段101の一部と変換規則実行手段103との動作フローチャートである。
図4は、ジェネレータ動作仕様20の記述文法を記述した図である。図5は、字句解析仕様201aの記述文法を記述した図である。図6は、字句解析仕様201aの記述文法の具体的な記述の図である。図7は、文法仕様201bの文法記述を記述した図である。図8は、文法仕様201bの記述文法の具体的な記述の図である。
図9は、ジェネレータ変換規則202aの記述文法を記述した図である。図10は、ジェネレータ変換規則202aの記述文法の具体的な記述を示す図である。図11は、出力プログラム断片記述202bの記述文法を記述した図である。図12は、出力プログラム断片記述202bの記述文法のうちのパターンを記述した図である。
図13は、出力プログラム断片記述202bの記述文法及びテキスト整形記述202cの具体的な記述を示す図である。図14は、テキスト整形記述202cの例を示した図である。図15は、テキスト整形規則記憶部102dに記憶されるテキスト整形規則の例を示した図である。
図16は、出力プログラム断片記述202bの具体的な記述を示す図である。図17は、図16の記述から生成された出力プログラムを示す図である。図18は、変換規則生成手段102fが生成する変換規則(抽出した出力プログラム断片記述と等価な出力プログラムを出力する変換規則)の定義である。
まず、図2の動作フローチャートに沿って構文解析手段101の一部と変換規則処理手段102との動作を説明する。図2において、S2〜S5は構文解析手段101の動作、S6〜S14は変換規則処理手段102の動作である。
S1では、ジェネレータ動作仕様読込手段102aが、ジェネレータ動作仕様20を記憶装置から読み込み、その記述内容に応じて、字句解析器生成手段101a、構文解析器及び抽象構文木データ型生成手段101b、変換規則記憶部102g、出力プログラム断片記述処理手段102bの対応する手段に与える(S2,S4,S6,S8)。
このジェネレータ動作仕様20は、図4に示すような文法で記述される。図4において、仕様種類とは、ジェネレータ動作仕様20を構成する、字句解析仕様201a、文法仕様201b、ジェネレータ変換規則202a、出力プログラム断片記述202b、テキスト整形記述202cを区別するための識別子である。このように各仕様種類毎に名称を識別子として付加することにより、他の仕様定義からの参照が可能となる。
このジェネレータ動作仕様20は、図4に示すような文法で記述される。図4において、仕様種類とは、ジェネレータ動作仕様20を構成する、字句解析仕様201a、文法仕様201b、ジェネレータ変換規則202a、出力プログラム断片記述202b、テキスト整形記述202cを区別するための識別子である。このように各仕様種類毎に名称を識別子として付加することにより、他の仕様定義からの参照が可能となる。
S2では、ジェネレータ動作仕様読込手段102aは、読み込んだジェネレータ動作仕様20が字句解析仕様201aであると、それを字句解析器生成手段101aに渡し、起動する。
この字句解析仕様201aは、図5に示すような文法で記述される。字句解析仕様201aでは、後述する構文解析で用いるトークンの定義を正規表現を用いて記述される。例えば、図6では識別子を表すトークンIDENTIFIERを正規表現を用いて記述し、calc_tokenという名称で定義した例を示している。
字句解析器生成手段101aは、そのような字句解析仕様201aに基づき字句解析器生成処理を実行し、字句解析器101bの生成を行う(S3)。
なお、字句解析生成手段や字句解析器の動作に関しては、文献「エイホ/セシィ/ウルマン著、"コンパイラ I/II 原理・技法・ツール" サイ エンス社」に詳しい。
S4では、ジェネレータ動作仕様読込手段102aは、読み込んだジェネレータ動作仕様101が文法仕様201bであると、それを構文解析器及び抽象構文木データ生成手段101cに渡し、起動する。
なお、字句解析生成手段や字句解析器の動作に関しては、文献「エイホ/セシィ/ウルマン著、"コンパイラ I/II 原理・技法・ツール" サイ エンス社」に詳しい。
S4では、ジェネレータ動作仕様読込手段102aは、読み込んだジェネレータ動作仕様101が文法仕様201bであると、それを構文解析器及び抽象構文木データ生成手段101cに渡し、起動する。
この文法仕様201bは、図7に示すような文法で記述される。この文法仕様201bは、後述する構文解析器生成装置(図19)が扱う文法仕様(図21参照))と同じ形式で記述される。図8に文法仕様の具体的記述例を示してある。図8の記述例では、簡単な加減演算を行う文法仕様の記述文法の定義を行い、 calc_grammerという名称で定義している。
構文解析器及び抽象構文木データ生成手段101cは、後述するようにしてこの文法仕様201bに基づき構文解析器及び抽象構文木データ生成処理を実行し、構文解析器101dと抽象構文木データ型1021eを生成する(S5)。
S6では、ジェネレータ動作仕様読込手段102aは、読み込んだジェネレータ動作仕様20がジェネレータ変換規則202aであると、そのジェネレータ変換規則202aを変換規則コンパイル手段1023aで処理できる内部表現に変換し、変換規則記憶部102gに格納する(S7)。
S6では、ジェネレータ動作仕様読込手段102aは、読み込んだジェネレータ動作仕様20がジェネレータ変換規則202aであると、そのジェネレータ変換規則202aを変換規則コンパイル手段1023aで処理できる内部表現に変換し、変換規則記憶部102gに格納する(S7)。
ジェネレータ変換規則202aは、図9に示すような文法で記述される。このジェネレータ変換規則202aの記述方法は、本実施形態では、MLに準じた記述方法で記述する。なお、MLに関しては、文献「 L.C. Paulson著 "ML forthe Working Programmer" Cambridge University Press」に詳しい。
図10では、具体的なジェネレータ変換規則の定義として、図5〜図7に示すように記述された字句解析仕様及び文法仕様に基づき構文解析器101dを呼び出し、その結果得られた抽象構文木を変数specに束縛し、関数generateを呼び出すことにより出力プログラムの生成を行うという動作を記述している。
このように記述されたジェネレータ変換規則の記憶方法は、文献「Andrew W.Appel著 "Compiling with Continuations" Cambridge University Press」に詳しい。
S8では、ジェネレータ動作仕様読込手段102aは、読み込んだジェネレータ動作仕様20が出力プログラム断片記述202bであると、それを出力プログラム断片記述処理手段102bに渡し、起動する。
S8では、ジェネレータ動作仕様読込手段102aは、読み込んだジェネレータ動作仕様20が出力プログラム断片記述202bであると、それを出力プログラム断片記述処理手段102bに渡し、起動する。
出力プログラム断片記述202bは、当該ジェネレータの出力するプログラムの一部を記述したものである。出力プログラム断片記述202bには、2種類の記述を行うことができる。1つは、出力するプログラムそのものの記述である。この場合には、出力されるプログラムのテキストイメージを直接記述して構わない。他の1つは、ジェネレータ入力仕様30から与えられる抽象構文木に記述された情報に基づき他のプログラム断片の展開等を行うテキスト整形記述の記述である。このテキスト整形記述には、字下げや改行の文字と、テキスト整形規則とがある。なお、これらの2種の記述は、出力プログラム断片中に混在して記述することもできる。
この出力プログラム断片記述202bは、図11に示すように、パターンの並びとして記述される。パターンは、図12に示すように、引数とプログラム断片の並びとして記述される。図13は、C言語のmain関数を出力するプログラムの断片を記述している。
プログラム断片中に他のプログラム断片を記述する際に行うテキスト整形記述は、例えば図13に示すように記述できる。即ち、図13の例では、insertというテキスト整形記述を行うことにより、main関数を展開する際にinsertの部分に名称switch_outで指定された出力プログラム断片を埋め込むことを指定している。
プログラム断片中に他のプログラム断片を記述する際に行うテキスト整形記述は、例えば図13に示すように記述できる。即ち、図13の例では、insertというテキスト整形記述を行うことにより、main関数を展開する際にinsertの部分に名称switch_outで指定された出力プログラム断片を埋め込むことを指定している。
また、出力プログラム断片記述中のパターンの引数として渡される変数、即ち、図13中のbranchesという変数で表される部分には、ジェネレータ入力仕様30を構文解析器101dが構文解析した結果に抽象構文木データ型101eを適用して得られる入力仕様抽象構文木101fを、変換規則によって変換した結果が渡される。
したがって、パターンの引数として渡される変数branchesを出力プログラム断片に埋め込むことにより、ジェネレータ入力仕様30に即したジェネレータ出力プログラム40を得ることができる。
S9では、出力プログラム断片記述処理手段102bは、受け取った出力プログラム断片記述202b中にテキスト整形記述202cがあるか否かを調べる。出力プログラム断片記述処理手段102bは、テキスト整形記述202cがなければ受け取った出力プログラム断片記述202bを出力プログラム断片記述記憶部102e記憶する(S10)。
一方、出力プログラム断片記述処理手段102bは、受け取った出力プログラム断片記述202b中にテキスト整形記述202cがあると、それを取り出し、テキスト整形記述202cの内容調べ(S11)、まず、テキスト整形記述202cの字下げや改行の文字についての処理を行い(S12)、その後変換規則の処理をテキスト整形記述解釈手段102cに委ねる(S13〜S15)。
即ち、出力プログラム断片記述処理手段102bは、テキスト整形記述202cから字下げや改行の文字を取り出し、その字下げや改行の位置情報を内部記憶するとともに(S12)、その字下げや改行の文字を出力プログラム断片記述記憶部102eに記憶する(S10)。
即ち、出力プログラム断片記述処理手段102bは、テキスト整形記述202cから字下げや改行の文字を取り出し、その字下げや改行の位置情報を内部記憶するとともに(S12)、その字下げや改行の文字を出力プログラム断片記述記憶部102eに記憶する(S10)。
そして、出力プログラム断片記述処理手段102bは、字下げや改行の文字についての処理を終了したテキスト整形記述202cをテキスト整形記述解釈手段102cに渡す。これにより、テキスト整形記述解釈手段102cは、S13〜S15の処理を行う。
図14は、本実施形態で記述可能なテキスト整形記述の一覧を示す。また、テキスト整形規則記憶部102dには、テキスト整形方法を記述したテキスト整形規則が格納される。図15に一例を示してある。
図14は、本実施形態で記述可能なテキスト整形記述の一覧を示す。また、テキスト整形規則記憶部102dには、テキスト整形方法を記述したテキスト整形規則が格納される。図15に一例を示してある。
テキスト整形記述202cは、テキスト整形記述解釈手段102cがテキスト整形規則記憶部102dを検索する際に使用する。したがって、新たなテキスト整形記述が必要になった場合は、そのテキスト整形記述に対応したテキスト整形規則をテキスト整形規則記憶部102dに登録することにより自由に追加することが可能である。
テキスト整形記述解釈手段102cは、図15に示されるようなテキスト整形規則をテキスト整形規則記憶部1025dから検索し(S13)、テキスト整形規則の各引数にテキスト整形記述202cの値を束縛することにより、テキスト整形記述の解釈を行い(S14)、解釈結果とS12で内部記憶した字下げや改行の位置情報とに基づきテキスト整形を行うための情報を付加した出力プログラム断片記述202bを生成し(S15)、それを変換規則生成手段102fに渡す(S16)。
変換規則生成手段102fは、出力プログラム断片記述記憶部102eに記憶された、出力プログラム断片記述、字下げや改行の文字、テキスト整形記述解釈手段102cから取得したテキスト整形を行うための情報を付加した出力プログラム断片記述202bから、それと等価な出力プログラムを得ることのできる変換規則の生成を行い(S16)、生成した変換規則を変換規則記憶部102gに格納する(S7)。
なお、ここで言う変換規則は、従来技術の項でも説明したが、入力として与えられる抽象構文木と規則で定義された抽象構文木との間でパターンマッチを行い、パターンマッチが成功した場合、規則に定義された出力となる抽象構文木に書き替えを行うプログラムである。
なお、ここで言う変換規則は、従来技術の項でも説明したが、入力として与えられる抽象構文木と規則で定義された抽象構文木との間でパターンマッチを行い、パターンマッチが成功した場合、規則に定義された出力となる抽象構文木に書き替えを行うプログラムである。
図16は、テキスト整形記述を用いて記述したプログラム断片記述の例である。この例では、図13で示したinsert整形記述を用いて参照したプログラム断片記述switch_outを定義している。プログラム断片記述switch_outでは、C言語のswitch文を記述しており、switch文の内部に引数branchesの各要素に対してC言語のcase文を展開する記述を行っている。
図13の出力プログラム断片記述、図16の出力プログラム断片記述に対して、[ "1" , "2" ]のような文字列のリストを入力し、ジェネレータ入力仕様30を実行すると、図17に示すような字下げ等を考慮した出力プログラム断片記述が、ジェネレ−タ出力プログラム40として出力される。
図18は、図16に示した出力プログラム断片記述から生成した変換規則の記述例である。この例では、テキスト整形記述のないプログラム断片記述が、そのまま出力プログラム中に文字列として出力されるようにする変換規則が示されている。また、テキスト整形記述のあるプログラム断片記述が、テキスト整形規則定義に記述されている字下げや改行の位置情報とともに、出力プログラム中に記述されるようにする変換規則が示されている。
そして、S16では、以上のS1〜S16までの処理を全てのジェネレータ動作仕様20に対して実行する。その結果、構文解析手段101では、字句解析器101b、構文解析器101d及び抽象構文木データ型101eが生成され、変換規則処理手段101では、、変換規則記憶部102gには、ジェネレータ変換規則202aの変換規則と出力プログラム断片記述202bの変換規則が逐一格納される。
次に、図1、図3を参照して構文解析手段101の一部と変換規則実行手段103の動作を説明する。図3において、S20〜S23までが構文解析手段101の動作、S24〜S29までが変換規則実行手段103の動作である。
図1,図3において、構文解析手段101では、ジェネレータ入力仕様30を読み込み(S20)、字句解析器101bがジェネレータ入力仕様30の字句解析を行い(S21)、構文解析器101dが字句解析結果を用いてジェネレータ入力仕様30の構文解析を行う(S22)。そして、構文解析した入力仕様30の抽象構文木を抽象構文木データ型101dを用いた内部表現である入力仕様抽象構文木101fで表現する(S23)。
次に、変換規則実行手段103では、変換規則コンパイル手段103aが、入力仕様抽象構文木101fを実行コードにコンパイルする(S24)。また、変換規則コンパイル手段103aは、変換規則記憶部101gから変換に必要な変換規則を検索し、それを実行可能な実行コードに変換する(S25、S26)。
そして、変換規則コンパイル手段103aは、S24で得られたジェネレータ入力仕様30に対応する実行コードと、S26で得られたジェネレータ変換規則202aや変化規則生成手段102fが生成した変化規則に対応する実行コードとを実行コード記憶部103bに記憶する(S27)。
なお、変換規則コンパイル手段103aに関しては、前述した文献「Andrew W.Appel著 "Compiling with Continuations" Cambridge University Press」に詳しい。
次いで、変換実行手段103cが、実行コード記憶部103bに記憶された実行コードを用いてジェネレータ入力仕様30を変換し、その変換結果をジェネレータ出力プログラム40として出力する(S28、S29)。
次に、図19は、本発明の実施形態に係る構文解析器生成装置の構成ブロック図である。この構文解析器生成装置は、図1における、構文解析器及び抽象構文木データ型生成手段101c,構文解析器101d、抽象構文木データ型101eの全体に対応する。
図19において、この構文解析器生成装置は、プログラム制御により動作するデータ処理装置501と、情報を記憶する記憶装置502とを備え、入力される文法仕様503から、抽象構文木データ型504及び構文解析器505を自動的に出力するように構成される。
データ処理装置501は、文法記述読込手段5011と、非終端記号型名決定手段5012と、要素選択手段5013と、各ノード型決定手段5014と、非終端記号データ型生成手段5015と、構文木構築動作生成手段5016と、構文解析器生成手段5017と、抽象構文木データ型出力手段5018とを備える。これらの手段は、コンピュータ(CPU)により実現される。
記憶装置502は、文法情報記憶部5021と、抽象構文木データ型記憶部5022とを備える。記憶装置502は、半導体メモリや磁気ディスク装置等である。なお、文法情報記憶部5021には、文法記述の内部表現や、非終端記号の型名や、選択されたノードやその型などが記憶される。また、抽象構文木データ型記憶部5022には、抽象構文木データ型が記憶される。
次に、以上のように構成される本実施形態の構文解析器生成装置の動作を図19〜図27を参照して詳細に説明する。なお、図20は、構文解析器生成装置の動作フローチャートである。図21は、文法規則の記述方法を具体例で示した図である。図22は、文法規則中に記述することのできる構文木の種類を示した図である。図23は、文法記述の例を示す図である。図24は、図23の文法で記述された入力の例を示す図である。図25は、図24の入力を内部表現で表した例を示す図である。図26は、図25の内部表現から生成されたデータ型を示す図である。図27は、図25の内部表現に動作を付加した図である。
まず、文法仕様503について説明する。本実施形態で対象となる文法記述は、これから示すBNF文法(以下「BNF1」という)により記述される。BNF1は、図21に示すように、ルールの集合からなる。ルールは、そのルールで定義される非終端記号の1つと1つ以上のブランチとから構成される。各ブランチは、値構成子名と、0 個以上のノードの列とからなる。
このうち、各ブランチの先頭に記述される値構成子名は、本実施形態の手法(以下「本手法」という)で利用するBNF1特有の要素である。即ち、この値構成子名は、抽象構文木用のデータ型を自動的に生成する際の値構成子の名前として利用される。
ノードの列は、一般的なBNF文法であれば必ず持っている要素である。このノードの列は、そのルールが表す非終端記号がどういった文法要素に展開されるかを示している。各ノードは、図22の表で1〜7に示す7つのいずれかである。
ノードの列は、一般的なBNF文法であれば必ず持っている要素である。このノードの列は、そのルールが表す非終端記号がどういった文法要素に展開されるかを示している。各ノードは、図22の表で1〜7に示す7つのいずれかである。
このうち、1のトークンと2の非終端記号は、一般的なBNF文法には必ず存在する要素である。1のトークンは、構文解析の最小単位であるトークンを意味する。2の非終端記号は、他のルールによって定義される非終端記号を意味する。3,4,5のノードは、BNF文法によっては存在する要素で、対象となるノードの繰り返しや、そのノードが出現するかどうかを意味する。
また、6,7のノードにおけるデリミタとは、ノードが2回以上繰り返される場合に各要素の間にデリミタに対応するノードが挟まることを意味する。この6,7のノードにおけるデリミタの記法は、本手法特有の要素である。
なお、以下の説明で利用している、:: = | < > [ ] * +、等の記号は、他の記号と置き換えても本手法は、適用することができる。
また、本手法で使用するBNF1文法のうち、図22中の3〜7の各ノドは、必ずしも一般的なBNFではないが、このリスト表現の使用を一部または全部制限しても本手法は、適用できる。
また、本手法で使用するBNF1文法のうち、図22中の3〜7の各ノドは、必ずしも一般的なBNFではないが、このリスト表現の使用を一部または全部制限しても本手法は、適用できる。
なお、文法情報記憶部5021には、初期状態においては、文法自体に関する情報は格納されておらず、構文解析前の字句解析段階に関する情報のみが入っている。字句解析段階に関する情報とは、識別子や文字列、整数といったトークンの種類、それらのトークンの型などである。
以下、図20の動作フローチャートに沿って説明する。S31では、文法仕様503として与えられる文法記述が、文法記述読込手段5011に供給される。この文法記述は、例えば、図23、図24に示すようになっている。図23は、図21で示した文法に基づく文法記述例である。図24は、図23の文法で記述した入力例である。
文法記述読込手段5011は、この文法記述をデータ処理装置501内で扱える内部表現(図25)へ変換し、文法情報記憶部5021へ格納する。なお、この時点での内部表現は、図25に含まれる情報のうち、型名と、各ノードの情報内の選択か非選択かのラベルと、型の情報とは含んでいない。これらの要素は、以降の手順で導き出される。この内部表現に関しては、データ処理装置で扱える形であればどのようなものでも構わない。
S32では、非終端記号型名決定手段5012が、文法情報記憶部5021に格納されている文法の内部表現(図25)の各ルールから非終端記号名を取り出し、その非終端記号名に文字列"Type"を付けてそのルールの型名とし、文法情報記憶部5021に格納する。この時点で、図25における型名の情報が付加されたことになる。ここで、各非終端記号の型の名前は、非終端記号ごとに一意であればどんなものでもかまわない。一例として、非終端記号の名前そのものでもよい。
S32では、非終端記号型名決定手段5012が、文法情報記憶部5021に格納されている文法の内部表現(図25)の各ルールから非終端記号名を取り出し、その非終端記号名に文字列"Type"を付けてそのルールの型名とし、文法情報記憶部5021に格納する。この時点で、図25における型名の情報が付加されたことになる。ここで、各非終端記号の型の名前は、非終端記号ごとに一意であればどんなものでもかまわない。一例として、非終端記号の名前そのものでもよい。
S33では、要素選択手段5013が、文法情報記憶部5021に格納されている内部表現(図25)からノードに関する情報を取り出し、構文木に組み入れる必要のある(即ち構文解析後に保持する必要のある)ノードを選択し、どのノードが選択されたかというノードの情報を文法情報記憶部5021へ格納する。
ここで、構文木に組み入れる必要のあるノードとは、そのノードの表す内容が可変であるノードである。内容が可変であるノードとは、例えば非終端記号や文字列トークンなどである。現在扱っている図23の例では、Arg(非終端記号)やINTEGER(整数を表すトークン)などがそれにあたる。
内容が可変でないノードとは、内容が変化しないトークンであり、例えばキーワードやカッコその他、文法上の区切りのために存在するようなトークンのノードなどである。現在扱っている図24の例では、"+"や"{"、などがそれにあたる。
そして、文法情報記憶部5021に格納されている内部表現のうち、必要と判定されたノードには選択というラベルを付け、不必要とされたノードには非選択というラベルを付ける。この時点で、 図25における選択、非選択情報が付加されたことになる。ただし、ここでいう「必要なノード」の基準は、変更しても本手法の適用は可能である。例えば、すべてのノードを必要とすることにしてもよい。
S34では、各ノード型決定手段5014が、文法情報記憶部5021から各非終端記号の型名及び選択されたノードの情報を取り出し、それらの情報から選択された各ノードの型を決定し、その情報を文法情報記憶部5021に格納する。
この決定は、各ノードの種類に基づき行われる。図22において、対象となるノードが1のトークンの場合は、そのトークン自身の型とする。一例として、整数を表すトークンなら整数型、文字列を表すトークンなら文字列型、などである。2の非終端記号の場合は、S32で付けた非終端記号の名前を持つ型として定義する。
この決定は、各ノードの種類に基づき行われる。図22において、対象となるノードが1のトークンの場合は、そのトークン自身の型とする。一例として、整数を表すトークンなら整数型、文字列を表すトークンなら文字列型、などである。2の非終端記号の場合は、S32で付けた非終端記号の名前を持つ型として定義する。
型の実体はこの時点では定義されていないが、後の手順で定義されるので、名前で対応がとれればよい。3、4,5,6、7の場合は、内包するノードの型のリスト型とする。これに従い選択されたノードすべての型を決定する。
例えば、図25において、ルール3のブランチ1のノード1のトークンINTEGERは、整数を表すので、int型となる。 非終端記号の場合は、その非終端記号を定義しているルールの型名を持つ型となる。例えばルール1のブランチ1,2のノード2は、非終端記号Argであり、Argを定義しているルール2を参照すると型名は、ArgTypeとなっている。
したがって、型は、ArgTypeとなる。同じ非終端記号でも、'['']'、で囲まれているノードの場合は、その非終端記号を定義しているルールの型名の型をリスト型にしたものとなる。
例えば、ルール2のブランチ1のノード2は、[ AtExpr; "," ]+、となっているので、型は、AtExpType listとなる。
以下同様に選択されているノードの型を付けていき、その情報を文法情報記憶部5021の内部表現(図25)に格納する。この時点で、図25における各ノードに付いている型の情報が付加されたことになる。
S35では、非終端記号データ型生成手段5015が、文法情報記憶部5021から、文法の内部表現(図25)のルールに付随する値構成子の情報を取り出し、さらに各非終端記号の型名及び各ノードの型の情報を取り出し、それらの情報に基づいてそのルールで定義されている非終端記号のデータ型を生成する。
このデータ型は、データ型名を非終端記号型名決定手段5012が付けた名前とし、取り出した値構成子を持つ型となる。各値構成子に付随する型は、S34で各ノード型決定手段5014が決定したノードの型を組にしたものとなる。
換言すれば、生成されるデータ型においては、型名がデータ型の名前となり、各ブランチの値構成子名がそのデータ型の持つ値構成子となり、各ブランチ中の選択されているノードの型がその値構成子に付随する型となる。
換言すれば、生成されるデータ型においては、型名がデータ型の名前となり、各ブランチの値構成子名がそのデータ型の持つ値構成子となり、各ブランチ中の選択されているノードの型がその値構成子に付随する型となる。
このように生成した非終端記号のデータ型が抽象構文木のデータ型となる。生成したデータ型を抽象構文木データ型記憶部5022に格納する。現在扱っている例の場合、生成されるデータ型は図26のようになる。
S36では、抽象構文木構築動作生成手段5016が、文法情報記憶部5021から文法の内部表現及び選択されたノードの情報を、抽象構文木データ型記憶部5022から抽象構文木のデータ型をそれぞれ取り出し、抽象構文木を構築する動作を生成する。
本手法で定義する非終端記号のデータ型は、各ノードの型を反映したものであるため、生成する抽象構文木構築の動作は、各ノードの内容を組にし、値構成子に適用する動作であり、対応する内容をその部分に埋め込むものとなる。
例えば、ノードの型がlist型である場合は、その部分に相当する要素をリスト化したものをノードの値とする。現在扱っている例では、ここで定義する動作が生成すべきブランチの値は、図27に示すようなものとなる。ただし、図27中の各ブランチにおいて、各ノード(番号)の内容を$(番号)としている。
S37では、構文解析器生成手段5017が、文法情報記憶部5021から文法の情報を、抽象構文木データ型記憶部5022から抽象構文木のデータ型を、それぞれ取り出し、抽象構文木構築動作生成手段5016から抽象構文木を構築する動作を受け取り、それらの情報から構文解析器505を生成する。
なお、文法、抽象構文木のデータ型、抽象構文木を構築する動作の3つをもとに構文解析器を生成する手法については、従来の手法と同様である。
S38では、構文解析器生成手段5017が生成した構文解析器505を出力する。
また、S39では、抽象構文木データ型出力手段5018が、抽象構文木データ型記憶部5022から抽象構文木のデータ構造を取り出し、抽象構文木データ型504として出力する。
S38では、構文解析器生成手段5017が生成した構文解析器505を出力する。
また、S39では、抽象構文木データ型出力手段5018が、抽象構文木データ型記憶部5022から抽象構文木のデータ構造を取り出し、抽象構文木データ型504として出力する。
その結果、図1におけるジェネレータ入力仕様30の構文解析において、構文解析器505(101d)の解析結果と抽象構文木データ型504(101e)とから内部表現である入力仕様抽象構文木101fが自動的に生成される。
なお、本実施形態で生成される抽象構文木データ型504は、多相型を持つ厳密な型システムを持つデータ型を実現している代表的な言語であるMLを対象とするものである。MLに関する文献は、先に紹介した。
本発明によれば、プログラムを開発する際に、そのプログラムの動作仕様から自動的に生成するアプリケーションジェネレータの開発を支援支援するために用いることができる。
10 アプリケーションジェネレータ開発支援装置
20 ジェネレータ動作仕様
30 ジェネレータ入力仕様
40 ジェネレータ出力プログラム
101 構文解析手段
101a 字句解析器生成手段
101b 字句解析器
101c 構文解析器及び抽象器データ型生成手段
101d、504 抽象構文木データ型
101e、505 構文解析器
101f 入力仕様抽象構文木
102 変換規則処理手段
102a ジェネレータ動作仕様読込手段
102b 出力プログラム断片処理手段
102c テキスト整形記述解釈手段
102d テキスト整形規則記憶部
102e 出力プログラム断片記述記憶部
102f 変換規則生成手段
102g 変換規則記憶部
103 変換規則実行手段
103a 変換規則コンパイル手段
103b 実行コード記憶部
103c 変換実行手段
201 構文規則定義
201a 字句解析仕様
201b、503 文法仕様
202 変換規則定義
202a ジェネレータ変換規則
202b 出力プログラム断片記述
202c テキスト整形記述
501 データ処理装置
502 記憶装置
5011 文法記述読込手段
5012 非終端記号名決定手段
5013 要素選択手段
5014 各ノード型決定手段
5015 非終端記号データ型生成手段
5016 抽象構文木構築動作生成手段
5017 構文解析器生成手段
5018 抽象構文木データ型出力手段
5021 文法情報記憶部
20 ジェネレータ動作仕様
30 ジェネレータ入力仕様
40 ジェネレータ出力プログラム
101 構文解析手段
101a 字句解析器生成手段
101b 字句解析器
101c 構文解析器及び抽象器データ型生成手段
101d、504 抽象構文木データ型
101e、505 構文解析器
101f 入力仕様抽象構文木
102 変換規則処理手段
102a ジェネレータ動作仕様読込手段
102b 出力プログラム断片処理手段
102c テキスト整形記述解釈手段
102d テキスト整形規則記憶部
102e 出力プログラム断片記述記憶部
102f 変換規則生成手段
102g 変換規則記憶部
103 変換規則実行手段
103a 変換規則コンパイル手段
103b 実行コード記憶部
103c 変換実行手段
201 構文規則定義
201a 字句解析仕様
201b、503 文法仕様
202 変換規則定義
202a ジェネレータ変換規則
202b 出力プログラム断片記述
202c テキスト整形記述
501 データ処理装置
502 記憶装置
5011 文法記述読込手段
5012 非終端記号名決定手段
5013 要素選択手段
5014 各ノード型決定手段
5015 非終端記号データ型生成手段
5016 抽象構文木構築動作生成手段
5017 構文解析器生成手段
5018 抽象構文木データ型出力手段
5021 文法情報記憶部
Claims (6)
- ジェネレータの動作仕様として与えられる字句解析仕様及び文法仕様から字句解析器と構文解析器及び抽象構文木のデータ構造とを生成し、ジェネレータ出力プログラムの動作仕様を規定する入力仕様の構文解析結果を抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成する構文解析手段と、ジェネレータの動作仕様として与えられる変換規則定義中の出力プログラム断片記述を変換規則に変換する変換規則処理手段と、前記入力仕様抽象構文木を前記変換規則処理手段からの変換規則に基づき実行し、実行結果をジェネレータ出力プログラムとして出力する変換規則実行手段とを備えることを特徴とするアプリケーションジェネレータ開発支援装置。
- 請求項1に記載のアプリケーションジェネレータ開発支援装置において、前記変換規則定義が、ジェネレータ変換規則と前記プログラム断片記述とテキスト整形記述との組み合わせからなり、前記変換規則処理手段が、前記変換規則定義中の出力プログラム断片記述を抽出する手段と、前記テキスト整形記述に対応するテキスト整形規則が格納される記憶手段と、前記抽出した出力プログラム断片記述にテキスト整形記述が含まれているとき、前記記憶手段から取り出したテキスト整形規則による解釈結果を前記抽出した出力プログラム断片記述に記述する手段と、前記解釈結果が記述された出力プログラム断片記述と等価な出力プログラムを出力する変換規則を生成する手段とを備えることを特徴とするアプリケーションジェネレータ開発支援装置。
- 請求項1または請求項2に記載のアプリケーションジェネレータ開発支援装置において、前記構文解析手段が、文法仕様から、構文解析器と、構文解析の結果得られる抽象構文木を表現するための抽象構文木のデータ構造とを生成する手段として、記憶部と、前記文法仕様から非終端記号の情報を取り出して各非終端記号の型名を決定し、型名決定済み非終端記号の情報を前記記憶部に格納する手段と、前記文法仕様からノードの情報を取り出し、構文木に組み入れる必要のあるノードを選択し、選択したノード情報を前記記憶部に格納する手段と、前記記憶部から決定された非終端記号の型名及び前記選択されたノード情報を取り出し、それらに基づき各ノードの型を決定し、決定したノードの型を前記記憶部に格納する手段と、前記文法仕様のルールに付随する値構成子と前記記憶部から取り出した前記決定された非終端記号の型名及び前記決定したノードの型とに基づき非終端記号のデータ型を生成する手段と、前記文法仕様と前記生成した非終端記号のデータ型と前記記憶部から取り出した前記選択されたノード情報とに基づき抽象構文木を構築する動作を生成する手段と、前記文法仕様と前記生成した非終端記号のデータ型と前記生成した抽象構文木を構築する動作とに基づき構文解析器を生成する手段と、前記生成した非終端記号のデータ型に基づき抽象構文木データ型を出力する手段とを備えることを特徴とするアプリケーションジェネレータ開発支援装置。
- ジェネレータの動作仕様として与えられる字句解析仕様及び文法仕様から字句解析器と構文解析器及び抽象構文木のデータ構造とを生成し、ジェネレータ出力プログラムの動作仕様を規定する入力仕様の構文解析結果を抽象構文木のデータ構造を用いて表現した入力仕様抽象構文木を生成する工程と、ジェネレータの動作仕様として与えられる変換規則定義中の出力プログラム断片記述を変換規則に変換する工程と、前記入力仕様抽象構文木を前記変換規則処理手段からの変換規則に基づき実行し、実行結果をジェネレータ出力プログラムとして出力する工程とを備えることを特徴とするアプリケーションジェネレータ開発支援方法。
- 請求項1に記載のアプリケーションジェネレータ開発支援方法において、前記変換規則定義が、ジェネレータ変換規則と前記プログラム断片記述とテキスト整形記述との組み合わせからなり、前記変換規則に変換する工程が、前記変換規則定義中の出力プログラム断片記述を抽出する手順と、前記抽出した出力プログラム断片記述にテキスト整形記述が含まれているとき、記憶手段から取り出したテキスト整形規則による解釈結果を前記抽出した出力プログラム断片記述に記述する手順と、前記解釈結果が記述された出力プログラム断片記述と等価な出力プログラムを出力する変換規則へ変換する手順とを備えることを特徴とするアプリケーションジェネレータ開発支援方法。
- 請求項1または請求項2に記載のアプリケーションジェネレータ開発支援方法において、前記文法仕様から、構文解析器と、構文解析の結果得られる抽象構文木を表現するための抽象構文木のデータ構造とを生成する手順として、前記文法仕様から非終端記号の情報を取り出して各非終端記号の型名を決定し、型名決定済み非終端記号の情報を記憶部に格納する手順と、前記文法仕様からノードの情報を取り出し、構文木に組み入れる必要のあるノードを選択し、選択したノード情報を前記記憶部に格納する手順と、前記記憶部から決定された非終端記号の型名及び前記選択されたノード情報を取り出し、それらに基づき各ノードの型を決定し、決定したノードの型を前記記憶部に格納する手順と、前記文法仕様のルールに付随する値構成子と前記記憶部から取り出した前記決定された非終端記号の型名及び前記決定したノードの型とに基づき非終端記号のデータ型を生成する手順と、前記文法仕様と前記生成した非終端記号のデータ型と前記記憶部から取り出した前記選択されたノード情報とに基づき抽象構文木を構築する動作を生成する手順と、前記文法仕様と前記生成した非終端記号のデータ型と前記生成した抽象構文木を構築する動作とに基づき構文解析器を生成する手順と、前記生成した非終端記号のデータ型に基づき抽象構文木データ型を出力する手順とを備えることを特徴とするアプリケーションジェネレータ開発支援方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004129526A JP2004246924A (ja) | 2004-04-26 | 2004-04-26 | アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004129526A JP2004246924A (ja) | 2004-04-26 | 2004-04-26 | アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11178031A Division JP2001005655A (ja) | 1999-06-24 | 1999-06-24 | アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004246924A true JP2004246924A (ja) | 2004-09-02 |
Family
ID=33028631
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004129526A Withdrawn JP2004246924A (ja) | 2004-04-26 | 2004-04-26 | アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004246924A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061469A (zh) * | 2019-11-06 | 2020-04-24 | 贝壳技术有限公司 | Web前端源代码生成方法、装置、存储介质及处理器 |
CN113609822A (zh) * | 2021-08-13 | 2021-11-05 | 深圳我家云网络科技有限公司 | 一种跨业务树形数据转换方法以及相关设备 |
-
2004
- 2004-04-26 JP JP2004129526A patent/JP2004246924A/ja not_active Withdrawn
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061469A (zh) * | 2019-11-06 | 2020-04-24 | 贝壳技术有限公司 | Web前端源代码生成方法、装置、存储介质及处理器 |
CN111061469B (zh) * | 2019-11-06 | 2023-09-15 | 贝壳技术有限公司 | Web前端源代码生成方法、装置、存储介质及处理器 |
CN113609822A (zh) * | 2021-08-13 | 2021-11-05 | 深圳我家云网络科技有限公司 | 一种跨业务树形数据转换方法以及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hutton | Higher-order functions for parsing | |
KR101099212B1 (ko) | 예외 처리 구조물들을 포함하는 소프트웨어의 소스 언어 독립형 중간 표현을 처리하는 방법, 다수의 소스 코드 언어들에 대한 소스 언어 독립형 예외 처리 중간 표현들을 구현하기 위한 시스템 및 컴퓨터 판독가능 저장 매체 | |
US7313773B1 (en) | Method and device for simulator generation based on semantic to behavioral translation | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
JP2009237762A (ja) | プログラム解析装置、プログラム解析方法および解析プログラム | |
JP2004295398A (ja) | コンパイラ、コンパイル方法、及びプログラム開発ツール | |
Bagge et al. | Design of the CodeBoost transformation system for domain-specific optimisation of C++ programs | |
Blindell | Instruction Selection | |
Fedorchenko et al. | Equivalent transformations and regularization in context-free grammars | |
US20080141230A1 (en) | Scope-Constrained Specification Of Features In A Programming Language | |
JP2008276735A (ja) | プログラムコード変換装置及びプログラムコード変換方法 | |
Kleppe | Towards the generation of a text-based IDE from a language metamodel | |
JP4719415B2 (ja) | 情報処理システム及びコード生成方法 | |
KR102614967B1 (ko) | 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법 | |
JP5600301B2 (ja) | システム表現およびハンドリング技術 | |
JP2004246924A (ja) | アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 | |
JP5399601B2 (ja) | 実装コード開発システム、及び実装コード開発プログラム | |
JP6175306B2 (ja) | 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体 | |
GB2420638A (en) | Method of substituting code fragments in Internal Representation | |
JP2001005655A (ja) | アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 | |
Wang et al. | Ompparser: A standalone and unified OpenMP parser | |
Kats et al. | Interactive disambiguation of meta programs with concrete object syntax | |
Watson et al. | Compilers and Interpreters | |
JP4371000B2 (ja) | Idlコンパイル装置、idlコンパイル方法及びidlコンパイラ | |
Mazanek et al. | Parsing of hyperedge replacement grammars with graph parser combinators |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20050318 |
|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20060905 |