(57)【要約】【課題】より高速なコンパイル処理を実現可能にするコンパイル装置を提供する。【解決手段】コンパイル装置（１００）は、原始プログラム（１０）の字句解析結果を生成する字句解析部（２１）と、字句解析結果から生成される字句解析データを関数単位で記憶する字句解析データ記憶部（２３）と、字句解析データから生成される目的プログラム（３０）を関数単位で記憶する目的プログラムデータ記憶部（２６）と、字句解析部（２１）から字句解析結果を入力すると字句解析データを生成して、字句解析データ記憶部（２３）に記憶された字句解析データと関数単位で一致するか比較処理を行う字句解析データ操作部（２２）と、比較処理において一致する場合、対応する目的プログラム（３０）を目的プログラムデータ記憶部（２６）から読み出して、コンパイル結果として出力するコード生成部（２５）とを備える。【選択図】図４
2011204074.tif 000002
【特許請求の範囲】
【請求項１】
原始プログラムの字句要素を分解して字句解析結果を生成する字句解析部と、
前記字句解析結果から生成される字句解析データを関数単位で記憶する字句解析データ記憶部と、
前記字句解析データから生成される目的プログラムを関数単位で記憶する目的プログラムデータ記憶部と、
前記字句解析部から前記字句解析結果を入力すると前記字句解析結果から前記字句解析データを生成して、生成された字句解析データが前記字句解析データ記憶部に記憶された前記字句解析データと関数単位で一致するか比較処理を行う字句解析データ操作部と、
前記比較処理において前記生成された字句解析データと一致する前記字句解析データが前記字句解析データ記憶部に記憶されていた場合、前記生成された字句解析データの関数に対応する前記目的プログラムを前記目的プログラムデータ記憶部から読み出して、読み出された目的プログラムを前記原始プログラムのコンパイル結果として出力するコード生成部と
を備えるコンパイル装置。
【請求項２】
請求項１に記載されたコンパイル装置であって、
前記字句解析データ操作部は、前記字句解析結果を一意に識別可能な数値や、文字列や、定数に変換して前記生成された字句解析データを生成する
コンパイル装置。
【請求項３】
請求項１または請求項２に記載のコンパイル装置であって、
前記生成された字句解析データに対して構文解析及び意味解析を行って中間語を生成して、前記原始プログラムにおける関数単位の区切りを検出すると前記字句解析データ操作部へ関数終了通知を出力する解析実行部
をさらに備え、
前記字句解析データ操作部は、前記関数終了通知に基づいて前記関数単位の区切りを検知する
コンパイル装置。
【請求項４】
請求項１から請求項３までのいずれかに記載のコンパイル装置であって、
前記字句解析データ操作部は、前記比較処理において前記生成された字句解析データと一致する前記字句解析データが前記字句解析データ記憶部に記憶されていない場合、前記生成された字句解析データを前記関数単位に前記字句解析データ記憶部へ書き込む
コンパイル装置。
【請求項５】
請求項１から請求項４までのいずれかに記載のコンパイル装置であって、
前記コード生成部は、前記比較処理において前記生成された字句解析データと一致する前記字句解析データが前記字句解析データ記憶部に記憶されていない場合、前記中間語に基づいて目的プログラムを生成して、生成された目的プログラムを前記原始プログラムのコンパイル結果として出力すると共に、生成された目的プログラムを関数単位に前記目的プログラムデータ記憶部へ書き込む
コンパイル装置。
【請求項６】
コンピュータが、原始プログラムの字句要素を分解して字句解析結果を生成するステップと、
前記コンピュータが、前記字句解析結果から生成される字句解析データを関数単位で字句解析データ記憶部に記憶するステップと、
前記コンピュータが、前記字句解析データから生成される目的プログラムを関数単位で目的プログラムデータ記憶部に記憶するステップと、
前記コンピュータが、前記字句解析結果を入力すると前記字句解析結果から前記字句解析データを生成するステップと、
前記コンピュータが、生成された字句解析データが前記字句解析データ記憶部に記憶された前記字句解析データと関数単位で一致するか比較処理を行うステップと、
前記コンピュータが、前記比較処理において前記生成された字句解析データと一致する前記字句解析データが前記字句解析データ記憶部に記憶されていた場合、前記生成された字句解析データの関数に対応する前記目的プログラムを前記目的プログラムデータ記憶部から読み出すステップと、
前記コンピュータが、読み出された目的プログラムを前記原始プログラムのコンパイル結果として出力するステップと
を備えるコンパイル方式。
【請求項７】
請求項６に記載されたコンパイル方式であって、前記字句解析データを生成するステップは、
前記コンピュータが、前記字句解析結果を一意に識別可能な数値や、文字列や、定数に変換して前記生成された字句解析データを生成するステップ
を含むコンパイル方式。
【請求項８】
請求項６または請求項７に記載のコンパイル方式であって、
前記コンピュータが、前記生成された字句解析データに対して構文解析及び意味解析を行って中間語を生成するステップと、
前記コンピュータが、前記原始プログラムにおける関数単位の区切りを検出すると関数終了通知を出力するステップと
をさらに備え、
前記比較処理を行うステップは、
前記コンピュータが、前記関数終了通知に基づいて前記関数単位の区切りを検知するステップ
を含むコンパイル方式。
【請求項９】
請求項６から請求項８までのいずれかに記載のコンパイル方式であって、
前記コンピュータが、前記比較処理において前記生成された字句解析データと一致する前記字句解析データが前記字句解析データ記憶部に記憶されていない場合、前記生成された字句解析データを前記関数単位に前記字句解析データ記憶部へ書き込むステップ
をさらに備えるコンパイル方式。
【請求項１０】
請求項６から請求項９までのいずれかに記載のコンパイル方式であって、
前記コンピュータが、前記比較処理において前記生成された字句解析データと一致する前記字句解析データが前記字句解析データ記憶部に記憶されていない場合、前記中間語に基づいて目的プログラムを生成するステップと、
前記コンピュータが、生成された目的プログラムを前記原始プログラムのコンパイル結果として出力すると共に、生成された目的プログラムを関数単位に前記目的プログラムデータ記憶部へ書き込むステップ
をさらに備えるコンパイル方式。
【請求項１１】
請求項６から請求項１０までのいずれかに記載のコンパイル方式をコンピュータに実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイル処理を実行するコンパイル装置に関する。
【背景技術】
【０００２】
コンパイル装置（コンパイラ）は、ソフトウェア開発において必須の技術である。コンパイラは、ソフトウェア開発者により作成された原始プログラム（ソースプログラム）からコンピュータにより実行可能な目的プログラム（オブジェクトプログラム）を生成する。
【０００３】
ソフトウェア開発者は、プログラム開発工程において、まず、原始プログラムを作成する。次に、ソフトウェア開発者は、コンパイラを用いたコンパイル処理により、原始プログラムのから目的プログラムを生成する。続いて、ソフトウェア開発者は、目的プログラムを実行する。そして、ソフトウェア開発者は、目的プログラムの実行結果に基づいて原始プログラムの修正を行う。ソフトウェア開発者は、このような開発サイクルを幾度も繰り返す。
【０００４】
このような開発サイクルのうち、原始プログラムのコンパイル処理は、コンパイラにより自動的に行われる。そのため、ソフトウェア開発者は、コンパイル処理の間は待機する必要がある。近年、ソフトウェア開発工程において一層のコスト削減が求められている。そのため、待機時間のような単純な待ち時間を短縮することが求められる。このような課題に関連して、コンパイラの処理速度の向上に関する技術が次の通り開示されている。
【０００５】
特許文献１は、コンパイル処理時に無駄なオブジェクトコード生成を削減することが可能な分割コンパイル方式を開示している。以下、図を参照して、特許文献１の分割コンパイル方式を説明する。図１は、特許文献１における分割コンパイル方式の説明する図である。
【０００６】
特許文献１の分割コンパイル方式は、解析フェーズ２１１と、判別フェーズ２１２と、コード生成フェーズ２１３とを備える。これら３つのフェーズは、コンパイラ２１０により実行される。
【０００７】
解析フェーズ２１１は、原始プログラム２００の字句解析、構文解析及び意味解析を行って中間語を生成する。このように生成された中間言語は、関数単位にオブジェクト情報ファイルへ記憶される。判別フェーズ２１２は、解析フェーズ２１１から関数単位の中間語を入力すると、当該関数をコンパイル処理するべきか否かを判別する。コード生成フェーズ２１３は、判別フェーズ２１２による判別結果に基づき、コンパイルするべき関数の場合、オブジェクトコードを生成して目的プログラム２２０を生成する。一方、コード生成フェーズ２１３は、コンパイルの必要の無い場合、前回以前のコンパイル時に得たオブジェクトコードをコピーして目的プログラムを生成する。
【０００８】
ここで、判別フェーズ２１２は、解析フェーズ２１１から入力された関数の中間語と、オブジェクト情報ファイルに記憶された関数の中間語とを比較する。判別フェーズ２１２は、中間語が異なるか否かによって変更された関数を検出する。判別フェーズ２１２は、変更を検出された関数をコンパイルするべきと判別し、変更を検出されない関数をコンパイルの必要は無いと判別する。
【０００９】
このように、特許文献１のコンパイル方式は、原始プログラムをファイル単位でなく関数単位でコンパイルを行う。そして、原始プログラムが修正により変更された関数については、変更のある関数のみオブジェクトコードの再生成を行い、変更無い関数については前回以前のオブジェクトコードのコピーを行うことで目的プログラムを生成する。そのため、同じオブジェクトコードの再生成を防ぐことができ、無駄なオブジェクトコード生成を減らすことができる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平９−２１８７８９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、特許文献１のコンパイラ方式では、判別フェーズ２１２が、関数に対するコンパイルの要否を判別するために多くの時間を要するという課題がある。これは、判別フェーズ２１２が、中間語を比較することによってコンパイルの要否を判定するためである。図２Ａは、特許文献１における原始プログラム２００の一例を示す図である。図２Ｂは、特許文献１における図２Ａの原始プログラム２００から生成された中間語を示す図である。図２Ｂに示すように、中間語はデータ量が多く、また、複雑である。判別フェーズ２１２は、このような中間語を用いて比較処理を行うために多くの時間を要する。また、特許文献１のコンパイラ方式では、比較処理に用いるために関数単位に中間語を保持しなくてはならない。そのため、記憶するべきデータ量が膨大な量になるという課題も存在する。
【課題を解決するための手段】
【００１２】
以下に、（発明を実施するための形態）で使用される番号を用いて、課題を解決するための手段を説明する。これらの番号は、（特許請求の範囲）の記載と（発明を実施するための形態）との対応関係を明らかにするために付加されたものである。ただし、それらの番号を、（特許請求の範囲）に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１３】
本発明の第１の側面であるコンパイル装置（１００）は、原始プログラム（１０）の字句要素を分解して字句解析結果を生成する字句解析部（２１）と、字句解析結果から生成される字句解析データを関数単位で記憶する字句解析データ記憶部（２３）と、字句解析データから生成される目的プログラム（３０）を関数単位で記憶する目的プログラムデータ記憶部（２６）と、字句解析部（２１）から字句解析結果を入力すると字句解析結果から字句解析データを生成して、生成された字句解析データが字句解析データ記憶部（２３）に記憶された字句解析データと関数単位で一致するか比較処理を行う字句解析データ操作部（２２）と、比較処理において生成された字句解析データと一致する字句解析データが字句解析データ記憶部（２３）に記憶されていた場合、生成された字句解析データの関数に対応する目的プログラム（３０）を目的プログラムデータ記憶部（２６）から読み出して、読み出された目的プログラム（３０）を原始プログラム（１０）のコンパイル結果として出力するコード生成部（２５）とを備える。
【００１４】
本発明の第２の側面であるコンパイル方式は、コンピュータが、原始プログラム（１０）の字句要素を分解して字句解析結果を生成するステップ（ステップＳ２０）と、コンピュータが、字句解析結果から生成される字句解析データを関数単位で字句解析データ記憶部（２３）に記憶するステップ（ステップＳ７０）と、コンピュータが、字句解析データから生成される目的プログラム（３０）を関数単位で目的プログラムデータ記憶部（２６）に記憶するステップ（ステップＳ９０）と、コンピュータが、字句解析結果を入力すると字句解析結果から字句解析データを生成するステップ（ステップＳ３０）と、コンピュータが、生成された字句解析データが字句解析データ記憶部（２３）に記憶された字句解析データと関数単位で一致するか比較処理を行うステップ（ステップＳ１００）と、コンピュータが、比較処理において生成された字句解析データと一致する字句解析データが字句解析データ記憶部（２３）に記憶されていた場合、生成された字句解析データの関数に対応する目的プログラム（３０）を目的プログラムデータ記憶部（２６）から読み出すステップ（ステップＳ１２０）と、コンピュータが、読み出された目的プログラム（３０）を原始プログラム（１０）のコンパイル結果として出力するステップ（ステップＳ１３０）とを備える。
【００１５】
本発明の第３の側面であるコンピュータプログラムは、上述のコンパイル方式をコンピュータに実行させる。
【発明の効果】
【００１６】
本発明によれば、より高速なコンパイル処理を実現可能なコンパイル装置を提供することができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、特許文献１における分割コンパイル方式の説明する図である。
【図２Ａ】図２Ａは、特許文献１における原始プログラム２００の一例を示す図である。
【図２Ｂ】図２Ｂは、特許文献１における図２Ａの原始プログラム２００から生成された中間語を示す図である。
【図３】図３は、本発明の実施形態におけるコンパイル装置１００の構成を示す図である。
【図４】図４は、本発明の実施形態におけるコンパイル装置１００の機能を示す機能ブロック図である。
【図５Ａ】図５Ａは、本発明の実施形態における原始プログラム１０の一例を示している。
【図５Ｂ】図５Ｂは、本発明の実施形態における図５Ａの原始プログラム１０に対する字句解析結果を示す図である。
【図５Ｃ】図５Ｃは、本発明の実施形態における図５Ｂの字句解析結果から生成された字句解析データを示す図である。
【図６】図６は、本発明の実施形態におけるコンパイル装置１００の動作を示すフローチャートである。
【発明を実施するための形態】
【００１８】
添付図面を参照して、本発明の実施形態によるコンパイル装置を以下に説明する。
【００１９】
［概要］
本実施形態のコンパイル装置では、字句解析データ操作部が、字句解析部による原始プログラムの字句解析結果から、一意に識別可能な数値等により構成される関数単位の字句解析データを生成する。また、字句解析データ記憶部は、字句解析データを関数単位に保存する。そして、字句解析データ操作部は、新たに字句解析結果を入力すると軸解析データを生成して、関数単位に字句解析データ記憶部に記憶されている字句解析データと比較処理を行う。この比較処理において、新たな字句解析データと一致する字句解析データが字句解析データ記憶部に存在する場合、コード生成部は、当該関数に対応する目的プログラムを目的プログラムデータ記憶部から読み出して、コンパイル処理結果として出力する。
【００２０】
このように、字句解析データ操作部は、データ量が多く複雑な構成である中間語でなくデータ量が少なく単純な構成である字句解析データを用いて比較処理を行うことで、比較処理に要する時間を短縮することができる。その結果、コンパイル装置は、より高速なコンパイル処理を実現することができる。また、字句解析データ記憶部は、中間語に比べてデータ量の少ない字句解析データを保存することで、記憶するべきデータ量を削減することができる。以下、このような本実施形態のコンパイル装置の構成及び動作を詳細に説明する。
【００２１】
［構成の説明］
まず、本実施形態におけるコンパイル装置１００の構成の説明を行う。図３は、本実施形態におけるコンパイル装置１００の構成を示す図である。
【００２２】
本実施形態のコンパイル装置１００は、処理部１１０と、記憶部１２０と、入出力部１３０、通信部１４０を備える。処理部１１０と、記憶部１２０と、入出力部１３０、通信部１４０とは、バス１５０を介して接続されており、データの送受信が可能である。以下、コンパイル装置１００の各構成について説明する。
【００２３】
まず、通信部１４０は、外部装置との通信インターフェースである。通信部１４は、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）に例示される。コンパイル装置１００は、通信部１４０を介して図示されない外部のネットワークに接続して通信を行うことが可能である。
【００２４】
次に、入出力部１３０は、コンパイル装置１００のユーザとの入出力インターフェースである。入出力部１３０は、キーボードや、マウスに例示される入力装置や、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）に例示される出力装置に例示される。ユーザは、入出力部１３０を用いて、コンパイル装置１００を操作可能である。
【００２５】
次に、記憶部１２０は、コンパイル装置１００の機能を実現するコンピュータプログラムやデータを記憶する。記憶部１２０は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）や、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）や、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）に例示されるような主記憶装置、２次記憶装置により構成される。
【００２６】
記憶部１２０は、コンピュータプログラムとしてＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）１２１と、コンパイルプログラム１２２を備える。ＯＳ１２１は、コンパイル装置１００の基本的な機能を提供する基本ソフトウェアである。コンパイルプログラム１２２は、ＯＳ１２１上で動作するアプリケーションプログラムである。
【００２７】
次に、処理部１１０は、記憶部１２０に記憶されたコンピュータプログラムを実行してコンパイル装置１００の機能を実現する。制御部１２０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に例示される。
【００２８】
ここで、記憶部１２０に記憶されたコンパイルプログラム１２２は、移動可能な記憶媒体に記録することが可能である。記憶媒体とは、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ）や、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）インターフェースを搭載したフラッシュメモリ（ＵＳＢメモリ）等に例示される。コンパイルプログラム１２２は、このような記録媒体により流通が可能である。
【００２９】
この場合、コンパイルプログラム１２２は、図示されないコンパイル装置１００のＣＤドライブや、ＵＳＢインターフェースを介して、コンパイル装置１００へ導入される。また、コンパイルプログラム１２２は、図示されないネットワークに接続されたアプリケーションサーバのＨＤＤにダウンロード可能に記憶されていても良い。この場合、コンパイルプログラム１２２は、ネットワークを介して、コンパイル装置１００へ導入される。
【００３０】
続いて、図４は、本実施形態におけるコンパイル装置１００の機能を示す機能ブロック図である。コンパイル装置１００は、原始プログラム（ソースプログラム）１０に対してコンパイル処理を行って、目的プログラム（オブジェクトプログラム）３０を生成する。
【００３１】
本実施形態のコンパイル装置１００は、字句解析部２１と字句解析データ操作部２２と、字句解析データ記憶部２３と、構文解析・意味解析実行部（以下、解析実行部）２４と、コード生成部２５と、目的プログラムデータ記憶部２６とを備える。以下、各機能ブロックについて説明する。
【００３２】
まず、字句解析部２１は、原始プログラム１０の字句解析を行う。字句解析部２１は、原始プログラム１０を入力する。図５Ａは、本実施形態における原始プログラム１０の一例を示している。字句解析部２１は、字句解析において、原始プログラム１０の字句要素を最小単位であるトークンに分解した字句解析結果を生成する。図５Ｂは、本実施形態における図５Ａの原始プログラム１０に対する字句解析結果を示す図である。
【００３３】
次に、字句解析データ操作部２２は、字句解析結果から関数単位の字句解析データを生成する。字句解析データ操作部２２は、字句解析部２１から字句解析結果を入力する。字句解析データ操作部２２は、字句解析結果を一意に識別可能な数値や、文字列や、定数に変換して字句解析データを生成する。図５Ｃは、本実施形態における図５Ｂの字句解析結果から生成された字句解析データを示す図である。図５Ｃを参照すると、図５Ｂにおける文字列が、所定の数値に変換されている。このような一意に識別可能な文字列と数値への変換に用いられる変換用データは、ユーザにより予めコンパイル装置１００に記憶される。なお、必ずしも、数値に変換しなければならないわけではない、別の文字列への変換や、あるいは変換自体を行わないことも可能である。このような場合であっても、字句解析データは、中間語と比較してデータ量が少なく複雑でない。字句解析データ操作部２２は、字句解析データを解析実行部２４へ出力する。また、字句解析データ操作部２２は、字句解析データを関数単位に字句解析データ記憶部２３へ記憶する。
【００３４】
また、字句解析データ操作部２２は、解析実行部２４から関数単位の区切りを示す関数終了通知を受けると、関数単位の字句解析データの比較処理を行う。字句解析データ操作部２２は、字句解析結果から生成した関数単位の字句解析データと字句解析データ記憶部２３に記憶された関数単位の字句解析データとの比較処理を行う。字句解析データ操作部２２は、比較処理の結果、一致する字句解析データが存在する場合、当該関数に対する比較処理の一致をコード生成部２５へ通知する。この場合、当該関数に対する以降のコンパイル処理は行われず、以前に生成されて目的プログラムデータ記憶部２６に記憶された当該関数に対応する目的プログラム３０がコンパイル処理結果として出力される。一方、字句解析データ操作部２２は、比較処理の結果、一致する字句解析データが存在しない場合、字句解析データを解析実行部２４へ出力する。この場合、実行解析部２４及びコード生成部２５により、通常のコンパイル処理が継続される。
【００３５】
次に、字句解析データ記憶部２３は、字句解析データを記憶する。字句解析データ記憶部２３は、原始プログラム１０における関数単位に字句解析データを記憶する。字句解析データ記憶部２３は、字句解析データ操作部２２により字句解析データを書き込まれる。
【００３６】
次に、解析実行部２４は、字句解析データから中間語を生成する。解析実行部２４は、字句解析データ操作部２２から字句解析データを入力する。解析実行部２４は、字句解析データに対して構文解析及び意味解析を行って中間語を生成する。また、解析実行部２４は、構文解析及び意味解析により関数単位の区切りを検出すると、字句解析データの書き込みトリガとなる関数終了通知を、字句解析データ操作部２２へ通知する。
【００３７】
次に、コード生成部２５は、中間語から目的プログラム３０を生成する。字句解析データ操作部２２における比較処理において、一致する字句解析データが存在しない場合、コード生成部２５は、解析実行部２４から中間語を入力する。コード生成部２５は、中間語に基づいて目的プログラム３０を生成する。コード生成部２５は、目的プログラム３０をコンパイル処理結果として出力する。また、コード生成部２５は、生成された目的プログラム３０を関数単位に目的プログラムデータ記憶部２６へ記憶する。
【００３８】
また、コード生成部２５は、字句解析データ操作部２２から比較処理一致の通知を入力すると、目的プログラムデータ記憶部２６から当該関数に対応する目的プログラム３０を読み出して、コンパイル処理結果として出力する。このように、字句解析データ操作部２２による比較処理が一致する場合、改めて目的プログラム３０を生成することはせず、以前に生成された目的プログラム３０を出力することで、コンパイル処理を高速化することができる。
【００３９】
次に、目的プログラムデータ記憶部２６は、目的プログラム３０を記憶する。目的プログラムデータ記憶部２６は、関数単位に目的プログラム３０を記憶する。目的プログラムデータ記憶部２６は、コード生成データ２５から目的プログラム３０を書き込まれる。
【００４０】
以上が、本実施形態におけるコンパイル装置１００の構成の説明である。
【００４１】
［動作の説明］
次に、上述のような構成である本実施形態におけるコンパイル装置１００の動作の説明を行う。図６は、本実施形態におけるコンパイル装置１００の動作を示すフローチャートである。
【００４２】
まず、字句解析部２１は、原始プログラム１０を入力する（ステップＳ１０）。字句解析部２１は、原始プログラム１０の字句解析を行う（ステップＳ２０）。字句解析部２１は、字句解析において、原始プログラム１０の字句要素を最小単位であるトークンに分解して字句解析結果を生成する。
【００４３】
字句解析データ操作部２２は、字句解析部２１により生成された字句解析結果を入力する。字句解析データ操作部２２は、字句解析結果を一意に識別可能な数値や、文字列や、定数に変換して字句解析データを生成する（ステップＳ３０）。
【００４４】
解析実行部２４は、解析実行部２４から字句解析データを入力する。解析実行部２４は、字句解析データに構文解析及び意味解析を実行して中間語を生成する（ステップＳ４０）。解析実行部２４は、構文解析及び意味解析の結果により関数の区切りを検出すると、関数の区切りを通知する関数終了通知を、字句解析データ操作部２２へ通知する（ステップＳ５０）。
【００４５】
字句解析データ操作部２２は、関数終了通知を受けると、字句解析データ記憶部２３に字句解析データが存在するか判定する（ステップＳ６０）。字句解析データ記憶部２３に字句解析データが存在しない場合（ステップＳ６０のＮｏ）、字句解析データ操作部２２は、当該関数の字句解析データを関数単位に字句解析データ記憶部２３へ保存する（ステップＳ７０）。
【００４６】
そして、コード生成部２５は、解析実行部２４により生成された当該関数の中間語に基づいて、目的プログラム２０のコードを生成する（ステップＳ８０）。この場合、字句解析データ操作部２２からコード生成部２５へ、字句解析データが存在しない旨の通知を行っても良い。コード生成部２５は、生成された目的プログラム２０をコンパイル処理結果として出力すると共に、目的プログラムデータ記憶部２６へ生成された目的プログラム２０を関数単位に保存する（ステップＳ９０）。これにより本フローチャートは終了となる。
【００４７】
一方、字句解析データ記憶部２３に字句解析データが存在する場合（ステップＳ６０のＹｅｓ）、字句解析データ操作部２２は、当該関数の字句解析データと字句解析データ記憶部２３に保存された字句解析データの比較処理を行う。字句解析データ操作部２２は、当該関数の字句解析データと一致する字句解析データが字句解析データ記憶部２３に存在するかを判定する（ステップＳ１００）。一致する字句解析データが字句解析データ記憶部２３に存在しない場合（ステップＳ１００のＮｏ）、すなわち、当該関数に対して何らかの変更があったと認められる場合、ステップＳ７０へ移行する。字句解析データ操作部２２は、当該関数の字句解析データを字句解析データ記憶部２３へ保存する（ステップＳ７０）。
【００４８】
そして、コード生成部２５は、解析実行部２４により生成された当該関数の中間語に基づいて、目的プログラム２０のコードを生成する（ステップＳ８０）。この場合、字句解析データ操作部２２からコード生成部２５へ、一致する字句解析データが存在しない旨の通知を行っても良い。コード生成部２５は、目的プログラム２０をコンパイル処理結果として出力すると共に、目的プログラムデータ記憶部２６へ生成した目的プログラム２０を関数単位に保存する（ステップＳ９０）。これにより本フローチャートは終了となる。
【００４９】
一方、一致する字句解析データが字句解析データ記憶部２３に存在する場合（ステップＳ１００のＹｅｓ）、すなわち、当該関数に関して変更が認められない場合、字句解析データ操作部２２は、当該関数に対する比較処理の結果として字句解析データの一致をコード生成部２５へ通知する（ステップＳ１１０）。コード生成部２５は、字句解析データの一致の通知を受けて、目的プログラムデータ記憶部２６から当該関数に対応する目的プログラム３０を読み出す（ステップＳ１２０）。コード生成部２５は、読み出した目的プログラム３０をコンパイル処理結果として出力する（ステップＳ１３０）。なお、ステップＳ１１０において、一致する字句解析データが字句解析データ記憶部２３に存在する場合でも、当該関数の字句解析データ２３を字句解析データ記憶部２３へ記憶する動作としても良い。
【００５０】
以上が、本実施形態におけるコンパイル装置１００の動作の説明である。
【００５１】
ここまで、本実施形態のコンパイル装置１００の説明を行ってきた。本実施形態のコンパイル装置によれば、字句解析データ操作部２２は、原始プログラム１０の字句解析結果から一意に識別可能な数値等により構成される関数単位の字句解析データを生成する。字句解析データ記憶部２３は、字句解析データを関数単位に保存する。字句解析データ操作部２２は、新たに字句解析結果を入力すると関数単位の軸解析データを生成して、字句解析データ記憶部２３に記憶されている字句解析データと比較処理を行う。この比較処理において、字句解析データ記憶部２３に一致する字句解析データが存在する場合、コード生成部２５は、当該関数に対応する目的プログラム３０を目的プログラムデータ記憶部２６から読み出して、コンパイル処理結果として出力する。
【００５２】
このように、字句解析データ操作部２２は、データ量が多く複雑な構成である中間語でなくデータ量が少なく単純な構成である字句解析データを用いて比較処理を行うことで、比較処理に要する時間を短縮することができる。従来、コンパイル装置では、解析実行部２４が構文解析や意味解析を実行しつつ、字句解析部２１を呼び出すといった構成がとられていた。本実施形態のコンパイル装置１００では、字句解析結果から字句解析データを生成する字句解析データ操作部２２を備えるため、字句解析結果を独立して扱うことが可能となる。以上のような構成及び動作により、コンパイル装置１００は、より高速なコンパイル処理を実現することができる。また、字句解析データ記憶部２３は、中間語に比べてデータ量の少ない字句解析データを保存することで、記憶するべきデータ量を削減することも可能となる。
【００５３】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記の実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【００５４】
１０  原始プログラム
２１  字句解析部
２２  字句解析データ操作部
２３  字句解析データ記憶部
２４  構文解析・意味解析実行部
２５  コード生成部
２６  目的プログラムデータ記憶部
３０  目的プログラム
１００  コンパイル装置
１１０  処理部
１２０  記憶部
１２１  ＯＳ
１２２  コンパイルプログラム
１３０  入出力部
１４０  通信部
１５０  バス
２００  原始プログラム
２１０  コンパイラ
２１１  解析フェーズ
２１２  判別フェーズ
２１３  コード生成フェーズ
２２０  目的プログラム
【図１】
2011204074.tif 000003
【図２Ａ】
2011204074.tif 000004
【図２Ｂ】
2011204074.tif 000005
【図３】
2011204074.tif 000006
【図４】
2011204074.tif 000007
【図５Ａ】
2011204074.tif 000008
【図５Ｂ】
2011204074.tif 000009
【図５Ｃ】
2011204074.tif 000010
【図６】
2011204074.tif 000011