(57)【要約】【課題】指定される複数の拡張言語仕様による入力プログラム及び目的プログラムに対する影響をユーザが容易に把握できるコンパイル方法を提供する。【解決手段】入力プログラムを目的プログラムに変換するコンパイル方法であって、入力プログラムに複数の拡張言語仕様が指定される場合、指定された複数の拡張言語仕様を解析することにより、指定された複数の拡張言語仕様によって影響を受ける入力プログラムの部分を決定する解析ステップと、その部分に関する情報を、目的プログラムと共に出力する出力ステップとを含むことを特徴とする。【選択図】図２
2010108258.tif 000002
【特許請求の範囲】
【請求項１】
入力プログラムを目的プログラムに変換するコンパイル方法であって、
前記入力プログラムに複数の拡張言語仕様が指定される場合、指定された前記複数の拡張言語仕様を解析することにより、前記指定された複数の拡張言語仕様によって影響を受ける前記入力プログラムの部分を決定する解析ステップと、
前記部分に関する情報を、前記目的プログラムと共に出力する出力ステップとを含む
ことを特徴とするコンパイル方法。
【請求項２】
前記解析ステップは、
複数の拡張言語仕様に対して供される優先度の規定に基づいて、複数の拡張言語仕様の指定の中で有効な拡張言語仕様の指定を決定し、当該有効な拡張言語仕様の指定によって影響を受ける前記入力プログラムの部分を決定し、
前記出力ステップは、
前記部分に関する情報として、当該有効な拡張言語仕様の指定と、当該有効な拡張言語仕様の指定によって影響を受ける前記入力プログラム中のオブジェクトと、前記優先度の規定と、当該有効な拡張言語仕様によって影響を受けて変更されたオブジェクトの変更内容との少なくとも１つを、前記目的プログラムと共に出力する
ことを特徴とする請求項１に記載のコンパイル方法。
【請求項３】
前記出力ステップは、
前記部分に関する情報を前記入力プログラムに含めて、前記目的プログラムと共に出力する入力プログラム出力ステップを含む
ことを特徴とする請求項２に記載のコンパイル方法。
【請求項４】
前記出力ステップは、
前記部分に関する情報を前記目的プログラムに含めて、前記目的プログラムと共に出力する目的プログラム出力ステップを含む
ことを特徴とする請求項２に記載のコンパイル方法。
【請求項５】
前記出力ステップは、
前記部分に関する情報として、当該有効な拡張言語仕様の指定と、当該有効な拡張言語仕様の指定によって影響を受ける前記入力プログラム中のオブジェクトと、前記優先度の規定と、当該有効な拡張言語仕様によって影響を受けて変更されたオブジェクトの変更内容と、前記拡張言語仕様の指定によって影響を受けるコンパイル過程におけるアセンブラ命令と、前記拡張言語仕様の指定を無効にした場合のコンパイル過程におけるアセンブラ命令との少なくとも１つを、前記目的プログラムに含めて、前記目的プログラムと共に出力する目的プログラム出力ステップを含む
ことを特徴とする請求項２に記載のコンパイル方法。
【請求項６】
前記出力ステップは、さらに、
前記部分に関する情報に基づいて、前記入力プログラム中のオブジェクトのアラインメントが変更されるかを確認し、確認した前記オブジェクトの変更されるアラインメントが、期待されるアラインメントと一致しない場合、前記オブジェクトのアラインメントに不整合が生ずる旨を示す警告を出力する警告出力ステップを含む
ことを特徴とする請求項１に記載のコンパイル方法。
【請求項７】
前記出力ステップは、さらに、
前記部分に関する情報に基づいて、前記拡張言語仕様の指定により影響を受けるオブジェクトを含めた前記入力プログラム中のすべてのオブジェクトについて、当該オブジェクトのアラインメントが、プログラム実行環境での転送命令に対して最適なアラインメントに変更されるかを確認し、前記入力プログラム中で少なくとも１つのオブジェクトが最適なアラインメントに変更されない場合、前記少なくとも１つのオブジェクトに対する最適なアラインメントの提示を出力する最適化提案出力ステップを含む
ことを特徴とする請求項１に記載のコンパイル方法。
【請求項８】
前記複数の拡張言語仕様に対して供される優先度の規定は、予め規定されている
ことを特徴とする請求項２に記載のコンパイル方法。
【請求項９】
前記複数の拡張言語仕様に対して供される優先度の規定は、さらに、ユーザにより規定され、
前記解析ステップは、前記ユーザにより規定された当該優先度の規定を、前記複数の拡張言語仕様に対して供される優先度の規定とする
ことを特徴とする請求項８に記載のコンパイル方法。
【請求項１０】
入力プログラムを目的プログラムに変換するコンパイルプログラムであって、
前記入力プログラムに複数の拡張言語仕様が指定される場合、指定された前記複数の拡張言語仕様を解析することにより、前記指定された複数の拡張言語仕様によって影響を受ける前記入力プログラムの部分を決定する解析ステップと、
前記部分に関する情報を、前記目的プログラムと共に出力する出力ステップとを
コンピュータに実行させるためのコンパイルプログラム。
【請求項１１】
入力プログラムを目的プログラムに変換するコンパイル装置であって、
前記入力プログラムに複数の拡張言語仕様が指定される場合、指定された前記複数の拡張言語仕様を解析することにより、前記指定された複数の拡張言語仕様によって影響を受ける前記入力プログラムの部分を決定する解析部と、
前記部分に関する情報を、前記目的プログラムと共に出力する出力部とを含む
ことを特徴とするコンパイル装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイル方法及びコンパイルプログラムに関し、特に拡張言語仕様が指定される入力プログラムを目的プログラムに変換するコンパイル方法及びコンパイルプログラムに関する。
【背景技術】
【０００２】
高級言語（例えばＣ又はＣ＋＋）のコンパイラには、通常、プログラム実行環境において最高のパフォーマンスを得るために、拡張言語仕様が用意されている。
【０００３】
ここで、プログラム実行環境とは、高級言語で書かれたプログラムが実行される環境である。また、言語仕様とは、言語の仕様すなわち、その言語の文法や意味が規定されたものである。また、拡張言語仕様は、言語仕様で予め規定されたものとは別に、新たに（拡張して）その言語の文法や意味を規定したものである。言い換えると、拡張言語仕様では、ある記述（例えば、式または文など）に対してどのような意味を持ち、どのような動作をするのかが規定される。そして、プログラム中で拡張言語仕様の指定を行うことで、コンパイラに、指定された拡張言語仕様の該当する、例えば式または文などの記述（以下、拡張言語仕様文と記載する。）に対する規定に従う動作をさせることができる。また、拡張言語仕様の指定方法としては、例えばコマンドラインにおけるオプション、プラグマ（＃ｐｒａｇｍａ）または属性（＿＿ａｔｔｒｉｂｕｔｅ＿＿）などによる指定がある。
【０００４】
しかし、近年のプログラム規模の増大に伴い、拡張言語仕様の指定によるプログラム全体に対する影響を把握することが困難となっている。さらに、プログラム実行環境の高機能化に伴い、指定可能な拡張言語仕様の規定が詳細化及び複雑化し、ある拡張言語仕様の指定（ある拡張言語仕様文）が別の拡張言語仕様の指定（別の拡張言語仕様文）に影響を及ぼしてしまうことが頻繁に起こるようになっている。
【０００５】
このため、ユーザは、プログラム全体に対して、単一の拡張言語仕様文の動作を把握するだけではなく、関連する拡張言語仕様文を複数指定した場合の動作への影響など、複数の拡張言語仕様文の間での協調動作について把握しなければならない。しかし、高級言語に熟練したユーザであっても、複数の拡張言語仕様文の間での協調動作を完全に把握することは難しい。そのため、拡張言語仕様を指定することが、予期せぬバグを埋め込む要因となっている。
【０００６】
そこで、従来の拡張言語仕様の指定方法では、ユーザが指定した拡張言語仕様（拡張言語仕様文）の候補を解析し、その解析結果に基づいて、オブジェクトに対する拡張言語仕様（拡張言語仕様文）を自動的に指定する方法が提案されている（例えば、特許文献１参照。）。また、ユーザが拡張言語仕様文を指定しなかったとしても、良好な最適化ができるように、自動的に拡張言語仕様文の指定を挿入して入力プログラムを修正する方法が提案されている（例えば、特許文献２参照。）。また、コンパイラが誤った目的プログラムを生成しないように拡張言語仕様文の指定のチェックを行う方法も提案されている（例えば、特許文献３参照。）。
【特許文献１】特開２００７−１０８９４０号公報
【特許文献２】特開２００６−１０７３３８号公報
【特許文献３】特開２００６−１０７３３９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、以下に説明するように、従来の方法では、ユーザは、指定する拡張言語仕様文が入力プログラム及び目的プログラムにどのような影響を及ぼすのかを容易に把握できないという問題がある。以下、従来の方法での問題点について説明する。
【０００８】
図２５は、従来の方法における指定される拡張言語仕様文の状態表示の実施例を示す図である。従来の方法すなわち特許文献１の方法では、ユーザは、指定した特定の（一つの）拡張言語仕様文がどのオブジェクトを指定しているかを確認できる。また、拡張言語仕様文の指定方法が、オプションによる指定であるのか、ソース中における記述による指定（例えばプラグマなど）であるのか、またはその両方による指定であるのかを確認できる。
【０００９】
しかしながら、特許文献１の方法では、入力プログラム上のどの箇所が、拡張言語仕様文の指定による影響を受けるかを確認できるものの、コンパイル後に出力される目的プログラム（例えば、アセンブラプログラム）上のどの箇所が、拡張言語仕様文の指定により影響を受けるかを確認することはできない。また、入力プログラム中にどのような拡張言語仕様文が指定されているかを把握できるものの、その指定された拡張言語仕様文により、対象となるオブジェクトがどのように変更するのか（例えば、アラインメント値がどのように変化するのかなど）についてユーザは把握できない。
【００１０】
さらに、図２５に示すように、特許文献１の方法では、特定の一つの拡張言語仕様文がどのオブジェクトを指定しているかを表示できるものの、あるオブジェクトがどの拡張言語仕様文の影響を受けるかという観点では表示できない。このため、ユーザは、対象のオブジェクトに対して、複数の拡張言語仕様文により重複して指定する場合に、その複数の拡張言語仕様文の中でどの拡張言語仕様文が実際に有効となるのかを確認することができない。
【００１１】
また、特許文献２の方法では、自動的に拡張言語仕様文が挿入されて入力プログラムが修正されるものの、挿入されたその拡張言語仕様文と、すでに記載されていた拡張言語仕様文とで対象となるオブジェクトに対する優先度及び重複指定の有無が考慮されていない。例えばある拡張言語仕様文Ａを有効にすればよいと判断されれば、単純に拡張言語仕様文Ａを挿入すればよいという提案がなされる。しかし、プログラム中に拡張言語仕様文Ａと協調動作をする拡張言語仕様文Ｂというものがすでにプログラム中に記載されているとすれば、拡張言語仕様文Ａの挿入によって拡張言語仕様文Ｂの動作が変更される。このように優先度及び重複指定の有無の考慮がないことで、ユーザが当初意図していたプログラムの動作とは異なる動作になる問題がある。
【００１２】
また、特許文献３の方法も同様に、すでに記載されている拡張言語仕様文が、重複して指定されている場合の影響が考慮されていない。例えば、ある拡張言語仕様文Ａと拡張言語仕様文Ｂとが協調動作をすることで期待した動作をするプログラムの場合でも、重複指定の影響が考慮されないため拡張言語仕様文Ａのチェックしか行わずエラーと判断される問題がある。
【００１３】
そこで、本発明は、かかる課題に鑑みてなされたものであり、指定される複数の拡張言語仕様による入力プログラム及び目的プログラムに対する影響をユーザが容易に把握できるコンパイル方法及びコンパイルプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明のコンパイル方法は、入力プログラムを目的プログラムに変換するコンパイル方法であって、前記入力プログラムに複数の拡張言語仕様が指定される場合、指定された前記複数の拡張言語仕様を解析することにより、前記指定された複数の拡張言語仕様によって影響を受ける前記入力プログラムの部分を決定する解析ステップと、前記部分に関する情報を、前記目的プログラムと共に出力する出力ステップとを含むことを特徴とする。
【００１５】
これによれば、指定される複数の拡張言語仕様（拡張言語仕様文）による入力プログラム及び目的プログラムに対する影響をユーザが容易に把握することができる。
【００１６】
また、好ましくは、前記解析ステップは、複数の拡張言語仕様に対して供される優先度の規定に基づいて、複数の拡張言語仕様の指定の中で有効な拡張言語仕様の指定を決定し、当該有効な拡張言語仕様の指定によって影響を受ける前記入力プログラムの部分を決定し、前記出力ステップは、前記部分に関する情報として、当該有効な拡張言語仕様の指定と、当該有効な拡張言語仕様の指定によって影響を受ける前記入力プログラム中のオブジェクトと、前記優先度の規定と、当該有効な拡張言語仕様によって影響を受けて変更されたオブジェクトの変更内容との少なくとも１つを、前記目的プログラムと共に出力する。
【００１７】
また、好ましくは、前記出力ステップは、前記部分に関する情報を前記入力プログラムに含めて、前記目的プログラムと共に出力する入力プログラム出力ステップを含む。
【００１８】
それらにより、ユーザに指定される複数の拡張言語仕様（拡張言語仕様文）が入力プログラムにどのように影響を及ぼしているのかをユーザが容易に把握することが可能となり、検収効率が向上する。
【００１９】
また、好ましくは、前記出力ステップは、前記部分に関する情報を前記目的プログラムに含めて、前記目的プログラムと共に出力する目的プログラム出力ステップを含む。
【００２０】
これによれば、ユーザに指定される複数の拡張言語仕様（拡張言語仕様文）が目的プログラムにどのように影響を及ぼしているのかをユーザが容易に把握することが可能となり、検収効率が向上する。
【００２１】
また、好ましくは、前記出力ステップは、さらに、前記部分に関する情報に基づいて、前記入力プログラム中のオブジェクトのアラインメントが変更されるかを確認し、確認した前記オブジェクトの変更されるアラインメントが、期待されるアラインメントと一致しない場合、前記オブジェクトのアラインメントに不整合が生ずる旨を示す警告を出力する警告出力ステップを含む。
【００２２】
それによれば、ユーザが拡張言語仕様（拡張言語仕様文）を指定したことで発生するかもしれない予期せぬオブジェクト間のアラインメント不整合をコンパイル時に検出可能となり、検収効率が向上する。
【００２３】
また、好ましくは、前記出力ステップは、さらに、前記部分に関する情報に基づいて、前記拡張言語仕様の指定により影響を受けるオブジェクトを含めた前記入力プログラム中のすべてのオブジェクトについて、当該オブジェクトのアラインメントが、プログラム実行環境での転送命令に対して最適なアラインメントに変更されるかを確認し、前記入力プログラム中で少なくとも１つのオブジェクトが最適なアラインメントに変更されない場合、前記少なくとも１つのオブジェクトに対する最適なアラインメントの提示を出力する最適化提案出力ステップを含む。
【００２４】
それによれば、プログラム実行環境に関する情報に精通したプログラマでなくても、コード生成効率を高めるアラインメントの指定を行う拡張言語仕様（拡張言語仕様文）を効率的に指定できるようになり、チューニング効率が向上する。
【００２５】
また、好ましくは、前記複数の拡張言語仕様に対して供される優先度の規定は、予め規定されている。
【００２６】
また、前記複数の拡張言語仕様に対して供される優先度の規定は、さらに、ユーザにより規定され、前記解析ステップは、前記ユーザにより規定された当該優先度の規定を、前記複数の拡張言語仕様に対して供される優先度の規定とする。
【００２７】
それによれば、拡張言語仕様（拡張言語仕様文）に対して事前に規定されている優先度のみならず、ユーザによって優先度を別途指定することが可能となり、検収効率が向上する。
【００２８】
なお、本発明は、このような特徴的なステップを有するコンパイル方法として実現することができるだけでなく、そのコンパイル方法に含まれる特徴的なステップを処理手段とするコンパイラ装置として実現したり、そのコンパイル方法に含まれる特徴的なステップをコンピュータに実行させるコンパイラとして実現したりすることもできる。そして、そのようなコンパイラは、Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＣＤ−ＲＯＭ）などの記憶媒体やインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。
【発明の効果】
【００２９】
本発明のコンパイル方法によれば、指定される複数の拡張言語仕様（拡張言語仕様文）による入力プログラム及び目的プログラムに対する影響をユーザが容易に把握できるコンパイル方法及びコンパイルプログラムを実現することができる。それにより検収工数が削減できる。
【００３０】
さらに、ユーザが拡張言語仕様文を入力プログラム中に指定することで、発生するかもしれない予期せぬアラインメント不整合を、拡張言語仕様文の間の優先度を考慮してコンパイル時に正しく検出することができるだけでなく、コード生成効率を高めるアラインメント指定の拡張言語仕様文をコンパイラに提案させることができる。それにより、検収工数が削減できるだけでなく、ユーザのプログラムチューニング工数を削減することができる。
【発明を実施するための最良の形態】
【００３１】
以下、本発明の実施形態について、図面を用いて説明する。
【００３２】
図１は、本発明の実施の形態におけるコンパイル方法の特徴的な処理ステップを示す図である。
【００３３】
図１に示すように、本発明のコンパイル方法は、複数の拡張言語仕様文の優先度に基づいて、ユーザより入力プログラム中に付加された複数の拡張言語仕様文により影響を受ける入力プログラムの部分に関する情報（拡張言語仕様情報と呼ぶ。）を解析する拡張言語仕様解析ステップ（Ｓ１）を有する。本発明のコンパイル方法は、拡張言語仕様解析ステップ（Ｓ１）において解析された拡張言語仕様情報をコンパイル結果として、ユーザに表示するため出力する拡張言語仕様情報出力ステップ（Ｓ３）を含む。また、本発明のコンパイル方法は、解析された拡張言語仕様情報に基づいてオブジェクト間のアラインメント不整合を検出してコンパイルするとアラインメント不整合が生ずる旨を示す警告を出力するオブジェクト間警告出力ステップ（Ｓ５）と、解析された拡張言語仕様情報に基づいてよりコード性能を向上させるような拡張言語仕様文の指定方法をユーザに示す提示を出力する最適化提案出力ステップ（Ｓ７）とを含む。
【００３４】
拡張言語仕様情報出力ステップ（Ｓ３）では、拡張言語仕様情報を入力プログラムに付加させて出力する拡張言語仕様情報付き入力プログラム出力ステップ（Ｓ３２）と、目的プログラムに付加させて出力する拡張言語仕様情報付き目的プログラム出力ステップ（Ｓ３４）とを含む。
【００３５】
また、本発明のコンパイル方法では、拡張言語仕様解析ステップ（Ｓ１）が行われた後、拡張言語仕様情報出力ステップ（Ｓ３）、オブジェクト間警告出力ステップ（Ｓ５）、及び最適化提案出力ステップ（Ｓ７）はそれぞれ、独立して動作することが可能である。また、Ｓ３〜Ｓ７は、ユーザの指示（オプションなど）によってそれぞれ処理を行うか否かを選択することができる。
【００３６】
ここで、ユーザの指示とは、入力プログラム中に付加される拡張言語仕様文のことであり、例えばコマンドラインにおけるオプション、プラグマ（＃ｐｒａｇｍａ）または属性（＿＿ａｔｔｒｉｂｕｔｅ＿＿）などにより拡張言語仕様（拡張言語仕様文）の指定を行う。
【００３７】
以下、本発明の実施の形態に係るコンパイル方法について図面を参照しながら説明する。
【００３８】
図２は、本発明の実施の形態におけるコンパイラにより実行される処理を示すフローチャートである。
【００３９】
ここで、コンパイラとは、人間がプログラミング言語で記述したソフトウェアの設計図（入力プログラム）を、コンピュータが実行できる形式（オブジェクトコード）に変換するソフトウェア（コンパイルプログラム）である。コンパイラは、メモリ、ＣＰＵを有するコンピュータ上で実行され、入力プログラムを一旦中間コードであるアセンブリ言語に変換後に目的プログラムに変換する。
【００４０】
以下、コンパイラを本発明のコンパイル方法を実行するプログラムとして以下説明する。
【００４１】
まず、コンパイラは、入力プログラムを読み込む入力ステップを実行する。
【００４２】
次に、コンパイラは、入力ステップで読み込んだ入力プログラムに対して、拡張言語仕様の指定状況、すなわち複数の拡張言語仕様文の優先度に基づいて、ユーザより入力プログラム中に付加された複数の拡張言語仕様文により影響を受ける入力プログラムの部分に関する情報を解析する拡張言語仕様解析ステップを実行し、その解析結果を拡張言語仕様情報として拡張言語仕様情報データベース５１に登録する（Ｓ１）。
【００４３】
ここで、例えば、拡張言語仕様情報は、複数の拡張言語仕様文の中で有効な拡張言語仕様文（以下、有効な拡張言語仕様文と記述する。）、拡張言語仕様文によって影響を受けるオブジェクト、コンパイルで採用される複数の拡張言語仕様文の優先度（以下、採用された優先度と記述する。）及び拡張言語仕様文によって影響を受けて変更されるオブジェクトの変更内容（以下、オブジェクトの変更内容と記述する。）である。
【００４４】
また、拡張言語仕様情報データベース５１は、拡張言語仕様情報が記憶されるデータベースである。なお、拡張言語仕様情報データベース５１は、コンパイラの外部または内部に記憶部として備えられてもよい。
【００４５】
次に、コンパイラは、ユーザの指示（オプションなど）によって拡張言語仕様情報を出力するかどうかを確認する（Ｓ２）。コンパイラは、拡張言語仕様情報を出力する場合（Ｓ２でｙｅｓの場合）、拡張言語仕様情報データベース５１を参照しつつ、拡張言語仕様解析ステップ（Ｓ１）において解析された拡張言語仕様情報を、ユーザに表示するために出力する拡張言語仕様情報出力ステップを実行する（Ｓ３）。コンパイラは、拡張言語仕様情報出力ステップ（Ｓ３）の実行後、ステップＳ４を実行する。なお、コンパイラは、Ｓ２で拡張言語仕様情報を出力しないことを確認した場合（Ｓ２でｎｏの場合）も、ステップＳ４を実行する。
【００４６】
次に、コンパイラは、ユーザの指示（オプションなど）によってオブジェクト間のアラインメント不整合を警告するかどうかを確認する（Ｓ４）。
【００４７】
コンパイラは、オブジェクト間のアラインメント不整合を警告する場合（Ｓ４でｙｅｓの場合）、拡張言語仕様情報データベース５１を参照しつつ、コンパイルするとオブジェクト間のアラインメント不整合を検出しコンパイルするとアラインメント不整合が生ずる旨を示す警告を出力するオブジェクト間警告出力ステップを実行する（Ｓ５）。コンパイラは、オブジェクト間警告出力ステップ（Ｓ５）の実行後、ステップＳ６に進む。
【００４８】
なお、コンパイラは、オブジェクト間のアラインメント不整合を警告しないことを確認した場合（Ｓ４でＮｏの場合）も、ステップＳ６を実行する。
【００４９】
次に、コンパイラは、ユーザの指示（オプションなど）によって拡張言語仕様指定案を提示するかどうかを確認する（Ｓ４）。
【００５０】
コンパイラは、拡張言語仕様指定案を提示する場合（Ｓ６でｙｅｓの場合）、拡張言語仕様情報データベース５１とさらにプログラム実行環境情報とを参照しつつ、よりコード性能を向上させるような拡張言語仕様の指定方法をユーザに示す提示を出力する最適化提案出力ステップ（Ｓ７）を実行する。ここで、プログラム実行環境情報とは、予め設定された最適化提案のための情報であり、例えば、予め設定された最適なアラインメント情報などがある。
【００５１】
その後、その他のコンパイルステップ（Ｓ９）を実行し、目的プログラムとともにコンパイル結果を出力する。
【００５２】
また、コンパイラは、拡張言語仕様指定案を提示しないことを確認した場合（Ｓ６でｎｏの場合）も、ステップＳ９を実行する。
【００５３】
なお、その他のコンパイルステップ（Ｓ７）は、本発明に関わらないコンパイルステップであり、本発明の要旨ではないため、説明を省略する。
【００５４】
また、拡張言語仕様解析ステップ（Ｓ１）、拡張言語仕様情報出力ステップ（Ｓ３）、オブジェクト間警告出力ステップ（Ｓ５）及び最適化提案出力ステップ（Ｓ７）は、必ずしもコンパイル開始の直後に行う必要はなく、構文解析または意味解析などその他のコンパイルステップの後で行ってもよい。
【００５５】
以下、本発明の主眼である拡張言語仕様解析ステップ（Ｓ１）、拡張言語仕様情報出力ステップ（Ｓ３）、オブジェクト間警告出力ステップ（Ｓ５）及び最適化提案出力ステップ（Ｓ７）について順次説明する。
【００５６】
図３は、本発明の実施の形態における拡張言語仕様情報解析ステップでの処理を示すフローチャートである。
【００５７】
拡張言語仕様解析ステップ（Ｓ１）では、コンパイラは、入力プログラムに定義されているオブジェクト毎に対して以下の処理（ループＡと記載。）を繰り返す。
【００５８】
まず、コンパイラは、入力プログラム中でオブジェクトに影響を及ぼす拡張言語仕様が指定されているかどうかの判定を行う（Ｓ１２）。ここで、指定されていない場合（Ｓ１２でｎｏの場合）、コンパイラは、次のオブジェクトに対してループＡの処理を行う。
【００５９】
次に、コンパイラは、入力プログラム中でオブジェクトに影響を及ぼす拡張言語仕様文が指定されている場合（Ｓ１２でｙｅｓの場合）、入力プログラム中でオブジェクトに対して拡張言語仕様文が重複して指定されているかどうかの判定を行う（Ｓ１３）。重複して指定されていない場合（Ｓ１３でｎｏの場合）、コンパイラは、有効な拡張言語仕様文、拡張言語仕様文の影響を受けるオブジェクト及びオブジェクト変更内容を拡張言語仕様情報として、拡張言語仕様情報データベース５１に登録する（Ｓ１４）。そして、次のオブジェクトに対してループＡの処理を行う。
【００６０】
次に、拡張言語仕様文が重複指定されている場合（Ｓ１３でｙｅｓの場合）、コンパイラは、ユーザから拡張言語仕様文の優先度が別途指定されているかどうかの判定を行う（Ｓ１５）。別途指定されていない場合（Ｓ１５のｎｏ）、コンパイラは、有効な拡張言語仕様文、拡張言語仕様文の影響を受けたオブジェクト、採用された優先度としてコンパイラで事前に規定している優先度及びオブジェクト変更内容を拡張言語仕様情報として、拡張言語仕様情報データベース５１に登録する（Ｓ１６）。そして、次のオブジェクトに対してループＡの処理を行う。
【００６１】
次に、コンパイラは、ユーザから拡張言語仕様文の優先度が別途指定されている場合（Ｓ１５でｙｅｓの場合）、有効な拡張言語仕様文、拡張言語仕様文の影響を受けるオブジェクト、採用された優先度としてのユーザ指定の優先度及びオブジェクトの変更内容を拡張言語仕様情報として、拡張言語仕様情報データベース５１に登録する（Ｓ１７）。そして、次のオブジェクトに対してループＡの処理を行う。
【００６２】
以上のように、コンパイラは、拡張言語仕様解析ステップ（Ｓ１）を実行する。
【００６３】
図４は、本発明の実施の形態における拡張言語仕様情報出力ステップでの処理を示すフローチャートである。
【００６４】
拡張言語仕様情報出力ステップ（Ｓ３）では、まず、コンパイラは、入力プログラムに対して拡張言語仕様情報を付加するために出力するかどうかの判定を行う（Ｓ３１）。入力プログラムに対して出力する場合（Ｓ３１のｙｅｓの場合）、コンパイラは、拡張言語仕様情報付き入力プログラム出力ステップ（Ｓ３２）を実行する。コンパイラは、拡張言語仕様情報付き入力プログラム出力ステップ（Ｓ３２）の実行後、ステップＳ３３を実行する。
【００６５】
なお、コンパイラは、Ｓ３１で入力プログラムに対して拡張言語仕様情報を付加するために出力しないと判定した場合（Ｓ３２でＮｏの場合）も、次のステップＳ３３を実行する。
【００６６】
次に、コンパイラは、目的プログラムに対して拡張言語仕様情報を付加するために出力するかどうかの判定を行う（Ｓ３３）。目的プログラムに対して出力する場合（Ｓ３３のｙｅｓの場合）、コンパイラは、拡張言語仕様情報付き目的プログラム出力ステップ（Ｓ３４）を実行する。コンパイラは、拡張言語仕様情報付き目的プログラム出力ステップ（Ｓ３４）の実行後、次のステップＳ４を実行する。なお、コンパイラは、Ｓ３３で目的プログラムに対して拡張言語仕様情報を付加するために出力しないと判定した場合（Ｓ３３でＮｏの場合）も、次のステップＳ４を実行する。
【００６７】
以上のように、コンパイラは、拡張言語仕様情報出力ステップ（Ｓ３）を実行する。
【００６８】
図５は、本発明の実施の形態における拡張言語仕様情報付き入力プログラム出力ステップでの処理を示すフローチャートである。
【００６９】
拡張言語仕様情報付き入力プログラム出力ステップ（Ｓ３２）では、まず、コンパイラは、入力プログラムにおける各オブジェクトの定義箇所を記録する（Ｓ３２１）。次に、拡張言語仕様データベースに登録されているすべてのオブジェクト毎に対して以下の処理（ループＢと記載。）を繰り返す。ここで、入力プログラムにおける各オブジェクトの定義箇所は、拡張言語仕様情報データベース５１に記録されてもよく、コンパイラが一時記録部を有し、その一時記録部に記録されるとしてもよい。
【００７０】
ループＢでは、コンパイラは、Ｓ３２１で記録したオブジェクト定義箇所に対し、拡張言語仕様文の影響を受けるオブジェクト、有効な拡張言語仕様文、採用された優先度及びオブジェクト変更内容を含む拡張言語仕様情報をコメントとして入力プログラムに挿入する（Ｓ３２３）。
【００７１】
次に、コンパイラは、拡張言語仕様データベース５１に登録されているすべてのオブジェクト毎に対してループＢの処理を実行した後、コメントを付加させた入力プログラムを出力する（Ｓ３２４）。そして、次のステップＳ３３を実行する。
【００７２】
以上のように、コンパイラは、拡張言語仕様情報付き入力プログラム出力ステップ（Ｓ３２）を実行する。
【００７３】
なお、コンパイラは、拡張言語仕様情報をコメントとして入力プログラムに挿入して付加することで、コンパイル結果を出力しているが、この形態に限定するものではなく、例えば拡張言語仕様情報のみをテキストファイル等の別ファイルにしてコンパイル結果を出力してもよい。
【００７４】
図６は、本発明の実施の形態における拡張言語仕様情報付き目的プログラム出力ステップでの処理を示すフローチャートである。
【００７５】
拡張言語仕様情報付き目的プログラム出力ステップ（Ｓ３３）では、まず、コンパイラは、目的プログラムを事前に生成し、各オブジェクトの定義箇所を記録する（Ｓ３４１）。次に、拡張言語仕様データベース５１に登録されているすべてのオブジェクトに対してオブジェクト毎に以下の処理（ループＣと記載。）を繰り返す。ここで、事前に生成された目的プログラムと各オブジェクトの定義箇所とは、拡張言語仕様情報データベース５１に記録されてもよく、コンパイラが一時記録部を有し、その一時記録部に記録されるとしてもよい。
【００７６】
ループＣでは、コンパイラは、Ｓ３４１で記録したオブジェクトの定義箇所に対し、拡張言語仕様文の影響を受けたオブジェクト、有効な拡張言語仕様文、採用された優先度及びオブジェクトの変更内容を含む拡張言語仕様情報をコメントとして目的プログラムに挿入する（Ｓ３４３）。
【００７７】
次に、コンパイラは、拡張言語仕様データベース５１に登録されているすべてのオブジェクト毎に対してループＣの処理を実行した後、コメントを付加させた目的プログラムを出力する（Ｓ３４４）。そして、次のステップＳ４を実行する。
【００７８】
以上のように、コンパイラは、拡張言語仕様情報付き目的プログラム出力ステップ（Ｓ３３）を実行する。
【００７９】
なお、コンパイラは、拡張言語仕様情報をコメントとして目的プログラムに挿入して付加することで、コンパイル結果を出力しているが、この形態に限定するものではなく、例えば拡張言語仕様情報のみをテキストファイル等の別ファイルにしてコンパイル結果を出力してもよい。
【００８０】
また、拡張言語仕様情報は、拡張言語仕様文の影響を受けたオブジェクト、有効な拡張言語仕様文、採用された優先度及びオブジェクトの変更内容以外の内容を含んでいてもよい。例えば、指定された拡張言語仕様文によって影響を受けるコンパイル過程におけるアセンブラ命令、及び、拡張言語仕様文への指定を無効にした場合のコンパイル過程におけるアセンブラ命令を拡張言語仕様情報に含めても構わない。
【００８１】
図７は、本発明の実施の形態におけるオブジェクト間警告出力ステップでの処理フローチャートである。
【００８２】
オブジェクト間警告出力ステップ（Ｓ５）では、コンパイラは、拡張言語仕様データベース５１に登録されているオブジェクトのうち、アラインメントが変更されるオブジェクトを参照している入力プログラムの式もしくは文に対して以下の処理（ループＤと記載。）を繰り返して実行する。
【００８３】
ループＤでは、まず、コンパイラは、アラインメントが変更されるオブジェクトの中で該当オブジェクトのアラインメントと、該当オブジェクトを参照している式もしくは文で期待されるアラインメントとに不整合がないかどうかのチェックを行う（Ｓ５２）。不整合がなければ（Ｓ５２でｙｅｓの場合）、コンパイラは、次の入力プログラムの式もしくは文に対してループＤの処理を行う。
【００８４】
次に、コンパイラは、それらアラインメントで不整合があれば（Ｓ５２でｎｏの場合）、該当する式もしくは該当する文の箇所で不整合となっているオブジェクトにおける有効な拡張言語仕様文、拡張言語仕様文の影響を受けたオブジェクト及びオブジェクト変更内容を含む拡張言語仕様情報を付加させた警告メッセージをユーザに表示するため出力する（Ｓ５３）。そして、次に該当する式もしくは文に対してループＤ処理を行う。
【００８５】
以上のように、コンパイラは、オブジェクト間警告出力ステップ（Ｓ５）を実行する。
【００８６】
なお、コンパイラは、警告メッセージを出力し表示すると説明したが、この形態に限定するものではなく、例えば警告メッセージを含めた入力プログラムを出力してもよく、警告メッセージをテキストファイル等の別ファイルとして出力してもよい。
【００８７】
図８は、本発明の実施の形態における最適化提案出力ステップでの処理を示すフローチャートである。
【００８８】
最適化提案出力ステップ（Ｓ７）では、コンパイラは、入力プログラムのすべてのオブジェクトに対して、以下の処理（ループ処理Ｅと記載。）を繰り返して実行する。
【００８９】
ループＥでは、まず、コンパイラは、各オブジェクトにおける該当プログラム実行環境での転送命令に最適なアラインメントを取得する（Ｓ７２）。なお、この最適なアラインメント情報は、事前にコンパイラに登録していてもよいし、ユーザから別途入力されても構わない。また、プログラム実行環境とは、高級言語で書かれたプログラムを実行するための基盤となるプログラムである。
【００９０】
次に、コンパイラは、該当オブジェクトのアラインメントが最適なアラインメントになっているかどうかの判定を行う（Ｓ７３）。なお、Ｓ７３は、拡張言語仕様指定により、変更された該当オブジェクトのアラインメントが最適なアラインメントになっているかどうかの判定として説明しているが、拡張言語仕様指定によるものでなくてもよい。
【００９１】
コンパイラは、最適なアラインメントになっていると判定した場合（Ｓ７３でｙｅｓの場合）、次に該当するオブジェクトに対してループＥの処理を行う。
【００９２】
反対に、コンパイラは、最適なアラインメントになっていないと判定した場合（Ｓ７３でｎｏの場合）、期待される拡張言語仕様文及びオブジェクト変更内容を付加させた提案メッセージを出力して表示する（Ｓ７４）。そして、次に該当するオブジェクトに対してループＥの処理を行う。
【００９３】
以上のように、コンパイラは、最適化提案出力ステップ（Ｓ７）を実行する。
【００９４】
なお、コンパイラは、提案メッセージを出力して表示すると説明したが、この形態に限定するものではなく、例えば提案メッセージを含めた入力プログラムを出力してもよく、提案メッセージをテキストファイル等の別ファイルとして出力してもよい。
【００９５】
以上のように、コンパイラは、拡張言語仕様解析ステップ（Ｓ１）、拡張言語仕様情報出力ステップ（Ｓ３）、オブジェクト間警告出力ステップ（Ｓ５）及び最適化提案出力ステップ（Ｓ７）を行うことにより、指定される複数の拡張言語仕様文による入力プログラム及び目的プログラムに対する影響をユーザが容易に把握できるコンパイル方法及びコンパイルプログラムを実現することができる。
【００９６】
つまり、本発明のコンパイル方法によれば、ユーザが拡張言語仕様を指定することで入力プログラム及び目的プログラムにどのような影響を及ぼしているのか、従来技術では把握できなかった内容をユーザが容易に把握することができ、ユーザが行う検収工数が削減できる。また、本発明のコンパイル方法によれば、拡張言語仕様を指定したことで発生するかもしれない予期せぬアラインメントの不整合をコンパイル時に検出可能になり、検収工数が削減できる。さらに、コード生成効率を高めるアラインメントを指定する拡張言語仕様をコンパイラより提案させることができるので、ユーザのプログラムチューニング工数を削減することができる。
【００９７】
以下、入力プログラムの具体例を参照しながら、本発明のコンパイル方法の実施例について詳細に説明する。
【００９８】
（実施例１）
図９（ａ）〜（ｅ）は、本発明の実施例１における入力プログラム及びコンパイル時の前提条件を示す図である。図９（ａ）〜（ｄ）は、コンパイル時の前提条件を示し、図９（ｅ）は、入力プログラムを示している。図９（ｅ）に示すように、入力プログラムはｔｅｓｔ１．ｈ及びｔｅｓｔ１．ｃｃで構成されている。また、図９（ａ）〜（ｄ）では、コンパイル時の前提条件として、ユーザに指定される拡張言語仕様文の内容と、コンパイラで事前に規定されている優先度と、コンパイル時に指定するコマンドラインのオプションの内容とが示されている。
【００９９】
また、他の前提条件として、拡張言語仕様情報を入力プログラムに出力し、目的プログラムには出力しない。また、オブジェクト間のアラインメント不整合は警告せず、拡張言語仕様指定案を提示しないことがユーザに指定されているとする。また、ユーザにより拡張言語仕様文の優先度指定は行われていないものとする。
【０１００】
まず、コンパイラによりコンパイルが開始されると、拡張言語仕様解析ステップ（Ｓ１）のサブステップが順次実行される。すなわち、図３で示す拡張言語仕様解析ステップ（Ｓ１）のループＡの処理が実行される。ループＡの処理は、図９（ｅ）で示す入力プログラムｔｅｓｔ１．ｃｃ中のオブジェクトｘ、ｙ、及びｚのそれぞれに対して行われる。
【０１０１】
オブジェクトｘに対しては、図９（ｄ）及び（ｅ）で示されるように、拡張言語仕様における３つの拡張言語仕様文が重複して指定されている。具体的には、１つはプログラム中の構造体オブジェクトすべてに対する指定であり、図９（ｄ）の前提条件で示されているコマンドラインオプションの“−ｆａｌｉｇｎ−ｓｔｒｕｃｔ＝１６”である。もう１つは、図９（ｅ）の入力プログラム中に指定されるプラグマ指定の“＃ｐｒａｇｍａ＿ａｌｉｇｎ＿ｔｙｐｅ＝２Ａ”（オブジェクトｘの型がＡであるため）である。さらにもう１つは、図９（ｅ）の入力プログラム中に指定される“＃ｐｒａｇｍａ＿ａｌｉｇｎ＿ｏｂｊｅｃｔ＝８  ｘ”（オブジェクトｘに対する指定であるため）である。
【０１０２】
従って、コンパイラが行うＳ１２の判定はｙｅｓとなり、続くＳ１３の判定もｙｅｓとなるため、コンパイラは、Ｓ１５に進む。そして、上記前提条件からユーザにより拡張言語仕様文の優先度指定は行われていないので、コンパイラが行うＳ１５の判定はｎｏとなり、Ｓ１６に進む。
【０１０３】
次に、Ｓ１６では、図９（ｃ）で示すコンパイラで事前に規定（定義）されている優先度により、重複して指定されている拡張言語仕様文のうち有効な拡張言語仕様文として、優先度の最も高い“＃ｐｒａｇｍａ＿ａｌｉｇｎ＿ｏｂｊｅｃｔ＝８  ｘ”が選択される。
【０１０４】
従って、Ｓ１６では、有効な拡張言語仕様文、影響を受けたオブジェクト、コンパイラで事前に規定している優先度及びオブジェクト変更内容が拡張言語仕様情報として、拡張言語仕様情報データベース５１に登録される。
【０１０５】
また、オブジェクトｙに対しては、図９（ｄ）及び（ｅ）で示されるように、２つの拡張言語仕様文が重複して指定されている。具体的には、１つは、図９（ｄ）に示されているコマンドラインオプションの“−ｆａｌｉｇｎ−ｓｔｒｕｃｔ＝１６”である。もう１つは、図９（ｅ）の入力プログラム中に指定されるプラグマ指定での“＃ｐｒａｇｍａ＿ａｌｉｇｎ＿ｔｙｐｅ＝２Ａ”（オブジェクトｙの型がＡであるため）である。
【０１０６】
従って、コンパイラが行うＳ１２の判定はｙｅｓとなり、続くＳ１３の判定もｙｅｓとなるため、コンパイラは、Ｓ１５に進む。そして、上記前提条件からコンパイラが行うＳ１５の判定はｎｏとなり、Ｓ１６に進む。
【０１０７】
次に、Ｓ１６では、図９（ｃ）で示すコンパイラで事前に規定されている優先度により、重複して指定されている拡張言語仕様文のうち有効な拡張言語仕様文として、より優先度の高い“ｐｒａｇｍａ＿ａｌｉｇｎ＿ｔｙｐｅ＝２Ａ”が選択される。従って、Ｓ１６では、オブジェクトｘと同じ拡張言語仕様情報が拡張言語仕様情報データベース５１に登録される。
【０１０８】
また、オブジェクトｚに対しては、図９（ｄ）に示されているコマンドラインオプションの“−ｆａｌｉｇｎ−ｓｔｒｕｃｔ＝１６”のみが拡張言語仕様文として指定されている。そのため、コンパイラが行うＳ１２の判定はｙｅｓとなり、続くＳ１３の判定はｎｏとなる。従って、コンパイラにより、Ｓ１４が実行され、有効な拡張言語仕様文、影響を受けたオブジェクト及びオブジェクト変更内容が拡張言語仕様情報として、拡張言語仕様情報データベース５１に登録される。
【０１０９】
図１０は、本発明の実施例１における拡張言語仕様情報データベースに登録された入力プログラムに対する解析結果を示す表である。図１０は、拡張言語仕様解析ステップ（Ｓ１）での解析結果が登録された拡張言語仕様情報を示した表であり、ここで説明したオブジェクトｘ、ｙ及びｚについての拡張言語仕様情報が登録された結果を示す表である。
【０１１０】
そして、次に、コンパイラによりＳ２の判定が実行される。上記前提条件から、コンパイラは拡張言語仕様情報を入力プログラムに出力するように指定されているので、Ｓ２の判定はｙｅｓとなり、拡張言語仕様情報出力ステップ（Ｓ３）が実行される。拡張言語仕様情報出力ステップ（Ｓ３）では、Ｓ３１の判定がｙｅｓとなるので、拡張言語仕様情報付き入力プログラム出力ステップ（Ｓ３２）が実行される。
【０１１１】
次に、図５で示すＳ３２のサブステップが実行される。
【０１１２】
Ｓ３２では、まず、Ｓ３２１が実施され、コンパイラは、入力プログラムにおける各オブジェクトの定義箇所を一時データとして記録する。本実施例では、オブジェクトｘは、ｔｅｓｔ１．ｃｃの４行目１０カラムとなり、オブジェクトｙは、ｔｅｓｔ１．ｃｃの４行目１３カラムとなり、オブジェクトｚはｔｅｓｔ１．ｃｃの５行目１０カラムとなる。
【０１１３】
次に、ループＢの処理が実施され、コンパイラはオブジェクトｘ、ｙ及びｚに対してＳ３２３を実行する。該当オブジェクトの定義箇所はＳ３２１で記録されているので、その定義箇所にそれぞれ影響を受けたオブジェクト、有効な拡張言語仕様文、採用された優先度及びオブジェクト変更内容（それぞれ、拡張言語仕様情報データベース５１に登録されている。）をコメントとして入力プログラムに挿入する。そして、Ｓ３２４において、コンパイラはそのコメントを付加させた入力プログラムを出力する。図１１に拡張言語仕様情報が付加された入力プログラムの出力例を示す。
【０１１４】
図１１は、本発明の実施例１の入力プログラムに対する拡張言語仕様情報が付加された入力プログラムを示す図である。図１１からわかるように、ユーザが拡張言語仕様文を指定することで入力プログラム中の各オブジェクトにどのような影響を及ぼしているのか、従来技術では把握できなかった内容をユーザが容易に把握することができる。また、上記前提条件により、実施例１ではＳ３４、Ｓ５、Ｓ７は実施されず、Ｓ９が実施されてコンパイルが終了する。
【０１１５】
以上、実施例１で示すように、コンパイラが、拡張言語仕様解析ステップ（Ｓ１）、拡張言語仕様情報出力ステップ（Ｓ３）を行うことにより、ユーザが指定する拡張言語仕様による入力プログラムに対する影響をユーザが容易に把握できる。それにより、検収工数が削減できる。
【０１１６】
（実施例２）
図１２（ａ）〜（ｅ）は、本発明の実施例２における入力プログラム及びコンパイル時の前提条件を示す図である。図１２（ａ）〜（ｄ）は、コンパイル時の前提条件を示し、図１２（ｅ）は、入力プログラムを示している。図１２では、実施例１の図９で示す前提条件とほぼ同様であるが、拡張言語仕様文の優先度が、コンパイラで事前に規定されている優先度ではなくユーザが別途指定した優先度である場合のケースを示している。すなわち図１２では、拡張言語仕様文の優先度以外の前提条件は実施例１と同じとしている。
【０１１７】
この場合、実施例１と同様に処理が実施されるため説明は省略する。実施例２では、ユーザにより優先度が別途指定されているため、コンパイラによるＳ１５の判定はｙｅｓとなり、Ｓ１７に進む。
【０１１８】
次に、Ｓ１７では、拡張言語仕様文が重複して指定されているオブジェクトに対して図１２（ｃ）で示す優先度が最も高いコマンドラインオプション“−ｆａｌｉｇｎ−ｓｔｒｕｃｔ＝１６”が選択される。従って、Ｓ１７では、有効な拡張言語仕様文、影響を受けたオブジェクト、ユーザ指定の優先度及びオブジェクト変更内容が拡張言語仕様情報として、拡張言語仕様情報データベース５１に登録される。
【０１１９】
図１３は、本発明の実施例２における拡張言語仕様情報データベースに登録された入力プログラムに対する解析結果を示す表である。図１４は、本発明の実施例２の入力プログラムに対する拡張言語仕様情報が付加された入力プログラムを示す図である。実施例２で拡張言語仕様解析ステップ（Ｓ１）が終了した時点での拡張言語仕様情報が登録された結果が図１３の表であり、拡張言語仕様情報付き入力プログラム出力ステップ（Ｓ３２）を実行した結果が図１４である。
【０１２０】
以上、実施例２では、図１４からわかるように、ユーザにより拡張言語仕様文の優先度が指定された場合でも、入力プログラム中の各オブジェクトにどのような影響を及ぼしているのか、従来技術では把握できなかった内容をユーザが容易に把握することができる。それにより、検収工数が削減できる。
【０１２１】
（実施例３）
次に、実施例３を説明する。実施例３では、拡張言語仕様情報を目的プログラムに出力される場合の具体例を示す。なお、拡張言語仕様情報を目的プログラムに出力するということ以外の前提条件は、実施例１と同じとする。
【０１２２】
この場合、拡張言語仕様解析ステップ（Ｓ１）の実行動作、及び拡張言語仕様情報出力ステップ（Ｓ３）のサブステップである拡張言語仕様情報付き入力プログラム出力ステップ（Ｓ３２）の実行動作は実施例１と同じであるので説明は省略する。
【０１２３】
図１５は、本発明の実施例３における拡張言語仕様情報が付加される前の目的プログラムを示す図である。図１６は、本発明の実施例３における拡張言語仕様情報が付加された後の目的プログラムを示す図である。
【０１２４】
実施例３では、目的プログラムに拡張言語仕様情報を出力するので、拡張言語仕様情報出力ステップ（Ｓ３）におけるＳ３３の判定がｙｅｓになり、拡張言語仕様情報付き目的プログラム出力ステップ（Ｓ３４）がコンパイラにより実行される。
【０１２５】
具体的には、まず、Ｓ３４において、コンパイラは、目的プログラムを生成し、各オブジェクトの定義箇所を記録する（Ｓ３４１）。ここで、図１５は、Ｓ３４１で生成された目的プログラム例、すなわち拡張言語仕様情報が付加される前の目的プログラム例を示しており、各オブジェクトの定義箇所が確認できる。図１５では、ＯＢＪＥＣＴ疑似命令により、各オブジェクトが定義されているものとする。
【０１２６】
次に、コンパイラは、Ｓ３４においてループＣの処理を実行し、オブジェクトｘ、ｙ及びｚに対して、各定義箇所に、影響を受けたオブジェクト、有効な拡張言語仕様文、採用された優先度及びオブジェクト変更内容を含む拡張言語仕様情報が、コメントとして目的プログラムに挿入する（Ｓ３４３）。そして、コンパイラは、図１６に示す拡張言語仕様情報がコメントとして付加された目的プログラムを出力（Ｓ３４５）する。
【０１２７】
以上、実施例３では、図１６からわかるように、ユーザが拡張言語仕様文を指定することで目的プログラムにどのような影響を及ぼしているのか、従来技術では把握できなかった内容をユーザが容易に把握することができる。それにより検収工数が削減できる。
【０１２８】
（実施例４）
図１７は、本発明の実施例４における入力プログラムを示す図である。図１８は、本発明の実施例４の入力プログラムに対する拡張言語仕様情報データベースに登録された拡張言語仕様情報を示す図である。図１７では、入力プログラムはｔｅｓｔ２．ｈ及びｔｅｓｔ２．ｃｃから構成されている。
【０１２９】
実施例４では、前提条件として、ユーザからの指示（オプションなど）によって、拡張言語仕様情報は出力されないが、オブジェクト間のアラインメント不整合を警告するとする。また、ユーザからの指示（オプションなど）によって、拡張言語仕様指定案を提示しないものとし、さらに、ユーザから拡張言語仕様文の優先度指定は行われていないものとする。
【０１３０】
まず、コンパイラによりコンパイルが開始されると、拡張言語仕様解析ステップ（Ｓ１）が実行される。ここで、拡張言語仕様解析ステップ（Ｓ１）の処理は、実施例１で説明したのと同様であるため説明を省略する。拡張言語仕様解析ステップ（Ｓ１）が実行された時点での拡張言語仕様データベース５１に登録された拡張言語仕様情報を図１８に示す。図１８に示すように、オブジェクトｘは、拡張言語仕様文によりアラインメントが２に、オブジェクトｐは拡張言語仕様文によりアラインメントが８に、それぞれ変更されている。
【０１３１】
次に、コンパイラによりＳ２の判定が実行される。上記前提条件から、Ｓ２の判定はｎｏとなり、次のＳ４の判定が実行される。
【０１３２】
次に、上記前提条件からＳ４の判定は、ｙｅｓとなり、オブジェクト間警告出力ステップ（Ｓ５）が実行される。オブジェクト間警告出力ステップ（Ｓ５）では、ループＤの処理が行われ、コンパイラはオブジェクトｘ及びオブジェクトｐを参照している式もしくは文に対してＳ５２の判定を行う。本実施例では、図１７の入力プログラムに示す“ｐ＝＆ｘ”という代入文に対して判定が行われる。図１８に示すように、オブジェクトｘのアラインメントが２、オブジェクトｐのアラインメントが８となっている。しかし、本実施例の場合、文で期待されるアラインメントは代入文の結果の型のアラインメントである８である。従って、オブジェクトｘは期待されるアラインメント８とは異なっているので、不整合と判定され、Ｓ５３が実行される。
【０１３３】
次に、Ｓ１７において、上記の代入文の箇所にて、不整合であるオブジェクトの有効な拡張言語仕様文、影響を受けたオブジェクト、及びオブジェクト変更内容を含む拡張言語仕様情報を付加させた警告メッセージを表示する。
【０１３４】
図１９は、本発明の実施例４の入力プログラムに対してアラインメント不整合の警告を付加させた入力プログラムを示す図である。図１９の警告表示からわかるように、従来技術では検出できなかった拡張言語仕様文を指定したことで発生するかもしれない予期せぬアラインメント不整合をコンパイル時に検出可能になり、検収工数が削減できる。
【０１３５】
（実施例５）
図２０（ａ）及び（ｂ）は、本発明の実施例５における入力プログラム及びコンパイル時の前提条件を示す図である。図２１は、本発明の実施例５の入力プログラムに対する拡張言語仕様情報データベース５１に登録された拡張言語仕様情報を示す図である。図２０（ａ）は、ｔｅｓｔ３．ｃｃで構成される入力プログラムを示し、図２０（ｂ）は、実施例５の前提条件であるプログラム実行環境での転送命令に最適なアラインメントを図示したものである。
【０１３６】
実施例５では、前提条件として、プログラム実行環境での転送命令に最適なアラインメントはコンパイラに事前登録されているものとするが、この形態に限定するものではなく、ユーザによりコンパイル時に指定されてもよい。また、他の前提条件として、拡張言語仕様情報は出力されずオブジェクト間のアラインメント不整合は警告されないが、拡張言語仕様指定案を提示するものとする。また、ユーザから拡張言語仕様文の優先度指定は行われていないものとする。
【０１３７】
まず、コンパイラによりコンパイルが開始されると、拡張言語仕様解析ステップ（Ｓ１）が実行される。ここで、拡張言語仕様解析ステップ（Ｓ１）の処理は、実施例１で説明した動作と特に変わらないので説明を省略する。拡張言語仕様解析ステップ（Ｓ１）が実行された時点での拡張言語仕様データベース５１に登録された拡張言語仕様情報を図２１に示す。図２１に示すように、オブジェクトｘは、拡張言語仕様文によりアラインメントが８に変更されている。
【０１３８】
次に、コンパイラによりＳ２の判定が実行される。上記前提条件からＳ２及び、Ｓ４の判定結果はそれぞれｎｏとなり、Ｓ６の判定結果はｙｅｓとなるので、次いで最適化提案出力ステップ（Ｓ７）が実行される。
【０１３９】
最適化提案出力ステップ（Ｓ７）では、ループＥの処理がすべてのオブジェクトに対して繰り返し実行される。まず、Ｓ７２において、コンパイラは、各オブジェクトに対する該当プログラム実行環境での転送命令に対する最適化アラインメントを取得する。本実施例では、該当オブジェクトはオブジェクトｘ及びｙであり、それぞれ型Ａ（デフォルトのサイズ８及びアラインメント４）を持つ。図２０に示すように、前提条件としてプログラム実行環境での転送命令に対する最適なアラインメントはコンパイラに事前登録されているので、サイズが８の場合の最適なアラインメントは８であることがわかる。
【０１４０】
図２２は、本発明の実施例５における入力プログラムの各オブジェクト、オブジェクトサイズ、最適アラインメント及び現アラインメントを示す一覧表である。図２３は、本発明の実施例５の入力プログラムに対して最適化提案を付加させた入力プログラムを示す図である。
【０１４１】
図２２からわかるように、オブジェクトｘは、ユーザによる拡張言語仕様指定により最適なアラインメントに指定されているが、オブジェクトｙは最適な指定が行われていない（アラインメントがデフォルトの４）。よって、オブジェクトｙに対するＳ７３の判定結果はｎｏとなり、コンパイラは、期待される拡張言語仕様文及び期待されるオブジェクト
変更内容を付加させた提案メッセージを出力して表示する。
【０１４２】
図２３は、コメントとして提案メッセージが付加された入力プログラムを示している。図２３からわかるように、従来技術ではコンパイラより提案されなかった、コード生成効率を高めるアラインメント指定の拡張言語仕様文がコンパイラより提案されることで、ユーザのプログラムチューニング工数が削減される。
【０１４３】
以上のようにして、本発明のコンパイル方法は実施される。
【０１４４】
なお、本実施例では、提案メッセージを表示する方法として、入力プログラムに対してコメントを付加する形態について記載したが、この方法に限定するものではない。例えば入力プログラムに提案メッセージを付加させてモニタ表示を実行してもよく、テキストファイルに出力してもよい。すなわち、期待される拡張言語仕様文、オブジェクト変更内容及びそのアラインメントが、ユーザに理解される方法であれば形態は問わない。
【０１４５】
また、上記コンパイラは、本発明のコンパイル方法に含まれる特徴的なステップを処理手段とするコンパイラ装置であってもよい。以下、この場合について簡単に説明する。
【０１４６】
図２４は、本発明のコンパイル方法に含まれる特徴的なステップを処理手段とするコンパイラ装置の構成を示す図である。
【０１４７】
図２４において、コンパイラ装置１は、コンパイル部１０と記憶部５０と入力受付部６０とを備える。
【０１４８】
コンパイル部１０は、複数の拡張言語仕様文の優先度に基づいて、ユーザより入力プログラム中に付加された複数の拡張言語仕様文により影響を受ける入力プログラムの部分に関する情報すなわち拡張言語仕様情報を解析する拡張言語仕様解析部１１と、拡張言語仕様解析部１１に解析された拡張言語仕様情報またはそれに基づく情報を出力する出力部１２とを備える。
【０１４９】
出力部１２は、拡張言語仕様解析部１１により解析された拡張言語仕様情報を、コンパイル結果として、ユーザに表示するため出力する拡張言語仕様情報出力部１３を備える。出力部１２は、拡張言語仕様解析部１１で解析された拡張言語仕様情報に基づいて、オブジェクト間のアラインメント不整合を検出してコンパイルするとアラインメント不整合が生ずる旨を示す警告を出力するオブジェクト間警告出力部１５と、解析された拡張言語仕様情報に基づいてよりコード性能を向上させるような拡張言語仕様の指定方法をユーザに示す提示を出力する最適化提案出力部１７とを備える。
【０１５０】
拡張言語仕様情報出力部１３は、拡張言語仕様情報を入力プログラムに付加させて出力する拡張言語仕様情報付き入力プログラム出力部１３２と、目的プログラムに付加させて出力する拡張言語仕様情報付き目的プログラム出力部１３４とを備える。
【０１５１】
記憶部５０は、拡張言語仕様情報記憶部５２と、プログラム実行環境情報記憶部５４とを備える。
【０１５２】
入力受付部６０は、ユーザからの指定を受けつけて、プログラム中に拡張言語仕様文を付加する。
【０１５３】
また、コンパイラ装置１では、拡張言語仕様解析部１１での解析が行われた後、拡張言語仕様情報出力部１３、オブジェクト間警告出力部１５、及び最適化提案出力部１７はそれぞれ、独立して動作することが可能であり、ユーザの指示（オプションなど）によってそれぞれ処理を行うか否かを選択することができる。
【０１５４】
なお、コンパイラ装置１は、拡張言語仕様解析部１１での解析結果を記録し、参照できるなら拡張言語仕様情報記憶部５２を備えてなくてもよい。その場合、例えば、別途用意される拡張言語仕様情報データベース５１等があればよい。すなわち、コンパイラ装置１は、拡張言語仕様解析部１１での解析結果を拡張言語仕様情報データベース５１に記憶し、この拡張言語仕様情報データベース５１に記憶されている解析結果である拡張言語仕様情報を参照できればよい。同様に、コンパイラ装置１は、最適化提案出力部１７にプログラム実行環境情報を参照させることができるなら、プログラム実行環境情報記憶部５４を備えなくてよい。
【０１５５】
以上、本発明によれば、指定される複数の拡張言語仕様（拡張言語仕様文）による入力プログラム及び目的プログラムに対する影響をユーザが容易に把握できるコンパイル方法及びコンパイルプログラムを実現することができる。それにより検収工数が削減できる。さらに、ユーザが拡張言語仕様（拡張言語仕様文）を入力プログラム中に指定することで、発生するかもしれない予期せぬアラインメント不整合を、拡張言語仕様（拡張言語仕様文）の間の優先度を考慮してコンパイル時に正しく検出することができるだけでなく、コード生成効率を高めるアラインメント指定の拡張言語仕様（拡張言語仕様文）をコンパイラに提案させることができる。それにより、検収工数が削減できるだけでなく、ユーザのプログラムチューニング工数を削減することができる。
【０１５６】
また、本発明は、装置として実現するだけでなく、このような装置が備える処理手段を備える集積回路として実現したりしてもよい。また、本発明は、コンパイル方法として実現するだけでなく、それらステップをコンピュータに実行させるプログラムとして実現してもよい。
【産業上の利用可能性】
【０１５７】
本発明は、コンパイル方法及びコンパイルプログラムに利用でき、特に、プログラム実行環境において最高のパフォーマンスを得るために拡張言語仕様を用意しているコンパイル方法コンパイルプログラムに利用することができる。
【図面の簡単な説明】
【０１５８】
【図１】本発明の実施の形態におけるコンパイル方法の特徴的な処理ステップを示す図である。
【図２】本発明の実施の形態におけるコンパイラにより実行される処理を示すフローチャートである。
【図３】本発明の実施の形態における拡張言語仕様解析ステップでの処理を示すフローチャートである。
【図４】本発明の実施の形態における拡張言語仕様情報出力ステップでの処理を示すフローチャートである。
【図５】本発明の実施の形態における拡張言語仕様情報付き入力プログラム出力ステップでの処理を示すフローチャートである。
【図６】本発明の実施の形態における拡張言語仕様情報付き目的プログラム出力ステップでの処理を示すフローチャートである。
【図７】本発明の実施の形態におけるオブジェクト間警告出力ステップでの処理を示すフローチャートである。
【図８】本発明の実施の形態における最適化提案出力ステップでの処理を示すフローチャートである。
【図９】本発明の実施例１における入力プログラム及びコンパイル時の前提条件を示す図である。
【図１０】本発明の実施例１における拡張言語仕様情報データベースに登録された入力プログラムに対する解析結果を示す表である。
【図１１】本発明の実施例１の入力プログラムに対する拡張言語仕様情報が付加された入力プログラムを示す図である。
【図１２】本発明の実施例２における入力プログラム及びコンパイル時の前提条件を示す図である。
【図１３】本発明の実施例２における拡張言語仕様情報データベースに登録された入力プログラムに対する解析結果を示す表である。
【図１４】本発明の実施例２の入力プログラムに対する拡張言語仕様情報が付加された入力プログラムを示す図である。
【図１５】本発明の実施例３における拡張言語仕様情報が付加される前の目的プログラムを示す図である。
【図１６】本発明の実施例３における拡張言語仕様情報が付加された後の目的プログラムを示す図である。
【図１７】本発明の実施例４における入力プログラムを示す図である。
【図１８】本発明の実施例４の入力プログラムに対して拡張言語仕様情報データベースに登録された拡張言語仕様情報を示す図である。
【図１９】本発明の実施例４の入力プログラムに対してアラインメント不整合の警告を付加させた入力プログラムを示す図である。
【図２０】本発明の実施例５の入力プログラム及びプログラム実行環境での転送命令に最適なアラインメントである。
【図２１】本発明の実施例５における入力プログラムに対して拡張言語仕様情報データベースに登録された拡張言語仕様情報を示す図である。
【図２２】本発明の実施例５における入力プログラムの全オブジェクト、各オブジェクトサイズ、各最適アラインメント及び各現アラインメントを示す一覧表である。
【図２３】本発明の実施例５の入力プログラムに対して最適化提案を付加させた入力プログラムを示す図である。
【図２４】本発明のコンパイル方法に含まれる特徴的なステップを処理手段とするコンパイラ装置の構成を示す図である。
【図２５】従来の方法における拡張言語仕様文の状態表示の実施例を示す図である。
【符号の説明】
【０１５９】
１    コンパイラ装置
１０    コンパイル部
１１    拡張言語仕様解析部
１２    出力部
１３    拡張言語仕様情報出力部
１５    オブジェクト間警告出力部
１７    最適化提案出力部
５０    記憶部
５２    拡張言語仕様情報記憶部
５４    プログラム実行環境情報記憶部
６０    入力受付部
１３２    拡張言語仕様情報付き入力プログラム出力部
１３４    拡張言語仕様情報付き目的プログラム出力部
【図１】
2010108258.tif 000003
【図２】
2010108258.tif 000004
【図３】
2010108258.tif 000005
【図４】
2010108258.tif 000006
【図５】
2010108258.tif 000007
【図６】
2010108258.tif 000008
【図７】
2010108258.tif 000009
【図８】
2010108258.tif 000010
【図９】
2010108258.tif 000011
【図１０】
2010108258.tif 000012
【図１１】
2010108258.tif 000013
【図１２】
2010108258.tif 000014
【図１３】
2010108258.tif 000015
【図１４】
2010108258.tif 000016
【図１５】
2010108258.tif 000017
【図１６】
2010108258.tif 000018
【図１７】
2010108258.tif 000019
【図１８】
2010108258.tif 000020
【図１９】
2010108258.tif 000021
【図２０】
2010108258.tif 000022
【図２１】
2010108258.tif 000023
【図２２】
2010108258.tif 000024
【図２３】
2010108258.tif 000025
【図２４】
2010108258.tif 000026
【図２５】
2010108258.tif 000027