(57)【要約】【課題】  複数のプラットフォームまたはライブラリに対応するための差異部分を自動的に変更して出力することで、ソースコード生成システムを利用したソフトウェアの開発、修正、保守の効率を向上すること。【解決手段】  ソースコードを生成する第１のステップと、生成されたソースコードをプログラム言語の文法定義に従って解析する解析する第２のステップと、解析済みのソースコードに対し、生成したソースコードを使用するプラットフォームに対応した加工ルールを適用し、前記解析済みのソースコードを加工し、プラットフォーム対応のソースコードを出力する第３のステップとを備える。【選択図】      図１
2008165342.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードを生成する方法であって、
ソースコードを生成する第１のステップと、生成されたソースコードをプログラム言語の文法定義に従って解析する解析する第２のステップと、解析済みのソースコードに対し、生成したソースコードを使用するプラットフォームに対応した加工ルールを適用し、前記解析済みのソースコードを加工し、プラットフォーム対応のソースコードを出力する第３のステップとを備えることを特徴とするソースコード生成方法。
【請求項２】
ソースコードを生成する装置であって、
ソースコードを生成する第１の手段と、生成されたソースコードをプログラム言語の文法定義に従って解析する解析する第２の手段と、解析済みのソースコードに対し、生成したソースコードを使用するプラットフォームに対応した加工ルールを適用し、前記解析済みのソースコードを加工し、プラットフォーム対応のソースコードを出力する第３の手段とを備えることを特徴とするソースコード生成装置。
【請求項３】
ソースコードをコンピュータに生成させるためのプログラムであって、
ソースコードを生成する第１の手段と、生成されたソースコードをプログラム言語の文法定義に従って解析する解析する第２の手段と、解析済みのソースコードに対し、生成したソースコードを使用するプラットフォームに対応した加工ルールを適用し、前記解析済みのソースコードを加工し、プラットフォーム対応のソースコードを出力する第３の手段としてコンピュータを機能させるステップを備えることを特徴とするソースコード生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば携帯電話機等に実装するプログラムのソースコードを効率的に生成するのに用いて好適なソースコード生成方法及び装置、並びにソースコード生成プログラムに関するものである。
【背景技術】
【０００２】
従来、ソフトウェア開発の作業効率を改善するために様々なソースコード生成装置またはプログラムが利用されている。
ソフトウェア開発のプロジェクトにおいては、ベースとなるプラットフォームのバージョンおよび構成などの差異によりそれぞれ対応するために一部を変更する必要がある。そのような変更をソースコード生成装置に反映させるためには、ソースコード生成装置の内部ロジックや生成されるソースコードの原型となるテンプレートを変更することにより反映されていた。これは、文字コードの異なる英語版OSと日本語版OSを対象としてソースコードを出力する場合も同様である。
これらの修正は、プラットフォームの変更内容に応じて開発者の手で適用される必要があり、同内容の修正がソースコード生成ロジックの複数個所またはソースコードの原型となるテンプレートの複数個所に影響する場合、それらの変更点はソースコード生成装置を開発・運営する技術者によって個々に修正されていた。
【０００３】
また、従来のソースコード生成装置では、生成するソースコードが動作対象とするプラットフォームにおいて、複数の修正が同一の箇所に影響する場合にも、これらの影響を共通して取り込む形で適切な出力ソースコードを開発者が作成した後に、ソースコード生成ロジックまたは原型となるテンプレートを変更することで対応していた。
【０００４】
このような公知技術文献の例として、テンプレートとプログラム設計情報を組み合わせて動的にソースコードを出力することにより、変更による影響をテンプレートに限定したソースコード生成を可能とした、下記の特許文献１などがある。
【０００５】
【特許文献１】特開２００４−３６２４４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ソースコード生成装置において、出力するソースコードが何らかのプラットフォームおよびライブラリの仕様変更の影響を受ける場合で、かつソースコード生成装置の製造元と生成されたソースコードの動作対象となるプラットフォームまたはライブラリの製造元が異なる場合においては、ソースコード生成装置の開発元はプラットフォーム製造元メーカーのリリースに合わせてソースコード生成装置の生成ロジックやテンプレートを更新せざるを得ない状況となるという問題が発生していた。これは、ソースコード生成装置が、差異のある複数のプラットフォームを対象としたソースコードを出力しようとする場合も同様である。
この場合、ソースコード生成装置の出力ソースコードをテンプレート等で外部的に変更可能としているシステムでは、テンプレートの変更のみでソースコード生成ロジックの修正は不要となるが、ソースコードの原型となるテンプレートに影響するプラットフォーム側の修正が複数個所に及ぶ場合、同一のルールの修正を、ソースコード生成ロジックまたはテンプレートの複数個所に正確に適用しなければならず、修正が面倒であるという問題があった。これはソースコード生成装置が出力し得る多数のパターンに対して、常に適切なソースコードが出力されることを保証する必要があり、ソースコード生成装置またはテンプレートの修正と動作確認のために大きな作業量が発生する点が問題であった。
さらに、複数のプラットフォーム側の修正がソースコード生成ロジックまたはテンプレートの同一箇所に影響する場合、対応するプラットフォーム側の修正同士の影響を適切に判断して、それぞれのプラットフォーム側修正に対応する変更が互いに干渉しないように注意を払ってテンプレートを修正しなければならないという問題があった。
例えばプラットフォーム仕様において、ある変数型Ａに変更が発生し、さらにＡを引数に用いる関数Ｆの仕様も同時に変更された場合、関数Ｆを呼出している処理を含むソースコード生成ロジックまたはテンプレートに対して、関数Ｆのインタフェース修正とＡの変数型の修正を同時に適用しなければならない。
【０００７】
これは最も単純な例であるが、関数Ｆのインタフェースを変更するだけで、変数Ａに設定するパラメータとして必要な情報が呼出し元に渡されておらず、呼出し元のインタフェース修正やグローバル変数参照などを必要とするようなケースが発生しうるものであり、その場合は変更されるソースコードがどのような呼出し関係の中で出力され、またユーザによって追記された非生成コードからどのように呼出される可能性があるかなどを判断して、ソースコード生成ロジックやテンプレートを修正することになる。
これには大きな調査作業量と、高度かつ正確な判断力が必要となり、プラットフォーム側の仕様変更に際してソースコード生成に係る作業量とコストが多大なものになるという問題があった。
【０００８】
本発明は、上記のような問題点に鑑みなされたものであり、仕様の異なる複数のプラットフォームまたはライブラリに対応するための差異部分を自動的に変更して出力することで、ソースコード生成装置を利用したソフトウェアの開発、修正、保守の効率を向上させ、コストを低減することが可能なソースコード生成方法及び装置並びにプログラムを提供することである。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明のソースコード生成方法は、ソースコードを生成する方法であって、
ソースコードを生成する第１のステップと、生成されたソースコードをプログラム言語の文法定義に従って解析する解析する第２のステップと、解析済みのソースコードに対し、生成したソースコードを使用するプラットフォームに対応した加工ルールを適用し、前記解析済みのソースコードを加工し、プラットフォーム対応のソースコードを出力する第３のステップとを備えることを特徴とする。
また、ソースコードを生成する装置であって、
ソースコードを生成する第１の手段と、生成されたソースコードをプログラム言語の文法定義に従って解析する解析する第２の手段と、解析済みのソースコードに対し、生成したソースコードを使用するプラットフォームに対応した加工ルールを適用し、前記解析済みのソースコードを加工し、プラットフォーム対応のソースコードを出力する第３の手段とを備えることを特徴とする。
また、ソースコードをコンピュータに生成させるためのプログラムであって、
ソースコードを生成する第１の手段と、生成されたソースコードをプログラム言語の文法定義に従って解析する解析する第２の手段と、解析済みのソースコードに対し、生成したソースコードを使用するプラットフォームに対応した加工ルールを適用し、前記解析済みのソースコードを加工し、プラットフォーム対応のソースコードを出力する第３の手段としてコンピュータを機能させるステップを備えることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、次のような効果がある。
（１）ソースコード生成装置が出力するソースコードの動作対象となるプラットフォームの仕様が変更になった場合、または仕様が異なる複数のプラットフォームに対してそれぞれソースコードを生成しようとする場合に、ソースコード生成ロジックやソースコードの原型テンプレートを修正することなく、ソースコードの加工ルールを適切に入力することで異なるプラットフォームに対応した形式に従って出力ソースコードを変更することが可能となる。
（２）プラットフォームの仕様変更、または仕様が異なる複数プラットフォームにソースコードを出力する際に、１種類のプラットフォーム側仕様変更が出力ソースコードの複数個所に影響を及ぼす場合であっても、ソースコードの加工ルールを１件だけ設定することによって複数のソースコード生成ロジックや生成ソースコードの原型となるテンプレートを変更することなく、プラットフォーム側の変更に対応することが可能となる。
（３）複数のプラットフォーム側仕様変更が、出力ソースコードの同一箇所に影響する場合において、ソースコードの加工ルールを適用することで、複数の変更の影響を自動的に回避してプラットフォーム変更に対応するソースコードを出力することが可能となるなど、ソースコード生成装置を利用したソフトウェアの開発、修正、保守の効率を向上させ、コストを低減することが可能になる。
【発明を実施するための最良の形態】
【００１１】
以下に、本発明を適用したソースコード生成装置の一実施の形態について説明する。
図１は、本発明に係るソースコード生成装置の実施の形態を示すハードウェア構成図である。
この実施形態で示すソースコード生成装置は、コンピュータで構成される処理装置１、キーボード２１及びマウス２２で構成される入力装置２、表示装置３、加工ルールファイル４、ソースコード文法定義ファイル５、ソースコードファイル６で構成される。
処理装置１は、ＣＰＵ１１、メモリ１２を備え、メモリ１２にはＯＳ（オペレーティングシステム）１２１、ソースコード生成プログラム１２１が記憶されている。
【００１２】
図２は、ソースコード生成プログラム１２２の内部処理を機能的に示した機能構成図であり、原型ソースコード生成処理１２２１、ソースコード解析処理１２２２、加工ルール読込み処理１２２３、加工ルール適用処理１２２４、加工済みソースコード比較処理１２２５、加工済みソースコード結合処理１２２６、加工済みソースコード出力処理１２２８から構成され、加工ルールファイル４、ソースコード文法定義ファイル５とを入力とし、原型ソースコードを生成し、その原型ソースコードの文法上の意味を解析した後、プラットフォームの仕様に対応した加工ルールに従って加工し、ソースコードファイル６に出力するように構成されている。
本実施形態のソースコード生成装置の動作中に生成されるデータのうち、メモリ１２上に生成されるデータとしては、原型ソースコード１３２１、解析済みソースコード１３２２、解析済みソースコードテーブル１３２３、加工ルールテーブル１３２４、解析済み加工ルールテーブル１３２５、ソースコード文法情報テーブル１３２６、加工済みソースコードテーブル１３２７、結合済みソースコードテーブル１３２８がある。
【００１３】
加工ルールファイル４には、加工ルールの集合が記録されている。
解析済みソースコードテーブル１３２３には、原型ソースコード１３２１を文法解析結果に従って構造単位またはトークン単位に解析した解析済みソースコードが格納される。
加工ルールテーブル１３２４には、加工ルールファイル４から読み込んだ加工ルールが格納される。
解析済み加工ルールテーブル１３２５には、加工ルールを適用対象トークンと変更内容および影響トークンと変更内容の集合に分解した解析済み加工ルールが格納される。
ソースコード文法情報テーブル１３２６には、ソースコードの文法解析情報が格納される。
加工済みソースコードテーブル１３２７には、解析済みソースコードテーブルの内容に１つの加工ルールを適用した結果が格納される。
結合済みソースコードテーブル１３２８には、複数の加工済みソースコードの変更内容を結合した結果が格納される。
【００１４】
原型ソースコード生成処理１２２１は、ユーザの指定に従って出力対象となる単一プラットフォーム向けのソースコードを出力するものである。例えば、データベース処理用のソースコードを出力するシステムではSQL文の制御処理を実現するソースコードを、ＵＩデザイナのシステムではユーザのＵＩレイアウト結果に従って画面部品の描画を実行するソースコードを、またネットワーク通信システムではユーザが記述した状態マトリクスに従って非同期処理を実装するソースコードを出力する、などの処理を行うものである。
この場合、本発明においては、ソースコード生成装置が出力するソースコードはある特定のプラットフォーム上で動作するために必要十分な処理を含んでいるが、それ以外のプラットフォーム上で動作するためには一部修正が必要となるケースを想定しているものである。原型ソースコードの例を図３に示す。
【００１５】
加工ルールファイル４の加工ルールの例を図４に示す。
加工ルールは、プラットフォーム側の仕様変更に伴ってソースコードに生じる変更の内容をルールとして記述した加工ルール５０の集合と、加工ルール同士の優先順位を示す”優先度”パラメータからなる。加工ルールは、変更の対象となるソースコードのトークンの種別およびブロック位置およびシンボル名と、ソースコードの変更結果の対５１を複数含むものである。
すなわち、１つの加工ルールファイル４は複数の加工ルール５０からなり、１つの加工ルールは複数の変更内容の対５１からなる。
変更内容の対５１の例としては、「任意のブロックに存在する、変数型トークン”old_struct”を、”new_struct”に置換する」、「ヘッダファイルブロック中に存在する、関数プロトタイプ宣言トークン”func”の引数リストにおいて、”new_param”を末尾に追加する」などが挙げられる。
加工ルール読込み処理１２２３は、加工ルールファイル４を読込み、その内容を加工ルールテーブル１３２４に格納する。さらに加工ルール読込み処理１３２３は、加工ルールファイル４から加工ルール５０と、それに含まれる変更内容の対５１を解析して、解析済み加工ルールテーブル１３２５に格納する。本実施形態では例えばXML形式で保存されたルール情報を読込んで、加工ルールテーブル１３２４と解析済み加工ルールテーブル１３２５に追加するものである。
【００１６】
ソースコード解析処理１２２２は、ソースコード文法定義ファイル５に従って原型ソースコード生成処理１２２１が出力した原型ソースコードの文法解析を行い、その原型ソースコードをトークン単位に分解して各トークンの種別、ブロック位置、シンボル名などに分解した結果をソースコード文法情報テーブル１３２６に記録する。
ソースコード文法定義ファイル５は、Ｃ言語文法などプログラム言語使用に由来する文法定義と、プロジェクトのコーディング規則などユーザの運用に由来する文法定義などを含むが、これらに限定するものではない。
さらにソースコード解析処理１２２２は、ソースコード文法情報テーブル１３２６の情報を原型ソースコード１３２１に関連付けた状態で、トークン解析では失われる空行、余白、タブ数などの状態を保存した解析済みソースコード１３２２を、解析済みソースコードテーブル１３２３に格納する。
解析済みソースコードの例を図５に示す。
【００１７】
加工ルール適用処理１２２４は、解析済み加工ルールテーブル１３２５の各加工ルールに該当する箇所を解析済みソースコードテーブル１３２３およびそれに関連したソースコード文法情報テーブル１３２６から検索する。
１つの加工ルールに対して、全解析済みソースコードから検索を行い、該当箇所があればルールを適用してソースコードを変更する。このようにして得られた加工済みソースコードを加工済みソースコードテーブル１３２７に格納する。
加工ルール適用処理１２２４は、前述の加工済みソースコードを取得する処理を、全ての加工ルールの数だけ繰り返す。
この結果、加工済みソースコードテーブル１３２７には、各ルールを適用した加工済みソースコード一式の組が、ルールの件数分作成される。
加工済みソースコードの例を図６に示す。
【００１８】
次に、加工済みソースコード比較処理１２２５は、加工済みソースコードテーブル１２２７の各加工済みソースコードを比較し、相違点を抽出する。このとき、同一のトークンに対して複数の加工ルールが変更を行った場合、加工済みソースコード比較処理１２２５は変更が排他的なものであるか、同時に適用可能であるかを判定する。
変更が排他的な場合は、加工ルールの優先順位に従って判定を行い、最も優先度が高い変更を適用して他の変更内容はコメント化すると同時にワーニング発生のソースコードを出力する。
変更が排他的でない場合は、特に変更無しで加工済みソースコード結合処理１２２６に処理を渡す。
排他的でない加工の例としては次のようなケースが挙げられる。
「Func2( type1 param1,  type2 param2 );」のような関数トークンのFunc2に対して、第２引数の型をtype2からtype2aに変更する加工「Func2( type1 param1, type2a param2);」と、第３引数を追加する加工「Func2( type1 param1, type2 param2, type3 param3);」が同時に発生した場合である。両方の加工箇所が重複していないため、同時に加工を適用することが可能であり、各加工済みソースは変更無く加工済みソースコード結合処理１２２６に渡される。
排他的な変更が存在する場合の加工済みソースコード比較処理１２２５の処理例を図７に示す。
【００１９】
加工済みソースコード結合処理１２２６は、各加工ルールに対応した加工済みソースコードテーブル１３２７の内容と、加工前の解析済みソースコードテーブル１３２３の内容を比較して、加工による変更点を解析済みソースコードに適用した結合済みソースコードを作成して、結合済みソースコードテーブル１３２８に格納する。この処理を、各加工ルールの数だけ繰り返して結合済みソースコードに反映する。
前述のように、排他的な加工による変更は、最優先の修正を除いてコメント化されているため、各変更点を重ね合わせて結合済みソースコードに適用することで、全ての加工ルールによる変更を集約した結合済みソースコードを得ることが出来る。
前述の加工例を結合する場合を例とすると、解析済みソースコードは「Func2( type1 param1, func2 param2 );」となっている。これに第２引数の型を変更した加工済みソースコードの変更点を結合すると、「Func2( type1 param1, type2a param2 );」となる。さらに第３引数を追加した加工済みソースコードの変更点を結合すると、「Func2( type1 param1, type2a param2, type3 param3); 」のような結合済みソースコードが得られる。
加工済みソースコード結合処理１２２６処理の例を図８に示す。
【００２０】
加工済みソースコード出力処理１２２７は、結合済みソースコードテーブル１２２８に格納されたソースコードを、ディスク装置のソースコードファイル６に出力する。出力されたソースコードは、各加工ルールに従って対象プラットフォームおよび対象ライブラリの最適なソースコードに変更されているため、プラットフォームの違いや仕様変更に対して、必要なソースコードを効率良く生成し、コストを低減させることができる。
【図面の簡単な説明】
【００２１】
【図１】本発明に係るソースコード生成装置の実施の形態を示すハードウェア構成図である。
【図２】ソースコード生成プログラムの内部処理を機能的に示した機能構成図である。
【図３】原型ソースコードの例を示す説明図である。
【図４】加工ルールファイル４の例を示す説明図である。
【図５】解析済みソースコードの例を示す説明図である。
【図６】加工済みソースコードの例を示す説明図である。
【図７】排他的な変更が存在する場合の加工済みソースコード比較処理の処理例を示す説明図である。
【図８】加工済みソースコード結合処理の処理例を示す説明図である。
【符号の説明】
【００２２】
１…処理装置、２…入力装置、３…表示装置、４…加工ルールファイル、５…ソースコード文法定義ファイル、６…ソースコードファイル、２１…キーボード、２２…マウス、５０…加工ルール、５１…変更内容の対、１２１…オペレーティングシステム、１２２…ソースコード生成プログラム、１２２１…原型ソースコード生成処理置、１２２２…ソースコード解析処理、１２２３…加工ルール読込み処理、１２２４…加工ルール適用処理、１２２５…加工済みソースコード比較処理、１２２６…加工済みソースコード結合処理、１２２７…加工済みソースコード出力処理、１３２１…原型ソースコード、１３２２…解析済みソースコード、１３２３…解析済みソースコードテーブル、１３２４…加工ルールテーブル、１３２５…解析済み加工ルールテーブル、１３２６…ソースコード文法情報テーブル、１３２７…加工済みソースコードテーブル、１３２８…結合済みソースコードテーブル。
【図１】
2008165342.tif 000003
【図２】
2008165342.tif 000004
【図３】
2008165342.tif 000005
【図４】
2008165342.tif 000006
【図５】
2008165342.tif 000007
【図６】
2008165342.tif 000008
【図７】
2008165342.tif 000009
【図８】
2008165342.tif 000010