プログラムソースコード解析支援装置、プログラムソースコード解析支援方法、プログラム、及び、記録媒体
【課題】既存のプログラムソースコードを所望のコーディングスタイルに自動的に変換して出力すること。
【解決手段】実行ファイル103を実行するCPU107が、既存のプログラムソースコード(ソースコードファイル104から読み込まれた)からトークンとホワイトスペースを検出し、該検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて出力処理パターン(出力処理パターンファイル105から読み込まれた)を使用して加工し、該加工したプログラムコードをモニタ110に出力する構成を特徴とする。
【解決手段】実行ファイル103を実行するCPU107が、既存のプログラムソースコード(ソースコードファイル104から読み込まれた)からトークンとホワイトスペースを検出し、該検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて出力処理パターン(出力処理パターンファイル105から読み込まれた)を使用して加工し、該加工したプログラムコードをモニタ110に出力する構成を特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムソースコードを解析して個別に定義したコーディングスタイルで出力をするプログラムコード解析支援装置、プログラムコード解析支援方法、プログラム、及び、記録媒体に関する。
【背景技術】
【0002】
近年、ソフトウェア開発において第三者のソースコードを参照することは多々あるが、第三者が作成したプログラムを解析して修正することは、極めて困難を伴う作業となり、その結果、プログラムの修正・変更に多大な時間を要していた。
【0003】
そこで、ソースコードの解析を助ける手段として、個別に定義したコーディングスタイルで表示することが考えられている。
【0004】
まず、特許文献1には、ソースコードの字下げを自動化する字下げ処理方式が開示されている。特に、ソースコードを入力するオペレータに依存していたソースコード内の字下げを自動で行うように処理するものである。
【0005】
また、特許文献2には、基本となる言語仕様に対して拡張を施した言語使用に則って記述されたソースプログラムを解析するソースプログラム解析装置が開示されている。特に、言語仕様の拡張に対し、短期間で対応可能なソースプログラムの解析装置が開示されている。
【特許文献1】特開平5−81008号公報
【特許文献2】特開平9−167095号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1に記載のソースコードの字下げを自動化する処理方式においては、オペレータの入力イベント発生時のインデント字下げ部分についての処理は可能であるが、入力イベントが発生しない既存のソースコードを字下げ処理することはできない。
【0007】
また、特許文献2に記載のソースプログラム解析装置においては、トークンを単位として処理することで、仕様の拡張されたソースコードに対してのプログラムの解析を行って関数名、呼び出し形式、パラメータ数、各パラメータを出力表示することは可能であるが、ソースコードを所望のコーディングスタイルで表示することはできない。
【0008】
本発明は上記の課題を解決するためになされたものである。本発明の目的は、既存のプログラムソースコードを所望のコーディングスタイルに変換して出力することができる仕組を提供することである。
【課題を解決するための手段】
【0009】
本発明は、既存のプログラムソースコードから、プログラム上意味のある字句を示すトークンと、該トークンの間に配置される、0文字以上のスペースコード、改行コード、タブコードで構成される文字列を示すホワイトスペースを検出するトークン検出手段と、前記トークン検出手段により検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて加工し、該加工したプログラムコードを出力する出力手段とを有することを特徴とする。
【発明の効果】
【0010】
本発明によれば、プログラムソースコードを、個別に定義したコーディングスタイルに自動的に(人的作業無しに)変換して出力することができる。
【0011】
特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを解読する必要が無くなり、コードレビュー工数を軽減できる。
【0012】
また、個別に定義したコーディングスタイルで表示することで、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【発明を実施するための最良の形態】
【0013】
以下、図面を参照して、本発明の実施形態を詳細に説明する。
【0014】
図1は、本発明の一実施形態を示すプログラムソースコード解析支援装置の構成の一例を示すブロック図である。
【0015】
図1において、101は、本発明のプログラムソースコード解析支援装置に適用可能なパーソナルコンピュータ等の情報処理装置の本体(以下、PC本体)である。
【0016】
PC本体101において、CPU107は、不図示のキーボード、マウス等のポインティングデバイスからの入力によるユーザ指示により、記憶装置(HDD等)102に格納された実行ファイル(プログラム)103を必要に応じて一時記憶装置(RAM等)108に読み込み、処理を実行する。例えば、CPU107は、ソースコードファイル104に記述されているソースコードに対して、後述する「適用処理」や「分析処理」を実行する。
【0017】
ここでいう「適用処理」とは、既存のプログラムソースコード(ソースコードファイル104)をユーザが指示した出力処理パターンに従い、基本設定ファイル111及び出力処理パターンファイル105の情報を用いて整形する処理(出力処理パターン設定)である。なお、適用処理によって作成された、新たな整形済みソースコードは、パターン適用済みソースファイル106として記憶装置102に保存することができる。
【0018】
また、「分析処理」とは、基本設定ファイル111に基づいて既存のプログラムソースコード(ソースコードファイル104)を分析して、新たに出力処理パターンの情報(出力処理パターンファイル105)を生成する処理である。なお、分析処理によって作成された、新たな出力処理パターンの情報は、出力処理パターンファイル105として記憶装置102に保存することができる。
【0019】
また、CPU107は、適用処理中や分析処理中に、必要に応じてモニタ110にその内容を表示したり、一時記憶装置108に作業用の情報を格納する。
【0020】
109はビデオカード等の表示制御装置109であり、モニタ110への表示を制御する。112はインタフェース(I/F)であり、キーボード(KB)やポインティングデバイス(PD)等の入力装置113からの入力を制御する。
【0021】
なお、図1に示した記憶装置102上に格納されるファイルの構成や、後述するモニタ110へ表示される画面の構成は、一例であり、用途や目的に応じて様々な構成例があることは言うまでもない。
【0022】
なお、図1に示した基本設定ファイル111は、後述する図15に示す言語別の設定と、後述する図16に示す挿入パターンの設定を含む。また、出力処理パターンファイル105は、後述する図17に示す処理パターンの設定を含む。
【0023】
以下、図2を参照して、本実施形態を示すプログラムソースコード解析支援装置の主の機能である「適用処理」と「分析処理」の分岐処理について説明する。
【0024】
図2は、図1に示した実行ファイル103に基づいて実現される処理選択処理よる「適用処理」と「分析処理」の分岐処理を示す図である。
【0025】
図2において、201は選択手段であり、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される機能の1つに対応する。
【0026】
まず、後述する図12又は図14に示すようなウィンドウ1200(CPU107が実行ファイル103を実行することによりモニタ110に表示される)の「ファイル」メニュー1201の「ファイルを開く」を選択することにより、CPU107は、ファイルオープンダイアログ1211をモニタ110に表示して、入力装置113を用いてユーザからの入力を受け付ける。
【0027】
処理選択手段201は、ユーザにより「開く」ボタン1209が押下されたことを検知すると、ユーザにより選択されたモードを判定して、処理を分岐する。
【0028】
即ち、図12に示すように、モードとして「適用」1205が選択されたと判定した場合には、処理選択手段201は、適用処理202(図3)を実行するように制御する。
【0029】
一方、図14に示すように「分析」1401が選択されたと判定した場合には、処理選択手段201は、分析処理203(図4)を実行するように制御する。
【0030】
図3は、本発明の実施形態の適用処理(図2の202)における基本的な処理を示す図である。
【0031】
図3に示すように、適用処理202は、301〜307に示す各手段により実行される。なお、301〜307に示す各手段は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される機能の1つに対応する。
【0032】
まず、ソースコード読み込み手段301が、後述する図12の画面でユーザより指示されたソースコードファイル104を読み込む。
【0033】
また、出力処理パターン読み込み手段303が、図12の画面で選択されたパターンをもとに、出力処理パターンファイル105から必要なパターン情報を読み込む。なお、ここでいうパターンとは、それぞれの出力処理パターンに付けられたユニークな名称である。
【0034】
次に、トークン検出手段302が、ソースコード読み込み手段301で順次読み込まれるソースコードの文字を、トークンと呼ばれる単位の長さ1文字以上のプログラム上意味のある文字列(字句)に分割する。なお、トークンとトークンの間の長さ0文字以上の、スペースコード,タブコード,改行コードをホワイトスペースと呼称する。
【0035】
次に、トークングループ判定手段304が、トークン検出手段302で抽出されたトークンを同一として扱われる(解析上同一視される)トークン集合を示すトークングループに分類する。
【0036】
次に、出力処理パターン判定手段305が、トークングループ判定手段304で導き出されたトークングループと、直前のトークングループの組み合わせから、ひとつの出力処理パターンを求める。
【0037】
次に、出力処理パターン別出力処理手段306が、出力処理パターン判定手段305で得られた出力処理パターンに従い、直前のトークンと今回のトークンの間のホワイトスペースを加工することにより、ソースコードを整形して表示手段307に出力する。
【0038】
次に、表示手段307が、出力処理パターン別出力処理手段306の整形結果を図13の1301に示すようにモニタ110に表示するように制御する。なお、出力処理パターン別出力処理手段306は、出力処理パターン別出力処理手段306の整形結果をパターン適用済みソースファイル106として記憶装置102に出力したり、不図示のプリンタに出力する構成であってもよい。
【0039】
図4は、本発明の実施形態の分析処理(図2の203)における基本的な処理を示す図である。
【0040】
図4に示すように、分析処理203は、401〜408に示す各手段により実行される。なお、401〜408に示す各手段は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される機能の1つに対応する。また、401〜405は、図3に示した301〜305と同様の手段である。
【0041】
まず、ソースコード読み込み手段401が、後述する図14の画面でユーザより指示されたソースファイルを読み込む。
【0042】
また、出力処理パターン読み込み手段403が、図14の画面で選択されたパターンをもとに、出力処理パターンファイルから必要なパターン情報を読み込む。このパターン情報は元となるもので、分析処理の結果この内容が更新され、別名で保存される。
【0043】
次に、トークン検出手段402が、ソースコード読み込み手段401で順次読み込まれるソースコードの文字を、トークンと呼ばれる単位の長さ1文字以上の意味のある文字列に分割する。なお、トークンとトークンの間の長さ0文字以上のスペースコード、タブコード、改行コードをホワイトスペースと呼称する。
【0044】
次に、トークングループ判定手段404が、トークン検出手段402で抽出されたトークンを同一として扱われるトークングループに分類する。
【0045】
次に、出力処理パターン判定手段405が、トークングループ判定手段404で導き出されたトークングループと、直前のトークングループの組み合わせから、ひとつの出力処理パターンを求め、直前のトークンと今回のトークンとの間のホワイトスペース(現ホワイトスペース)を、出力処理パターンごとに一時記憶装置108内に蓄えておく。
【0046】
次に、出力処理パターン分析手段406が、出力処理パターン判定手段405で得られた出力処理パターンを分析して有効な出力パターンを決定する。
【0047】
次に、出力処理パターン保存手段408が、出力処理パターン分析手段406により決定された有効な出力処理パターンを、出力処理パターンファイルとして記憶装置102に保存する。
【0048】
そして、表示手段407が、ソースコード読み込み手段401で読み込んだソースコードをそのまま表示する。
【0049】
以下、図5〜図9のフローチャートを用いて適用処理(図2の202,図3)の具体的な処理を示す。
【0050】
図5は、本発明の実施形態の適用処理(図2の202,図3)の具体的な処理を示すフローチャートである。このフローチャートの処理は、図3の301〜307に示した各手段により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0051】
まず、図12に示すようにファイルオープンダイアログ1211のインタフェース1202,1203,1204,1207,1208においてファイルが選択され、1205に示すようにモード選択手段により「適用」が選択されることにより適用モードが選択され、パターン選択1206により既に登録されているパターン情報の名称が選択され、開くボタン1209が押下されると、CPU107は、ステップS501より適用処理を開始する。なお、この際、CPU107は、一時記憶装置108に格納されるインデントカウンタを「0」に初期化しておく。
【0052】
そして、ステップS502において、CPU107は、基本設定を基本設定ファイル111から読み込む。この基本設定には、図15に示すような言語の設定情報や、図16に示すような挿入文字パターンの設定情報等が含まれている。
【0053】
言語の設定情報は、ソースコードからトークンを抽出するために、言語ごとに設定された情報に対応する。なお、言語の設定情報は、後述する図15に示す画面で閲覧及び編集可能である。この言語の設定情報には、抽出したトークンがコメントであるかを判断するためのコメント判断テーブル、抽出したトークンがインデントを加算する加算グループかインデントを減算する減算グループかを判断するためのインデントカウンタテーブル、抽出したトークンが属するグループを判断するためのグループテーブル等が含まれる。
【0054】
また、挿入文字パターンの設定情報は、抽出したトークン間に挿入する文字のパターンの設定情報に対応する。なお、挿入文字パターンの設定情報は、後述する図16に示す画面で閲覧および編集可能である。
【0055】
次に、ステップS503において、CPU107は、上記ステップS502で選択されたパターンの情報を出力処理パターンファイル105から読み込む。なお、パターンの情報は、後述する図17に示す画面で閲覧および編集可能である。このパターンの情報は、S502で読み込んだ、言語の設定情報により抽出されたトークン間にどの挿入文字パターンの設定情報内のどのパターンを挿入するかをトークンの属するグループ間の関係を用いて設定した情報である。
【0056】
次に、ステップS504において、CPU107は、上述のように選択されたソースファイル(例えば、図13の1302に示すようなソースコードを含むソースファイル)をオープンし、読み込みが可能な状態にする。
【0057】
次に、ステップS505において、CPU107は、トークン抽出処理を行って、S504でオープンしたソースファイルからトークンを1件抽出する(1つのトークンとその直前のホワイトスペースを抽出する)。この処理の詳細は図6にて後述する。
【0058】
次に、ステップS506では、CPU107は、S505の抽出処理結果に基づいてトークンの有無を判定し、処理を分岐する。
【0059】
即ち、ステップS506で、トークンが有った(抽出できた)と判定した場合には、CPU107は、ステップS507に処理を進める。
【0060】
ステップS507では、CPU107は、S505で抽出したトークンのトークングループの判定処理を行い、現トークングループを求める。なお、この処理の詳細は図7にて後述する。
【0061】
次に、ステップS508において、CPU107は、S507で判定したトークングループが、インデントカウンタを加算するものであるかを判定し、処理を分岐する。なお、この判断は、S502で読み込まれた基本設定内の言語の設定のインデントカウンタテーブル(図15)に基づいて行われる。また、インデントとは、プログラムを人が読み易くするための字下げのことであり、インデントカウンタはその字下げの段数をカウントするものであり、一時記憶領域内に格納されている。
【0062】
そして、ステップS508で、S507で判定したトークングループがインデントカウンタを加算するものでないと判定した場合には、CPU107は、ステップS509の処理は行わず、ステップS510に処理を進める。
【0063】
一方、ステップS508で、S507で判定したトークングループがインデントカウンタを加算するものであると判定した場合には、CPU107は、ステップS509に処理を進める。
【0064】
ステップS509では、CPU107は、インデントカウンタに1を加算し、ステップS510に処理を進める。
【0065】
次に、ステップS510において、CPU107は、S507で判定したトークングループが、インデントカウンタを減算するものであるかを判定し、処理を分岐する。なお、この判断は、S502で読み込まれた基本設定内の言語の設定のインデントカウンタテーブル(図15)に基づいて行われる。
【0066】
そして、ステップS510で、S507で判定したトークングループがインデントカウンタを加算するものでないと判定した場合には、CPU107は、ステップS511の処理は行わず、ステップS512に処理を進める。
【0067】
一方、ステップS510で、S507で判定したトークングループがインデントカウンタを加算するものであると判定した場合には、CPU107は、ステップS511に処理を進める。
【0068】
ステップS511では、CPU107は、インデントカウンタから1を減算し、ステップS512に処理を進める。
【0069】
ステップS512では、CPU107は、前トークングループ(前回のループの際にS507で求められたトークングループ)と、上記S507で求めた現トークングループから出力処理パターン判定する。この処理の詳細は図8にて後述する。
【0070】
次に、ステップS513において、CPU107は、S512で求めた出力処理パターンとインデントカウンタをもとに、出力処理パターン別の処理を行う。この処理の詳細は図9にて後述する。
【0071】
そして、S513の処理が終了すると、CPU107は、ステップS505に処理を戻し、次のトークンを抽出するように制御する。
【0072】
そして、ステップS506で、もう抽出するトークンが無くなったと判定した場合には、CPU107は、ステップS514に処理を進め、本フローチャートの適用処理を終了させるために、S504でオープンしていたソースファイルをクローズする。
【0073】
そして、ステップS515において、CPU107は、本フローチャートの適用処理を終了する。このときは、図13の1301に示すように、モニタ110には、パターンが適用された結果のソースコードが表示されている。
【0074】
以下、図6を参照して、図5のS505に示したトークン抽出処理について説明する。
【0075】
図6は、本発明の実施形態のトークン抽出処理(図5の505)を示すフローチャートである。このフローチャートの処理は、図3のトークン検出手段302等により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0076】
なお、ここでは図5のS504で既にオープンしているソースファイルから、トークンとその直前のホワイトスペースを抽出する処理の一例を示す。対応する言語等により処理を追加することも可能である。
【0077】
まず、ステップS601で処理を開始すると、ステップS602において、CPU107は、一時記憶装置108内に保持する判断テーブルを「区切り子判断テーブル」に設定する。なお、区切り子とは、プログラムコード中に現れる、その前後でトークンを分割する記号である。ただしコメント中や、文字列中に出現した場合は、区切り子とは判定しない。例えば、C言語の場合、セミコロン(;)や、カンマ(,)、中括弧({})等が相当する。この区切り子は、基本設定ファイル111内に含まれる後述する図15に示すような「言語の設定情報」から一時記憶装置108内に複製が可能であり、後述する図15に示す画面から内容が変更されない限り、一時記憶装置108に保持しておくことも可能である。もしくは、実際のトークン抽出の際に、直接、基本設定ファイル111内に含まれる「言語の設定情報」のデータを参照することもできる。
【0078】
次に、S614において、CPU107は、ソースファイルの「読み出しポインタ」からホワイトスペース以外の文字が現れる直前までを読み出し、その内容を一時記憶装置108内に「現ホワイトスペース」としてセットする(現ホワイトスペースの切り出し)。
【0079】
次に、ステップS603において、CPU107は、ソースファイルの「読み出しポインタ」を一時記憶装置108に保存する。
【0080】
次に、ステップS604において、CPU107は、一時記憶装置108に記憶される内部変数COPYCOUNTを「0」に初期化する。
【0081】
次に、ステップS605において、CPU107は、S602で設定した区切り子判断テーブルの情報(区切り子)とソースファイル内のコードとを比較する。
【0082】
そして、ステップS606において、CPU107は、ソースファイルからホワイトスペース又は区切り子によって区切られるまでの文字列をトークンとして抽出するように、その文字の数をCOPYCOUNTに格納する。
【0083】
例えば、C言語の場合、「A,B,C;」のような文字列からは、「A」のつぎに区切り子「,」が現れるため、「A」をトークンとして抽出するように、その文字の数「1」をCOPYCOUNTに格納する。また「ifif(スペース)」のような文字列は、キーワードとしての「if」が存在するが、この抽出では「(スペース)」で区切られたと判断され、「ifif」をトークンとして抽出するように、その文字の数「4」をCOPYCOUNTに格納する。
【0084】
次に、ステップS607,608,609,610,611では、CPU107は特殊なトークン抽出を行う。
【0085】
詳細には、ステップS607において、CPU107は、S606で抽出したトークンに、行コメントの始まり(例えば、C言語では「//」)を発見した場合には、次の改行コードまで、他のホワイトスペースや区切り子を発見しても無視して、上記行コメントの始まり「//」から改行コードの直前までを1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。
【0086】
また、ステップS608において、CPU107は、S606で抽出したトークンに、ブロックコメントの始まり(例えば、C言語では「/*」)を発見した場合には、ブロックコメントの終わり(例えば、C言語では「*/」)を発見するまで、ホワイトスペースや区切り子を発見しても無視して、上記ブロックコメントの始まり「/*」からブロックコメントの終わり「*/」までを1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。
【0087】
また、ステップS609において、CPU107は、S606で抽出したトークンに、文字(例えば、C言語では「'」と「'」で囲まれた文字(ただし「\'」は除く))を発見した場合には、「'」から「'」までを1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。
【0088】
また、ステップS610において、CPU107は、S606で抽出したトークンに、文字列の始まり(例えば、C言語では「"」(ただし「\"」は除く))を発見した場合には、文字列の終わり(C言語では「"」(ただし「\"」は除く))を発見するまで、ホワイトスペースや区切り子を発見しても無視して、「"」から「"」までを1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。
【0089】
また、ステップS611において、CPU107は、S606で抽出したトークンに定数を発見した場合には、10進定数、8進定数(先頭に「0」をつけて表記)、16進数定数(先頭に「0X」又は「0x」をつけて表記)等に応じて抽出するように、その文字の数をCOPYCOUNTに格納する。即ち、8進定数の場合は先頭の「0」を含めて1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。また、16進定数の場合は先頭の「0X」を含めて1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。
【0090】
次に、ステップS612において、CPU107は、ソースファイル内のデータを、S603で一時記憶装置108に保存したソースファイルの「読み出しポインタ」からCOPYCOUNT分だけ抽出し(読み出し)、一時記憶装置108内の「トークン切り出しバッファ」に格納(コピー)する。そして、これを「現トークン」とする。なお、ファイルの末尾となり、トークンが抽出できなかった場合は、「トークン無し」を示す値をセットする。
【0091】
次に、ステップS613において、CPU107は、S603で一時記憶装置108内に保存された「ファイルの読み出しポインタ」をCOPYCOUNT分進め、ファイルの読み出しポインタに上書きする。
【0092】
そして、CPU107は、ステップS615で、このルーチンでの処理(本トークン抽出処理)を終了し、呼び出し元へ処理を返す。
【0093】
以下、図7を参照して、図5のS505に示したトークングループ判定処理について説明する。
【0094】
図7は、本発明の実施形態のトークングループ判定処理(図5の507)を示すフローチャートである。このフローチャートの処理は、図3のトークングループ判定手段304等により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0095】
なお、以降の処理では、前後グループの関係で出力処理パターンを判定させるため、前グループIDと現グループIDを用いる。
【0096】
まず、ステップS701で処理を開始すると、ステップS702において、CPU107は、一時記憶装置108内に保持される前グループIDに現グループID(前回の「トークングループ判定処理」で判定されたグループID)を格納する。「トークングループ判定処理」の実行が初回であった場合は、グループIDの判定をしていないため、現グループIDは保存されていないため、該グループID無しを示す情報を格納するものとする。
【0097】
次に、ステップ703において、CPU107は、グループ自体が登録されているかどうかを判定する。ここでいうグループとは、後述する図15の言語の設定(言語別の設定ダイアログボックス1514)内のグループテーブルで管理されるデータであり、上記にあるグループIDは、図15のID1521を示す。また、上記グループテーブルの情報は、図5のS502で読み込まれ、一時記憶装置108内に格納されている。
【0098】
そして、ステップS703で、グループ自体が登録されていないと判定した場合には、CPU107は、ステップS707へ処理を進める。
【0099】
一方、ステップ703で、グループ自体が登録されていると判定した場合には、CPU107は、ステップS704へ処理を進める。
【0100】
ステップS704では、CPU107は、一時記憶装置108内に記憶されるループ用の変数iを「0」で初期化し、グループテーブルに登録されているグループ数分、ステップS705〜S709の処理を繰り返すように制御する。
【0101】
詳細には、ステップ705では、CPU107は、まだグループ数分の処理を終えていない(i<グループ数)か判定する。
【0102】
そして、ステップS705で、まだグループ数分処理を終えていないと判定した場合には、CPU107は、ステップS706に処理を進める。
【0103】
ステップ706では、CPU107は、現トークンがグループに含まれているかグループテーブルに基づいて判定する。
【0104】
そして、ステップ708において、CPU107が、上記のステップ706で現トークンがグループに含まれていないと判定した場合には、ステップ709に処理を進める。
【0105】
ステップ709では、CPU107は、ループ用の変数iをインクリメントし、次グループを確認するために、ステップ705へ処理を戻す。
【0106】
一方、ステップ708において、CPU107が、上記のステップ706で現トークンがグループに含まれていると判定した場合には、ステップ710に処理を進める。
【0107】
次に、ステップS710では、CPU107は、現グループIDとして、発見されたグループのIDを一時記憶装置108内にセットし、ステップ711において、呼び出し元に処理を戻す。
【0108】
なお、ステップ705において、CPU107が、既にグループ数分の処理を終えている(i≧グループ数)と判定した場合には、ステップS707に処理を進め、グループ判定ができなかったものとして、グループIDを無しを示す情報を一時記憶装置108内にセットし、ステップ711において、呼び出し元に処理を戻す。
【0109】
以下、図8を参照して、図5のS512に示した出力処理パターン判定処理について説明する。
【0110】
図8は、本発明の実施形態の出力処理パターン判定処理(図5の512)を示すフローチャートである。このフローチャートの処理は、図3の出力処理パターン判定手段305等により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0111】
ここでは、上記の図7で判定した「現グループID」と一時記憶装置108に保管しておいた「前グループID」を用いて後述する図17で閲覧および編集可能な処理パターン表から該当する処理パターンを求める。なお、処理パターン表は、図12に示す画面で選択されるパターン(プルダウンメニュー1210上のパターン)ごとに存在する。ここで使用するのは、適用処理を開始する際に図5のS502でユーザが選択し、図5のS503で出力処理パターンファイル105から読み込んだ処理パターン表を用いる。
【0112】
まず、ステップS801で処理を開始すると、ステップS802において、CPU107は、一時記憶装置108内に前グループIDが保存されているか否かを判定し、前グループIDが保存されていると判定した場合には、ステップ803へ処理を遷移させる。
【0113】
ステップS803では、CPU107は、一時記憶装置108内に現グループIDが保存されているか否かを判定し、現グループIDが保存されていると判定した場合には、ステップ804へ処理を遷移させる。
【0114】
次に、ステップ804では、CPU107は、上記の前グループIDと現グループIDとをキーにして出力処理パターン表を検索し、対応する出力処理パターンIDを一時記憶装置108内にセットする。
【0115】
する。この時、前グループIDと現グループIDとに対応する出力処理パターンIDが上記の出力処理パターン表に無い場合には、出力処理パターン無しを示す情報をセットする。
【0116】
一方、ステップS802で一時記憶装置108内に前グループIDが保存されていない、又は、ステップS803で一時記憶装置108内に現グループIDが保存されていないと判定した場合には、CPU107は、ステップ805へ処理を遷移させる。
【0117】
ステップ805では、CPU107は、出力処理パターン無しを示す情報を一時記憶装置108内にセットする。
【0118】
そしてステップS806において、CPU107は、呼び出し元に処理を戻す。
【0119】
以下、図9を参照して、図5のS513に示した出力処理パターン別処理について説明する。
【0120】
図9は、本発明の実施形態の出力処理パターン別処理(図5の513)を示すフローチャートである。このフローチャートの処理は、図3の出力処理パターン別出力処理手段306等により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0121】
ここでは、上記の図8の出力処理パターン判定処理で判定した出力処理パターンIDに対応する出力処理パターンに従って、図6のトークン抽出処理で抽出された現ホワイトスペース(前トークンと現トークンとの間のホワイトスペース)を加工処理して出力し、若しくは、何も処理せずに出力し、現トークンも続けて出力する処理を行う。この処理により、トークン間のホワイトスペースの変更がなされ、指定した出力処理パターン(コーディングスタイル)に従ってソースコードを整形することができる。なお、ここでいう出力処理パターンID及び出力処理パターンとは、後述する図16のID及び挿入文字パターンの設定ダイアログボックス1602内の挿入文字パターンであり、図5のS502で読み込まれ、一時記憶装置108内に格納されている。
【0122】
まず、ステップS901で処理を開始すると、ステップS902において、CPU107は、図5のS512(図8)の出力処理パターン判定処理で出力処理パターンIDがセットされたかどうかを判定する。
【0123】
そして、ステップS902において、出力処理パターンIDがセットされていないと判定した場合には、CPU107は、ステップ904へ処理を進める。
【0124】
ステップS904では、CPU107は、図6のステップS614でセットした現ホワイトスペースをそのまま、図13の1301に示す画面に出力し、ステップ905へ処理を遷移させる。
【0125】
一方、ステップS902において、出力処理パターンIDがセットされていると判定した場合には、CPU107は、ステップ903へ処理を進める。
【0126】
ステップS903では、CPU107は、図5のS502で読み込まれて一時記憶装置108内に格納されている挿入文字パターンの設定に基づいて、上記セットされている出力処理パターンIDから挿入文字パターンを求め、ホワイトスペースに変換し、図13の1301に示す画面に出力し、ステップ905へ処理を遷移させる。
【0127】
例えば、セットされている出力処理パターンIDが「P1」であった場合は、図16に示すように、挿入文字パターンは「S」となり、実際に出力されるホワイトスペースは「半角スペース1文字」である。このパターンはインデントにも対応しており、インデント数でタブコードを挿入することもできる。また、これは一例であり、記号を追加することにより処理パターンを追加することが可能である。
【0128】
次に、ステップS905において、CPU107は、一時記憶装置108に記憶されている現トークンを図13の1301に示すようにウィンドウ1200に出力し、ステップ906において、処理を呼び出し元に返す。
【0129】
以上、図5〜図9に示した適用処理により、任意のコーディングスタイルのソースコードを、個別に定義したコーディングスタイルに自動的に変換して表示閲覧することができる。特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを苦労して解読する必要が無くなる。この結果、コードレビュー工数を軽減できる。また、個別に定義したコーディングスタイルで表示することで、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【0130】
以下、図10のフローチャートを用いて分析処理(図2の203,図4)の具体的な処理を示す。
【0131】
図10は、本発明の実施形態の分析処理(図2の203,図4)の具体的な処理を示すフローチャートである。このフローチャートの処理は、図4の401〜408に示した各手段により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0132】
なお、図10に示すS1002,S1002〜S1010,S1014は、図5に示したS502,S504〜S511,S514と同様のステップであるので、説明は省略する。
【0133】
まず、図14に示すようにファイルオープンダイアログ1211のインタフェース1202,1203,1204,1207,1208においてファイルが選択され、1401に示すようにモード選択手段により「分析」が選択されることにより分析モードが選択され、パターン選択1206により既に登録されているパターン情報の名称が選択され(ここで選択されるパターンは基準となるものであり、分析対象とするソースコードに現れない前後トークングループの組み合わせの処理パターンは、該選択した処理パターンで補完される。)、開くボタン1209が押下されると、CPU107は、新たな分析実行ウィンドウ1403を表示する。
【0134】
そして、新たな分析実行ウィンドウ1403で、保存するパターン名1404に分析後の結果パターンデータを格納するためのファイル名がセットされ、トークン抽出時に利用する言語情報が言語選択1405で選択され、分析方法1406が選択され、実行ボタン1408が押下されると、CPU107は、ステップS1001より分析処理を開始する。なお、この際、CPU107は、一時記憶装置108に格納されるインデントカウンタを「0」に初期化しておく。
【0135】
なお、ここでは分析方法1406として4種類の方法を図示している。即ち、(1)先頭の挿入文字パターンを採用、(2)全体で頻度の多い挿入文字パターンを採用、(3)前半で頻度の多い挿入文字パターンを採用、(4)前半優先で頻度の多い挿入文字パターンを採用の4種類の方法を図示している。しかし、実行ファイル103にプログラムを追加することにより挿入文字パターンを採用するための条件を追加することも可能である。
【0136】
CPU107は、ステップS1010の処理が終了すると、ステップS1011に処理を進める。
【0137】
ステップS1011では、CPU107は、前トークングループ(前回のループの際にS1006で求められたトークングループ)と、上記S1006で求めた現トークングループから一時格納先を求める。この一時格納先は、ソースコード上に現れるホワイトスペースのパターンを一時的に格納することを目的として一時記憶装置108上に、図11の1101に示すように、前トークングループと現トークングループとの組み合わせ毎に設けられている記憶領域に対応する。なお、このS1011の処理に関しては、詳細を図11にて後述する。
【0138】
次に、ステップ1012において、CPU107は、S1004(図6)のトークン抽出処理で抽出された現ホワイトスペース(前トークンと現トークンとの間のホワイトスペース)から挿入文字パターンを求め、S1011で求めた一時格納先に図11の1103に示すように時系列で格納する(順次保持する)。なお、このS1012の処理に関しては、詳細を図11にて後述する。
【0139】
そして、S1012の処理が終了すると、CPU107は、ステップS1004に処理を戻し、次のトークンを抽出するように制御する。
【0140】
そして、ステップS1105で、もう抽出するトークンが無くなったと判定した場合には、CPU107は、ステップS1013に処理を進める。
【0141】
ステップS1013では、CPU107は、上記S1012で各一時格納先に時系列で蓄えられた内容から、図14の1406のように選択した分析方法により、前記一時格納先毎(即ち、前トークングループと現トークングループとの組み合わせ毎)に、優先順位の高い挿入文字パターンを選出し、図11の1102に示すように、一時記憶装置108内に設けられた設定格納先(前トークングループと現トークングループとの組み合わせ毎に設けられている)に保存する。なお、このS1013の処理に関しては、詳細を図11にて後述する。さらに、CPU107は、S1013で挿入文字パターンがセットされた設定格納先の内容を、図14の1404で指定されたパターン名で、出力処理パターンファイル105内保存する。
【0142】
次に、ステップS1014では、CPU107は、S1003でオープンしたソースファイルをクローズする。
【0143】
最後に、CPU107は、ステップS1015において、モニタ110に、S1002で読み込んだソースファイルのソースコードをそのまま表示するように制御し、処理を終了する。
【0144】
図11は、本発明の実施形態の分析における挿入文字列パターン採用時の判定(図10のS1011〜S1013)を説明する図である。
【0145】
図11の1011に示すように、一時格納先は、ソースコード上に現れるホワイトスペースのパターンを一時的に格納することを目的として一時記憶装置108上に、前トークングループと現トークングループとの組み合わせ毎に設けられている。図中、縦軸は前トークングループを示し、横軸は後トークングループを示す。
【0146】
例えば、前トークンがG1グループで後トークンがG1グループである場合、1101の斜線部分が、この組み合わせの一時格納先に対応する。
【0147】
また、一時格納先には、1103に示すように、トークン抽出処理で抽出された現ホワイトスペース(前トークンと現トークンとの間のホワイトスペース)から求めた挿入文字パターンを時系列で格納可能である。
【0148】
1102に示すように、設定格納先は、一時記憶装置108上に、前トークングループと現トークングループとの組み合わせ毎に設けられている。この設定格納先には、全てのトークンを処理後に、前トークングループと現トークングループとの組み合わせ毎に(即ち一時格納先毎に)、一時格納先に時系列で格納された挿入文字パターンから、指定された(1)〜(4)のいずれかの分析方法で決定された1の挿入文字パターンがそれぞれ格納される。
【0149】
即ち、まず、1101の斜線部分の一時格納先に、前トークンがG1グループで後トークンがG1グループとなるトークンの間から取得された挿入パターンが、1103に示すように時系列に格納される。そして、全てのトークンを処理後に、この時系列に格納された挿入パターンから、指定された分析方法で決定された1つの挿入パターンが、1102の斜線部分の設定格納先に格納されることになる。
【0150】
なお、前後のグループの組み合わせ毎に、以下のように挿入パターンを決定(選出)する。
【0151】
例えば、分析方法が「(1)先頭の挿入文字パターンを採用」である場合、1103のように時系列で一時格納先に格納されている挿入文字パターンの最初に一時格納先に格納されたものを選出する。
【0152】
また、分析方法が「(2)全体で、頻度の多い挿入文字パターンを採用」である場合、1103のように時系列で一時格納先に格納されている挿入文字パターンのうち数が最も多いもの(保持頻度が高いもの)を選出する。もし同数の挿入文字パターンが存在した場合は、そのうちの最初に一時格納先に格納されたものを選出する。
【0153】
さらに、分析方法が「(3)前半で、頻度の多い挿入文字パターンを採用」である場合、1103のように時系列で一時格納先に格納されている挿入文字パターンのうち前半のデータを用いて「(2)全体で、頻度の多い挿入文字パターンを採用」と同じ判定を行って選出する。もし一時格納先に格納された挿入文字パターンの全体数が奇数である場合は、前半部の数が多いように分割する。例えば、全体が7件であった場合は、前半部4件を対象データとする。
【0154】
また、分析方法が「(4)前半優先で、頻度の多い挿入文字パターンを採用」である場合、1103のように時系列で一時格納先に格納されている挿入文字パターンのうち前半部に係数を掛け、後半部との重みを変えた上で保持頻度を算出し、一番重みのある(算出結果が最も大きい)挿入文字パターンを選出する。
【0155】
以上、図10,図11に示したように、ソースコードの分析処理を行うことにより、該分析対象となったソースコードのコーディングスタイルに対応する出力処理パターンを作成することができる。
【0156】
このように作成した出力処理パターンを用いて、上述した適用処理を行うことにより、任意のコーディングスタイルのソースコードを、上記分析対象となったソースコードのコーディングスタイルに変更して出力することができる。
【0157】
これにより、特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを自分のコーディングスタイルに変更できる。この結果、コードレビュー工数を軽減できる。また、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【0158】
以下、図12,図13を参照して、本発明の実施形態の適用処理時の画面について説明する。
【0159】
図12は、本発明の実施形態の適用処理開始時の画面の一例を示す図である。
【0160】
図12に示すように、ウィンドウ1200の「ファイル」メニュー1201の「ファイルを開く」を選択することにより、ファイルオープンダイアログ1211がモニタ110に表示される。
【0161】
ファイルオープンダイアログ1211では、インタフェース1202,1203,1204,1207,1208を用いて対象となるファイルを選択することができる。また、1205に示すようにモード選択手段により「適用」が選択されることにより適用モードが選択される。
【0162】
パターン選択1206より、プルダウンメニュー1210を用いて既に登録されているパターン情報の名称を選択することができる。なお、プルダウンメニュー1210には、予め登録されているものや、後から追加した処理パターンが表示される。この内容は、図1に示した出力処理パターンファイル105に格納されており、後述する図17に示す画面で確認および編集することができる。
【0163】
開くボタン1209を押下することにより、上述した適用処理が開始される。
【0164】
図13は、本発明の実施形態の適用処理の表示結果の一例(図3の表示手段307)を示す図である。
【0165】
図13に示すように、適用処理の結果、オリジナルソースコード1302における表記方法が、適用処理の結果により意図されたコーディングスタイル1301に統一される。
【0166】
以下、図12,図13を参照して、本発明の実施形態の分析処理時の画面について説明する。
【0167】
図14は、本発明の実施形態の分析処理開始時の画面の一例を示す図である。なお、図12と同一のものには同一の符号を付してある。
【0168】
図14に示すように、1401に示すようにモード選択手段により「分析」が選択されることにより分析モードが選択される。
【0169】
開くボタン1209を押下することにより、新たな分析実行ウィンドウ1403が表示される。
【0170】
この分析実行ウィンドウ1403では、保存するパターン名1404に分析後の結果パターンデータを格納するためのファイル名を設定できる。また、言語選択1405でトークン抽出時に利用する言語情報を設定できる。
【0171】
さらに、分析方法1406で(1)先頭の挿入文字パターンを採用、(2)全体で頻度の多い挿入文字パターンを採用、(3)前半で頻度の多い挿入文字パターンを採用、(4)前半優先で頻度の多い挿入文字パターンを採用のいずれかの分析方法を選択できる。そして、実行ボタン1408を押下すると、上述した分析処理が開始される。
【0172】
以下、図15〜図17を参照して、図1に示した基本設定ファイル111、出力処理パターンファイル105について説明する。
【0173】
図15は、図1に示した基本設定ファイル111の言語別の設定を行う設定画面の一例を示す図である。
【0174】
図15に示すように、ウィンドウ1200(CPU107が実行ファイル103を実行することによりモニタ110に表示される)の「設定」メニュー1501の「言語の設定…」1502を選択することにより、言語の設定ダイアログボックス1503を開く。
【0175】
なお、言語は複数登録されており、独自に追加することも可能である。追加するときには、追加ボタン1506を押下することにより、CPU107が、追加のためのダイアログボックス1510を表示する。このダイアログボックス1510のテキストボックス1511に新しい言語名を入力し、保存ボタン1512を押下すると、CPU107が、言語別の設定ダイアログボックス1514を表示する。なお、中止ボタン1513を押下すると、CPU107は、言語別の設定を中止して元の言語の設定ダイアログボックス1503に戻す。
【0176】
言語の設定ダイアログボックス1503において、言語を選択し、ダブルクリックをするか、編集ボタン1507を押下することにより、CPU107は、言語別の設定ダイアログボックス1514を表示する。
【0177】
言語別の設定ダイアログボックス1514には、言語ごとのキーワードが種類別に登録される。
【0178】
コメント判断テーブルに関しては、1515〜1517に示すように、コメントの開始、終了、1行コメントの開始キーワードの登録を行う。
【0179】
インデントカウンタテーブルでは、1518〜1520に示すように、インデントの加算グループのキーワード、減算グループのキーワードの登録を行う。
【0180】
グループテーブルでは、1521〜1523に示すように、パターンをキーワード単位で行わないために、同じ扱いにできるキーワードをまとめてグループ化した登録ができる。
【0181】
なお、上記キーワードは、トークンとして抽出可能な単位で行い、キーワードの記入エリア1517,1520,1523等に記述する。キーワードが複数ある場合は、カンマ区切りで記述する。なお、カンマ「,」と「\」記号については、「\」文字でエスケープするように記述する。また、正規表現による記述も可能である。
【0182】
以上のように、言語別の設定ダイアログボックス1514で編集した内容を保存する場合は、保存ボタン1524を、破棄する場合には中止ボタン1525を押下する。なお、保存または破棄した後に、CPU107は、言語の設定ダイアログボックス1503に処理を戻す。
【0183】
そして、言語の設定ダイアログボックス1503にて保存ボタン1508が押下されると、CPU107は、上記の設定内容(追加のためのダイアログボックス1510での追加内容、言語別の設定ダイアログボックス1514での編集内容)を、基本設定ファイル111内に格納し、ダイアログボックス1514を閉じる。
【0184】
また、言語の設定ダイアログボックス1503にて保存ボタン1508が押下されると、CPU107は、上記の設定内容(追加のためのダイアログボックス1510での追加内容、言語別の設定ダイアログボックス1514での編集内容)を破棄し、ダイアログボックス1514を閉じる。
【0185】
図16は、図1に示した基本設定ファイル111の挿入文字パターンの設定を行う設定画面の一例を示す図である。
【0186】
図16に示すように、ウィンドウ1200の「設定」メニュー1501の「挿入文字パターンの設定」1601を選択することにより、CPU107は、挿入文字パターンの設定ダイアログボックス1602を開く。
【0187】
処理パターンは、ID1603、挿入文字パターン1604から構成される。ID1603は、P1から自動で振られる。挿入文字パターン1604は、凡例1607に示すように、幾つかの予め定義された書き方で記述することができる。
【0188】
挿入文字パターンは、自由に付加することができる。また、その書き方の例は、例1608に記述されている。
【0189】
保存ボタン1605を押下すると、CPU107は、変更された内容を基本設定ファイル111内に保存して、ダイアログ1602を閉じる。中止ボタン1513を押下すると、CPU107は、変更された内容を破棄して、ダイアログ1602を閉じる。
【0190】
以下、図17を参照して、図1に示した出力処理パターンファイル105について説明する。
【0191】
図17は、図1に示した出力処理パターンファイル105の設定画面の一例を示す図である。なお、出力処理パターンファイル105は、図15の画面で設定されたグループと図15の画面で設定された挿入パターンとの相関を示す処理パターンを含むものである。
【0192】
図17に示すように、ウィンドウ1200の「設定」メニュー1501の「処理パターンの設定・・・」1701を選択することにより、CPU107は、処理パターンの設定ダイアログボックス1708を開く。
【0193】
処理パターンの判断は、前後グループの関係でなされるため、マトリックスで設定をする。
【0194】
前グループ1702は、上記図15において、キーワードをグループ設定した際に作成されているグループとなる。後グループ1703も同様である。
【0195】
例えば、前トークンのグループが「G2」と判定されており、後トークンのグループが「G3」と判定された場合には、1705のセルに登録されている処理パターンが選ばれる。処理パターンの設定は、セルをクリックすることにより、CPU107により、処理パターン(上記図16で設定された挿入パターン)と空欄のうち1つを選択できるようなプルダウンメニュー1704が表示される。
【0196】
保存ボタン1706を押下すると、CPU107は、変更された内容を出力処理パターンファイル105内に保存して、設定ダイアログボックス1708を閉じる。中止ボタン1707を押下すると、CPU107は、変更された内容を破棄して、設定ダイアログボックス1708を閉じる。
【0197】
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な構成や内容で構成されることは言うまでもない。
【0198】
以上、一実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【0199】
なお、本実施形態では、図17の処理パターンの設定に示すように、出力処理パターンを、ホワイトスペースの前後に配置されるトークンの属するトークングループの組み合わせ毎に設定した。しかし、出力処理パターンを、ホワイトスペースの前後に配置されるトークンの組み合わせから特定可能に設定するものであればどのような設定方法を用いてもよい。例えば、出力処理パターンを、ホワイトスペースの前後に配置されるトークンの組み合わせ毎に設定してもよい。
【0200】
以上説明したように、本発明によれば、プログラムソースコードを、既に定義されている若しくは個別に定義したコーディングスタイル(所望のコーディングスタイル)に自動的に(人的作業無しに)変換して出力することができる。特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを解読する必要が無くなり、コードレビュー工数を軽減できる。また、個別に定義したコーディングスタイルで表示することで、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【0201】
なお、本発明は、単にホワイトスペースの置換処理を行うものではなく、ホワイトスペースの前後に配置されるトークンの組み合わせによりパターン判定し、個別変換処理を行うものであり、ソースファイル内に記述されているプログラムコードと、コメントとして扱われる字句を区別して処理することができる。
【0202】
以下、図18に示すメモリマップを参照して本発明に係るプログラムソースコード解析支援装置で読み取り可能なデータ処理プログラムの構成について説明する。
【0203】
図18は、本発明に係るプログラムソースコード解析支援装置で読み取り可能な各種データ処理プログラムを格納する記録媒体(記憶媒体)のメモリマップを説明する図である。
【0204】
なお、特に図示しないが、記録媒体に記憶されるプログラム群を管理する情報、例えばバージョン情報,作成者等も記憶され、かつ、プログラム読み出し側のOS等に依存する情報、例えばプログラムを識別表示するアイコン等も記憶される場合もある。
【0205】
さらに、各種プログラムに従属するデータも上記ディレクトリに管理されている。また、インストールするプログラムやデータが圧縮されている場合に、解凍するプログラム等も記憶される場合もある。
【0206】
本実施形態における図5,図6,図7,図8,図9,図10に示す機能が外部からインストールされるプログラムによって、ホストコンピュータにより遂行されていてもよい。そして、その場合、CD−ROMやフラッシュメモリやFD等の記録媒体により、あるいはネットワークを介して外部の記録媒体から、プログラムを含む情報群を出力装置に供給される場合でも本発明は適用されるものである。
【0207】
以上のように、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【0208】
この場合、記録媒体から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記録媒体は本発明を構成することになる。
【0209】
プログラムコードを供給するための記録媒体としては、例えば、フレキシブルディスク,ハードディスク,光ディスク,光磁気ディスク,CD−ROM,CD−R,DVD−ROM,磁気テープ,不揮発性のメモリカード,ROM,EEPROM,シリコンディスク等を用いることができる。
【0210】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0211】
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0212】
また、本発明は、複数の機器から構成されるシステムに適用しても、1つの機器からなる装置に適用してもよい。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのソフトウェアによって表されるプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【0213】
さらに、本発明を達成するためのソフトウェアによって表されるプログラムをネットワーク上のサーバ,データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【0214】
なお、上述した各実施形態およびその変形例を組み合わせた構成も全て本発明に含まれるものである。
【図面の簡単な説明】
【0215】
【図1】本発明の一実施形態を示すプログラムソースコード解析支援装置の構成の一例を示すブロック図である。
【図2】図1に示した実行ファイルに基づいて実現される処理選択処理よる「適用処理」と「分析処理」の分岐処理を示す図である。
【図3】本発明の実施形態の適用処理における基本的な処理を示す図である。
【図4】本発明の実施形態の分析処理における基本的な処理を示す図である。
【図5】本発明の実施形態の適用処理の具体的な処理を示すフローチャートである。
【図6】本発明の実施形態のトークン抽出処理を示すフローチャートである。
【図7】本発明の実施形態のトークングループ判定処理を示すフローチャートである。
【図8】本発明の実施形態の出力処理パターン判定処理を示すフローチャートである。
【図9】本発明の実施形態の出力処理パターン別処理を示すフローチャートである。
【図10】本発明の実施形態の分析処理の具体的な処理を示すフローチャートである。
【図11】本発明の実施形態の分析における挿入文字列パターン採用時の判定を説明する図である。
【図12】本発明の実施形態の適用処理開始時の画面の一例を示す図である。
【図13】本発明の実施形態の適用処理の表示結果の一例を示す図である。
【図14】本発明の実施形態の分析処理開始時の画面の一例を示す図である。
【図15】図1に示した基本設定ファイルの言語別の設定を行う設定画面の一例を示す図である。
【図16】図1に示した基本設定ファイルの挿入文字パターンの設定を行う設定画面の一例を示す図である。
【図17】図1に示した出力処理パターンファイルの設定画面の一例を示す図である。
【図18】本発明に係るプログラムソースコード解析支援装置で読み取り可能な各種データ処理プログラムを格納する記録媒体(記憶媒体)のメモリマップを説明する図である。
【符号の説明】
【0216】
101 PC本体
102 記憶装置
103 実行ファイル
104 ソースコードファイル
105 出力処理パターンファイル
106 パターン適用済みソースファイル
107 CPU
108 一時記憶装置
109 表示制御装置
110 モニタ
111 基本設定ファイル
112 インタフェース(I/F)
113 入力装置
【技術分野】
【0001】
本発明は、プログラムソースコードを解析して個別に定義したコーディングスタイルで出力をするプログラムコード解析支援装置、プログラムコード解析支援方法、プログラム、及び、記録媒体に関する。
【背景技術】
【0002】
近年、ソフトウェア開発において第三者のソースコードを参照することは多々あるが、第三者が作成したプログラムを解析して修正することは、極めて困難を伴う作業となり、その結果、プログラムの修正・変更に多大な時間を要していた。
【0003】
そこで、ソースコードの解析を助ける手段として、個別に定義したコーディングスタイルで表示することが考えられている。
【0004】
まず、特許文献1には、ソースコードの字下げを自動化する字下げ処理方式が開示されている。特に、ソースコードを入力するオペレータに依存していたソースコード内の字下げを自動で行うように処理するものである。
【0005】
また、特許文献2には、基本となる言語仕様に対して拡張を施した言語使用に則って記述されたソースプログラムを解析するソースプログラム解析装置が開示されている。特に、言語仕様の拡張に対し、短期間で対応可能なソースプログラムの解析装置が開示されている。
【特許文献1】特開平5−81008号公報
【特許文献2】特開平9−167095号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1に記載のソースコードの字下げを自動化する処理方式においては、オペレータの入力イベント発生時のインデント字下げ部分についての処理は可能であるが、入力イベントが発生しない既存のソースコードを字下げ処理することはできない。
【0007】
また、特許文献2に記載のソースプログラム解析装置においては、トークンを単位として処理することで、仕様の拡張されたソースコードに対してのプログラムの解析を行って関数名、呼び出し形式、パラメータ数、各パラメータを出力表示することは可能であるが、ソースコードを所望のコーディングスタイルで表示することはできない。
【0008】
本発明は上記の課題を解決するためになされたものである。本発明の目的は、既存のプログラムソースコードを所望のコーディングスタイルに変換して出力することができる仕組を提供することである。
【課題を解決するための手段】
【0009】
本発明は、既存のプログラムソースコードから、プログラム上意味のある字句を示すトークンと、該トークンの間に配置される、0文字以上のスペースコード、改行コード、タブコードで構成される文字列を示すホワイトスペースを検出するトークン検出手段と、前記トークン検出手段により検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて加工し、該加工したプログラムコードを出力する出力手段とを有することを特徴とする。
【発明の効果】
【0010】
本発明によれば、プログラムソースコードを、個別に定義したコーディングスタイルに自動的に(人的作業無しに)変換して出力することができる。
【0011】
特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを解読する必要が無くなり、コードレビュー工数を軽減できる。
【0012】
また、個別に定義したコーディングスタイルで表示することで、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【発明を実施するための最良の形態】
【0013】
以下、図面を参照して、本発明の実施形態を詳細に説明する。
【0014】
図1は、本発明の一実施形態を示すプログラムソースコード解析支援装置の構成の一例を示すブロック図である。
【0015】
図1において、101は、本発明のプログラムソースコード解析支援装置に適用可能なパーソナルコンピュータ等の情報処理装置の本体(以下、PC本体)である。
【0016】
PC本体101において、CPU107は、不図示のキーボード、マウス等のポインティングデバイスからの入力によるユーザ指示により、記憶装置(HDD等)102に格納された実行ファイル(プログラム)103を必要に応じて一時記憶装置(RAM等)108に読み込み、処理を実行する。例えば、CPU107は、ソースコードファイル104に記述されているソースコードに対して、後述する「適用処理」や「分析処理」を実行する。
【0017】
ここでいう「適用処理」とは、既存のプログラムソースコード(ソースコードファイル104)をユーザが指示した出力処理パターンに従い、基本設定ファイル111及び出力処理パターンファイル105の情報を用いて整形する処理(出力処理パターン設定)である。なお、適用処理によって作成された、新たな整形済みソースコードは、パターン適用済みソースファイル106として記憶装置102に保存することができる。
【0018】
また、「分析処理」とは、基本設定ファイル111に基づいて既存のプログラムソースコード(ソースコードファイル104)を分析して、新たに出力処理パターンの情報(出力処理パターンファイル105)を生成する処理である。なお、分析処理によって作成された、新たな出力処理パターンの情報は、出力処理パターンファイル105として記憶装置102に保存することができる。
【0019】
また、CPU107は、適用処理中や分析処理中に、必要に応じてモニタ110にその内容を表示したり、一時記憶装置108に作業用の情報を格納する。
【0020】
109はビデオカード等の表示制御装置109であり、モニタ110への表示を制御する。112はインタフェース(I/F)であり、キーボード(KB)やポインティングデバイス(PD)等の入力装置113からの入力を制御する。
【0021】
なお、図1に示した記憶装置102上に格納されるファイルの構成や、後述するモニタ110へ表示される画面の構成は、一例であり、用途や目的に応じて様々な構成例があることは言うまでもない。
【0022】
なお、図1に示した基本設定ファイル111は、後述する図15に示す言語別の設定と、後述する図16に示す挿入パターンの設定を含む。また、出力処理パターンファイル105は、後述する図17に示す処理パターンの設定を含む。
【0023】
以下、図2を参照して、本実施形態を示すプログラムソースコード解析支援装置の主の機能である「適用処理」と「分析処理」の分岐処理について説明する。
【0024】
図2は、図1に示した実行ファイル103に基づいて実現される処理選択処理よる「適用処理」と「分析処理」の分岐処理を示す図である。
【0025】
図2において、201は選択手段であり、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される機能の1つに対応する。
【0026】
まず、後述する図12又は図14に示すようなウィンドウ1200(CPU107が実行ファイル103を実行することによりモニタ110に表示される)の「ファイル」メニュー1201の「ファイルを開く」を選択することにより、CPU107は、ファイルオープンダイアログ1211をモニタ110に表示して、入力装置113を用いてユーザからの入力を受け付ける。
【0027】
処理選択手段201は、ユーザにより「開く」ボタン1209が押下されたことを検知すると、ユーザにより選択されたモードを判定して、処理を分岐する。
【0028】
即ち、図12に示すように、モードとして「適用」1205が選択されたと判定した場合には、処理選択手段201は、適用処理202(図3)を実行するように制御する。
【0029】
一方、図14に示すように「分析」1401が選択されたと判定した場合には、処理選択手段201は、分析処理203(図4)を実行するように制御する。
【0030】
図3は、本発明の実施形態の適用処理(図2の202)における基本的な処理を示す図である。
【0031】
図3に示すように、適用処理202は、301〜307に示す各手段により実行される。なお、301〜307に示す各手段は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される機能の1つに対応する。
【0032】
まず、ソースコード読み込み手段301が、後述する図12の画面でユーザより指示されたソースコードファイル104を読み込む。
【0033】
また、出力処理パターン読み込み手段303が、図12の画面で選択されたパターンをもとに、出力処理パターンファイル105から必要なパターン情報を読み込む。なお、ここでいうパターンとは、それぞれの出力処理パターンに付けられたユニークな名称である。
【0034】
次に、トークン検出手段302が、ソースコード読み込み手段301で順次読み込まれるソースコードの文字を、トークンと呼ばれる単位の長さ1文字以上のプログラム上意味のある文字列(字句)に分割する。なお、トークンとトークンの間の長さ0文字以上の、スペースコード,タブコード,改行コードをホワイトスペースと呼称する。
【0035】
次に、トークングループ判定手段304が、トークン検出手段302で抽出されたトークンを同一として扱われる(解析上同一視される)トークン集合を示すトークングループに分類する。
【0036】
次に、出力処理パターン判定手段305が、トークングループ判定手段304で導き出されたトークングループと、直前のトークングループの組み合わせから、ひとつの出力処理パターンを求める。
【0037】
次に、出力処理パターン別出力処理手段306が、出力処理パターン判定手段305で得られた出力処理パターンに従い、直前のトークンと今回のトークンの間のホワイトスペースを加工することにより、ソースコードを整形して表示手段307に出力する。
【0038】
次に、表示手段307が、出力処理パターン別出力処理手段306の整形結果を図13の1301に示すようにモニタ110に表示するように制御する。なお、出力処理パターン別出力処理手段306は、出力処理パターン別出力処理手段306の整形結果をパターン適用済みソースファイル106として記憶装置102に出力したり、不図示のプリンタに出力する構成であってもよい。
【0039】
図4は、本発明の実施形態の分析処理(図2の203)における基本的な処理を示す図である。
【0040】
図4に示すように、分析処理203は、401〜408に示す各手段により実行される。なお、401〜408に示す各手段は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される機能の1つに対応する。また、401〜405は、図3に示した301〜305と同様の手段である。
【0041】
まず、ソースコード読み込み手段401が、後述する図14の画面でユーザより指示されたソースファイルを読み込む。
【0042】
また、出力処理パターン読み込み手段403が、図14の画面で選択されたパターンをもとに、出力処理パターンファイルから必要なパターン情報を読み込む。このパターン情報は元となるもので、分析処理の結果この内容が更新され、別名で保存される。
【0043】
次に、トークン検出手段402が、ソースコード読み込み手段401で順次読み込まれるソースコードの文字を、トークンと呼ばれる単位の長さ1文字以上の意味のある文字列に分割する。なお、トークンとトークンの間の長さ0文字以上のスペースコード、タブコード、改行コードをホワイトスペースと呼称する。
【0044】
次に、トークングループ判定手段404が、トークン検出手段402で抽出されたトークンを同一として扱われるトークングループに分類する。
【0045】
次に、出力処理パターン判定手段405が、トークングループ判定手段404で導き出されたトークングループと、直前のトークングループの組み合わせから、ひとつの出力処理パターンを求め、直前のトークンと今回のトークンとの間のホワイトスペース(現ホワイトスペース)を、出力処理パターンごとに一時記憶装置108内に蓄えておく。
【0046】
次に、出力処理パターン分析手段406が、出力処理パターン判定手段405で得られた出力処理パターンを分析して有効な出力パターンを決定する。
【0047】
次に、出力処理パターン保存手段408が、出力処理パターン分析手段406により決定された有効な出力処理パターンを、出力処理パターンファイルとして記憶装置102に保存する。
【0048】
そして、表示手段407が、ソースコード読み込み手段401で読み込んだソースコードをそのまま表示する。
【0049】
以下、図5〜図9のフローチャートを用いて適用処理(図2の202,図3)の具体的な処理を示す。
【0050】
図5は、本発明の実施形態の適用処理(図2の202,図3)の具体的な処理を示すフローチャートである。このフローチャートの処理は、図3の301〜307に示した各手段により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0051】
まず、図12に示すようにファイルオープンダイアログ1211のインタフェース1202,1203,1204,1207,1208においてファイルが選択され、1205に示すようにモード選択手段により「適用」が選択されることにより適用モードが選択され、パターン選択1206により既に登録されているパターン情報の名称が選択され、開くボタン1209が押下されると、CPU107は、ステップS501より適用処理を開始する。なお、この際、CPU107は、一時記憶装置108に格納されるインデントカウンタを「0」に初期化しておく。
【0052】
そして、ステップS502において、CPU107は、基本設定を基本設定ファイル111から読み込む。この基本設定には、図15に示すような言語の設定情報や、図16に示すような挿入文字パターンの設定情報等が含まれている。
【0053】
言語の設定情報は、ソースコードからトークンを抽出するために、言語ごとに設定された情報に対応する。なお、言語の設定情報は、後述する図15に示す画面で閲覧及び編集可能である。この言語の設定情報には、抽出したトークンがコメントであるかを判断するためのコメント判断テーブル、抽出したトークンがインデントを加算する加算グループかインデントを減算する減算グループかを判断するためのインデントカウンタテーブル、抽出したトークンが属するグループを判断するためのグループテーブル等が含まれる。
【0054】
また、挿入文字パターンの設定情報は、抽出したトークン間に挿入する文字のパターンの設定情報に対応する。なお、挿入文字パターンの設定情報は、後述する図16に示す画面で閲覧および編集可能である。
【0055】
次に、ステップS503において、CPU107は、上記ステップS502で選択されたパターンの情報を出力処理パターンファイル105から読み込む。なお、パターンの情報は、後述する図17に示す画面で閲覧および編集可能である。このパターンの情報は、S502で読み込んだ、言語の設定情報により抽出されたトークン間にどの挿入文字パターンの設定情報内のどのパターンを挿入するかをトークンの属するグループ間の関係を用いて設定した情報である。
【0056】
次に、ステップS504において、CPU107は、上述のように選択されたソースファイル(例えば、図13の1302に示すようなソースコードを含むソースファイル)をオープンし、読み込みが可能な状態にする。
【0057】
次に、ステップS505において、CPU107は、トークン抽出処理を行って、S504でオープンしたソースファイルからトークンを1件抽出する(1つのトークンとその直前のホワイトスペースを抽出する)。この処理の詳細は図6にて後述する。
【0058】
次に、ステップS506では、CPU107は、S505の抽出処理結果に基づいてトークンの有無を判定し、処理を分岐する。
【0059】
即ち、ステップS506で、トークンが有った(抽出できた)と判定した場合には、CPU107は、ステップS507に処理を進める。
【0060】
ステップS507では、CPU107は、S505で抽出したトークンのトークングループの判定処理を行い、現トークングループを求める。なお、この処理の詳細は図7にて後述する。
【0061】
次に、ステップS508において、CPU107は、S507で判定したトークングループが、インデントカウンタを加算するものであるかを判定し、処理を分岐する。なお、この判断は、S502で読み込まれた基本設定内の言語の設定のインデントカウンタテーブル(図15)に基づいて行われる。また、インデントとは、プログラムを人が読み易くするための字下げのことであり、インデントカウンタはその字下げの段数をカウントするものであり、一時記憶領域内に格納されている。
【0062】
そして、ステップS508で、S507で判定したトークングループがインデントカウンタを加算するものでないと判定した場合には、CPU107は、ステップS509の処理は行わず、ステップS510に処理を進める。
【0063】
一方、ステップS508で、S507で判定したトークングループがインデントカウンタを加算するものであると判定した場合には、CPU107は、ステップS509に処理を進める。
【0064】
ステップS509では、CPU107は、インデントカウンタに1を加算し、ステップS510に処理を進める。
【0065】
次に、ステップS510において、CPU107は、S507で判定したトークングループが、インデントカウンタを減算するものであるかを判定し、処理を分岐する。なお、この判断は、S502で読み込まれた基本設定内の言語の設定のインデントカウンタテーブル(図15)に基づいて行われる。
【0066】
そして、ステップS510で、S507で判定したトークングループがインデントカウンタを加算するものでないと判定した場合には、CPU107は、ステップS511の処理は行わず、ステップS512に処理を進める。
【0067】
一方、ステップS510で、S507で判定したトークングループがインデントカウンタを加算するものであると判定した場合には、CPU107は、ステップS511に処理を進める。
【0068】
ステップS511では、CPU107は、インデントカウンタから1を減算し、ステップS512に処理を進める。
【0069】
ステップS512では、CPU107は、前トークングループ(前回のループの際にS507で求められたトークングループ)と、上記S507で求めた現トークングループから出力処理パターン判定する。この処理の詳細は図8にて後述する。
【0070】
次に、ステップS513において、CPU107は、S512で求めた出力処理パターンとインデントカウンタをもとに、出力処理パターン別の処理を行う。この処理の詳細は図9にて後述する。
【0071】
そして、S513の処理が終了すると、CPU107は、ステップS505に処理を戻し、次のトークンを抽出するように制御する。
【0072】
そして、ステップS506で、もう抽出するトークンが無くなったと判定した場合には、CPU107は、ステップS514に処理を進め、本フローチャートの適用処理を終了させるために、S504でオープンしていたソースファイルをクローズする。
【0073】
そして、ステップS515において、CPU107は、本フローチャートの適用処理を終了する。このときは、図13の1301に示すように、モニタ110には、パターンが適用された結果のソースコードが表示されている。
【0074】
以下、図6を参照して、図5のS505に示したトークン抽出処理について説明する。
【0075】
図6は、本発明の実施形態のトークン抽出処理(図5の505)を示すフローチャートである。このフローチャートの処理は、図3のトークン検出手段302等により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0076】
なお、ここでは図5のS504で既にオープンしているソースファイルから、トークンとその直前のホワイトスペースを抽出する処理の一例を示す。対応する言語等により処理を追加することも可能である。
【0077】
まず、ステップS601で処理を開始すると、ステップS602において、CPU107は、一時記憶装置108内に保持する判断テーブルを「区切り子判断テーブル」に設定する。なお、区切り子とは、プログラムコード中に現れる、その前後でトークンを分割する記号である。ただしコメント中や、文字列中に出現した場合は、区切り子とは判定しない。例えば、C言語の場合、セミコロン(;)や、カンマ(,)、中括弧({})等が相当する。この区切り子は、基本設定ファイル111内に含まれる後述する図15に示すような「言語の設定情報」から一時記憶装置108内に複製が可能であり、後述する図15に示す画面から内容が変更されない限り、一時記憶装置108に保持しておくことも可能である。もしくは、実際のトークン抽出の際に、直接、基本設定ファイル111内に含まれる「言語の設定情報」のデータを参照することもできる。
【0078】
次に、S614において、CPU107は、ソースファイルの「読み出しポインタ」からホワイトスペース以外の文字が現れる直前までを読み出し、その内容を一時記憶装置108内に「現ホワイトスペース」としてセットする(現ホワイトスペースの切り出し)。
【0079】
次に、ステップS603において、CPU107は、ソースファイルの「読み出しポインタ」を一時記憶装置108に保存する。
【0080】
次に、ステップS604において、CPU107は、一時記憶装置108に記憶される内部変数COPYCOUNTを「0」に初期化する。
【0081】
次に、ステップS605において、CPU107は、S602で設定した区切り子判断テーブルの情報(区切り子)とソースファイル内のコードとを比較する。
【0082】
そして、ステップS606において、CPU107は、ソースファイルからホワイトスペース又は区切り子によって区切られるまでの文字列をトークンとして抽出するように、その文字の数をCOPYCOUNTに格納する。
【0083】
例えば、C言語の場合、「A,B,C;」のような文字列からは、「A」のつぎに区切り子「,」が現れるため、「A」をトークンとして抽出するように、その文字の数「1」をCOPYCOUNTに格納する。また「ifif(スペース)」のような文字列は、キーワードとしての「if」が存在するが、この抽出では「(スペース)」で区切られたと判断され、「ifif」をトークンとして抽出するように、その文字の数「4」をCOPYCOUNTに格納する。
【0084】
次に、ステップS607,608,609,610,611では、CPU107は特殊なトークン抽出を行う。
【0085】
詳細には、ステップS607において、CPU107は、S606で抽出したトークンに、行コメントの始まり(例えば、C言語では「//」)を発見した場合には、次の改行コードまで、他のホワイトスペースや区切り子を発見しても無視して、上記行コメントの始まり「//」から改行コードの直前までを1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。
【0086】
また、ステップS608において、CPU107は、S606で抽出したトークンに、ブロックコメントの始まり(例えば、C言語では「/*」)を発見した場合には、ブロックコメントの終わり(例えば、C言語では「*/」)を発見するまで、ホワイトスペースや区切り子を発見しても無視して、上記ブロックコメントの始まり「/*」からブロックコメントの終わり「*/」までを1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。
【0087】
また、ステップS609において、CPU107は、S606で抽出したトークンに、文字(例えば、C言語では「'」と「'」で囲まれた文字(ただし「\'」は除く))を発見した場合には、「'」から「'」までを1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。
【0088】
また、ステップS610において、CPU107は、S606で抽出したトークンに、文字列の始まり(例えば、C言語では「"」(ただし「\"」は除く))を発見した場合には、文字列の終わり(C言語では「"」(ただし「\"」は除く))を発見するまで、ホワイトスペースや区切り子を発見しても無視して、「"」から「"」までを1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。
【0089】
また、ステップS611において、CPU107は、S606で抽出したトークンに定数を発見した場合には、10進定数、8進定数(先頭に「0」をつけて表記)、16進数定数(先頭に「0X」又は「0x」をつけて表記)等に応じて抽出するように、その文字の数をCOPYCOUNTに格納する。即ち、8進定数の場合は先頭の「0」を含めて1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。また、16進定数の場合は先頭の「0X」を含めて1つトークンとして扱うように抽出するように、その文字の数をCOPYCOUNTに格納する。
【0090】
次に、ステップS612において、CPU107は、ソースファイル内のデータを、S603で一時記憶装置108に保存したソースファイルの「読み出しポインタ」からCOPYCOUNT分だけ抽出し(読み出し)、一時記憶装置108内の「トークン切り出しバッファ」に格納(コピー)する。そして、これを「現トークン」とする。なお、ファイルの末尾となり、トークンが抽出できなかった場合は、「トークン無し」を示す値をセットする。
【0091】
次に、ステップS613において、CPU107は、S603で一時記憶装置108内に保存された「ファイルの読み出しポインタ」をCOPYCOUNT分進め、ファイルの読み出しポインタに上書きする。
【0092】
そして、CPU107は、ステップS615で、このルーチンでの処理(本トークン抽出処理)を終了し、呼び出し元へ処理を返す。
【0093】
以下、図7を参照して、図5のS505に示したトークングループ判定処理について説明する。
【0094】
図7は、本発明の実施形態のトークングループ判定処理(図5の507)を示すフローチャートである。このフローチャートの処理は、図3のトークングループ判定手段304等により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0095】
なお、以降の処理では、前後グループの関係で出力処理パターンを判定させるため、前グループIDと現グループIDを用いる。
【0096】
まず、ステップS701で処理を開始すると、ステップS702において、CPU107は、一時記憶装置108内に保持される前グループIDに現グループID(前回の「トークングループ判定処理」で判定されたグループID)を格納する。「トークングループ判定処理」の実行が初回であった場合は、グループIDの判定をしていないため、現グループIDは保存されていないため、該グループID無しを示す情報を格納するものとする。
【0097】
次に、ステップ703において、CPU107は、グループ自体が登録されているかどうかを判定する。ここでいうグループとは、後述する図15の言語の設定(言語別の設定ダイアログボックス1514)内のグループテーブルで管理されるデータであり、上記にあるグループIDは、図15のID1521を示す。また、上記グループテーブルの情報は、図5のS502で読み込まれ、一時記憶装置108内に格納されている。
【0098】
そして、ステップS703で、グループ自体が登録されていないと判定した場合には、CPU107は、ステップS707へ処理を進める。
【0099】
一方、ステップ703で、グループ自体が登録されていると判定した場合には、CPU107は、ステップS704へ処理を進める。
【0100】
ステップS704では、CPU107は、一時記憶装置108内に記憶されるループ用の変数iを「0」で初期化し、グループテーブルに登録されているグループ数分、ステップS705〜S709の処理を繰り返すように制御する。
【0101】
詳細には、ステップ705では、CPU107は、まだグループ数分の処理を終えていない(i<グループ数)か判定する。
【0102】
そして、ステップS705で、まだグループ数分処理を終えていないと判定した場合には、CPU107は、ステップS706に処理を進める。
【0103】
ステップ706では、CPU107は、現トークンがグループに含まれているかグループテーブルに基づいて判定する。
【0104】
そして、ステップ708において、CPU107が、上記のステップ706で現トークンがグループに含まれていないと判定した場合には、ステップ709に処理を進める。
【0105】
ステップ709では、CPU107は、ループ用の変数iをインクリメントし、次グループを確認するために、ステップ705へ処理を戻す。
【0106】
一方、ステップ708において、CPU107が、上記のステップ706で現トークンがグループに含まれていると判定した場合には、ステップ710に処理を進める。
【0107】
次に、ステップS710では、CPU107は、現グループIDとして、発見されたグループのIDを一時記憶装置108内にセットし、ステップ711において、呼び出し元に処理を戻す。
【0108】
なお、ステップ705において、CPU107が、既にグループ数分の処理を終えている(i≧グループ数)と判定した場合には、ステップS707に処理を進め、グループ判定ができなかったものとして、グループIDを無しを示す情報を一時記憶装置108内にセットし、ステップ711において、呼び出し元に処理を戻す。
【0109】
以下、図8を参照して、図5のS512に示した出力処理パターン判定処理について説明する。
【0110】
図8は、本発明の実施形態の出力処理パターン判定処理(図5の512)を示すフローチャートである。このフローチャートの処理は、図3の出力処理パターン判定手段305等により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0111】
ここでは、上記の図7で判定した「現グループID」と一時記憶装置108に保管しておいた「前グループID」を用いて後述する図17で閲覧および編集可能な処理パターン表から該当する処理パターンを求める。なお、処理パターン表は、図12に示す画面で選択されるパターン(プルダウンメニュー1210上のパターン)ごとに存在する。ここで使用するのは、適用処理を開始する際に図5のS502でユーザが選択し、図5のS503で出力処理パターンファイル105から読み込んだ処理パターン表を用いる。
【0112】
まず、ステップS801で処理を開始すると、ステップS802において、CPU107は、一時記憶装置108内に前グループIDが保存されているか否かを判定し、前グループIDが保存されていると判定した場合には、ステップ803へ処理を遷移させる。
【0113】
ステップS803では、CPU107は、一時記憶装置108内に現グループIDが保存されているか否かを判定し、現グループIDが保存されていると判定した場合には、ステップ804へ処理を遷移させる。
【0114】
次に、ステップ804では、CPU107は、上記の前グループIDと現グループIDとをキーにして出力処理パターン表を検索し、対応する出力処理パターンIDを一時記憶装置108内にセットする。
【0115】
する。この時、前グループIDと現グループIDとに対応する出力処理パターンIDが上記の出力処理パターン表に無い場合には、出力処理パターン無しを示す情報をセットする。
【0116】
一方、ステップS802で一時記憶装置108内に前グループIDが保存されていない、又は、ステップS803で一時記憶装置108内に現グループIDが保存されていないと判定した場合には、CPU107は、ステップ805へ処理を遷移させる。
【0117】
ステップ805では、CPU107は、出力処理パターン無しを示す情報を一時記憶装置108内にセットする。
【0118】
そしてステップS806において、CPU107は、呼び出し元に処理を戻す。
【0119】
以下、図9を参照して、図5のS513に示した出力処理パターン別処理について説明する。
【0120】
図9は、本発明の実施形態の出力処理パターン別処理(図5の513)を示すフローチャートである。このフローチャートの処理は、図3の出力処理パターン別出力処理手段306等により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0121】
ここでは、上記の図8の出力処理パターン判定処理で判定した出力処理パターンIDに対応する出力処理パターンに従って、図6のトークン抽出処理で抽出された現ホワイトスペース(前トークンと現トークンとの間のホワイトスペース)を加工処理して出力し、若しくは、何も処理せずに出力し、現トークンも続けて出力する処理を行う。この処理により、トークン間のホワイトスペースの変更がなされ、指定した出力処理パターン(コーディングスタイル)に従ってソースコードを整形することができる。なお、ここでいう出力処理パターンID及び出力処理パターンとは、後述する図16のID及び挿入文字パターンの設定ダイアログボックス1602内の挿入文字パターンであり、図5のS502で読み込まれ、一時記憶装置108内に格納されている。
【0122】
まず、ステップS901で処理を開始すると、ステップS902において、CPU107は、図5のS512(図8)の出力処理パターン判定処理で出力処理パターンIDがセットされたかどうかを判定する。
【0123】
そして、ステップS902において、出力処理パターンIDがセットされていないと判定した場合には、CPU107は、ステップ904へ処理を進める。
【0124】
ステップS904では、CPU107は、図6のステップS614でセットした現ホワイトスペースをそのまま、図13の1301に示す画面に出力し、ステップ905へ処理を遷移させる。
【0125】
一方、ステップS902において、出力処理パターンIDがセットされていると判定した場合には、CPU107は、ステップ903へ処理を進める。
【0126】
ステップS903では、CPU107は、図5のS502で読み込まれて一時記憶装置108内に格納されている挿入文字パターンの設定に基づいて、上記セットされている出力処理パターンIDから挿入文字パターンを求め、ホワイトスペースに変換し、図13の1301に示す画面に出力し、ステップ905へ処理を遷移させる。
【0127】
例えば、セットされている出力処理パターンIDが「P1」であった場合は、図16に示すように、挿入文字パターンは「S」となり、実際に出力されるホワイトスペースは「半角スペース1文字」である。このパターンはインデントにも対応しており、インデント数でタブコードを挿入することもできる。また、これは一例であり、記号を追加することにより処理パターンを追加することが可能である。
【0128】
次に、ステップS905において、CPU107は、一時記憶装置108に記憶されている現トークンを図13の1301に示すようにウィンドウ1200に出力し、ステップ906において、処理を呼び出し元に返す。
【0129】
以上、図5〜図9に示した適用処理により、任意のコーディングスタイルのソースコードを、個別に定義したコーディングスタイルに自動的に変換して表示閲覧することができる。特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを苦労して解読する必要が無くなる。この結果、コードレビュー工数を軽減できる。また、個別に定義したコーディングスタイルで表示することで、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【0130】
以下、図10のフローチャートを用いて分析処理(図2の203,図4)の具体的な処理を示す。
【0131】
図10は、本発明の実施形態の分析処理(図2の203,図4)の具体的な処理を示すフローチャートである。このフローチャートの処理は、図4の401〜408に示した各手段により実行される。即ち、このフローチャートの処理は、CPU107が記憶装置102に格納される実行ファイル103を必要に応じて一時記憶装置108に読み出して実行することにより実現される。以下、CPU107が実行するものとして記載する。
【0132】
なお、図10に示すS1002,S1002〜S1010,S1014は、図5に示したS502,S504〜S511,S514と同様のステップであるので、説明は省略する。
【0133】
まず、図14に示すようにファイルオープンダイアログ1211のインタフェース1202,1203,1204,1207,1208においてファイルが選択され、1401に示すようにモード選択手段により「分析」が選択されることにより分析モードが選択され、パターン選択1206により既に登録されているパターン情報の名称が選択され(ここで選択されるパターンは基準となるものであり、分析対象とするソースコードに現れない前後トークングループの組み合わせの処理パターンは、該選択した処理パターンで補完される。)、開くボタン1209が押下されると、CPU107は、新たな分析実行ウィンドウ1403を表示する。
【0134】
そして、新たな分析実行ウィンドウ1403で、保存するパターン名1404に分析後の結果パターンデータを格納するためのファイル名がセットされ、トークン抽出時に利用する言語情報が言語選択1405で選択され、分析方法1406が選択され、実行ボタン1408が押下されると、CPU107は、ステップS1001より分析処理を開始する。なお、この際、CPU107は、一時記憶装置108に格納されるインデントカウンタを「0」に初期化しておく。
【0135】
なお、ここでは分析方法1406として4種類の方法を図示している。即ち、(1)先頭の挿入文字パターンを採用、(2)全体で頻度の多い挿入文字パターンを採用、(3)前半で頻度の多い挿入文字パターンを採用、(4)前半優先で頻度の多い挿入文字パターンを採用の4種類の方法を図示している。しかし、実行ファイル103にプログラムを追加することにより挿入文字パターンを採用するための条件を追加することも可能である。
【0136】
CPU107は、ステップS1010の処理が終了すると、ステップS1011に処理を進める。
【0137】
ステップS1011では、CPU107は、前トークングループ(前回のループの際にS1006で求められたトークングループ)と、上記S1006で求めた現トークングループから一時格納先を求める。この一時格納先は、ソースコード上に現れるホワイトスペースのパターンを一時的に格納することを目的として一時記憶装置108上に、図11の1101に示すように、前トークングループと現トークングループとの組み合わせ毎に設けられている記憶領域に対応する。なお、このS1011の処理に関しては、詳細を図11にて後述する。
【0138】
次に、ステップ1012において、CPU107は、S1004(図6)のトークン抽出処理で抽出された現ホワイトスペース(前トークンと現トークンとの間のホワイトスペース)から挿入文字パターンを求め、S1011で求めた一時格納先に図11の1103に示すように時系列で格納する(順次保持する)。なお、このS1012の処理に関しては、詳細を図11にて後述する。
【0139】
そして、S1012の処理が終了すると、CPU107は、ステップS1004に処理を戻し、次のトークンを抽出するように制御する。
【0140】
そして、ステップS1105で、もう抽出するトークンが無くなったと判定した場合には、CPU107は、ステップS1013に処理を進める。
【0141】
ステップS1013では、CPU107は、上記S1012で各一時格納先に時系列で蓄えられた内容から、図14の1406のように選択した分析方法により、前記一時格納先毎(即ち、前トークングループと現トークングループとの組み合わせ毎)に、優先順位の高い挿入文字パターンを選出し、図11の1102に示すように、一時記憶装置108内に設けられた設定格納先(前トークングループと現トークングループとの組み合わせ毎に設けられている)に保存する。なお、このS1013の処理に関しては、詳細を図11にて後述する。さらに、CPU107は、S1013で挿入文字パターンがセットされた設定格納先の内容を、図14の1404で指定されたパターン名で、出力処理パターンファイル105内保存する。
【0142】
次に、ステップS1014では、CPU107は、S1003でオープンしたソースファイルをクローズする。
【0143】
最後に、CPU107は、ステップS1015において、モニタ110に、S1002で読み込んだソースファイルのソースコードをそのまま表示するように制御し、処理を終了する。
【0144】
図11は、本発明の実施形態の分析における挿入文字列パターン採用時の判定(図10のS1011〜S1013)を説明する図である。
【0145】
図11の1011に示すように、一時格納先は、ソースコード上に現れるホワイトスペースのパターンを一時的に格納することを目的として一時記憶装置108上に、前トークングループと現トークングループとの組み合わせ毎に設けられている。図中、縦軸は前トークングループを示し、横軸は後トークングループを示す。
【0146】
例えば、前トークンがG1グループで後トークンがG1グループである場合、1101の斜線部分が、この組み合わせの一時格納先に対応する。
【0147】
また、一時格納先には、1103に示すように、トークン抽出処理で抽出された現ホワイトスペース(前トークンと現トークンとの間のホワイトスペース)から求めた挿入文字パターンを時系列で格納可能である。
【0148】
1102に示すように、設定格納先は、一時記憶装置108上に、前トークングループと現トークングループとの組み合わせ毎に設けられている。この設定格納先には、全てのトークンを処理後に、前トークングループと現トークングループとの組み合わせ毎に(即ち一時格納先毎に)、一時格納先に時系列で格納された挿入文字パターンから、指定された(1)〜(4)のいずれかの分析方法で決定された1の挿入文字パターンがそれぞれ格納される。
【0149】
即ち、まず、1101の斜線部分の一時格納先に、前トークンがG1グループで後トークンがG1グループとなるトークンの間から取得された挿入パターンが、1103に示すように時系列に格納される。そして、全てのトークンを処理後に、この時系列に格納された挿入パターンから、指定された分析方法で決定された1つの挿入パターンが、1102の斜線部分の設定格納先に格納されることになる。
【0150】
なお、前後のグループの組み合わせ毎に、以下のように挿入パターンを決定(選出)する。
【0151】
例えば、分析方法が「(1)先頭の挿入文字パターンを採用」である場合、1103のように時系列で一時格納先に格納されている挿入文字パターンの最初に一時格納先に格納されたものを選出する。
【0152】
また、分析方法が「(2)全体で、頻度の多い挿入文字パターンを採用」である場合、1103のように時系列で一時格納先に格納されている挿入文字パターンのうち数が最も多いもの(保持頻度が高いもの)を選出する。もし同数の挿入文字パターンが存在した場合は、そのうちの最初に一時格納先に格納されたものを選出する。
【0153】
さらに、分析方法が「(3)前半で、頻度の多い挿入文字パターンを採用」である場合、1103のように時系列で一時格納先に格納されている挿入文字パターンのうち前半のデータを用いて「(2)全体で、頻度の多い挿入文字パターンを採用」と同じ判定を行って選出する。もし一時格納先に格納された挿入文字パターンの全体数が奇数である場合は、前半部の数が多いように分割する。例えば、全体が7件であった場合は、前半部4件を対象データとする。
【0154】
また、分析方法が「(4)前半優先で、頻度の多い挿入文字パターンを採用」である場合、1103のように時系列で一時格納先に格納されている挿入文字パターンのうち前半部に係数を掛け、後半部との重みを変えた上で保持頻度を算出し、一番重みのある(算出結果が最も大きい)挿入文字パターンを選出する。
【0155】
以上、図10,図11に示したように、ソースコードの分析処理を行うことにより、該分析対象となったソースコードのコーディングスタイルに対応する出力処理パターンを作成することができる。
【0156】
このように作成した出力処理パターンを用いて、上述した適用処理を行うことにより、任意のコーディングスタイルのソースコードを、上記分析対象となったソースコードのコーディングスタイルに変更して出力することができる。
【0157】
これにより、特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを自分のコーディングスタイルに変更できる。この結果、コードレビュー工数を軽減できる。また、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【0158】
以下、図12,図13を参照して、本発明の実施形態の適用処理時の画面について説明する。
【0159】
図12は、本発明の実施形態の適用処理開始時の画面の一例を示す図である。
【0160】
図12に示すように、ウィンドウ1200の「ファイル」メニュー1201の「ファイルを開く」を選択することにより、ファイルオープンダイアログ1211がモニタ110に表示される。
【0161】
ファイルオープンダイアログ1211では、インタフェース1202,1203,1204,1207,1208を用いて対象となるファイルを選択することができる。また、1205に示すようにモード選択手段により「適用」が選択されることにより適用モードが選択される。
【0162】
パターン選択1206より、プルダウンメニュー1210を用いて既に登録されているパターン情報の名称を選択することができる。なお、プルダウンメニュー1210には、予め登録されているものや、後から追加した処理パターンが表示される。この内容は、図1に示した出力処理パターンファイル105に格納されており、後述する図17に示す画面で確認および編集することができる。
【0163】
開くボタン1209を押下することにより、上述した適用処理が開始される。
【0164】
図13は、本発明の実施形態の適用処理の表示結果の一例(図3の表示手段307)を示す図である。
【0165】
図13に示すように、適用処理の結果、オリジナルソースコード1302における表記方法が、適用処理の結果により意図されたコーディングスタイル1301に統一される。
【0166】
以下、図12,図13を参照して、本発明の実施形態の分析処理時の画面について説明する。
【0167】
図14は、本発明の実施形態の分析処理開始時の画面の一例を示す図である。なお、図12と同一のものには同一の符号を付してある。
【0168】
図14に示すように、1401に示すようにモード選択手段により「分析」が選択されることにより分析モードが選択される。
【0169】
開くボタン1209を押下することにより、新たな分析実行ウィンドウ1403が表示される。
【0170】
この分析実行ウィンドウ1403では、保存するパターン名1404に分析後の結果パターンデータを格納するためのファイル名を設定できる。また、言語選択1405でトークン抽出時に利用する言語情報を設定できる。
【0171】
さらに、分析方法1406で(1)先頭の挿入文字パターンを採用、(2)全体で頻度の多い挿入文字パターンを採用、(3)前半で頻度の多い挿入文字パターンを採用、(4)前半優先で頻度の多い挿入文字パターンを採用のいずれかの分析方法を選択できる。そして、実行ボタン1408を押下すると、上述した分析処理が開始される。
【0172】
以下、図15〜図17を参照して、図1に示した基本設定ファイル111、出力処理パターンファイル105について説明する。
【0173】
図15は、図1に示した基本設定ファイル111の言語別の設定を行う設定画面の一例を示す図である。
【0174】
図15に示すように、ウィンドウ1200(CPU107が実行ファイル103を実行することによりモニタ110に表示される)の「設定」メニュー1501の「言語の設定…」1502を選択することにより、言語の設定ダイアログボックス1503を開く。
【0175】
なお、言語は複数登録されており、独自に追加することも可能である。追加するときには、追加ボタン1506を押下することにより、CPU107が、追加のためのダイアログボックス1510を表示する。このダイアログボックス1510のテキストボックス1511に新しい言語名を入力し、保存ボタン1512を押下すると、CPU107が、言語別の設定ダイアログボックス1514を表示する。なお、中止ボタン1513を押下すると、CPU107は、言語別の設定を中止して元の言語の設定ダイアログボックス1503に戻す。
【0176】
言語の設定ダイアログボックス1503において、言語を選択し、ダブルクリックをするか、編集ボタン1507を押下することにより、CPU107は、言語別の設定ダイアログボックス1514を表示する。
【0177】
言語別の設定ダイアログボックス1514には、言語ごとのキーワードが種類別に登録される。
【0178】
コメント判断テーブルに関しては、1515〜1517に示すように、コメントの開始、終了、1行コメントの開始キーワードの登録を行う。
【0179】
インデントカウンタテーブルでは、1518〜1520に示すように、インデントの加算グループのキーワード、減算グループのキーワードの登録を行う。
【0180】
グループテーブルでは、1521〜1523に示すように、パターンをキーワード単位で行わないために、同じ扱いにできるキーワードをまとめてグループ化した登録ができる。
【0181】
なお、上記キーワードは、トークンとして抽出可能な単位で行い、キーワードの記入エリア1517,1520,1523等に記述する。キーワードが複数ある場合は、カンマ区切りで記述する。なお、カンマ「,」と「\」記号については、「\」文字でエスケープするように記述する。また、正規表現による記述も可能である。
【0182】
以上のように、言語別の設定ダイアログボックス1514で編集した内容を保存する場合は、保存ボタン1524を、破棄する場合には中止ボタン1525を押下する。なお、保存または破棄した後に、CPU107は、言語の設定ダイアログボックス1503に処理を戻す。
【0183】
そして、言語の設定ダイアログボックス1503にて保存ボタン1508が押下されると、CPU107は、上記の設定内容(追加のためのダイアログボックス1510での追加内容、言語別の設定ダイアログボックス1514での編集内容)を、基本設定ファイル111内に格納し、ダイアログボックス1514を閉じる。
【0184】
また、言語の設定ダイアログボックス1503にて保存ボタン1508が押下されると、CPU107は、上記の設定内容(追加のためのダイアログボックス1510での追加内容、言語別の設定ダイアログボックス1514での編集内容)を破棄し、ダイアログボックス1514を閉じる。
【0185】
図16は、図1に示した基本設定ファイル111の挿入文字パターンの設定を行う設定画面の一例を示す図である。
【0186】
図16に示すように、ウィンドウ1200の「設定」メニュー1501の「挿入文字パターンの設定」1601を選択することにより、CPU107は、挿入文字パターンの設定ダイアログボックス1602を開く。
【0187】
処理パターンは、ID1603、挿入文字パターン1604から構成される。ID1603は、P1から自動で振られる。挿入文字パターン1604は、凡例1607に示すように、幾つかの予め定義された書き方で記述することができる。
【0188】
挿入文字パターンは、自由に付加することができる。また、その書き方の例は、例1608に記述されている。
【0189】
保存ボタン1605を押下すると、CPU107は、変更された内容を基本設定ファイル111内に保存して、ダイアログ1602を閉じる。中止ボタン1513を押下すると、CPU107は、変更された内容を破棄して、ダイアログ1602を閉じる。
【0190】
以下、図17を参照して、図1に示した出力処理パターンファイル105について説明する。
【0191】
図17は、図1に示した出力処理パターンファイル105の設定画面の一例を示す図である。なお、出力処理パターンファイル105は、図15の画面で設定されたグループと図15の画面で設定された挿入パターンとの相関を示す処理パターンを含むものである。
【0192】
図17に示すように、ウィンドウ1200の「設定」メニュー1501の「処理パターンの設定・・・」1701を選択することにより、CPU107は、処理パターンの設定ダイアログボックス1708を開く。
【0193】
処理パターンの判断は、前後グループの関係でなされるため、マトリックスで設定をする。
【0194】
前グループ1702は、上記図15において、キーワードをグループ設定した際に作成されているグループとなる。後グループ1703も同様である。
【0195】
例えば、前トークンのグループが「G2」と判定されており、後トークンのグループが「G3」と判定された場合には、1705のセルに登録されている処理パターンが選ばれる。処理パターンの設定は、セルをクリックすることにより、CPU107により、処理パターン(上記図16で設定された挿入パターン)と空欄のうち1つを選択できるようなプルダウンメニュー1704が表示される。
【0196】
保存ボタン1706を押下すると、CPU107は、変更された内容を出力処理パターンファイル105内に保存して、設定ダイアログボックス1708を閉じる。中止ボタン1707を押下すると、CPU107は、変更された内容を破棄して、設定ダイアログボックス1708を閉じる。
【0197】
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な構成や内容で構成されることは言うまでもない。
【0198】
以上、一実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【0199】
なお、本実施形態では、図17の処理パターンの設定に示すように、出力処理パターンを、ホワイトスペースの前後に配置されるトークンの属するトークングループの組み合わせ毎に設定した。しかし、出力処理パターンを、ホワイトスペースの前後に配置されるトークンの組み合わせから特定可能に設定するものであればどのような設定方法を用いてもよい。例えば、出力処理パターンを、ホワイトスペースの前後に配置されるトークンの組み合わせ毎に設定してもよい。
【0200】
以上説明したように、本発明によれば、プログラムソースコードを、既に定義されている若しくは個別に定義したコーディングスタイル(所望のコーディングスタイル)に自動的に(人的作業無しに)変換して出力することができる。特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを解読する必要が無くなり、コードレビュー工数を軽減できる。また、個別に定義したコーディングスタイルで表示することで、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【0201】
なお、本発明は、単にホワイトスペースの置換処理を行うものではなく、ホワイトスペースの前後に配置されるトークンの組み合わせによりパターン判定し、個別変換処理を行うものであり、ソースファイル内に記述されているプログラムコードと、コメントとして扱われる字句を区別して処理することができる。
【0202】
以下、図18に示すメモリマップを参照して本発明に係るプログラムソースコード解析支援装置で読み取り可能なデータ処理プログラムの構成について説明する。
【0203】
図18は、本発明に係るプログラムソースコード解析支援装置で読み取り可能な各種データ処理プログラムを格納する記録媒体(記憶媒体)のメモリマップを説明する図である。
【0204】
なお、特に図示しないが、記録媒体に記憶されるプログラム群を管理する情報、例えばバージョン情報,作成者等も記憶され、かつ、プログラム読み出し側のOS等に依存する情報、例えばプログラムを識別表示するアイコン等も記憶される場合もある。
【0205】
さらに、各種プログラムに従属するデータも上記ディレクトリに管理されている。また、インストールするプログラムやデータが圧縮されている場合に、解凍するプログラム等も記憶される場合もある。
【0206】
本実施形態における図5,図6,図7,図8,図9,図10に示す機能が外部からインストールされるプログラムによって、ホストコンピュータにより遂行されていてもよい。そして、その場合、CD−ROMやフラッシュメモリやFD等の記録媒体により、あるいはネットワークを介して外部の記録媒体から、プログラムを含む情報群を出力装置に供給される場合でも本発明は適用されるものである。
【0207】
以上のように、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【0208】
この場合、記録媒体から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記録媒体は本発明を構成することになる。
【0209】
プログラムコードを供給するための記録媒体としては、例えば、フレキシブルディスク,ハードディスク,光ディスク,光磁気ディスク,CD−ROM,CD−R,DVD−ROM,磁気テープ,不揮発性のメモリカード,ROM,EEPROM,シリコンディスク等を用いることができる。
【0210】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0211】
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0212】
また、本発明は、複数の機器から構成されるシステムに適用しても、1つの機器からなる装置に適用してもよい。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのソフトウェアによって表されるプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【0213】
さらに、本発明を達成するためのソフトウェアによって表されるプログラムをネットワーク上のサーバ,データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【0214】
なお、上述した各実施形態およびその変形例を組み合わせた構成も全て本発明に含まれるものである。
【図面の簡単な説明】
【0215】
【図1】本発明の一実施形態を示すプログラムソースコード解析支援装置の構成の一例を示すブロック図である。
【図2】図1に示した実行ファイルに基づいて実現される処理選択処理よる「適用処理」と「分析処理」の分岐処理を示す図である。
【図3】本発明の実施形態の適用処理における基本的な処理を示す図である。
【図4】本発明の実施形態の分析処理における基本的な処理を示す図である。
【図5】本発明の実施形態の適用処理の具体的な処理を示すフローチャートである。
【図6】本発明の実施形態のトークン抽出処理を示すフローチャートである。
【図7】本発明の実施形態のトークングループ判定処理を示すフローチャートである。
【図8】本発明の実施形態の出力処理パターン判定処理を示すフローチャートである。
【図9】本発明の実施形態の出力処理パターン別処理を示すフローチャートである。
【図10】本発明の実施形態の分析処理の具体的な処理を示すフローチャートである。
【図11】本発明の実施形態の分析における挿入文字列パターン採用時の判定を説明する図である。
【図12】本発明の実施形態の適用処理開始時の画面の一例を示す図である。
【図13】本発明の実施形態の適用処理の表示結果の一例を示す図である。
【図14】本発明の実施形態の分析処理開始時の画面の一例を示す図である。
【図15】図1に示した基本設定ファイルの言語別の設定を行う設定画面の一例を示す図である。
【図16】図1に示した基本設定ファイルの挿入文字パターンの設定を行う設定画面の一例を示す図である。
【図17】図1に示した出力処理パターンファイルの設定画面の一例を示す図である。
【図18】本発明に係るプログラムソースコード解析支援装置で読み取り可能な各種データ処理プログラムを格納する記録媒体(記憶媒体)のメモリマップを説明する図である。
【符号の説明】
【0216】
101 PC本体
102 記憶装置
103 実行ファイル
104 ソースコードファイル
105 出力処理パターンファイル
106 パターン適用済みソースファイル
107 CPU
108 一時記憶装置
109 表示制御装置
110 モニタ
111 基本設定ファイル
112 インタフェース(I/F)
113 入力装置
【特許請求の範囲】
【請求項1】
既存のプログラムソースコードから、プログラム上意味のある字句を示すトークンと、該トークンの間に配置される0文字以上のスペースコード、改行コード、タブコードで構成される文字列を示すホワイトスペースを検出するトークン検出手段と、
前記トークン検出手段により検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて加工し、該加工したプログラムコードを出力する出力手段と、
を有することを特徴とするプログラムソースコード解析支援装置。
【請求項2】
前記ホワイトスペースを加工する際に該ホワイトスペースに置き換えて出力処理する文字列パターンを定義した出力処理パターンを、該ホワイトスペースの前後に配置されるトークンの組み合わせから特定可能に設定した出力処理パターン設定手段を有し、
前記出力手段は、前記トークン検出手段により検出されたホワイトスペースの前後に配置されるトークンの組み合わせから該ホワイトスペースの加工に用いる出力処理パターンを特定し、該特定した出力処理パターンを用いて前記ホワイトスペースを加工する、ことを特徴とする請求項1に記載のプログラムソースコード解析支援装置。
【請求項3】
前記出力処理パターン設定手段は、前記出力処理パターンを前記ホワイトスペースの前後に配置されるトークンの属する解析上同一視できるトークングループの組み合わせ毎に設定したものであり、
前記出力手段は、前記トークン検出手段により検出されたトークンの属するグループを前記グループテーブルに基づいて判定し、該判定結果に基づいて、前記トークン検出手段により検出されたホワイトスペースの前後に配置されるトークンの属するトークングループの組み合わせから該ホワイトスペースの加工に用いる出力処理パターンを特定し、該特定した出力処理パターンを用いて前記ホワイトスペースを加工する、ことを特徴とする請求項2に記載のプログラムソースコード解析支援装置。
【請求項4】
既存のプログラムソースコードからトークンとホワイトスペースを検出し、該検出されたホワイトスペースの文字列パターンを分析し、該文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される前記出力処理パターンとして設定する分析処理手段を有することを特徴とする請求項2又は3に記載のプログラムソースコード解析支援装置。
【請求項5】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に順次保持していき、該記憶領域毎に最初に保持された文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定する、ことを特徴とする請求項4に記載のプログラムソースコード解析支援装置。
【請求項6】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に保持していき、該記憶領域毎に、最も保持頻度が高い文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定する、ことを特徴とする請求項4に記載のプログラムソースコード解析支援装置。
【請求項7】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に保持していき、該記憶領域毎に、前半に保持された文字列パターンのうち最も保持頻度が高い文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定する、ことを特徴とする請求項4に記載のプログラムソースコード解析支援装置。
【請求項8】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に保持していき、該記憶領域毎に、文字列パターン毎の保持頻度を前半に保持された文字列パターンを優先する重みを掛けて算出し、該記憶領域毎に、前記算出結果が最も大きい文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定することを特徴とする請求項4に記載のプログラムソースコード解析支援装置。
【請求項9】
トークン検出手段が、既存のプログラムソースコードから、プログラム上意味のある字句を示すトークンと、該トークンの間に配置される0文字以上のスペースコード、改行コード、タブコードで構成される文字列を示すホワイトスペースを検出するトークン検出ステップと、
出力手段が、前記トークン検出ステップで検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて加工し、該加工したプログラムコードを出力する出力ステップと、
を有することを特徴とするプログラムソースコード解析支援方法。
【請求項10】
請求項9に記載されたプログラムソースコード解析支援方法をコンピュータに実行させるためのプログラム。
【請求項11】
請求項9に記載されたプログラムソースコード解析支援方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項1】
既存のプログラムソースコードから、プログラム上意味のある字句を示すトークンと、該トークンの間に配置される0文字以上のスペースコード、改行コード、タブコードで構成される文字列を示すホワイトスペースを検出するトークン検出手段と、
前記トークン検出手段により検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて加工し、該加工したプログラムコードを出力する出力手段と、
を有することを特徴とするプログラムソースコード解析支援装置。
【請求項2】
前記ホワイトスペースを加工する際に該ホワイトスペースに置き換えて出力処理する文字列パターンを定義した出力処理パターンを、該ホワイトスペースの前後に配置されるトークンの組み合わせから特定可能に設定した出力処理パターン設定手段を有し、
前記出力手段は、前記トークン検出手段により検出されたホワイトスペースの前後に配置されるトークンの組み合わせから該ホワイトスペースの加工に用いる出力処理パターンを特定し、該特定した出力処理パターンを用いて前記ホワイトスペースを加工する、ことを特徴とする請求項1に記載のプログラムソースコード解析支援装置。
【請求項3】
前記出力処理パターン設定手段は、前記出力処理パターンを前記ホワイトスペースの前後に配置されるトークンの属する解析上同一視できるトークングループの組み合わせ毎に設定したものであり、
前記出力手段は、前記トークン検出手段により検出されたトークンの属するグループを前記グループテーブルに基づいて判定し、該判定結果に基づいて、前記トークン検出手段により検出されたホワイトスペースの前後に配置されるトークンの属するトークングループの組み合わせから該ホワイトスペースの加工に用いる出力処理パターンを特定し、該特定した出力処理パターンを用いて前記ホワイトスペースを加工する、ことを特徴とする請求項2に記載のプログラムソースコード解析支援装置。
【請求項4】
既存のプログラムソースコードからトークンとホワイトスペースを検出し、該検出されたホワイトスペースの文字列パターンを分析し、該文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される前記出力処理パターンとして設定する分析処理手段を有することを特徴とする請求項2又は3に記載のプログラムソースコード解析支援装置。
【請求項5】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に順次保持していき、該記憶領域毎に最初に保持された文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定する、ことを特徴とする請求項4に記載のプログラムソースコード解析支援装置。
【請求項6】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に保持していき、該記憶領域毎に、最も保持頻度が高い文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定する、ことを特徴とする請求項4に記載のプログラムソースコード解析支援装置。
【請求項7】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に保持していき、該記憶領域毎に、前半に保持された文字列パターンのうち最も保持頻度が高い文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定する、ことを特徴とする請求項4に記載のプログラムソースコード解析支援装置。
【請求項8】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に保持していき、該記憶領域毎に、文字列パターン毎の保持頻度を前半に保持された文字列パターンを優先する重みを掛けて算出し、該記憶領域毎に、前記算出結果が最も大きい文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定することを特徴とする請求項4に記載のプログラムソースコード解析支援装置。
【請求項9】
トークン検出手段が、既存のプログラムソースコードから、プログラム上意味のある字句を示すトークンと、該トークンの間に配置される0文字以上のスペースコード、改行コード、タブコードで構成される文字列を示すホワイトスペースを検出するトークン検出ステップと、
出力手段が、前記トークン検出ステップで検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて加工し、該加工したプログラムコードを出力する出力ステップと、
を有することを特徴とするプログラムソースコード解析支援方法。
【請求項10】
請求項9に記載されたプログラムソースコード解析支援方法をコンピュータに実行させるためのプログラム。
【請求項11】
請求項9に記載されたプログラムソースコード解析支援方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【公開番号】特開2009−276918(P2009−276918A)
【公開日】平成21年11月26日(2009.11.26)
【国際特許分類】
【出願番号】特願2008−126168(P2008−126168)
【出願日】平成20年5月13日(2008.5.13)
【出願人】(301015956)キヤノンソフトウェア株式会社 (364)
【Fターム(参考)】
【公開日】平成21年11月26日(2009.11.26)
【国際特許分類】
【出願日】平成20年5月13日(2008.5.13)
【出願人】(301015956)キヤノンソフトウェア株式会社 (364)
【Fターム(参考)】
[ Back to top ]