(57)【要約】【課題】既存のプログラムソースコードを所望のコーディングスタイルに自動的に変換して出力すること。【解決手段】実行ファイル１０３を実行するＣＰＵ１０７が、既存のプログラムソースコード（ソースコードファイル１０４から読み込まれた）からトークンとホワイトスペースを検出し、該検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて出力処理パターン（出力処理パターンファイル１０５から読み込まれた）を使用して加工し、該加工したプログラムコードをモニタ１１０に出力する構成を特徴とする。【選択図】図１
2009276918.tif 000002
【特許請求の範囲】
【請求項１】
既存のプログラムソースコードから、プログラム上意味のある字句を示すトークンと、該トークンの間に配置される０文字以上のスペースコード、改行コード、タブコードで構成される文字列を示すホワイトスペースを検出するトークン検出手段と、
前記トークン検出手段により検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて加工し、該加工したプログラムコードを出力する出力手段と、
を有することを特徴とするプログラムソースコード解析支援装置。
【請求項２】
前記ホワイトスペースを加工する際に該ホワイトスペースに置き換えて出力処理する文字列パターンを定義した出力処理パターンを、該ホワイトスペースの前後に配置されるトークンの組み合わせから特定可能に設定した出力処理パターン設定手段を有し、
前記出力手段は、前記トークン検出手段により検出されたホワイトスペースの前後に配置されるトークンの組み合わせから該ホワイトスペースの加工に用いる出力処理パターンを特定し、該特定した出力処理パターンを用いて前記ホワイトスペースを加工する、ことを特徴とする請求項１に記載のプログラムソースコード解析支援装置。
【請求項３】
前記出力処理パターン設定手段は、前記出力処理パターンを前記ホワイトスペースの前後に配置されるトークンの属する解析上同一視できるトークングループの組み合わせ毎に設定したものであり、
前記出力手段は、前記トークン検出手段により検出されたトークンの属するグループを前記グループテーブルに基づいて判定し、該判定結果に基づいて、前記トークン検出手段により検出されたホワイトスペースの前後に配置されるトークンの属するトークングループの組み合わせから該ホワイトスペースの加工に用いる出力処理パターンを特定し、該特定した出力処理パターンを用いて前記ホワイトスペースを加工する、ことを特徴とする請求項２に記載のプログラムソースコード解析支援装置。
【請求項４】
既存のプログラムソースコードからトークンとホワイトスペースを検出し、該検出されたホワイトスペースの文字列パターンを分析し、該文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される前記出力処理パターンとして設定する分析処理手段を有することを特徴とする請求項２又は３に記載のプログラムソースコード解析支援装置。
【請求項５】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に順次保持していき、該記憶領域毎に最初に保持された文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定する、ことを特徴とする請求項４に記載のプログラムソースコード解析支援装置。
【請求項６】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に保持していき、該記憶領域毎に、最も保持頻度が高い文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定する、ことを特徴とする請求項４に記載のプログラムソースコード解析支援装置。
【請求項７】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に保持していき、該記憶領域毎に、前半に保持された文字列パターンのうち最も保持頻度が高い文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定する、ことを特徴とする請求項４に記載のプログラムソースコード解析支援装置。
【請求項８】
前記分析処理手段は、前記検出されたホワイトスペースの文字列パターンを、前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される記憶領域に保持していき、該記憶領域毎に、文字列パターン毎の保持頻度を前半に保持された文字列パターンを優先する重みを掛けて算出し、該記憶領域毎に、前記算出結果が最も大きい文字列パターンを、該記憶領域に対応する前記ホワイトスペースの前後に配置されるトークンの組み合わせから特定される出力処理パターンとして設定することを特徴とする請求項４に記載のプログラムソースコード解析支援装置。
【請求項９】
トークン検出手段が、既存のプログラムソースコードから、プログラム上意味のある字句を示すトークンと、該トークンの間に配置される０文字以上のスペースコード、改行コード、タブコードで構成される文字列を示すホワイトスペースを検出するトークン検出ステップと、
出力手段が、前記トークン検出ステップで検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて加工し、該加工したプログラムコードを出力する出力ステップと、
を有することを特徴とするプログラムソースコード解析支援方法。
【請求項１０】
請求項９に記載されたプログラムソースコード解析支援方法をコンピュータに実行させるためのプログラム。
【請求項１１】
請求項９に記載されたプログラムソースコード解析支援方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムソースコードを解析して個別に定義したコーディングスタイルで出力をするプログラムコード解析支援装置、プログラムコード解析支援方法、プログラム、及び、記録媒体に関する。
【背景技術】
【０００２】
近年、ソフトウェア開発において第三者のソースコードを参照することは多々あるが、第三者が作成したプログラムを解析して修正することは、極めて困難を伴う作業となり、その結果、プログラムの修正・変更に多大な時間を要していた。
【０００３】
そこで、ソースコードの解析を助ける手段として、個別に定義したコーディングスタイルで表示することが考えられている。
【０００４】
まず、特許文献１には、ソースコードの字下げを自動化する字下げ処理方式が開示されている。特に、ソースコードを入力するオペレータに依存していたソースコード内の字下げを自動で行うように処理するものである。
【０００５】
また、特許文献２には、基本となる言語仕様に対して拡張を施した言語使用に則って記述されたソースプログラムを解析するソースプログラム解析装置が開示されている。特に、言語仕様の拡張に対し、短期間で対応可能なソースプログラムの解析装置が開示されている。
【特許文献１】特開平５−８１００８号公報
【特許文献２】特開平９−１６７０９５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載のソースコードの字下げを自動化する処理方式においては、オペレータの入力イベント発生時のインデント字下げ部分についての処理は可能であるが、入力イベントが発生しない既存のソースコードを字下げ処理することはできない。
【０００７】
また、特許文献２に記載のソースプログラム解析装置においては、トークンを単位として処理することで、仕様の拡張されたソースコードに対してのプログラムの解析を行って関数名、呼び出し形式、パラメータ数、各パラメータを出力表示することは可能であるが、ソースコードを所望のコーディングスタイルで表示することはできない。
【０００８】
本発明は上記の課題を解決するためになされたものである。本発明の目的は、既存のプログラムソースコードを所望のコーディングスタイルに変換して出力することができる仕組を提供することである。
【課題を解決するための手段】
【０００９】
本発明は、既存のプログラムソースコードから、プログラム上意味のある字句を示すトークンと、該トークンの間に配置される、０文字以上のスペースコード、改行コード、タブコードで構成される文字列を示すホワイトスペースを検出するトークン検出手段と、前記トークン検出手段により検出されたホワイトスペースを該ホワイトスペースの前後に配置されるトークンの組み合わせに応じて加工し、該加工したプログラムコードを出力する出力手段とを有することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、プログラムソースコードを、個別に定義したコーディングスタイルに自動的に（人的作業無しに）変換して出力することができる。
【００１１】
特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを解読する必要が無くなり、コードレビュー工数を軽減できる。
【００１２】
また、個別に定義したコーディングスタイルで表示することで、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照して、本発明の実施形態を詳細に説明する。
【００１４】
図１は、本発明の一実施形態を示すプログラムソースコード解析支援装置の構成の一例を示すブロック図である。
【００１５】
図１において、１０１は、本発明のプログラムソースコード解析支援装置に適用可能なパーソナルコンピュータ等の情報処理装置の本体（以下、ＰＣ本体）である。
【００１６】
ＰＣ本体１０１において、ＣＰＵ１０７は、不図示のキーボード、マウス等のポインティングデバイスからの入力によるユーザ指示により、記憶装置（ＨＤＤ等）１０２に格納された実行ファイル（プログラム）１０３を必要に応じて一時記憶装置（ＲＡＭ等）１０８に読み込み、処理を実行する。例えば、ＣＰＵ１０７は、ソースコードファイル１０４に記述されているソースコードに対して、後述する「適用処理」や「分析処理」を実行する。
【００１７】
ここでいう「適用処理」とは、既存のプログラムソースコード（ソースコードファイル１０４）をユーザが指示した出力処理パターンに従い、基本設定ファイル１１１及び出力処理パターンファイル１０５の情報を用いて整形する処理（出力処理パターン設定）である。なお、適用処理によって作成された、新たな整形済みソースコードは、パターン適用済みソースファイル１０６として記憶装置１０２に保存することができる。
【００１８】
また、「分析処理」とは、基本設定ファイル１１１に基づいて既存のプログラムソースコード（ソースコードファイル１０４）を分析して、新たに出力処理パターンの情報（出力処理パターンファイル１０５）を生成する処理である。なお、分析処理によって作成された、新たな出力処理パターンの情報は、出力処理パターンファイル１０５として記憶装置１０２に保存することができる。
【００１９】
また、ＣＰＵ１０７は、適用処理中や分析処理中に、必要に応じてモニタ１１０にその内容を表示したり、一時記憶装置１０８に作業用の情報を格納する。
【００２０】
１０９はビデオカード等の表示制御装置１０９であり、モニタ１１０への表示を制御する。１１２はインタフェース（Ｉ／Ｆ）であり、キーボード（ＫＢ）やポインティングデバイス（ＰＤ）等の入力装置１１３からの入力を制御する。
【００２１】
なお、図１に示した記憶装置１０２上に格納されるファイルの構成や、後述するモニタ１１０へ表示される画面の構成は、一例であり、用途や目的に応じて様々な構成例があることは言うまでもない。
【００２２】
なお、図１に示した基本設定ファイル１１１は、後述する図１５に示す言語別の設定と、後述する図１６に示す挿入パターンの設定を含む。また、出力処理パターンファイル１０５は、後述する図１７に示す処理パターンの設定を含む。
【００２３】
以下、図２を参照して、本実施形態を示すプログラムソースコード解析支援装置の主の機能である「適用処理」と「分析処理」の分岐処理について説明する。
【００２４】
図２は、図１に示した実行ファイル１０３に基づいて実現される処理選択処理よる「適用処理」と「分析処理」の分岐処理を示す図である。
【００２５】
図２において、２０１は選択手段であり、ＣＰＵ１０７が記憶装置１０２に格納される実行ファイル１０３を必要に応じて一時記憶装置１０８に読み出して実行することにより実現される機能の１つに対応する。
【００２６】
まず、後述する図１２又は図１４に示すようなウィンドウ１２００（ＣＰＵ１０７が実行ファイル１０３を実行することによりモニタ１１０に表示される）の「ファイル」メニュー１２０１の「ファイルを開く」を選択することにより、ＣＰＵ１０７は、ファイルオープンダイアログ１２１１をモニタ１１０に表示して、入力装置１１３を用いてユーザからの入力を受け付ける。
【００２７】
処理選択手段２０１は、ユーザにより「開く」ボタン１２０９が押下されたことを検知すると、ユーザにより選択されたモードを判定して、処理を分岐する。
【００２８】
即ち、図１２に示すように、モードとして「適用」１２０５が選択されたと判定した場合には、処理選択手段２０１は、適用処理２０２（図３）を実行するように制御する。
【００２９】
一方、図１４に示すように「分析」１４０１が選択されたと判定した場合には、処理選択手段２０１は、分析処理２０３（図４）を実行するように制御する。
【００３０】
図３は、本発明の実施形態の適用処理（図２の２０２）における基本的な処理を示す図である。
【００３１】
図３に示すように、適用処理２０２は、３０１〜３０７に示す各手段により実行される。なお、３０１〜３０７に示す各手段は、ＣＰＵ１０７が記憶装置１０２に格納される実行ファイル１０３を必要に応じて一時記憶装置１０８に読み出して実行することにより実現される機能の１つに対応する。
【００３２】
まず、ソースコード読み込み手段３０１が、後述する図１２の画面でユーザより指示されたソースコードファイル１０４を読み込む。
【００３３】
また、出力処理パターン読み込み手段３０３が、図１２の画面で選択されたパターンをもとに、出力処理パターンファイル１０５から必要なパターン情報を読み込む。なお、ここでいうパターンとは、それぞれの出力処理パターンに付けられたユニークな名称である。
【００３４】
次に、トークン検出手段３０２が、ソースコード読み込み手段３０１で順次読み込まれるソースコードの文字を、トークンと呼ばれる単位の長さ１文字以上のプログラム上意味のある文字列（字句）に分割する。なお、トークンとトークンの間の長さ０文字以上の、スペースコード，タブコード，改行コードをホワイトスペースと呼称する。
【００３５】
次に、トークングループ判定手段３０４が、トークン検出手段３０２で抽出されたトークンを同一として扱われる（解析上同一視される）トークン集合を示すトークングループに分類する。
【００３６】
次に、出力処理パターン判定手段３０５が、トークングループ判定手段３０４で導き出されたトークングループと、直前のトークングループの組み合わせから、ひとつの出力処理パターンを求める。
【００３７】
次に、出力処理パターン別出力処理手段３０６が、出力処理パターン判定手段３０５で得られた出力処理パターンに従い、直前のトークンと今回のトークンの間のホワイトスペースを加工することにより、ソースコードを整形して表示手段３０７に出力する。
【００３８】
次に、表示手段３０７が、出力処理パターン別出力処理手段３０６の整形結果を図１３の１３０１に示すようにモニタ１１０に表示するように制御する。なお、出力処理パターン別出力処理手段３０６は、出力処理パターン別出力処理手段３０６の整形結果をパターン適用済みソースファイル１０６として記憶装置１０２に出力したり、不図示のプリンタに出力する構成であってもよい。
【００３９】
図４は、本発明の実施形態の分析処理（図２の２０３）における基本的な処理を示す図である。
【００４０】
図４に示すように、分析処理２０３は、４０１〜４０８に示す各手段により実行される。なお、４０１〜４０８に示す各手段は、ＣＰＵ１０７が記憶装置１０２に格納される実行ファイル１０３を必要に応じて一時記憶装置１０８に読み出して実行することにより実現される機能の１つに対応する。また、４０１〜４０５は、図３に示した３０１〜３０５と同様の手段である。
【００４１】
まず、ソースコード読み込み手段４０１が、後述する図１４の画面でユーザより指示されたソースファイルを読み込む。
【００４２】
また、出力処理パターン読み込み手段４０３が、図１４の画面で選択されたパターンをもとに、出力処理パターンファイルから必要なパターン情報を読み込む。このパターン情報は元となるもので、分析処理の結果この内容が更新され、別名で保存される。
【００４３】
次に、トークン検出手段４０２が、ソースコード読み込み手段４０１で順次読み込まれるソースコードの文字を、トークンと呼ばれる単位の長さ１文字以上の意味のある文字列に分割する。なお、トークンとトークンの間の長さ０文字以上のスペースコード、タブコード、改行コードをホワイトスペースと呼称する。
【００４４】
次に、トークングループ判定手段４０４が、トークン検出手段４０２で抽出されたトークンを同一として扱われるトークングループに分類する。
【００４５】
次に、出力処理パターン判定手段４０５が、トークングループ判定手段４０４で導き出されたトークングループと、直前のトークングループの組み合わせから、ひとつの出力処理パターンを求め、直前のトークンと今回のトークンとの間のホワイトスペース（現ホワイトスペース）を、出力処理パターンごとに一時記憶装置１０８内に蓄えておく。
【００４６】
次に、出力処理パターン分析手段４０６が、出力処理パターン判定手段４０５で得られた出力処理パターンを分析して有効な出力パターンを決定する。
【００４７】
次に、出力処理パターン保存手段４０８が、出力処理パターン分析手段４０６により決定された有効な出力処理パターンを、出力処理パターンファイルとして記憶装置１０２に保存する。
【００４８】
そして、表示手段４０７が、ソースコード読み込み手段４０１で読み込んだソースコードをそのまま表示する。
【００４９】
以下、図５〜図９のフローチャートを用いて適用処理（図２の２０２，図３）の具体的な処理を示す。
【００５０】
図５は、本発明の実施形態の適用処理（図２の２０２，図３）の具体的な処理を示すフローチャートである。このフローチャートの処理は、図３の３０１〜３０７に示した各手段により実行される。即ち、このフローチャートの処理は、ＣＰＵ１０７が記憶装置１０２に格納される実行ファイル１０３を必要に応じて一時記憶装置１０８に読み出して実行することにより実現される。以下、ＣＰＵ１０７が実行するものとして記載する。
【００５１】
まず、図１２に示すようにファイルオープンダイアログ１２１１のインタフェース１２０２，１２０３，１２０４，１２０７，１２０８においてファイルが選択され、１２０５に示すようにモード選択手段により「適用」が選択されることにより適用モードが選択され、パターン選択１２０６により既に登録されているパターン情報の名称が選択され、開くボタン１２０９が押下されると、ＣＰＵ１０７は、ステップＳ５０１より適用処理を開始する。なお、この際、ＣＰＵ１０７は、一時記憶装置１０８に格納されるインデントカウンタを「０」に初期化しておく。
【００５２】
そして、ステップＳ５０２において、ＣＰＵ１０７は、基本設定を基本設定ファイル１１１から読み込む。この基本設定には、図１５に示すような言語の設定情報や、図１６に示すような挿入文字パターンの設定情報等が含まれている。
【００５３】
言語の設定情報は、ソースコードからトークンを抽出するために、言語ごとに設定された情報に対応する。なお、言語の設定情報は、後述する図１５に示す画面で閲覧及び編集可能である。この言語の設定情報には、抽出したトークンがコメントであるかを判断するためのコメント判断テーブル、抽出したトークンがインデントを加算する加算グループかインデントを減算する減算グループかを判断するためのインデントカウンタテーブル、抽出したトークンが属するグループを判断するためのグループテーブル等が含まれる。
【００５４】
また、挿入文字パターンの設定情報は、抽出したトークン間に挿入する文字のパターンの設定情報に対応する。なお、挿入文字パターンの設定情報は、後述する図１６に示す画面で閲覧および編集可能である。
【００５５】
次に、ステップＳ５０３において、ＣＰＵ１０７は、上記ステップＳ５０２で選択されたパターンの情報を出力処理パターンファイル１０５から読み込む。なお、パターンの情報は、後述する図１７に示す画面で閲覧および編集可能である。このパターンの情報は、Ｓ５０２で読み込んだ、言語の設定情報により抽出されたトークン間にどの挿入文字パターンの設定情報内のどのパターンを挿入するかをトークンの属するグループ間の関係を用いて設定した情報である。
【００５６】
次に、ステップＳ５０４において、ＣＰＵ１０７は、上述のように選択されたソースファイル（例えば、図１３の１３０２に示すようなソースコードを含むソースファイル）をオープンし、読み込みが可能な状態にする。
【００５７】
次に、ステップＳ５０５において、ＣＰＵ１０７は、トークン抽出処理を行って、Ｓ５０４でオープンしたソースファイルからトークンを１件抽出する（１つのトークンとその直前のホワイトスペースを抽出する）。この処理の詳細は図６にて後述する。
【００５８】
次に、ステップＳ５０６では、ＣＰＵ１０７は、Ｓ５０５の抽出処理結果に基づいてトークンの有無を判定し、処理を分岐する。
【００５９】
即ち、ステップＳ５０６で、トークンが有った（抽出できた）と判定した場合には、ＣＰＵ１０７は、ステップＳ５０７に処理を進める。
【００６０】
ステップＳ５０７では、ＣＰＵ１０７は、Ｓ５０５で抽出したトークンのトークングループの判定処理を行い、現トークングループを求める。なお、この処理の詳細は図７にて後述する。
【００６１】
次に、ステップＳ５０８において、ＣＰＵ１０７は、Ｓ５０７で判定したトークングループが、インデントカウンタを加算するものであるかを判定し、処理を分岐する。なお、この判断は、Ｓ５０２で読み込まれた基本設定内の言語の設定のインデントカウンタテーブル（図１５）に基づいて行われる。また、インデントとは、プログラムを人が読み易くするための字下げのことであり、インデントカウンタはその字下げの段数をカウントするものであり、一時記憶領域内に格納されている。
【００６２】
そして、ステップＳ５０８で、Ｓ５０７で判定したトークングループがインデントカウンタを加算するものでないと判定した場合には、ＣＰＵ１０７は、ステップＳ５０９の処理は行わず、ステップＳ５１０に処理を進める。
【００６３】
一方、ステップＳ５０８で、Ｓ５０７で判定したトークングループがインデントカウンタを加算するものであると判定した場合には、ＣＰＵ１０７は、ステップＳ５０９に処理を進める。
【００６４】
ステップＳ５０９では、ＣＰＵ１０７は、インデントカウンタに１を加算し、ステップＳ５１０に処理を進める。
【００６５】
次に、ステップＳ５１０において、ＣＰＵ１０７は、Ｓ５０７で判定したトークングループが、インデントカウンタを減算するものであるかを判定し、処理を分岐する。なお、この判断は、Ｓ５０２で読み込まれた基本設定内の言語の設定のインデントカウンタテーブル（図１５）に基づいて行われる。
【００６６】
そして、ステップＳ５１０で、Ｓ５０７で判定したトークングループがインデントカウンタを加算するものでないと判定した場合には、ＣＰＵ１０７は、ステップＳ５１１の処理は行わず、ステップＳ５１２に処理を進める。
【００６７】
一方、ステップＳ５１０で、Ｓ５０７で判定したトークングループがインデントカウンタを加算するものであると判定した場合には、ＣＰＵ１０７は、ステップＳ５１１に処理を進める。
【００６８】
ステップＳ５１１では、ＣＰＵ１０７は、インデントカウンタから１を減算し、ステップＳ５１２に処理を進める。
【００６９】
ステップＳ５１２では、ＣＰＵ１０７は、前トークングループ（前回のループの際にＳ５０７で求められたトークングループ）と、上記Ｓ５０７で求めた現トークングループから出力処理パターン判定する。この処理の詳細は図８にて後述する。
【００７０】
次に、ステップＳ５１３において、ＣＰＵ１０７は、Ｓ５１２で求めた出力処理パターンとインデントカウンタをもとに、出力処理パターン別の処理を行う。この処理の詳細は図９にて後述する。
【００７１】
そして、Ｓ５１３の処理が終了すると、ＣＰＵ１０７は、ステップＳ５０５に処理を戻し、次のトークンを抽出するように制御する。
【００７２】
そして、ステップＳ５０６で、もう抽出するトークンが無くなったと判定した場合には、ＣＰＵ１０７は、ステップＳ５１４に処理を進め、本フローチャートの適用処理を終了させるために、Ｓ５０４でオープンしていたソースファイルをクローズする。
【００７３】
そして、ステップＳ５１５において、ＣＰＵ１０７は、本フローチャートの適用処理を終了する。このときは、図１３の１３０１に示すように、モニタ１１０には、パターンが適用された結果のソースコードが表示されている。
【００７４】
以下、図６を参照して、図５のＳ５０５に示したトークン抽出処理について説明する。
【００７５】
図６は、本発明の実施形態のトークン抽出処理（図５の５０５）を示すフローチャートである。このフローチャートの処理は、図３のトークン検出手段３０２等により実行される。即ち、このフローチャートの処理は、ＣＰＵ１０７が記憶装置１０２に格納される実行ファイル１０３を必要に応じて一時記憶装置１０８に読み出して実行することにより実現される。以下、ＣＰＵ１０７が実行するものとして記載する。
【００７６】
なお、ここでは図５のＳ５０４で既にオープンしているソースファイルから、トークンとその直前のホワイトスペースを抽出する処理の一例を示す。対応する言語等により処理を追加することも可能である。
【００７７】
まず、ステップＳ６０１で処理を開始すると、ステップＳ６０２において、ＣＰＵ１０７は、一時記憶装置１０８内に保持する判断テーブルを「区切り子判断テーブル」に設定する。なお、区切り子とは、プログラムコード中に現れる、その前後でトークンを分割する記号である。ただしコメント中や、文字列中に出現した場合は、区切り子とは判定しない。例えば、Ｃ言語の場合、セミコロン（；）や、カンマ（，）、中括弧（｛｝）等が相当する。この区切り子は、基本設定ファイル１１１内に含まれる後述する図１５に示すような「言語の設定情報」から一時記憶装置１０８内に複製が可能であり、後述する図１５に示す画面から内容が変更されない限り、一時記憶装置１０８に保持しておくことも可能である。もしくは、実際のトークン抽出の際に、直接、基本設定ファイル１１１内に含まれる「言語の設定情報」のデータを参照することもできる。
【００７８】
次に、Ｓ６１４において、ＣＰＵ１０７は、ソースファイルの「読み出しポインタ」からホワイトスペース以外の文字が現れる直前までを読み出し、その内容を一時記憶装置１０８内に「現ホワイトスペース」としてセットする（現ホワイトスペースの切り出し）。
【００７９】
次に、ステップＳ６０３において、ＣＰＵ１０７は、ソースファイルの「読み出しポインタ」を一時記憶装置１０８に保存する。
【００８０】
次に、ステップＳ６０４において、ＣＰＵ１０７は、一時記憶装置１０８に記憶される内部変数ＣＯＰＹＣＯＵＮＴを「０」に初期化する。
【００８１】
次に、ステップＳ６０５において、ＣＰＵ１０７は、Ｓ６０２で設定した区切り子判断テーブルの情報（区切り子）とソースファイル内のコードとを比較する。
【００８２】
そして、ステップＳ６０６において、ＣＰＵ１０７は、ソースファイルからホワイトスペース又は区切り子によって区切られるまでの文字列をトークンとして抽出するように、その文字の数をＣＯＰＹＣＯＵＮＴに格納する。
【００８３】
例えば、Ｃ言語の場合、「Ａ，Ｂ，Ｃ；」のような文字列からは、「Ａ」のつぎに区切り子「，」が現れるため、「Ａ」をトークンとして抽出するように、その文字の数「１」をＣＯＰＹＣＯＵＮＴに格納する。また「ｉｆｉｆ（スペース）」のような文字列は、キーワードとしての「ｉｆ」が存在するが、この抽出では「（スペース）」で区切られたと判断され、「ｉｆｉｆ」をトークンとして抽出するように、その文字の数「４」をＣＯＰＹＣＯＵＮＴに格納する。
【００８４】
次に、ステップＳ６０７，６０８，６０９，６１０，６１１では、ＣＰＵ１０７は特殊なトークン抽出を行う。
【００８５】
詳細には、ステップＳ６０７において、ＣＰＵ１０７は、Ｓ６０６で抽出したトークンに、行コメントの始まり（例えば、Ｃ言語では「//」）を発見した場合には、次の改行コードまで、他のホワイトスペースや区切り子を発見しても無視して、上記行コメントの始まり「//」から改行コードの直前までを１つトークンとして扱うように抽出するように、その文字の数をＣＯＰＹＣＯＵＮＴに格納する。
【００８６】
また、ステップＳ６０８において、ＣＰＵ１０７は、Ｓ６０６で抽出したトークンに、ブロックコメントの始まり（例えば、Ｃ言語では「/*」）を発見した場合には、ブロックコメントの終わり（例えば、Ｃ言語では「*/」）を発見するまで、ホワイトスペースや区切り子を発見しても無視して、上記ブロックコメントの始まり「/*」からブロックコメントの終わり「*/」までを１つトークンとして扱うように抽出するように、その文字の数をＣＯＰＹＣＯＵＮＴに格納する。
【００８７】
また、ステップＳ６０９において、ＣＰＵ１０７は、Ｓ６０６で抽出したトークンに、文字（例えば、Ｃ言語では「'」と「'」で囲まれた文字（ただし「\'」は除く））を発見した場合には、「'」から「'」までを１つトークンとして扱うように抽出するように、その文字の数をＣＯＰＹＣＯＵＮＴに格納する。
【００８８】
また、ステップＳ６１０において、ＣＰＵ１０７は、Ｓ６０６で抽出したトークンに、文字列の始まり（例えば、Ｃ言語では「"」（ただし「\"」は除く））を発見した場合には、文字列の終わり（Ｃ言語では「"」（ただし「\"」は除く））を発見するまで、ホワイトスペースや区切り子を発見しても無視して、「"」から「"」までを１つトークンとして扱うように抽出するように、その文字の数をＣＯＰＹＣＯＵＮＴに格納する。
【００８９】
また、ステップＳ６１１において、ＣＰＵ１０７は、Ｓ６０６で抽出したトークンに定数を発見した場合には、１０進定数、８進定数（先頭に「０」をつけて表記）、１６進数定数（先頭に「０Ｘ」又は「０ｘ」をつけて表記）等に応じて抽出するように、その文字の数をＣＯＰＹＣＯＵＮＴに格納する。即ち、８進定数の場合は先頭の「０」を含めて１つトークンとして扱うように抽出するように、その文字の数をＣＯＰＹＣＯＵＮＴに格納する。また、１６進定数の場合は先頭の「０Ｘ」を含めて１つトークンとして扱うように抽出するように、その文字の数をＣＯＰＹＣＯＵＮＴに格納する。
【００９０】
次に、ステップＳ６１２において、ＣＰＵ１０７は、ソースファイル内のデータを、Ｓ６０３で一時記憶装置１０８に保存したソースファイルの「読み出しポインタ」からＣＯＰＹＣＯＵＮＴ分だけ抽出し（読み出し）、一時記憶装置１０８内の「トークン切り出しバッファ」に格納（コピー）する。そして、これを「現トークン」とする。なお、ファイルの末尾となり、トークンが抽出できなかった場合は、「トークン無し」を示す値をセットする。
【００９１】
次に、ステップＳ６１３において、ＣＰＵ１０７は、Ｓ６０３で一時記憶装置１０８内に保存された「ファイルの読み出しポインタ」をＣＯＰＹＣＯＵＮＴ分進め、ファイルの読み出しポインタに上書きする。
【００９２】
そして、ＣＰＵ１０７は、ステップＳ６１５で、このルーチンでの処理（本トークン抽出処理）を終了し、呼び出し元へ処理を返す。
【００９３】
以下、図７を参照して、図５のＳ５０５に示したトークングループ判定処理について説明する。
【００９４】
図７は、本発明の実施形態のトークングループ判定処理（図５の５０７）を示すフローチャートである。このフローチャートの処理は、図３のトークングループ判定手段３０４等により実行される。即ち、このフローチャートの処理は、ＣＰＵ１０７が記憶装置１０２に格納される実行ファイル１０３を必要に応じて一時記憶装置１０８に読み出して実行することにより実現される。以下、ＣＰＵ１０７が実行するものとして記載する。
【００９５】
なお、以降の処理では、前後グループの関係で出力処理パターンを判定させるため、前グループＩＤと現グループＩＤを用いる。
【００９６】
まず、ステップＳ７０１で処理を開始すると、ステップＳ７０２において、ＣＰＵ１０７は、一時記憶装置１０８内に保持される前グループＩＤに現グループＩＤ（前回の「トークングループ判定処理」で判定されたグループＩＤ）を格納する。「トークングループ判定処理」の実行が初回であった場合は、グループＩＤの判定をしていないため、現グループＩＤは保存されていないため、該グループＩＤ無しを示す情報を格納するものとする。
【００９７】
次に、ステップ７０３において、ＣＰＵ１０７は、グループ自体が登録されているかどうかを判定する。ここでいうグループとは、後述する図１５の言語の設定（言語別の設定ダイアログボックス１５１４）内のグループテーブルで管理されるデータであり、上記にあるグループＩＤは、図１５のＩＤ１５２１を示す。また、上記グループテーブルの情報は、図５のＳ５０２で読み込まれ、一時記憶装置１０８内に格納されている。
【００９８】
そして、ステップＳ７０３で、グループ自体が登録されていないと判定した場合には、ＣＰＵ１０７は、ステップＳ７０７へ処理を進める。
【００９９】
一方、ステップ７０３で、グループ自体が登録されていると判定した場合には、ＣＰＵ１０７は、ステップＳ７０４へ処理を進める。
【０１００】
ステップＳ７０４では、ＣＰＵ１０７は、一時記憶装置１０８内に記憶されるループ用の変数ｉを「０」で初期化し、グループテーブルに登録されているグループ数分、ステップＳ７０５〜Ｓ７０９の処理を繰り返すように制御する。
【０１０１】
詳細には、ステップ７０５では、ＣＰＵ１０７は、まだグループ数分の処理を終えていない（ｉ＜グループ数）か判定する。
【０１０２】
そして、ステップＳ７０５で、まだグループ数分処理を終えていないと判定した場合には、ＣＰＵ１０７は、ステップＳ７０６に処理を進める。
【０１０３】
ステップ７０６では、ＣＰＵ１０７は、現トークンがグループに含まれているかグループテーブルに基づいて判定する。
【０１０４】
そして、ステップ７０８において、ＣＰＵ１０７が、上記のステップ７０６で現トークンがグループに含まれていないと判定した場合には、ステップ７０９に処理を進める。
【０１０５】
ステップ７０９では、ＣＰＵ１０７は、ループ用の変数ｉをインクリメントし、次グループを確認するために、ステップ７０５へ処理を戻す。
【０１０６】
一方、ステップ７０８において、ＣＰＵ１０７が、上記のステップ７０６で現トークンがグループに含まれていると判定した場合には、ステップ７１０に処理を進める。
【０１０７】
次に、ステップＳ７１０では、ＣＰＵ１０７は、現グループＩＤとして、発見されたグループのＩＤを一時記憶装置１０８内にセットし、ステップ７１１において、呼び出し元に処理を戻す。
【０１０８】
なお、ステップ７０５において、ＣＰＵ１０７が、既にグループ数分の処理を終えている（ｉ≧グループ数）と判定した場合には、ステップＳ７０７に処理を進め、グループ判定ができなかったものとして、グループＩＤを無しを示す情報を一時記憶装置１０８内にセットし、ステップ７１１において、呼び出し元に処理を戻す。
【０１０９】
以下、図８を参照して、図５のＳ５１２に示した出力処理パターン判定処理について説明する。
【０１１０】
図８は、本発明の実施形態の出力処理パターン判定処理（図５の５１２）を示すフローチャートである。このフローチャートの処理は、図３の出力処理パターン判定手段３０５等により実行される。即ち、このフローチャートの処理は、ＣＰＵ１０７が記憶装置１０２に格納される実行ファイル１０３を必要に応じて一時記憶装置１０８に読み出して実行することにより実現される。以下、ＣＰＵ１０７が実行するものとして記載する。
【０１１１】
ここでは、上記の図７で判定した「現グループＩＤ」と一時記憶装置１０８に保管しておいた「前グループＩＤ」を用いて後述する図１７で閲覧および編集可能な処理パターン表から該当する処理パターンを求める。なお、処理パターン表は、図１２に示す画面で選択されるパターン（プルダウンメニュー１２１０上のパターン）ごとに存在する。ここで使用するのは、適用処理を開始する際に図５のＳ５０２でユーザが選択し、図５のＳ５０３で出力処理パターンファイル１０５から読み込んだ処理パターン表を用いる。
【０１１２】
まず、ステップＳ８０１で処理を開始すると、ステップＳ８０２において、ＣＰＵ１０７は、一時記憶装置１０８内に前グループＩＤが保存されているか否かを判定し、前グループＩＤが保存されていると判定した場合には、ステップ８０３へ処理を遷移させる。
【０１１３】
ステップＳ８０３では、ＣＰＵ１０７は、一時記憶装置１０８内に現グループＩＤが保存されているか否かを判定し、現グループＩＤが保存されていると判定した場合には、ステップ８０４へ処理を遷移させる。
【０１１４】
次に、ステップ８０４では、ＣＰＵ１０７は、上記の前グループＩＤと現グループＩＤとをキーにして出力処理パターン表を検索し、対応する出力処理パターンＩＤを一時記憶装置１０８内にセットする。
【０１１５】
する。この時、前グループＩＤと現グループＩＤとに対応する出力処理パターンＩＤが上記の出力処理パターン表に無い場合には、出力処理パターン無しを示す情報をセットする。
【０１１６】
一方、ステップＳ８０２で一時記憶装置１０８内に前グループＩＤが保存されていない、又は、ステップＳ８０３で一時記憶装置１０８内に現グループＩＤが保存されていないと判定した場合には、ＣＰＵ１０７は、ステップ８０５へ処理を遷移させる。
【０１１７】
ステップ８０５では、ＣＰＵ１０７は、出力処理パターン無しを示す情報を一時記憶装置１０８内にセットする。
【０１１８】
そしてステップＳ８０６において、ＣＰＵ１０７は、呼び出し元に処理を戻す。
【０１１９】
以下、図９を参照して、図５のＳ５１３に示した出力処理パターン別処理について説明する。
【０１２０】
図９は、本発明の実施形態の出力処理パターン別処理（図５の５１３）を示すフローチャートである。このフローチャートの処理は、図３の出力処理パターン別出力処理手段３０６等により実行される。即ち、このフローチャートの処理は、ＣＰＵ１０７が記憶装置１０２に格納される実行ファイル１０３を必要に応じて一時記憶装置１０８に読み出して実行することにより実現される。以下、ＣＰＵ１０７が実行するものとして記載する。
【０１２１】
ここでは、上記の図８の出力処理パターン判定処理で判定した出力処理パターンＩＤに対応する出力処理パターンに従って、図６のトークン抽出処理で抽出された現ホワイトスペース（前トークンと現トークンとの間のホワイトスペース）を加工処理して出力し、若しくは、何も処理せずに出力し、現トークンも続けて出力する処理を行う。この処理により、トークン間のホワイトスペースの変更がなされ、指定した出力処理パターン（コーディングスタイル）に従ってソースコードを整形することができる。なお、ここでいう出力処理パターンＩＤ及び出力処理パターンとは、後述する図１６のＩＤ及び挿入文字パターンの設定ダイアログボックス１６０２内の挿入文字パターンであり、図５のＳ５０２で読み込まれ、一時記憶装置１０８内に格納されている。
【０１２２】
まず、ステップＳ９０１で処理を開始すると、ステップＳ９０２において、ＣＰＵ１０７は、図５のＳ５１２（図８）の出力処理パターン判定処理で出力処理パターンＩＤがセットされたかどうかを判定する。
【０１２３】
そして、ステップＳ９０２において、出力処理パターンＩＤがセットされていないと判定した場合には、ＣＰＵ１０７は、ステップ９０４へ処理を進める。
【０１２４】
ステップＳ９０４では、ＣＰＵ１０７は、図６のステップＳ６１４でセットした現ホワイトスペースをそのまま、図１３の１３０１に示す画面に出力し、ステップ９０５へ処理を遷移させる。
【０１２５】
一方、ステップＳ９０２において、出力処理パターンＩＤがセットされていると判定した場合には、ＣＰＵ１０７は、ステップ９０３へ処理を進める。
【０１２６】
ステップＳ９０３では、ＣＰＵ１０７は、図５のＳ５０２で読み込まれて一時記憶装置１０８内に格納されている挿入文字パターンの設定に基づいて、上記セットされている出力処理パターンＩＤから挿入文字パターンを求め、ホワイトスペースに変換し、図１３の１３０１に示す画面に出力し、ステップ９０５へ処理を遷移させる。
【０１２７】
例えば、セットされている出力処理パターンＩＤが「Ｐ１」であった場合は、図１６に示すように、挿入文字パターンは「Ｓ」となり、実際に出力されるホワイトスペースは「半角スペース１文字」である。このパターンはインデントにも対応しており、インデント数でタブコードを挿入することもできる。また、これは一例であり、記号を追加することにより処理パターンを追加することが可能である。
【０１２８】
次に、ステップＳ９０５において、ＣＰＵ１０７は、一時記憶装置１０８に記憶されている現トークンを図１３の１３０１に示すようにウィンドウ１２００に出力し、ステップ９０６において、処理を呼び出し元に返す。
【０１２９】
以上、図５〜図９に示した適用処理により、任意のコーディングスタイルのソースコードを、個別に定義したコーディングスタイルに自動的に変換して表示閲覧することができる。特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを苦労して解読する必要が無くなる。この結果、コードレビュー工数を軽減できる。また、個別に定義したコーディングスタイルで表示することで、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【０１３０】
以下、図１０のフローチャートを用いて分析処理（図２の２０３，図４）の具体的な処理を示す。
【０１３１】
図１０は、本発明の実施形態の分析処理（図２の２０３，図４）の具体的な処理を示すフローチャートである。このフローチャートの処理は、図４の４０１〜４０８に示した各手段により実行される。即ち、このフローチャートの処理は、ＣＰＵ１０７が記憶装置１０２に格納される実行ファイル１０３を必要に応じて一時記憶装置１０８に読み出して実行することにより実現される。以下、ＣＰＵ１０７が実行するものとして記載する。
【０１３２】
なお、図１０に示すＳ１００２，Ｓ１００２〜Ｓ１０１０，Ｓ１０１４は、図５に示したＳ５０２，Ｓ５０４〜Ｓ５１１，Ｓ５１４と同様のステップであるので、説明は省略する。
【０１３３】
まず、図１４に示すようにファイルオープンダイアログ１２１１のインタフェース１２０２，１２０３，１２０４，１２０７，１２０８においてファイルが選択され、１４０１に示すようにモード選択手段により「分析」が選択されることにより分析モードが選択され、パターン選択１２０６により既に登録されているパターン情報の名称が選択され（ここで選択されるパターンは基準となるものであり、分析対象とするソースコードに現れない前後トークングループの組み合わせの処理パターンは、該選択した処理パターンで補完される。）、開くボタン１２０９が押下されると、ＣＰＵ１０７は、新たな分析実行ウィンドウ１４０３を表示する。
【０１３４】
そして、新たな分析実行ウィンドウ１４０３で、保存するパターン名１４０４に分析後の結果パターンデータを格納するためのファイル名がセットされ、トークン抽出時に利用する言語情報が言語選択１４０５で選択され、分析方法１４０６が選択され、実行ボタン１４０８が押下されると、ＣＰＵ１０７は、ステップＳ１００１より分析処理を開始する。なお、この際、ＣＰＵ１０７は、一時記憶装置１０８に格納されるインデントカウンタを「０」に初期化しておく。
【０１３５】
なお、ここでは分析方法１４０６として４種類の方法を図示している。即ち、(1)先頭の挿入文字パターンを採用、(2)全体で頻度の多い挿入文字パターンを採用、(3)前半で頻度の多い挿入文字パターンを採用、(4)前半優先で頻度の多い挿入文字パターンを採用の４種類の方法を図示している。しかし、実行ファイル１０３にプログラムを追加することにより挿入文字パターンを採用するための条件を追加することも可能である。
【０１３６】
ＣＰＵ１０７は、ステップＳ１０１０の処理が終了すると、ステップＳ１０１１に処理を進める。
【０１３７】
ステップＳ１０１１では、ＣＰＵ１０７は、前トークングループ（前回のループの際にＳ１００６で求められたトークングループ）と、上記Ｓ１００６で求めた現トークングループから一時格納先を求める。この一時格納先は、ソースコード上に現れるホワイトスペースのパターンを一時的に格納することを目的として一時記憶装置１０８上に、図１１の１１０１に示すように、前トークングループと現トークングループとの組み合わせ毎に設けられている記憶領域に対応する。なお、このＳ１０１１の処理に関しては、詳細を図１１にて後述する。
【０１３８】
次に、ステップ１０１２において、ＣＰＵ１０７は、Ｓ１００４（図６）のトークン抽出処理で抽出された現ホワイトスペース（前トークンと現トークンとの間のホワイトスペース）から挿入文字パターンを求め、Ｓ１０１１で求めた一時格納先に図１１の１１０３に示すように時系列で格納する（順次保持する）。なお、このＳ１０１２の処理に関しては、詳細を図１１にて後述する。
【０１３９】
そして、Ｓ１０１２の処理が終了すると、ＣＰＵ１０７は、ステップＳ１００４に処理を戻し、次のトークンを抽出するように制御する。
【０１４０】
そして、ステップＳ１１０５で、もう抽出するトークンが無くなったと判定した場合には、ＣＰＵ１０７は、ステップＳ１０１３に処理を進める。
【０１４１】
ステップＳ１０１３では、ＣＰＵ１０７は、上記Ｓ１０１２で各一時格納先に時系列で蓄えられた内容から、図１４の１４０６のように選択した分析方法により、前記一時格納先毎（即ち、前トークングループと現トークングループとの組み合わせ毎）に、優先順位の高い挿入文字パターンを選出し、図１１の１１０２に示すように、一時記憶装置１０８内に設けられた設定格納先（前トークングループと現トークングループとの組み合わせ毎に設けられている）に保存する。なお、このＳ１０１３の処理に関しては、詳細を図１１にて後述する。さらに、ＣＰＵ１０７は、Ｓ１０１３で挿入文字パターンがセットされた設定格納先の内容を、図１４の１４０４で指定されたパターン名で、出力処理パターンファイル１０５内保存する。
【０１４２】
次に、ステップＳ１０１４では、ＣＰＵ１０７は、Ｓ１００３でオープンしたソースファイルをクローズする。
【０１４３】
最後に、ＣＰＵ１０７は、ステップＳ１０１５において、モニタ１１０に、Ｓ１００２で読み込んだソースファイルのソースコードをそのまま表示するように制御し、処理を終了する。
【０１４４】
図１１は、本発明の実施形態の分析における挿入文字列パターン採用時の判定（図１０のＳ１０１１〜Ｓ１０１３）を説明する図である。
【０１４５】
図１１の１０１１に示すように、一時格納先は、ソースコード上に現れるホワイトスペースのパターンを一時的に格納することを目的として一時記憶装置１０８上に、前トークングループと現トークングループとの組み合わせ毎に設けられている。図中、縦軸は前トークングループを示し、横軸は後トークングループを示す。
【０１４６】
例えば、前トークンがＧ１グループで後トークンがＧ１グループである場合、１１０１の斜線部分が、この組み合わせの一時格納先に対応する。
【０１４７】
また、一時格納先には、１１０３に示すように、トークン抽出処理で抽出された現ホワイトスペース（前トークンと現トークンとの間のホワイトスペース）から求めた挿入文字パターンを時系列で格納可能である。
【０１４８】
１１０２に示すように、設定格納先は、一時記憶装置１０８上に、前トークングループと現トークングループとの組み合わせ毎に設けられている。この設定格納先には、全てのトークンを処理後に、前トークングループと現トークングループとの組み合わせ毎に（即ち一時格納先毎に）、一時格納先に時系列で格納された挿入文字パターンから、指定された(1)〜(4)のいずれかの分析方法で決定された１の挿入文字パターンがそれぞれ格納される。
【０１４９】
即ち、まず、１１０１の斜線部分の一時格納先に、前トークンがＧ１グループで後トークンがＧ１グループとなるトークンの間から取得された挿入パターンが、１１０３に示すように時系列に格納される。そして、全てのトークンを処理後に、この時系列に格納された挿入パターンから、指定された分析方法で決定された１つの挿入パターンが、１１０２の斜線部分の設定格納先に格納されることになる。
【０１５０】
なお、前後のグループの組み合わせ毎に、以下のように挿入パターンを決定（選出）する。
【０１５１】
例えば、分析方法が「(1)先頭の挿入文字パターンを採用」である場合、１１０３のように時系列で一時格納先に格納されている挿入文字パターンの最初に一時格納先に格納されたものを選出する。
【０１５２】
また、分析方法が「(2)全体で、頻度の多い挿入文字パターンを採用」である場合、１１０３のように時系列で一時格納先に格納されている挿入文字パターンのうち数が最も多いもの（保持頻度が高いもの）を選出する。もし同数の挿入文字パターンが存在した場合は、そのうちの最初に一時格納先に格納されたものを選出する。
【０１５３】
さらに、分析方法が「(3)前半で、頻度の多い挿入文字パターンを採用」である場合、１１０３のように時系列で一時格納先に格納されている挿入文字パターンのうち前半のデータを用いて「(2)全体で、頻度の多い挿入文字パターンを採用」と同じ判定を行って選出する。もし一時格納先に格納された挿入文字パターンの全体数が奇数である場合は、前半部の数が多いように分割する。例えば、全体が７件であった場合は、前半部４件を対象データとする。
【０１５４】
また、分析方法が「(4)前半優先で、頻度の多い挿入文字パターンを採用」である場合、１１０３のように時系列で一時格納先に格納されている挿入文字パターンのうち前半部に係数を掛け、後半部との重みを変えた上で保持頻度を算出し、一番重みのある（算出結果が最も大きい）挿入文字パターンを選出する。
【０１５５】
以上、図１０，図１１に示したように、ソースコードの分析処理を行うことにより、該分析対象となったソースコードのコーディングスタイルに対応する出力処理パターンを作成することができる。
【０１５６】
このように作成した出力処理パターンを用いて、上述した適用処理を行うことにより、任意のコーディングスタイルのソースコードを、上記分析対象となったソースコードのコーディングスタイルに変更して出力することができる。
【０１５７】
これにより、特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを自分のコーディングスタイルに変更できる。この結果、コードレビュー工数を軽減できる。また、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【０１５８】
以下、図１２，図１３を参照して、本発明の実施形態の適用処理時の画面について説明する。
【０１５９】
図１２は、本発明の実施形態の適用処理開始時の画面の一例を示す図である。
【０１６０】
図１２に示すように、ウィンドウ１２００の「ファイル」メニュー１２０１の「ファイルを開く」を選択することにより、ファイルオープンダイアログ１２１１がモニタ１１０に表示される。
【０１６１】
ファイルオープンダイアログ１２１１では、インタフェース１２０２，１２０３，１２０４，１２０７，１２０８を用いて対象となるファイルを選択することができる。また、１２０５に示すようにモード選択手段により「適用」が選択されることにより適用モードが選択される。
【０１６２】
パターン選択１２０６より、プルダウンメニュー１２１０を用いて既に登録されているパターン情報の名称を選択することができる。なお、プルダウンメニュー１２１０には、予め登録されているものや、後から追加した処理パターンが表示される。この内容は、図１に示した出力処理パターンファイル１０５に格納されており、後述する図１７に示す画面で確認および編集することができる。
【０１６３】
開くボタン１２０９を押下することにより、上述した適用処理が開始される。
【０１６４】
図１３は、本発明の実施形態の適用処理の表示結果の一例（図３の表示手段３０７）を示す図である。
【０１６５】
図１３に示すように、適用処理の結果、オリジナルソースコード１３０２における表記方法が、適用処理の結果により意図されたコーディングスタイル１３０１に統一される。
【０１６６】
以下、図１２，図１３を参照して、本発明の実施形態の分析処理時の画面について説明する。
【０１６７】
図１４は、本発明の実施形態の分析処理開始時の画面の一例を示す図である。なお、図１２と同一のものには同一の符号を付してある。
【０１６８】
図１４に示すように、１４０１に示すようにモード選択手段により「分析」が選択されることにより分析モードが選択される。
【０１６９】
開くボタン１２０９を押下することにより、新たな分析実行ウィンドウ１４０３が表示される。
【０１７０】
この分析実行ウィンドウ１４０３では、保存するパターン名１４０４に分析後の結果パターンデータを格納するためのファイル名を設定できる。また、言語選択１４０５でトークン抽出時に利用する言語情報を設定できる。
【０１７１】
さらに、分析方法１４０６で(1)先頭の挿入文字パターンを採用、(2)全体で頻度の多い挿入文字パターンを採用、(3)前半で頻度の多い挿入文字パターンを採用、(4)前半優先で頻度の多い挿入文字パターンを採用のいずれかの分析方法を選択できる。そして、実行ボタン１４０８を押下すると、上述した分析処理が開始される。
【０１７２】
以下、図１５〜図１７を参照して、図１に示した基本設定ファイル１１１、出力処理パターンファイル１０５について説明する。
【０１７３】
図１５は、図１に示した基本設定ファイル１１１の言語別の設定を行う設定画面の一例を示す図である。
【０１７４】
図１５に示すように、ウィンドウ１２００（ＣＰＵ１０７が実行ファイル１０３を実行することによりモニタ１１０に表示される）の「設定」メニュー１５０１の「言語の設定…」１５０２を選択することにより、言語の設定ダイアログボックス１５０３を開く。
【０１７５】
なお、言語は複数登録されており、独自に追加することも可能である。追加するときには、追加ボタン１５０６を押下することにより、ＣＰＵ１０７が、追加のためのダイアログボックス１５１０を表示する。このダイアログボックス１５１０のテキストボックス１５１１に新しい言語名を入力し、保存ボタン１５１２を押下すると、ＣＰＵ１０７が、言語別の設定ダイアログボックス１５１４を表示する。なお、中止ボタン１５１３を押下すると、ＣＰＵ１０７は、言語別の設定を中止して元の言語の設定ダイアログボックス１５０３に戻す。
【０１７６】
言語の設定ダイアログボックス１５０３において、言語を選択し、ダブルクリックをするか、編集ボタン１５０７を押下することにより、ＣＰＵ１０７は、言語別の設定ダイアログボックス１５１４を表示する。
【０１７７】
言語別の設定ダイアログボックス１５１４には、言語ごとのキーワードが種類別に登録される。
【０１７８】
コメント判断テーブルに関しては、１５１５〜１５１７に示すように、コメントの開始、終了、１行コメントの開始キーワードの登録を行う。
【０１７９】
インデントカウンタテーブルでは、１５１８〜１５２０に示すように、インデントの加算グループのキーワード、減算グループのキーワードの登録を行う。
【０１８０】
グループテーブルでは、１５２１〜１５２３に示すように、パターンをキーワード単位で行わないために、同じ扱いにできるキーワードをまとめてグループ化した登録ができる。
【０１８１】
なお、上記キーワードは、トークンとして抽出可能な単位で行い、キーワードの記入エリア１５１７，１５２０，１５２３等に記述する。キーワードが複数ある場合は、カンマ区切りで記述する。なお、カンマ「,」と「\」記号については、「\」文字でエスケープするように記述する。また、正規表現による記述も可能である。
【０１８２】
以上のように、言語別の設定ダイアログボックス１５１４で編集した内容を保存する場合は、保存ボタン１５２４を、破棄する場合には中止ボタン１５２５を押下する。なお、保存または破棄した後に、ＣＰＵ１０７は、言語の設定ダイアログボックス１５０３に処理を戻す。
【０１８３】
そして、言語の設定ダイアログボックス１５０３にて保存ボタン１５０８が押下されると、ＣＰＵ１０７は、上記の設定内容（追加のためのダイアログボックス１５１０での追加内容、言語別の設定ダイアログボックス１５１４での編集内容）を、基本設定ファイル１１１内に格納し、ダイアログボックス１５１４を閉じる。
【０１８４】
また、言語の設定ダイアログボックス１５０３にて保存ボタン１５０８が押下されると、ＣＰＵ１０７は、上記の設定内容（追加のためのダイアログボックス１５１０での追加内容、言語別の設定ダイアログボックス１５１４での編集内容）を破棄し、ダイアログボックス１５１４を閉じる。
【０１８５】
図１６は、図１に示した基本設定ファイル１１１の挿入文字パターンの設定を行う設定画面の一例を示す図である。
【０１８６】
図１６に示すように、ウィンドウ１２００の「設定」メニュー１５０１の「挿入文字パターンの設定」１６０１を選択することにより、ＣＰＵ１０７は、挿入文字パターンの設定ダイアログボックス１６０２を開く。
【０１８７】
処理パターンは、ＩＤ１６０３、挿入文字パターン１６０４から構成される。ＩＤ１６０３は、Ｐ１から自動で振られる。挿入文字パターン１６０４は、凡例１６０７に示すように、幾つかの予め定義された書き方で記述することができる。
【０１８８】
挿入文字パターンは、自由に付加することができる。また、その書き方の例は、例１６０８に記述されている。
【０１８９】
保存ボタン１６０５を押下すると、ＣＰＵ１０７は、変更された内容を基本設定ファイル１１１内に保存して、ダイアログ１６０２を閉じる。中止ボタン１５１３を押下すると、ＣＰＵ１０７は、変更された内容を破棄して、ダイアログ１６０２を閉じる。
【０１９０】
以下、図１７を参照して、図１に示した出力処理パターンファイル１０５について説明する。
【０１９１】
図１７は、図１に示した出力処理パターンファイル１０５の設定画面の一例を示す図である。なお、出力処理パターンファイル１０５は、図１５の画面で設定されたグループと図１５の画面で設定された挿入パターンとの相関を示す処理パターンを含むものである。
【０１９２】
図１７に示すように、ウィンドウ１２００の「設定」メニュー１５０１の「処理パターンの設定・・・」１７０１を選択することにより、ＣＰＵ１０７は、処理パターンの設定ダイアログボックス１７０８を開く。
【０１９３】
処理パターンの判断は、前後グループの関係でなされるため、マトリックスで設定をする。
【０１９４】
前グループ１７０２は、上記図１５において、キーワードをグループ設定した際に作成されているグループとなる。後グループ１７０３も同様である。
【０１９５】
例えば、前トークンのグループが「Ｇ２」と判定されており、後トークンのグループが「Ｇ３」と判定された場合には、１７０５のセルに登録されている処理パターンが選ばれる。処理パターンの設定は、セルをクリックすることにより、ＣＰＵ１０７により、処理パターン（上記図１６で設定された挿入パターン）と空欄のうち1つを選択できるようなプルダウンメニュー１７０４が表示される。
【０１９６】
保存ボタン１７０６を押下すると、ＣＰＵ１０７は、変更された内容を出力処理パターンファイル１０５内に保存して、設定ダイアログボックス１７０８を閉じる。中止ボタン１７０７を押下すると、ＣＰＵ１０７は、変更された内容を破棄して、設定ダイアログボックス１７０８を閉じる。
【０１９７】
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な構成や内容で構成されることは言うまでもない。
【０１９８】
以上、一実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【０１９９】
なお、本実施形態では、図１７の処理パターンの設定に示すように、出力処理パターンを、ホワイトスペースの前後に配置されるトークンの属するトークングループの組み合わせ毎に設定した。しかし、出力処理パターンを、ホワイトスペースの前後に配置されるトークンの組み合わせから特定可能に設定するものであればどのような設定方法を用いてもよい。例えば、出力処理パターンを、ホワイトスペースの前後に配置されるトークンの組み合わせ毎に設定してもよい。
【０２００】
以上説明したように、本発明によれば、プログラムソースコードを、既に定義されている若しくは個別に定義したコーディングスタイル（所望のコーディングスタイル）に自動的に（人的作業無しに）変換して出力することができる。特に、他人が作成したソースコードを参照する際に、コーディングスタイルの違うソースコードを解読する必要が無くなり、コードレビュー工数を軽減できる。また、個別に定義したコーディングスタイルで表示することで、ソースコード修正の際のミスを防ぎ、品質の向上等に効果を奏する。
【０２０１】
なお、本発明は、単にホワイトスペースの置換処理を行うものではなく、ホワイトスペースの前後に配置されるトークンの組み合わせによりパターン判定し、個別変換処理を行うものであり、ソースファイル内に記述されているプログラムコードと、コメントとして扱われる字句を区別して処理することができる。
【０２０２】
以下、図１８に示すメモリマップを参照して本発明に係るプログラムソースコード解析支援装置で読み取り可能なデータ処理プログラムの構成について説明する。
【０２０３】
図１８は、本発明に係るプログラムソースコード解析支援装置で読み取り可能な各種データ処理プログラムを格納する記録媒体（記憶媒体）のメモリマップを説明する図である。
【０２０４】
なお、特に図示しないが、記録媒体に記憶されるプログラム群を管理する情報、例えばバージョン情報，作成者等も記憶され、かつ、プログラム読み出し側のＯＳ等に依存する情報、例えばプログラムを識別表示するアイコン等も記憶される場合もある。
【０２０５】
さらに、各種プログラムに従属するデータも上記ディレクトリに管理されている。また、インストールするプログラムやデータが圧縮されている場合に、解凍するプログラム等も記憶される場合もある。
【０２０６】
本実施形態における図５，図６，図７，図８，図９，図１０に示す機能が外部からインストールされるプログラムによって、ホストコンピュータにより遂行されていてもよい。そして、その場合、ＣＤ−ＲＯＭやフラッシュメモリやＦＤ等の記録媒体により、あるいはネットワークを介して外部の記録媒体から、プログラムを含む情報群を出力装置に供給される場合でも本発明は適用されるものである。
【０２０７】
以上のように、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記録媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【０２０８】
この場合、記録媒体から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記録媒体は本発明を構成することになる。
【０２０９】
プログラムコードを供給するための記録媒体としては、例えば、フレキシブルディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＤＶＤ−ＲＯＭ，磁気テープ，不揮発性のメモリカード，ＲＯＭ，ＥＥＰＲＯＭ，シリコンディスク等を用いることができる。
【０２１０】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０２１１】
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０２１２】
また、本発明は、複数の機器から構成されるシステムに適用しても、１つの機器からなる装置に適用してもよい。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのソフトウェアによって表されるプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【０２１３】
さらに、本発明を達成するためのソフトウェアによって表されるプログラムをネットワーク上のサーバ，データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【０２１４】
なお、上述した各実施形態およびその変形例を組み合わせた構成も全て本発明に含まれるものである。
【図面の簡単な説明】
【０２１５】
【図１】本発明の一実施形態を示すプログラムソースコード解析支援装置の構成の一例を示すブロック図である。
【図２】図１に示した実行ファイルに基づいて実現される処理選択処理よる「適用処理」と「分析処理」の分岐処理を示す図である。
【図３】本発明の実施形態の適用処理における基本的な処理を示す図である。
【図４】本発明の実施形態の分析処理における基本的な処理を示す図である。
【図５】本発明の実施形態の適用処理の具体的な処理を示すフローチャートである。
【図６】本発明の実施形態のトークン抽出処理を示すフローチャートである。
【図７】本発明の実施形態のトークングループ判定処理を示すフローチャートである。
【図８】本発明の実施形態の出力処理パターン判定処理を示すフローチャートである。
【図９】本発明の実施形態の出力処理パターン別処理を示すフローチャートである。
【図１０】本発明の実施形態の分析処理の具体的な処理を示すフローチャートである。
【図１１】本発明の実施形態の分析における挿入文字列パターン採用時の判定を説明する図である。
【図１２】本発明の実施形態の適用処理開始時の画面の一例を示す図である。
【図１３】本発明の実施形態の適用処理の表示結果の一例を示す図である。
【図１４】本発明の実施形態の分析処理開始時の画面の一例を示す図である。
【図１５】図１に示した基本設定ファイルの言語別の設定を行う設定画面の一例を示す図である。
【図１６】図１に示した基本設定ファイルの挿入文字パターンの設定を行う設定画面の一例を示す図である。
【図１７】図１に示した出力処理パターンファイルの設定画面の一例を示す図である。
【図１８】本発明に係るプログラムソースコード解析支援装置で読み取り可能な各種データ処理プログラムを格納する記録媒体（記憶媒体）のメモリマップを説明する図である。
【符号の説明】
【０２１６】
１０１    ＰＣ本体
１０２    記憶装置
１０３    実行ファイル
１０４    ソースコードファイル
１０５    出力処理パターンファイル
１０６    パターン適用済みソースファイル
１０７    ＣＰＵ
１０８    一時記憶装置
１０９    表示制御装置
１１０    モニタ
１１１    基本設定ファイル
１１２    インタフェース（Ｉ／Ｆ）
１１３    入力装置
【図１】
2009276918.tif 000003
【図２】
2009276918.tif 000004
【図３】
2009276918.tif 000005
【図４】
2009276918.tif 000006
【図５】
2009276918.tif 000007
【図６】
2009276918.tif 000008
【図７】
2009276918.tif 000009
【図８】
2009276918.tif 000010
【図９】
2009276918.tif 000011
【図１０】
2009276918.tif 000012
【図１１】
2009276918.tif 000013
【図１２】
2009276918.tif 000014
【図１３】
2009276918.tif 000015
【図１４】
2009276918.tif 000016
【図１５】
2009276918.tif 000017
【図１６】
2009276918.tif 000018
【図１７】
2009276918.tif 000019
【図１８】
2009276918.tif 000020