(57)【要約】【課題】  生成されたソースコードを利用する機器側での機能の追加または変更要請に対して、新規のスクリプトをその都度作成することなく必要なソースコードを効率良く生成し、スクリプトの開発コストを低減させること。【解決手段】  ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第１のステップと、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第２のステップと、生成された各ソースコードを解析する第３のステップと、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第４のステップとを備えることを特徴とする。【選択図】  図２
2007304998.tif 000002
【特許請求の範囲】
【請求項１】
スクリプトによりソースコードを生成する方法であって、
ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第１のステップと、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第２のステップと、生成された各ソースコードを解析する第３のステップと、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第４のステップとを備えることを特徴とするソースコード生成方法。
【請求項２】
前記第４のステップが、重複部分を共通化する前に、前記第３のステップで解析済みの各ソースコードの出力形式をユーザ定義の整形ルールに従い整形するステップを備えることを特徴とする請求項１に記載のソースコード生成方法。
【請求項３】
前記第２のステップが、前記スクリプトファイルから読み込んだ複数のスクリプトに対応するソースコードを生成する前に、各スクリプトに対し、ソースコードとして出力する内容を変更するためのパラメータを設定するステップを備えることを特徴とする請求項１または２に記載のソースコード生成方法。
【請求項４】
スクリプトによりソースコードを生成する装置であって、
ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第１の手段と、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第２の手段と、生成された各ソースコードを解析する第３の手段と、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第４の手段とを備えることを特徴とするソースコード生成装置。
【請求項５】
前記第４の手段が、重複部分を共通化する前に、前記第３の手段で解析済みの各ソースコードの出力形式をユーザ定義の整形ルールに従い整形する手段を備えることを特徴とする請求項４に記載のソースコード生成装置。
【請求項６】
前記第２の手段が、前記スクリプトファイルから読み込んだ複数のスクリプトに対応するソースコードを生成する前に、各スクリプトに対し、ソースコードに出力する内容を変更するためのパラメータを設定する手段を備えることを特徴とする請求項４または５に記載のソースコード生成装置。
【請求項７】
スクリプトによってソースコードをコンピュータに生成させるためのプログラムであって、
ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第１の手段と、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第２の手段と、生成された各ソースコードを解析する第３の手段と、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第４の手段としてコンピュータを機能させるステップを備えることを特徴とするソースコード生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば携帯電話機等に実装するプログラムのソースコードを効率的に生成するのに用いて好適なソースコード生成方法及び装置、並びにソースコード生成プログラムに関するものである。
【背景技術】
【０００２】
従来において、スクリプトまたはテンプレートと呼ばれる原型をユーザが予め定義しておき、これをソースコード生成システムが読み込んだ上でスクリプト中の定められた領域や特定の置換文字列をソースコード生成システムの管理するパラメータに置換することで、ソースコード生成システムが標準で対応していない形式のソースコードを出力することを可能としたソースコード生成システムがある。
このシステムにおいては、例えば、データベースを制御するサブルーチンのソースコードを生成する場合、ソースコード生成システムが未対応の型を持つデータベース項目を制御するソースコードを出力する際に、スクリプト中の型を指定する箇所や判定処理を記述する箇所に、置換の目印となるマクロ文字列を記述しておき、このマクロ文字列をユーザが予め定義した型名および判定用ソースコード部品に置換することにより、ソースコード生成システムが未対応の型を持つデータベース項目を制御するソースコードを出力することができる。
また、テンプレートとプログラム設計情報を組み合わせてソースコードを出力するようにした、下記の特許文献１に開示されたソースコード生成システムがある。
【特許文献１】特開２００４−３６２４４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
スクリプトまたはテンプレートを利用してソースコードを出力する従来のソースコード生成システムでは、複数の型名および判定用ソースコード部品を予め定義しておくことにより、１つのスクリプトまたはテンプレートから異なるソースコードを生成することが可能になる。
しかしながら、スクリプトまたはテンプレート中のマクロ文字列をユーザ定義の型名および判定用ソースコード部品に置換するだけであるため、生成されたソースコードを利用する側で新規の機能を追加する必要が生じた場合には対応することができず、新規機能に対応したスクリプトまたはテンプレートを新規に作成することが必要となり、スクリプトまたはテンプレートの開発コストが嵩み、かつ効率が悪いという問題があった。
例えば、携帯電話機に実装するプログラムのソースコードを開発する場合、携帯電話機側で機能Ａと機能Ｂとを組み合わせた新規機能を追加する必要が生じた場合、新規機能に対応したスクリプトまたはテンプレートを新規に作成することが必要になり、携帯電話機に実装するソースコードの開発コストが嵩むという問題があった。
この場合、インクルード（下位スクリプトの取り込み）によってスクリプトの一部分を流用して対応することが考えられるが、インクルードする側とされる側の双方のスクリプト作成時に、互いがどのようなソースコードを出力するか理解して出力内容を調整しておく必要があり、出力内容の調整が不十分な場合には出力ソースコードの重複や不整合が起こるという問題があった。
【０００４】
本発明の目的は、生成されたソースコードを利用する機器側での機能の追加または変更要請に対して、新規のスクリプトをその都度作成することなく必要なソースコードを効率良く生成し、スクリプトの開発コストを低減させることができるソースコード生成方法及び装置並びにプログラムを提供することにある。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、本発明に係るソースコード生成方法は、ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第１のステップと、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第２のステップと、生成された各ソースコードを解析する第３のステップと、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第４のステップとを備えることを特徴とする。
また、前記第４のステップが、重複部分を共通化する前に、前記第３のステップで解析済みの各ソースコードの出力形式をユーザ定義の整形ルールに従い整形するステップを備えることを特徴とする。
また、前記第２のステップが、前記スクリプトファイルから読み込んだ複数のスクリプトに対応するソースコードを生成する前に、各スクリプトに対し、ソースコードとして出力する内容を変更するためのパラメータを設定するステップを備えることを特徴とする。
【０００６】
本発明に係るソースコード生成装置は、ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第１の手段と、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第２の手段と、生成された各ソースコードを解析する第３の手段と、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第４の手段とを備えることを特徴とする。
また、前記第４の手段が、重複部分を共通化する前に、前記第３の手段で解析済みの各ソースコードの出力形式をユーザ定義の整形ルールに従い整形する手段を備えることを特徴とする。
また、前記第２の手段が、前記スクリプトファイルから読み込んだ複数のスクリプトに対応するソースコードを生成する前に、各スクリプトに対し、ソースコードとして出力する内容を変更するためのパラメータを設定する手段を備えることを特徴とする。
【０００７】
本発明に係るソースコード生成プログラムは、ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第１の手段と、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第２の手段と、生成された各ソースコードを解析する第３の手段と、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第４の手段としてコンピュータを機能させるステップを備えることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、次のような効果がある。
（１）例えば機能Ａのスクリプトと機能Ｂのスクリプトを読み込み、それぞれに対応したソースコードを生成し、それらのソースコードを解析して重複部分を共通化して結合して出力することにより、機能単位に分割して管理されている機能Ａ、機能Ｂのスクリプトを組み合わせて新規の機能のソースコードを極めて容易に生成して出力することができる。
これにより、生成されたソースコードを利用する機器側での新規機能の追加または変更要請に対して、その都度、新規のスクリプトを作成する必要がなくなり、新規機能のソースコードを極めて容易に生成することが可能になり、スクリプトの再利用性が向上し、かつソースコードの開発、修正、保守に係るコストの低減を図ることが可能になる。
（２）スクリプトが出力するソースコードの出力形式をユーザ定義に従って整形することにより、１つのスクリプトを幅広く再利用し、出力形式の一部分だけが異なるスクリプトを多量に作成するという冗長な開発作業を削減することができる。
（３）ユーザが設定したパラメータをスクリプトに渡して、スクリプト側のロジックで必要なソースコードを出力することにより、１つのスクリプトを様々な対象ソースコードの出力に利用することが可能となる。例えば、携帯電話機の画面サイズのみが変更された場合には、新規の画面サイズに応じた表示部品のサイズをパラメータとしてスクリプトに設定することにより、新規の画面サイズに対応したスクリプトを新たに作成する必要がなくなり、効率的に画面サイズ等の変更に対応することが可能になる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明を適用したソースコード生成装置の一実施の形態について説明する。
図１は、本発明に係るソースコード生成装置の実施の形態を示すハードウェア構成図である。
この実施形態で示すソースコード生成装置は、コンピュータで構成される処理装置１、キーボード２１及びマウス２２で構成される入力装置２、表示装置３、スクリプト仕様定義ファイル４、スクリプトファイル５、パラメータファイル６、整形ルールファイル７、ソースコードファイル８で構成される。
処理装置１は、ＣＰＵ１１、メモリ１２を備え、メモリ１２にはＯＳ（オペレーティングシステム）１２１、ソースコード生成プログラム１２１が記憶されている。
【００１０】
図２は、ソースコード生成プログラム１２２の内部処理を機能的に示した機能構成図であり、スクリプト読込み処理１３１１、パラメータデータ作成処理１３１２、スクリプト実行処理１３１３、出力ソースコード解析処理１３１４、整形ルール読込み処理１３１５、ソースコード整形処理１３１６、ソースコード結合処理１３１７、ソースコード出力処理１３１８から構成され、複数のスクリプトファイル５と、パラメータファイル６からメモリ１２上に展開された複数のパラメータデータ１３２１と、複数の整形ルールファイル７を入力とし、ソースコードファイル８中に新たに生成したソースコードを挿入出力するか、新規のソースコードを出力するように構成されている。
本実施形態のソースコード生成装置の動作中に生成されるデータのうち、メモリ１２上に生成されるデータとしては、パラメータデータ１３２１、生成ソースコード１３２２、解析済み生成ソースコード１３２３、整形済み生成ソースコード１３２４、結合済み生成ソースコード１３２５がある。
【００１１】
スクリプト仕様定義ファイル４には、本ソースコード生成装置で使用可能なスプリクト関数の仕様が記憶されている。
スクリプトファイル５には、ユーザが予め作成した特定の機能単位のスクリプトが格納されている。格納されたスクリプトは、スクリプト実行処理１３１３によって実行可能な状態に編集されている。スクリプトファイル５に格納されているスクリプトは、例えば図３に符号５１ａ、５１ｂで示すようなものである。
符号５１ａ及び５１ｂで示すスクリプトは、例えば携帯電話機の画面に表示させる部品（コンテンツ）の位置や形状、色を定めるためのソースコードを生成させるスクリプトであり、図中では部品の幅や高さなどの位置情報を取得して保存する記述部分を示している。ここで例示するスクリプトの違いは、位置情報の変数名としてａ，ｂを用いているか、ｘ，ｙを用いているかである。
【００１２】
パラメータファイル６には、ソースコード生成処理を実行する前にユーザによってソースコード上に出力される数値、文字列、クラス名、記号定数名、また出力されるファイル名や出力の有効/無効など、ソースコード生成処理において使用する情報が予め設定されている。
このパラメータファイル６に格納されたパラメータデータは、ソースコード生成処理を実行する場合に、パラメータデータ作成処理１３１２によって読み込まれ、メモリ１３内にパラメータデータ１３２１として展開される。
【００１３】
図４に、パラメータファイル６に設定されたパラメータデータの一例を示している。
ここで例示するパラメータデータは、Object、height、width、tabs、その他の設定値といった項目で構成された複数行のデータで構成されている。
Object、height、width、tabsは、ソースコード生成対象のスクリプトで使用されている関数をObjectとして設定し、かつその関数で使用する設定値をheight、width、tabsとして設定したものである。
このパラメータデータとして、例えば画面サイズが異なる携帯電話機に用いるソースコードを生成する場合には、それぞれの画面サイズに対応したパラメータデータを設定することにより、同じスクリプトからそれぞれの画面サイズに対応したソースコードを生成することができる。また、画面サイズが変更された場合であっても、変更前の既存のスクリプト中に変更後の画面サイズをパラメータデータから取得して設定することにより、画面サイズ変更後の携帯電話機に使用可能なソースコードを生成することができる。
このパラメータファイル６に設定されたパラメータデータは、パラメータデータ作成処理１３１２によって読み込まれ、図５に示すような構成でメモリ１２内に記憶される。
【００１４】
整形ルールファイル７には、本ソースコード生成装置で使用する定義済み整形ルール、プログラム言語仕様に由来する整形ルール、ユーザ定義の生成ルール等が予め整形ルール読込み処理１３１５で利用可能な形式で格納されている。
整形ルールとは、本ソースコード生成装置で生成するソースコードを、例えば携帯電話機Ａ、Ｂのそれぞれで使用するソースコードの言語仕様やインタフェースに適合するように整形するものであり、携帯電話機Ａ，Ｂにそれぞれ対応してユーザによって設定される。
【００１５】
この整形ルールファイル７に格納されている整形ルールの例を図６に示す。
ここで例示する整形ルールは、本ソースコード生成装置で使用する定義済み整形ルールの例を示すものであり、コメント形式はシングルラインコメント（”//”）のみとし、また１行当たりの命令数は１命令以下、引数なしのリターン文は削除する、いったルールである。
【００１６】
本実施形態のソースコード生成装置においては、１つまたは複数のスクリプトを読み込み、そのスクリプト中にユーザ定義のパラメータデータを設定した後、そのスクリプトをＯＳ１２１が内蔵するスクリプトエンジンで実行してソースコードを生成し、次にその生成したソースコードをトークン単位に分割して文法上の意味解析を行い、この解析済みソースコードをユーザ定義の整形ルールに従い、コメント形式や１行当たりの命令数を整形した後、その整形済みのソースコード１３２４を出力する。
この場合、複数のスクリプトを入力した場合には、それぞれのスクリプトに対応した整形済みのソースコードの重複部分を共通化して結合し、出力する。
生成ソースコード１３２２、解析済み生成ソースコード１３２３、整形済みソースコード１３２４および結合済み生成ソースコード１３２５は、１回のソースコード生成プロセス中に複数のデータが同時に処理される場合がある。本実施例では２件のスクリプトから２通りの生成ソースコード１３２２が得られて、これらが採取的に１件の結合済み生成ソースコード１３２５として出力されるケースでの処理を示すものである。
【００１７】
以下、スクリプト読み込み処理などの各処理について、フローチャートを用いて詳細に説明する。
図７は、スクリプト読込み処理１３１１の処理手順を示すフローチャートである。
スクリプト読込み処理１３１１は、ソースコードの生成開始コマンドがキーボード２１から入力されることによって起動される。
起動されると、スクリプト読込み処理１３１１は、例えば図３に例示した２つのスクリプトファイル５１ａ，５１ｂを１つずつ読込み、以下の処理を行う。
すなわち、読み込んだスクリプトファイルを開き（ステップ７０１）、スクリプトの文法チェックをＯＳ１２１に実行させ、エラーの有無を判定させる（ステップ７０２）。そして、ＯＳ１２１からの文法エラーのチェック結果を得て、文法エラーの有無を判定する（ステップ７０３）。
【００１８】
文法エラー有りであった場合、エラー通知を表示装置３に表示してユーザに通知する（ステップ７０７）。
文法エラー無しであった場合、スクリプト仕様定義ファイル４から本ソースコード生成装置の仕様に定めらたスプリクト関数の仕様を読込み（ステップ７０４）、スクリプト中に含まれる関数リストを作成する（ステップ７０５）。
次に、スクリプトに含まれる関数はスクリプト仕様定義ファイル４から読み込んだ仕様に適合しているかを判定し（ステップ７０６）、適合していない場合には、エラー通知を表示装置３に表示してユーザに通知する（ステップ７０７）。
仕様に適合している場合には、パラメータデータ作成処理１３１２に進む。
【００１９】
図８は、パラメータデータ作成処理１３１２の処理手順を示すフローチャートである。
パラメータデータ作成処理１３１２では、ソースコード生成対象のスクリプトのパラメータデータをパラメータファイル６から取得する（ステップ８０１）。
次に、パラメータデータに含まれる設定値を、ＯＳ１２１のスクリプトエンジンが利用可能な形式に変換する（ステップ８０２）。
【００２０】
次に、変換に成功したかを判定し（ステップ８０３）、成功しなかった場合には、エラー通知を表示装置３に表示してユーザに通知する（ステップ８０６）。
変換に成功した場合には、変換した値をメモリ１２内に、図５で示すようなパラメータデータ１３２１として記憶させる（ステップ８０４）。
次に、全てのパラメータデータの変換を終了したかを判定し（ステップ８０５）、終了していたならば、スクリプト実行処理に進む。しかし、終了していない場合には、ステップ８０１に戻り、次のパラメータデータをパラメータファイル６から読み込んで同様の処理を繰り返す。
【００２１】
図９は、スクリプト実行処理１３１３の処理手順を示すフローチャートである。
スクリプト実行処理１３１３では、メモリ１２内に記憶させたパラメータデータ１３２１をＯＳ１２１のスクリプトエンジンに設定し（ステップ９０１）、予め定められたスクリプト関数を実行させる（ステップ９０２）。予め定められたスクリプト関数とは、文法エラーチェック後のスクリプトに対し、パラメータデータ１３２１を設定した後、ソースコードに変換する関数のことである。
次に、スクリプトの実行に成功したかを判定し（ステップ９０３）、成功した場合にはスクリプトエンジンが出力した文字列を生成ソースコード１３２２として出力する（ステップ９０４）。成功しなかった場合には、エラーを示すコメントを追加した生成ソースコード１３２２を出力する。
次に、スクリプトファイル５から読み込んだ全てのスクリプトを実行したかを判定し（ステップ９０５）、実行していた場合には、出力ソースコード解析処理１３１４に進む。しかし、実行していない場合には、ステップ９０１に戻って同様の処理を繰り返す。
以上の処理により、図３（５１ａ）に例示したスクリプトは図１０（ａ）に示すようなソースコード１３２２ａとして生成される。
【００２２】
図１１は、出力ソースコード解析処理１３１４の処理手順を示すフローチャートである。
この出力ソースコード解析処理１３１４では、生成ソースコード１３２２を取得し（ステップ１１０１）、生成ソースコードのプログラム言語文法に従いトークン単位に分割する（ステップ１１０２）。すなわち、図１０（ａ）の生成ソースコード１３２２ａについて、図１０（ｂ）に点線で囲むようなトークン単位に分割する。
次に、トークンの文法上の意味が、予約語か、括弧など構造記号か、演算子か、シンボルか、コメントかなどのどれに該当するかをプログラム言語文法に従いトークン単位に解析することにより、１つのスクリプトが出力するソースコードの内容を意味的、書式的、その他改行位置や空白文字などテキスト構造等に従って解釈する（ステップ１１０３）。
次に、トークンは有効なソースコード要素かを判定し（ステップ１１０４）、有効なソースコード要素でなければ、文法エラーがあることを表示装置３に表示してユーザに通知し（ステップ１１０６）、終了する。
なお、このトークンの意味解析及び有効なソースコード要素であるか否かを判定する処理は、公知の技術であるため、詳細にいついては省略する。
【００２３】
次に、トークンの出力対象となるソースコード要素部分とトークン解析結果(位置、要素種別、設定値、演算対象など)を解析済み生成ソースコード１３２３としてメモリ１２に登録する（ステップ１１０５）。
次に、トークンの全てのソースコード要素を分析したかを判定し（ステップ１１０７）、終了していなければステップ１１０３に戻り、同様の処理を行う。
すべてのソースコード要素の解析が終了していた場合には、すべての生成ソースコード１３２２を解析したかを判定し、終了していなければステップ１１０１に戻り、同様の処理を繰り返す。
終了していたならば、整形ルール読込み処理１３１５に進む。
以上の処理により、図３（５１ａ）、（５１ｂ）のスクリプトは、図１２（ａ），（ｃ）に示すような解析済み生成ソースコード１３２３ａ，１３２３ｂとしてメモリ１２に登録される。
【００２４】
図１３は、整形ルール読込み処理１３１５の処理手順を示すフローチャートである。
この整形ルール読込み処理１３１５では、図６に例示したような整形ルールを整形ルールファイル７から読込む（ステップ１３０１）。
整形ルールは、ソースコード言語の文法に由来するルール、開発プロジェクトの規則に由来するユーザ定義ルール、本ソースコード生成装置の仕様に由来するルールなど複数のパターンが利用できる。
ソースコード言語の文法に由来するルールとしては、対象がＣ言語の場合にはコメントを“/*”から“*/”で囲まれたコメントブロックに変換し、C++言語の場合は“//”のコメントブロックとして出力する、１行の命令文の数を指定する、関数末尾のreturn文は削除する、など様々な例がある。
【００２５】
ユーザ定義ルールの例としては、ソースコード上のインデントやif節後の中括弧”{“の改行位置の整形、変数宣言時の初期化ルールに従いスクリプトが出力するコードがポインタ変数を初期化していない場合には自動的にNULLへの初期化コードを付加する等がある。
また、本ソースコード生成装置の仕様に由来するルールの例としては、インクルードファイルの宣言が出力された場合に、適切なフォルダ上のパスに変更する等の多種多様なルールがある。これらは例であり、本発明において実施できるルールがこれらに限定されないことは言うまでも無い。
【００２６】
次に、整形ルールファイルの記述内容の１件を取得する（ステップ１３０２）。
例えば、図６の整形ルールのうち、コメント形式などの各ルールのうち１つを取得する。
次に、取得した有効な整形ルールかを判定し（ステップ１３０３）、有効な整形ルールでなければエラーメッセージを表示装置３に表示してユーザに通知し、終了する（ステップ１３０６）。
なお、有効かどうかはハードコーディングで規定された本システムの仕様によって判定される。
次に、整形ルールファイル７に記述された全てのルールを分析したかを判定し（ステップ１３０４）、解析終了していなければステップ１３０２に戻り同様の処理を繰り返す。
終了していたならば、ソースコード整形処理１３１６に進む。
【００２７】
図１４は、ソースコード整形処理１３１６の処理手順を示すフローチャートである。
ソースコード整形処理１３１６では、解析済み生成ソースコード１３２３を取得し（ステップ１４０１）、各トークンを対象とした整形ルールを有効性をチェック済みの全ての整形ルールから検索する（ステップ１４０２）。
次に、個々のトークンについて、解析済み生成ソースコード１３２３に適合する整形ルールは存在するかを判定し（ステップ１４０３）、存在した場合には、整形ルールに従って解析済み生成ソースコード１３２３中の該当するトークンを変更し、整形済み生成ソースコード１３２４として出力する（ステップ１４０４）。
しかし、適合する整形ルールが存在しない場合には、トークンを変更せず、整形済み生成ソースコード１３２４として出力する（ステップ１４０５）。
【００２８】
次に、全てのトークンを整形したかを判定し（ステップ１４０６）、全てのトークンに対する処理が終了していなければステップ１４０２に戻って同様の処理を繰り返す。
しかし、全てのトークンに対する処理が終了したならば、解析済み生成ソースコード１３２３中の全ての要素を解析したかを判定し（ステップ１４０７）、終了していなければステップ１４０１に戻って同様の処理を繰り返す。
全てのトークンの整形が終了したならば、ソースコード結合処理１３１７に進む。
【００２９】
ソースコード整形処理１３１６によって整形ルールファイル７の指定に従った整形が完了すると、整形済みソースコード１３２４が得られる。
この整形処理によって、図１２（ａ），（ｃ）に例示した解析済み生成ソースコード１３２３ａ，１３２３ｂは、図１２（ｂ）、（ｄ）に示すような整形済み生成ソースコード１３２４ａ，１３２４ｂとなる。
なお、図１２（ａ），（ｂ）の点線で囲む文字列は個々のトークンである。
このうち、図１２（ａ）のコメント形式を示すトークン“/*”が整形ルールによってシングルラインコメント”//”のみのトークンに整形され、また、引数なしのリターン文“return;”というトークンが削除されていることを例示している。
また、図１２（ｂ）の変数ｘ、ｙに値を設定する文のトークンは１行に記述されているが、整形ルールによって、図１２（ｄ）のように、１行につき１命令の形式に整形されていることを例示している。
【００３０】
図１５は、ソースコード結合処理１３１７の処理手順を示すフローチャートである。
このソースコード結合処理１３１７では、複数のスクリプト５１ａ，５１ｂから生成した整形済み生成ソースコード１３２４ａ，１３２４ｂ中に存在する同一の処理単位あるいは同一処理ブロックなどの重複部分を結合して出力する。
すなわち、整形済み生成ソースコード１３２４の１件、例えば図１２（ｃ）のように整形された整形済み生成ソースコード１３２４ａを取得し（ステップ１５０１）、そのソースコード１３２４ａ中で、関数、構造体定義、インクルード処理、プリプロセッサ処理などのブロックを検索する（ステップ１５０２）。
そして、その検索したブロックに対し、結合済みマークは設定済みかを判定し（ステップ１５０３）、設定済みであれば、ステップ１５０９に進む。
【００３１】
設定済みでなければ、対象ブロックと同一のブロックを他の整形済みソースコード１３２４ｂから検索する（ステップ１５０４）。
次に、同一のブロックが存在するかを判定し（ステップ１５０５）、存在した場合には、対象ブロックに、各ブロックの非重複部分を挿入して結合済みソースコード１３２５として出力する（ステップ１５０６）。
同一のブロックが存在しない場合には、対象ブロックを変更せず、結合済みソースコード１３２５として出力する（ステップ１５０７）。
次に、処理した各ブロックに“結合済み”マークを設定した後（ステップ１５０８）、処理中の整形済み生成ソースコード１３２４ａ内の全ブロックの処理を終了したかを判定し（ステップ１５０９）、終了していなければ、ステップ１５０４に戻って同様の処理を行う。
【００３２】
終了していた場合には、整形済み生成ソースコード１３２４ａ，１３２４ｂの全てを分析したかを判定し（ステップ１５１０）、全ての分析を終了していなければ、ステップ１５０１に戻って同様の処理を繰り返す。
終了していた場合には、ソースコード出力処理１３１８に進む。
【００３３】
この結合処理によって、図１２（ｂ），（ｄ）で例示した整形済み生成ソースコード１３２４ａ，１３２４ｂは図１６に例示するように、同一の処理を行っている部分コード１６０１，１６０２の重複部分が１つに結合されて共通化され、かつ非重複部分１６０３が挿入された結合済み生成ソースコード１３２５として出力される。
ここで、ステップ１５０４〜１５０６においては、次のようにして重複部分と非重複部分を調べて結合する。
【００３４】
すなわち、整形済みソースコード１３２４ａと１３２４ｂから同一の処理に関する部分コード１６０１，１６０２とを抽出した後に、両コードで重複する部分を判定する。何れかのコードを基準として、他方から非重腹部分を取得する。図１６の例では、部分コード１６０１を基準として、部分コード１６０２から部分コード１６０１に含まれない部分である非重複部分１６０３を取得している。この比較は単純な文字列比較だけを根拠として限定せず、ソースコード解析装置による構造解析の結果を利用することが可能である。構造解析結果によって重複を判定することで、空白文字や改行などソースコード上は影響を与えない差異によって誤判定が生じる問題を避け、より正確な結合処理を行うことが可能となる。
但し、本発明では差分比較処理について前述の方式だけに規定するものではなく、その方式について制限はしていない。重複部分の判定が完了した後に、重複部分を除いて対象機能に関する部分コード１６０１と同一処理に関する部分コード１６０２を結合した対象機能に関する結合済み生成ソースコード１３２５を得る。
【００３５】
ここで、結合対象の対象機能に関する部分コードが２つの場合について説明したが、同一処理に関する部分コードが３つ以上の場合でも、同様の処理を反復することで処理結果として結合済み生成ソースコードを得ることが可能である。
結合済み生成ソースコード１３２５は、ソースコード出力処理１３１８によって出力対象のソースコードファイル８に新規出力、または前回の生成プロセスで生成した出力ソースコードにマージする形式で出力される。
なお、ソースコードファイル８は、既存または新規の何れであっても処理が可能である。既存のソースコードファイルに出力する場合には、本ソースコード生成装置の対応する形式に沿ったコメント、関数名、行番号などの挿入位置の判定情報が予め設定されている。
【００３６】
図１７は、ソースコード出力処理１３１８の処理手順を示すフローチャートである。
ソースコード出力処理１３１８では、結合済み生成ソースコード１３２５を取得し（ステップ１７０１）、スプリクト仕様定義ファイル４によって予め定められたスクリプト関数を実行する（ステップ１７０２）。
次に、出力対象のソースコードファイルは既に存在するかを判定し（ステップ１７０３）、存在している場合には、そのソースコードファイルを取得し（ステップ１７０４）、ステップ１７０２の関数が出力した文字列を生成ソースコードに追加し（ステップ１７０５）、結合済み生成ソースコード１３２５の各ブロックを、既存のソースコードファイル中の適切な位置に挿入する（ステップ１７０６）。
そして、ソースコード出力処理の結果を表示装置３に表示してユーザに通知する（ステップ１７０８）。
既存のソースコードファイルがない場合には、新規にソースコードファイル８を作成し、その中に結合済み生成ソースコード１３２５の各ブロックを新規に格納する（ステップ１７０８）。
【００３７】
図１８及び図１９は、携帯電話機に実装するソースコードを生成する場合のスクリプトの例を示すものである。
これは、図２０のＧＵＩによる画面デザインの結果から取得したパラメータデータに基づき、携帯電話機の画面を表示するプログラムのソースコードを生成するスクリプトを例示するものである。
本例では、図１８のスクリプト例（１）１８０１および図１９のスクリプト例（２）１９０１を適用してソースコードを出力するものとする。
スクリプト例（１）１８０１は、画面上の全部品の位置およびサイズを、パラメータファイル３にパラメータデータとして設定された画面幅および画面高さに応じて自動的に変更する処理を追加するスクリプトである。
スクリプト例（２）１９０１は、画面下のキーガイド部品に背景色等を設定するスクリプトである。
【００３８】
携帯電話機向けのソフトウェア開発においては、実際にプログラムが実行されるハードウェアの画面サイズが機種によって異なるケースが一般的である。従来のソースコード生成装置では、スクリプト内で利用できるパラメータが固定的であったため、予想される全ての画面サイズに対して部品１つ１つの座標パラメータを用意するか、部品毎にスクリプトやテンプレートを用意する必要があった。このため、パラメータやスクリプトの準備に要する作業量が大きいという問題があった。また、複数のスクリプトを同時に適用する場合には互いの出力するソースコード間で整合性を確保する必要があり、スクリプトの数が増えると組合せが級数的に増加して作成、メンテナンスおよび再利用が困難となっていた。
【００３９】
本ソースコード生成装置では、図２０に示すように、ＧＵＩデザイナにより設定された値を、パラメータデータ２００１として設定し、そのパラメータデータをスクリプト実行処理１３１３によってスクリプト１８０１、１９０１に設定する。
これにより、スクリプト１８０１、１９０１側であらゆるパラメータ値を利用可能となるため、１つのスクリプトで多様な処理が可能なソースコードを出力することが可能になる。
例えば、スクリプト例（１）１８０１において画面上の全部品のデータをパラメータデータの配列として処理できるため、異なる数の部品を持つ複数の画面に対して、１つのスクリプトでカスタマイズされたソースコードを生成できる。
また、１画面内の各部品の内容や個数が予め判らない場合でも、スクリプトの判定ロジックやループロジックを組み込むことにより、必要な部品だけを対象としたソースコードを出力するスクリプトを容易に作成することができる。
さらに、スクリプトの出力結果同士が干渉してしまう場合でも、本ソースコード生成装置の出力ソースコード解析処理１３１４、整形ルール読込み処理１３１５、ソースコード整形処理１３１６およびソースコード結合処理１３１７により、ソースコードが適切に統合される。
これにより、各スクリプトは互いの出力結果を考慮せずに必要なコードを出力することが可能となる。
【００４０】
図１８及び図１９の例では、スクリプト例（１）１８０１とスクリプト例（２）１９０１が同名のInitializeWidget関数を出力する仕様となっているが、ソースコード結合処理１３１７によって重複部分が除去されるため、出力されるソースコードでは文法エラーが発生しない。このため、サイズ変更、色設定、文字設定、等々の単機能単位で作成したスクリプトを必要に応じて自由に組み合わせることが可能となり、作成効率やメンテナンス性、再利用性を高める効果が得られる。
パラメータを変更せずにスクリプトを適用して生成したソースコードの実行例２００３（図２０）は、デザインした画面をそのままソースコードとして出力し、実行した結果を模式的に示したものである。この実行例２００３の場合はデザイン結果と同一の画面２００３が携帯電話機上に表示される。
【００４１】
これに対して、画面幅と画面高さのパラメータをパラメータファイル３に設定したパラメータデータによって変更した後にスクリプトを適用して生成したソースコードの実行例２００２（図２０）は、画面サイズの異なる携帯電話機向けに再生成したソースコードの実行例である。
スクリプト例（１）１８０１の処理により、各部品は位置とサイズが自動的に半分に変更され、ユーザの意図に沿った画面デザインが維持されている。またスクリプト例（２）１９０１も干渉することなく同時に有効となり、最下部の部品の色が正しく設定される。
画面高さのパラメータ値を変更した上でスクリプトを適用して生成したソースコードの実行例２００４は、画面高さのみを変更した場合の例である。スクリプト例（１）１８０１は各部品のy座標と高さのみを適切に変更しており、また最下部の色設定もスクリプト例（１）１８０１との干渉なしに有効となっている。
【００４２】
以上の説明から明らかなように、本実施形態のソースコード生成装置によれば、例えば機能Ａのスクリプトと機能Ｂのスクリプトを読み込み、それぞれに対応したソースコードを生成し、それらのソースコードを解析して重複部分を共通化して結合して出力することにより、機能単位に分割して管理されている機能Ａ、機能Ｂのスクリプトを組み合わせて新規の機能のソースコードを極めて容易に生成して出力することができる。
これにより、生成されたソースコードを利用する機器側での新規機能の追加または変更要請に対して、その都度、新規のスクリプトを作成する必要がなくなり、新規機能のソースコードを極めて容易に生成することが可能になり、スクリプトの再利用性が向上し、かつソースコードの開発、修正、保守に係るコストの低減を図ることが可能になる。
特に、携帯電話機など、新規製品の開発が次々に行われる分野における機器に実装するソースコードを生成する場合、必要なスクリプトを自由に組み合わせて自動的に適切なソースコードを出力することが可能となり、生産性が向上し、開発作業者の労力の軽減を含め、開発コストの大幅な低減を図ることができる。
また、スクリプトが出力するソースコードの出力形式をユーザ定義に従って整形することにより、１つのスクリプトを幅広く再利用し、出力形式の一部分だけが異なるスクリプトを多量に作成するという冗長な開発作業を削減することができる。
さらに、ユーザが設定したパラメータをスクリプトに渡して、スクリプト側のロジックで必要なソースコードを出力することにより、１つのスクリプトを様々な対象コードの出力に利用することが可能となる。例えば、携帯電話機の画面サイズのみが変更された場合には、新規の画面サイズに応じた表示部品のサイズをパラメータとしてスクリプトに設定することにより、新規の画面サイズに対応したスクリプトを新たに作成する必要がなくなり、効率的に画面サイズ等の変更に対応することが可能になる。
【図面の簡単な説明】
【００４３】
【図１】本発明に係るソースコード生成装置の実施の形態を示すハードウェア構成図である。
【図２】ソースコード生成プログラムの内部処理を機能的に示した機能構成図である。
【図３】スクリプトファイルに格納されたスクリプトの例を示す図である。
【図４】パラメータファイルに設定されたパラメータデータの一例を示す図である。
【図５】パラメータファイル６に設定されたパラメータデータのメモリ内における記憶例を示す図である。
【図６】整形ルールファイルに格納された整形ルールの例を示す図である。
【図７】スクリプト読込み処理の処理手順を示すフローチャートである。
【図８】パラメータデータ作成処理の処理手順を示すフローチャートである。
【図９】スクリプト実行処理の処理手順を示すフローチャートである。
【図１０】図３に例示したスクリプトから生成されるソースコードの例を示す図である。
【図１１】出力ソースコード解析処理の処理手順を示すフローチャートである。
【図１２】図３のスクリプトに対応する解析済み生成ソースコードの例を示す図である。
【図１３】整形ルール読込み処理の処理手順を示すフローチャートである。
【図１４】ソースコード整形処理の処理手順を示すフローチャートである。
【図１５】ソースコード結合処理の処理手順を示すフローチャートである。
【図１６】この結合処理によって出力される結合済み生成ソースコードの例を示す図である。
【図１７】ソースコード出力処理の処理手順を示すフローチャートである。
【図１８】携帯電話機に実装するソースコードを生成する場合のスクリプトの例を示す図である。
【図１９】携帯電話機に実装するソースコードを生成する場合のスクリプトの他の例を示す図である。
【図２０】ＧＵＩデザイナにより設定された値をパラメータデータとして設定してソースコードを生成し、そのソースコードを実行することによって表示される携帯電話機の表示画面の例を示す図である。
【符号の説明】
【００４４】
１…処理装置、２…入力装置、３…表示装置、４…スクリプト使用定義ファイル、５…スクリプトファイル、６…パラメータファイル、７…整形ルールファイル、８…ソースコードファイル、１２…メモリ、５１ａ…スクリプト、５１ｂ…スクリプト、１２１…ＯＳ（オペレーティングシステム）、１３１…ソースコード生成プログラム、１３１１…スクリプト読込み処理、１３１２…パラメータデータ作成処理、１３１３…スクリプト実行処理、１３１４…出力ソースコード解析処理、１３１５…整形ルール読込み処理、１３１６…ソースコード整形処理、１３１７…ソースコード結合処理、１３１８…ソースコード出力処理。
【図１】
2007304998.tif 000003
【図２】
2007304998.tif 000004
【図３】
2007304998.tif 000005
【図４】
2007304998.tif 000006
【図５】
2007304998.tif 000007
【図６】
2007304998.tif 000008
【図７】
2007304998.tif 000009
【図８】
2007304998.tif 000010
【図９】
2007304998.tif 000011
【図１０】
2007304998.tif 000012
【図１１】
2007304998.tif 000013
【図１２】
2007304998.tif 000014
【図１３】
2007304998.tif 000015
【図１４】
2007304998.tif 000016
【図１５】
2007304998.tif 000017
【図１６】
2007304998.tif 000018
【図１７】
2007304998.tif 000019
【図１８】
2007304998.tif 000020
【図１９】
2007304998.tif 000021
【図２０】
2007304998.tif 000022