(57)【要約】      （修正有）【課題】ソースコード検索プログラムにおいて、内部に含まれる文字以外の要素をも検索条件としてソースコードを検索することができようにする。【解決手段】プログラム開発用装置１０は、何れかのソースコード１２が指定されると、そのソースコード１２の各文字列にＩＤを割り当てるとともに、その内部の識別子が他の文字列によって宣言又は定義されている場合に、その宣言又は定義している文字列のＩＤを対応付けて、構成要素管理テーブル１８に記録する。その後、プログラム開発用装置１０は、ソースコード１２を表示した後、構成要素種類名と追加情報の一つが検索条件として入力されると、この検索条件で構成要素管理テーブル１８を検索し、検出された文字列と、これとＩＤ同士が対応付けられている文字列とを強調表示する。【選択図】図１
2006085585.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
何れかのソースコードを指定する情報を入力装置において受け付けると、その指定されたソースコードを、文法上の構成要素として意味を持つ文字列ごとに区分し、区分後の各文字列を、その文字列についての文法上の意味を示す構成要素情報と、その文字列に含まれる識別子の属性を示す属性情報と、その文字列を一意に識別するための識別情報とに対応付けて記憶装置に記憶する記憶手段，
前記記憶装置に記憶される各文字列のうち、その文字列に含まれる識別子が他の文字列によって宣言又は定義されている文字列については、その文字列の識別情報を、その識別子を宣言又は定義している文字列の識別情報に対応付けて記憶装置に記憶する関連付け手段，
何れかの構成要素情報と何れかの属性情報とを指定する情報を前記入力装置において受け付ける受付手段，
前記受付手段が前記情報を受け付けると、前記ソースコードの内容を表示装置に表示する表示手段，及び、
前記表示手段が前記表示中の前記ソースコードの中の文字列のうち、指定された構成要素情報及び属性情報に対応付けられている文字列を、前記記憶装置から検出して強調表示するとともに、その検出した文字列の識別情報に対応付けられている識別情報が前記記憶装置に存在する場合にその識別情報の文字列をも強調表示する強調手段
として機能させる
ことを特徴とするソースコード検索プログラム。
【請求項２】
前記記憶手段は、前記文字列が文法上の構成要素として意味を持つ複数の文字列から構成される場合、その文字列を構成する全ての文字列をも、構成要素情報と属性情報と識別情報とを対応付けて前記記憶装置に記憶する
ことを特徴とする請求項１記載のソースコード検索プログラム。
【請求項３】
前記属性情報には、その文字列を構成する識別子が含まれる
ことを特徴とする請求項１又は２記載のソースコード検索プログラム。
【請求項４】
前記識別子には、関数，変数，又は、マクロが含まれる
ことを特徴とする請求項１，２又は３記載のソースコード検索プログラム。
【請求項５】
コンピュータを、
何れかのソースコードを指定する情報を入力装置において受け付けると、その指定されたソースコードを、文法上の構成要素として意味を持つ文字列ごとに区分し、区分後の各文字列を、その文字列についての文法上の意味を示す構成要素情報と、その文字列に含まれる識別子の属性を示す属性情報と、その文字列を一意に識別するための識別情報とに対応付けて記憶装置に記憶する記憶手段，及び、
前記記憶装置に記憶される各文字列のうち、その文字列に含まれる識別子が他の文字列によって宣言又は定義されている文字列については、その文字列の識別情報を、その識別子を宣言又は定義している文字列の識別情報に対応付けて記憶装置に記憶する関連付け手段
として機能させる
ことを特徴とする検索用テーブル作成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード内の文字列を検索するための装置としてコンピュータを機能させるソースコード検索プログラムと、そのソースコード検索プログラムがソースコードを検索する際に用いるテーブルを作成するための装置としてコンピュータを機能させる検索用テーブル作成プログラムとに、関する。
【背景技術】
【０００２】
周知のように、アプリケーションソフトウエアや基本ソフトウエアやデバイスドライバ等のソフトウエアの開発においては、コンピュータが解釈できる二進数で表現された命令からなるプログラムを作成したり編集したりするのは非常に大変である。そのため、一般には、作成及び編集がし易い高級言語を使ったプログラミングが行われている。このようなプログラミングにおいては、高級言語にて記述（コーディング）されたソースコード（ソースプログラム）が作成され、このソースコードがコンピュータによって解釈されるようになっている。
【０００３】
コンピュータにソースコードを解釈させる方法として、二つの方法がある。一方の方法は、ソースコードに翻訳処理を施すことによって、コンピュータが実行できる完成品としてのオブジェクトコード（オブジェクトプログラム）を作成しておき、そのオブジェクトコードを任意の時にコンピュータに実行させるという方法である。もう一方の方法は、ソースコードから読み込んだ行のコードに対応するプログラムを実行させるという処理をコンピュータに対して先頭行から末尾行に向かって一行ずつ順に実行させるソフトウエアを用いることにより、ソースコードを擬似的に直接実行できるようにする方法である。前者の方法において翻訳処理を行うソフトウエアを、通常、コンパイラと称し、後者の方法においてソースコードを擬似的に実行するソフトウエアを、通常、インタープリタと称する。
【０００４】
コンパイラを用いた方法には、インタープリタを用いてソースコードの各行に対応するプログラムを逐一実行するのに比べて、オブジェクトコードの実行速度が非常に速いという利点があるが、インタープリタのようにソースコードの実行途中で処理を止めて止めた部分のコードを検証して編集するといった操作や、編集後即時にソースコードを再実行させるといった操作が行えないので、正常に動作するオブジェクトコードを完成させるには、ソースコードを修正してコンパイル処理を施すという作業を何度も繰り返さなければならない。
【０００５】
このような作業の手間を軽減するため、通常のソフトウエア開発用のツールソフトウエアには、修正箇所を探し出すための手段として、ソースコード内の文字列を検索するための検索プログラムが、組み込まれている。従来の検索プログラムは、検出したい文字列のパターンをいわゆる正規表現にて記述したものが入力されると、この正規表現にて示されるパターンを持つ文字列をソースコードから検出し、ソースコード内において検出された部分を例えば強調表示する。
【０００６】
なお、正規表現を用いていると、複数の識別子（任意の変数や任意の関数に付けることができる名前）からなる文字列を検出する場合において、例えば、識別子同士の間の空白の個数が異なっているときのように、文法上意味が同じであるにも拘わらず表現の仕方が若干異なっている文字列は、検出できなくなってしまう虞がある。そのため、複数の識別子からなる文字列を表現の仕方が若干異なっていても検出できるようにする技術が、特許文献１に開示されている。
【特許文献１】特開２０００−３１１０８８号公報（段落００６４）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、ソースコードを修正する際、バグを生じさせている箇所を文頭から順に一つずつ確認して修正するよりも、定義や宣言や呼出や返却や演算や代入などと言った文法上の構成要素ごとに分けて確認修正作業を行ったほうが、作業効率が高まる。
【０００８】
ところが、従来の検索プログラムや特許文献１記載の検索プログラムでは、検出しようとする文字列に含まれる文字列しか、検索条件として利用できないため、文法上の構成要素ごとにソースコードを確認するには、同じ構成要素に含まれる文字列を憶えておくなりソースコードから直接探し出すなりして書き出しておき、書き出した文字列を検索条件として何度も検索を掛けねばならないが、この作業には多くの手間が掛かってしまう。そのため、文法上の構成要素ごとにソースコードを確認できるようにする仕組みが、望まれていた。
【０００９】
本発明は、このような従来の事情に鑑みてなされたものであり、その課題は、文法上の構成要素ごとにソースコードの内容を確認できるようにすることにある。
【課題を解決するための手段】
【００１０】
上記の課題を解決するために発明されたソースコード検索プログラムは、コンピュータを、何れかのソースコードを指定する情報を入力装置において受け付けると、その指定されたソースコードを、文法上の構成要素として意味を持つ文字列ごとに区分し、区分後の各文字列を、その文字列についての文法上の意味を示す構成要素情報と、その文字列に含まれる識別子の属性を示す属性情報と、その文字列を一意に識別するための識別情報とに対応付けて記憶装置に記憶する記憶手段，前記記憶装置に記憶される各文字列のうち、その文字列に含まれる識別子が他の文字列によって宣言又は定義されている文字列については、その文字列の識別情報を、その識別子を宣言又は定義している文字列の識別情報に対応付けて記憶装置に記憶する関連付け手段，何れかの構成要素情報と何れかの属性情報とを指定する情報を前記入力装置において受け付ける受付手段，前記受付手段が前記情報を受け付けると、前記ソースコードの内容を表示装置に表示する表示手段，及び、前記表示手段が前記表示中の前記ソースコードの中の文字列のうち、指定された構成要素情報及び属性情報に対応付けられている文字列を、前記記憶装置から検出して強調表示するとともに、その検出した文字列の識別情報に対応付けられている識別情報が前記記憶装置に存在する場合にその識別情報の文字列をも強調表示する強調手段として機能させることを、特徴としている。
【００１１】
このソースコード検索プログラムがコンピュータに実行されていると、何れかのソースコードがこのコンピュータに指定されたときには、その指定されたソースコードが構成要素としての意味を持つ文字列ごとに区分され、区分後の文字列が構成要素情報と属性情報と識別情報とに対応付けられて記憶装置に記憶される。そして、何れかの構成要素情報と何れかの属性情報とが検索条件として指定されたときには、その構成要素情報と属性情報とに対応付けられた文字列が検索結果として強調表示される。従って、一つの構成要素について属性情報を変化させながらソースコード内を確認することができる。
【００１２】
また、従来の検索プログラムは、関数名や変数名を検索条件として検索していたので、関数の呼出元や変数の参照元と同時に、関数の呼出先や変数の参照先が検出されることとなっていたが、構成要素情報に基づいてソースコードを検索できるようにすると、関数の呼出先や変数の参照先が検出されないようになってしまう。しかしながら、前述した本発明によるソースコード検索プログラムによれば、内部の識別子が他の構成要素によって宣言又は定義されている文字列については、その文字列の識別情報が、その宣言又は定義している文字列の識別情報に対応付けられて記憶装置に記憶され、然も、指定された構成要素情報と識別情報とによって記憶装置内を検索したときには、検出した文字列の識別情報に対応する識別情報を持つ文字列も、検出結果として取り出される。その結果、本発明によっても、関数の呼出元や変数の参照元と同時に、関数の呼出先や変数の参照先が検出されることとなる。
【００１３】
なお、属性情報は、その文字列を構成する識別子を含んでいても良いし、その識別子の引数やデータ型やリンケージタイプを示す情報を含んでいても良い。
【００１４】
また、上記の課題を解決するために発明された検索用テーブル作成プログラムは、コンピュータを、何れかのソースコードを指定する情報を入力装置において受け付けると、その指定されたソースコードを、文法上の構成要素として意味を持つ文字列ごとに区分し、区分後の各文字列を、その文字列についての文法上の意味を示す構成要素情報と、その文字列に含まれる識別子の属性を示す属性情報と、その文字列を一意に識別するための識別情報とに対応付けて記憶装置に記憶する記憶手段，及び、前記記憶装置に記憶される各文字列のうち、その文字列に含まれる識別子が他の文字列によって宣言又は定義されている文字列については、その文字列の識別情報を、その識別子を宣言又は定義している文字列の識別情報に対応付けて記憶装置に記憶する関連付け手段として機能させることを、特徴としている。
【００１５】
従って、この検索用テーブル作成プログラムによれば、前述した本発明のソースコード検索プログラムがソースコードを検索する際に用いるテーブルを作成するための装置としてコンピュータを機能させることができることになる。
【発明の効果】
【００１６】
このように、本発明によれば、文法上の構成要素ごとにソースコードの内容を確認できるようになる。
【発明を実施するための最良の形態】
【００１７】
以下、添付図面に基づいて、本発明を実施するための形態を説明する。
【００１８】
図１は、本発明の実施形態であるプログラム開発用装置１０の概略図である。プログラム開発用装置１０は、プログラム開発用のツール機能が付加されたパーソナルコンピュータである。パーソナルコンピュータは、デスクトップ型やノートブック型のような一般に市販されているものである。
【００１９】
より具体的に説明すると、プログラム開発用装置１０は、ＣＰＵ［Central Processing Unit］１０ａ，ＲＡＭ［Random Access Memory］１０ｂ，表示装置１０ｃ，入力装置１０ｄ，ＦＤＤ［Flexible Disk Drive］１０ｅ，ＣＤＤ［Compact Disk Drive］１０ｆ，及び、ＨＤＤ［Hard Disk Drive］１０ｇを、備えており、これらハードウエア１０ａ〜１０ｇは、バスＢを介して互いに接続されている。
【００２０】
ＣＰＵ１０ａは、プログラム開発用装置１０全体を制御するための中央処理装置である。ＲＡＭ１０ｂは、ＣＰＵ１０ａが各種プログラムを実行するに際しての作業領域が展開される主記憶装置である。表示装置１０ｃは、ＣＰＵ１０ａによって生成された画面データに基づいて各種画面を表示するための装置であり、具体的にはブラウン管ディスプレイや液晶ディスプレイである。入力装置１０ｄは、操作者からの入力を受け付けるための入力装置であり、具体的にはキーボードやマウスである。
【００２１】
ＦＤＤ１０ｅ及びＣＤＤ１０ｆは、コンピュータ可読媒体であるフレキシブルディスクやコンパクトディスクからデータやプログラムを読み出したり当該ディスクに書き込んだりするための補助記憶装置である。
【００２２】
ＨＤＤ１０ｇは、プログラム開発用装置１０に内蔵され或いは外付けされる補助記憶装置であり、各種プログラム及びデータを記憶している。具体的には、このＨＤＤ１０ｇは、基本ソフトウエア１１，ソースコード１２，エディタ１３，コンパイラ１４，ライブラリ１５，リンカ１６，ビューワ１７，及び、構成要素管理テーブル１８を、記憶している。
【００２３】
基本ソフトウエア１１は、ハードウエアとソフトウエアとを統合的に管理するためのソフトウエアである。ソースコード１２は、高級プログラミング言語にて記述（コーディング）されたテキストデータである。図２は、ソースコード１２の一例を示す図である。図２に示されるソースコード１２は、Ｃ言語にて記述されている。
【００２４】
エディタ１３は、ソースコード１２の作成及び編集をするためのソフトウエアである。コンパイラ１４は、ソースコード１２を翻訳することによって機械語で記述されたオブジェクトコードを生成するためのソフトウエアである。
【００２５】
ライブラリ１５は、複数のソフトウエアが共通して利用することができる機能（を発揮するためのプログラム）を汎用部品として保存するファイルである。リンカ１６は、一つ以上のオブジェクトプログラムを結合するとともに、結合後のプログラムに必要な機能（プログラム）をライブラリ１５から取り込んで実行可能なプログラムを作成するためのソフトウエアである。
【００２６】
なお、エディタ１３，コンパイラ１４，ライブラリ１５，及び、リンカ１６は、ソフトウエア開発用のツール機能をコンピュータに付加するためのソフトウエアである。また、ＨＤＤ１０ｇ内のソースコード１２は、エディタ１３を利用して作成されたものであっても良いが、別のコンピュータ上のエディタによって作成されたものであっても良い。
【００２７】
ビューワ１７は、ソースコード１２の内容を表示するためのソフトウエアである。このビューワ１７には、テーブル作成プログラム１７ａ及びソースコード検索プログラム１７ｂがアドインプログラムとして組み込まれている。なお、テーブル作成プログラム１７ａ及びソースコード検索プログラム１７ｂを起動したＣＰＵ１０ａによって実行される処理の内容については、後述する。
【００２８】
構成要素管理テーブル１８は、ソースコード１２内の各構成要素について分類された情報を保存しておくためのテーブルであり、それら各情報は、テーブル作成プログラム１７ａの実行時にこのテーブルに記録される。
【００２９】
図３は、構成要素管理テーブル１８のデータ構造の一例を示す図である。なお、図３の構成要素管理テーブル１８は、ソースコード１２の各構成要素が記録された後の状態を示している。図３に示される構成要素管理テーブル１８の各レコードは、「構成要素」，「階層」，「記述位置」，「ＩＤ」，「構成要素種類名」，「追加情報」，及び、「参照先」のフィールドを、有している。
【００３０】
「構成要素」フィールドには、ソースコード１２をその高級プログラミング言語の文法上意味を持つ単位に分解してなる構成要素が、記録される。「階層」フィールドには、その構成要素が属する階層の順位を示す階層番号が、記録される。なお、複数の構成要素を含んで一つの構成要素が形成されている場合、その一つの構成要素の階層の順位は、それに含まれる他の構成要素の順位よりも一つ高いとされる。
【００３１】
「記述位置」フィールドには、ソースコード１２内におけるその構成要素の記述位置を示す位置情報が、記録される。なお、位置情報は、構成要素の先頭文字が何行目の何文字目であるかを示す数値的な情報と、構成要素の末尾文字が何行目の何文字目であるかを示す数値的な情報とからなる。
【００３２】
「ＩＤ」フィールドには、ソースコード１２に属する全ての構成要素の中から各構成要素を個別に識別するための識別情報であるＩＤが、記録される。なお、ＩＤの付与法則としては、第一に、最上位の階層にある構成要素に含まれる全ての構成要素についてＩＤが付与されなければ、最上位の階層にある次の構成要素にはＩＤが付与されない。また、記述される行が先にある構成要素ほど、小さいＩＤが付与される。また、所属する階層が上位にある構成要素ほど、小さいＩＤが付与される。
【００３３】
「構成要素種類名」フィールドには、その構成要素の種類（文法上の意味）を示す名称が、記録される。「追加情報」フィールドには、その構成要素の持つ引数や属性などの属性情報が、追加情報として記録される。「参照先」フィールドには、その構成要素に含まれる変数や関数やマクロを宣言又は定義している構成要素のＩＤが、記録される。但し、その構成要素が変数や関数やマクロを含んでいない場合には、その構成要素の「参照先」フィールドは、空欄となる。
【００３４】
次に、以上のように構成されるプログラム開発用装置１０において実行される処理の内容について説明する。
【００３５】
プログラム開発用装置１０において、ビューワ１７が起動された後、そのビューワ１７に対し、ＨＤＤ１０ｇ内の何れかのソースコード１２がオープンファイルの対象として指定されると、ＣＰＵ１０ａが、テーブル作成プログラム１７ａを読み込んで、テーブル作成処理を開始する。図４は、テーブル作成処理の内容を示すフローチャートである。
【００３６】
テーブル作成処理の開始後、最初のステップＳ１０１では、ＣＰＵ１０ａは、レコードが未登録である構成要素管理テーブル１８を新規に作成する。
【００３７】
次のステップＳ１０２では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内に階層番号を記憶する領域を形成し、この領域に「０」を記録する。
【００３８】
次のステップＳ１０３では、ＣＰＵ１０ａは、レコードが未登録であるシンボル管理テーブルを新規に作成する。なお、シンボル管理テーブルについては後述する。
【００３９】
次のステップＳ１０４では、ＣＰＵ１０ａは、ソースコード１２の中から一行目のテキストを処理対象として読み込む。読み込み後、ＣＰＵ１０ａは、ステップＳ１０５へ処理を進める。
【００４０】
ステップＳ１０５では、ＣＰＵ１０ａは、字句取得処理を実行する。図５は、字句取得処理の内容を示すフローチャートである。
【００４１】
字句取得処理の開始後、最初のステップＳ２０１では、ＣＰＵ１０ａは、処理対象行のテキストにおける一文字目の文字を処理対象文字として読み込む。読み込み後、ＣＰＵ１０ａは、ステップＳ２０２へ処理を進める。
【００４２】
ステップＳ２０２では、ＣＰＵ１０ａは、ステップＳ２０１又は後述のステップＳ２０９において読み込んだ処理対象文字が「#」の文字であるか「/」の文字であるかその他の文字であるかを、判別する。そして、処理対象文字が「#」の文字であると判断した場合（Ｓ２０２；「#」）、ＣＰＵ１０ａは、ステップＳ２０３へ処理を進める。
【００４３】
ステップＳ２０３では、ＣＰＵ１０ａは、当該文字「#」が行頭に存在する文字であるか否かを、判別する。そして、ＣＰＵ１０ａは、当該文字「#」が行頭に存在する文字でないと判断した場合（Ｓ２０３；ＮＯ）、ステップＳ２０８へ処理を進め、当該文字「#」が行頭に存在する文字であると判断した場合（Ｓ２０３；ＹＥＳ）、ステップＳ２０４へ処理を進める。
【００４４】
ステップＳ２０４では、ＣＰＵ１０ａは、前処理命令文解析処理を実行する。図６は、前処理命令文解析処理の内容を示すフローチャートである。
【００４５】
前処理命令文解析処理の開始後、最初のステップＳ３０１では、ＣＰＵ１０ａは、処理対象行のテキストから「#」の直後の文字列を読み込む。
【００４６】
次のステップＳ３０２では、ＣＰＵ１０ａは、ステップＳ３０１において読み込んだ文字列が「include」であるか「define」であるかその他であるかを、判別する。そして、ステップＳ３０１において読み込んだ文字列が「include」であると判断した場合（Ｓ３０２；「include」）、ＣＰＵ１０ａは、ステップＳ３０３へ処理を進める。
【００４７】
ステップＳ３０３では、ＣＰＵ１０ａは、#include行登録処理を実行する。図７は、#include行登録処理の内容を示すフローチャートである。
【００４８】
#include行登録処理の開始後、最初のステップＳ３１１では、ＣＰＵ１０ａは、処理対象行のテキストにおける「include」の後の文字列を、処理対象文字列として読み込む。但し、ＣＰＵ１０ａは、「include」以後において「/*」か「//」が存在する場合には、これら「/*」か「//」の直前までの文字列を、処理対象文字列として読み込む。
【００４９】
次のステップＳ３１２では、ＣＰＵ１０ａは、ステップＳ３１１において読み込んだ処理対象文字列において、「"」と「"」の間の文字列、又は、「<」と「>」の間の文字列を、ファイル名として一時記憶する。
【００５０】
次のステップＳ３１３では、ＣＰＵ１０ａは、事前に起動されている後述の登録プロセスに対し、実行開始を指示する。
【００５１】
次のステップＳ３１４では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、文字列「#include」とステップＳ３１１において読み込んだ処理対象文字列とが引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「挿入ファイル指定」が引き渡され、「追加情報」フィールドに記録される情報として、文字列「名前＝"」とステップＳ３１２において一時記憶したファイル名と文字列「"」とが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、#include行登録処理を終了し、図６のステップＳ３０５へ処理を進める。
【００５２】
なお、ここで、登録プロセスにおいてＣＰＵ１０ａが実行する処理の内容について、先に説明する。図８は、登録プロセスが実行する登録処理の内容を示すフローチャートである。
【００５３】
登録処理の最初のステップＳ４０１では、ＣＰＵ１０ａは、実行指示の主体から登録に係る情報が引き渡されるまで待機し、この情報を受け取ると、ステップＳ４０２へ処理を進める。
【００５４】
ステップＳ４０２では、ＣＰＵ１０ａは、構成要素管理テーブル１８においてレコードを登録できる空きがあるか否かを、判別する。なお、構成要素管理テーブル１８は、登録可能なレコード数が事前に設定されており、空きがあるとは、構成要素管理テーブル１８において事前に設定された登録可能数に登録レコード数が達していない状態を言う。そして、ＣＰＵ１０ａは、構成要素管理テーブル１８においてレコードを登録できる空きがあると判断した場合（Ｓ４０２；ＮＯ）、ステップＳ４０４へ処理を進め、構成要素管理テーブル１８においてレコードを登録できる空きがないと判断した場合（Ｓ４０２；ＹＥＳ）、ステップＳ４０３へ処理を進める。
【００５５】
ステップＳ４０３では、ＣＰＵ１０ａは、構成要素管理テーブル１８に設定されている登録可能数を所定数だけ拡張する。拡張後、ＣＰＵ１０ａは、ステップＳ４０４へ処理を進める。
【００５６】
ステップＳ４０４では、ＣＰＵ１０ａは、新規ＩＤを生成する。なお、この新規ＩＤとは、構成要素管理テーブル１８に登録されている最大のＩＤの次のＩＤである。ＣＰＵ１０ａは、新規ＩＤを生成した後、ステップＳ４０５へ処理を進める。
【００５７】
ステップＳ４０５では、ＣＰＵ１０ａは、構成要素管理テーブル１８に新レコードを追加する。この新レコードは、「構成要素」，「構成要素種類名」，及び、「追加情報」フィールドに、ステップＳ４０１において受け取った情報を、それぞれ格納している。また、この新レコードは、「ＩＤ」フィールドに、ステップＳ４０４において生成された新規ＩＤを、格納している。また、この新レコードは、「階層」フィールドに、この時点でＲＡＭに記録されている階層番号と同じ階層番号を、格納している。また、この新レコードは、「記述位置」フィールドに、「構成要素」フィールドに格納した文字列のソースコード１２内での記述位置を示す位置情報を、格納している。なお、この新レコードにおけるその他のフィールドは、この時点では、空欄である。
【００５８】
次のステップＳ４０６では、ＣＰＵ１０ａは、ステップＳ４０５において構成要素管理テーブル１８に登録された新レコードの「構成要素種類名」フィールドに格納された構成要素種類名に基づいて、この新レコードの構成要素の種類を、判別する。そして、この新レコードの構成要素が、関数の呼出，変数の参照，及び、マクロの参照の何れかであると判断した場合（Ｓ４０６；関数の呼出，変数の参照，マクロの参照）、ＣＰＵ１０ａは、ステップＳ４０７へ処理を進める。
【００５９】
ステップＳ４０７では、ＣＰＵ１０ａは、ステップＳ４０１において受け取った情報のうち、「参照先」フィールドに格納すべきＩＤを、当該新レコードの「参照先」フィールドに格納する。このＩＤは、図１６のステップＳ８１１や図１７のステップＳ８３１を説明する際に詳しく述べているが、簡単に説明すると、この新レコードの構成要素中の関数や変数やマクロを宣言又は定義している構成要素のＩＤである。ＣＰＵ１０ａは、ＩＤを「参照先」フィールドに格納した後、登録処理を終了する。
【００６０】
また、ステップＳ４０６において、この新レコードの構成要素が、マクロの定義，変数の宣言，関数の宣言，及び、関数の定義の何れかであると判断した場合（Ｓ４０６；マクロの定義，変数の宣言，関数の宣言，関数の定義）、ＣＰＵ１０ａは、ステップＳ４０８へ処理を進める。
【００６１】
ステップＳ４０８では、ＣＰＵ１０ａは、ステップＳ４０５において構成要素管理テーブル１８に登録された新レコードの「追加情報」フィールドに格納されている名前情報（「名前＝」の右辺）を処理対象として、シンボル登録処理を実行する。図９は、シンボル登録処理の内容を示すフローチャートである。
【００６２】
シンボル登録処理の開始後、最初のステップＳ４１１では、ＣＰＵ１０ａは、処理対象であるシンボル名に対応するハッシュ値を、ハッシュ関数を用いて算出する。なお、シンボル名とは、マクロ名，関数名，及び、変数名を総称する名称である。
【００６３】
次のステップＳ４１２では、ＣＰＵ１０ａは、処理対象を登録すべきシンボル管理テーブル（図示略）を決定する。なお、シンボル管理テーブル（図示略）は、前述したステップＳ１０４（図４参照）において三種類作成される。一種類目は、関数名と大域変数（グローバル変数）の変数名とを管理するためのグローバルシンボル管理テーブルであり、二種類目は、局所変数（ローカル変数）の変数名を管理するためのローカルシンボル管理テーブルであり、三種類目は、マクロ名を管理するためのマクロシンボル管理テーブルである。Ｃ言語においては、大域変数は、全てのブロックにおいて有効な外部変数を指し、局所変数は、宣言されたブロック内だけで有効な自動変数を指す。また、Ｃ言語において、ブロックとは、関数（プログラムの意）の範囲や、ｉｆ文などの定義範囲を言う。ＣＰＵ１０ａは、処理対象に対応するシンボル管理テーブルを決定した後、例えば、処理対象がマクロ名であればマクロシンボル管理テーブルを決定した後、ステップＳ４１３へ処理を進める。
【００６４】
ステップＳ４１３では、ＣＰＵ１０ａは、ステップＳ４１２において決定したシンボル管理テーブルにおいて、ステップＳ４１１において算出したハッシュ値の示す番地に、処理対象と同じシンボル名が既に登録されているか否かを、判別する。そして、当該番地に処理対象と同じシンボル名が既に登録されていたと判断した場合（Ｓ４１３；ＹＥＳ）、ＣＰＵ１０ａは、ステップＳ４１４へ処理を進める。
【００６５】
ステップＳ４１４では、ＣＰＵ１０ａは、当該シンボル管理テーブルにおける当該ハッシュ値の示す番地に、処理対象のＩＤを、リストとして追加する。追加後、ＣＰＵ１０ａは、シンボル登録処理を終了するとともに、図８の登録処理を終了する。
【００６６】
一方、ステップＳ４１３において、当該シンボル管理テーブルにおける当該ハッシュ値の示す番地に処理対象と同じシンボルが未だ登録されていないと判断した場合（Ｓ４１３；ＮＯ）、ＣＰＵ１０ａは、ステップＳ４１５へ処理を進める。
【００６７】
ステップＳ４１５では、ＣＰＵ１０ａは、当該シンボル管理テーブルにおける当該ハッシュ値の示す番地に処理対象のシンボル名とＩＤとを、記録する。記録後、ＣＰＵ１０ａは、シンボル登録処理を終了するとともに、図８の登録処理を終了する。
【００６８】
また、図８のステップＳ４０６において、ステップＳ４０５において構成要素管理テーブル１８に登録された新レコードの構成要素が、関数の呼出，変数の参照，マクロの参照，マクロの定義，変数の宣言，関数の宣言，及び、関数の定義の何れでもないと判断した場合（Ｓ４０６；その他）、ＣＰＵ１０ａは、何の処理も行うことなく、登録処理を終了する。
【００６９】
なお、図７及び図８に示す処理が実行されることにより、ソースコード１２における#include行が、構成要素管理テーブル１８に登録されることとなる（図７の処理において登録されるレコードの構成要素の種類は「挿入ファイル指定」であることから、図８の処理では［Ｓ４０６；その他］となるので、図７の処理において図９の処理は実行されない）。
【００７０】
また、図６のステップＳ３０２において、ステップＳ３０１において読み込んだ文字列が「define」であると判断した場合（Ｓ３０２；「define」）、ＣＰＵ１０ａは、ステップＳ３０４へ処理を進める。
【００７１】
ステップＳ３０４では、ＣＰＵ１０ａは、#define行登録処理を実行する。図１０は、#define行登録処理の内容を示すフローチャートである。
【００７２】
#define行登録処理の開始後、最初のステップＳ３２１では、ＣＰＵ１０ａは、処理対象行のテキストにおける「define」の後の文字列を、処理対象文字列として読み込む。但し、ＣＰＵ１０ａは、「define」以後において「/*」か「//」が存在する場合には、これら「/*」か「//」の直前までの文字列を、処理対象文字列として読み込む。
【００７３】
次のステップＳ３２２では、ＣＰＵ１０ａは、ステップＳ３２１において読み込んだ文字列の中に「(」が存在するか否かを、判別する。そして、当該文字列の中に「(」が存在すると判断した場合（Ｓ３２２；ＹＥＳ）、ＣＰＵ１０ａは、ステップＳ３２３へ処理を進める。
【００７４】
ステップＳ３２３では、ＣＰＵ１０ａは、ステップＳ３２１において読み込んだ文字列における「(」よりも前の文字列を、識別子名として一時記憶する。
【００７５】
ステップＳ３２４では、ＣＰＵ１０ａは、ステップＳ３２１において読み込んだ文字列における「(」から「)」までの間の引数の個数を計数する。なお、引数は、「(」と「)」との間において、「,」にて区切られている。
【００７６】
ステップＳ３２５では、ＣＰＵ１０ａは、ステップＳ３２１において読み込んだ文字列において、「)」の後に文字列が存在する場合、この文字列を、展開値として一時記憶する。
【００７７】
次のステップＳ３２６では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【００７８】
次のステップＳ３２７では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、文字列「#define」とステップＳ３２１において読み込んだ処理対象文字列とが引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「マクロの定義」が引き渡される。さらに、登録プロセスには、「追加情報」フィールドに記録される情報として、第一に、文字列「名前＝"」とステップＳ３２３において一時記憶した識別子名と文字列「"」が引き渡され、第二に、文字列「引数の個数＝」とステップＳ３２３において計数して得られた値とが引き渡され、第三に、文字列「展開値＝」とステップＳ３２４において一時記憶された展開値とが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、#define行登録処理を終了し、図６のステップＳ３０５へ処理を進める。
【００７９】
一方、ステップＳ３２２において、ステップＳ３２１において読み込んだ文字列の中に「(」が存在しないと判断した場合（Ｓ３２２；ＮＯ）、ＣＰＵ１０ａは、ステップＳ３２８へ処理を進める。
【００８０】
ステップＳ３２８では、ＣＰＵ１０ａは、ステップＳ３２１において読み込んだ文字列を識別子名として一時記憶する。
【００８１】
ステップＳ３２９では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【００８２】
次のステップＳ３３０では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、文字列「#define」とステップＳ３２１において読み込んだ処理対象文字列とが引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「マクロの定義」が引き渡される。さらに、登録プロセスには、「追加情報」フィールドに記録される情報として、第一に、文字列「名前＝"」とステップＳ３２８において一時記憶された識別子名と文字列「"」とが引き渡され、第二に、文字列「引数の個数＝０」が引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、#define行登録処理を終了し、図６のステップＳ３０５へ処理を進める。
【００８３】
なお、図１０，並びに、図８及び図９に示した処理が実行されることにより、ソースコード１２における#define行が、構成要素管理テーブル１８に登録されることとなる（図１０の処理において登録されるレコードの構成要素の種類は「マクロの定義」であることから、図８の処理では［Ｓ４０６；マクロの定義，変数の宣言，関数の宣言，関数の定義］となるので、図１０の処理において図９の処理は実行される）。
【００８４】
また、図６のステップＳ３０２において、ステップＳ３０１において読み込んだ文字列が「include」でも「define」でもないと判断した場合（Ｓ３０２；その他）、ＣＰＵ１０ａは、ステップＳ３０５へ処理を進める。
【００８５】
ステップＳ３０５では、ＣＰＵ１０ａは、処理対象行のテキストにおいて「/*」か「//」が存在するか否かを、判別する。そして、処理対象行のテキストにおいて「/*」も「//」も存在していないと判断した場合（Ｓ３０５；ＮＯ）、ＣＰＵ１０ａは、前処理命令文解析処理を終了し、処理対象行のテキストにおいて処理が済んだ部分の最後尾の文字を処理対象文字に切り替えて、図５のステップＳ２０７へ処理を進める。
【００８６】
一方、ステップＳ３０５において、処理対象行のテキストにおいて「/*」か「//」が存在していると判断した場合（Ｓ３０５；ＹＥＳ）、ＣＰＵ１０ａは、ステップＳ３０６へ処理を進める。
【００８７】
ステップＳ３０６では、ＣＰＵ１０ａは、注釈文登録処理を実行する。図１１は、注釈文登録処理の内容を示すフローチャートである。
【００８８】
注釈文登録処理の開始後、最初のステップＳ３３１では、ＣＰＵ１０ａは、処理対象行のテキストに「/*」が存在するのか「//」が存在するのかを、判断する。そして、当該テキストに「/*」が存在していると判断した場合（Ｓ３３１；「/*」）、ＣＰＵ１０ａは、ステップＳ３３２へ処理を進める。
【００８９】
ステップＳ３３２では、ＣＰＵ１０ａは、処理対象行のテキストにおいて「*/」の文字列を探索する。そして、ＣＰＵ１０ａは、「*/」を探し出し終えると、ステップＳ３３３へ処理を進める。
【００９０】
ステップＳ３３３では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【００９１】
次のステップＳ３３４では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、「/*」から「*/」までの文字列が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「注釈文」が引き渡される。さらに、登録プロセスには、「追加情報」フィールドに記録される情報として、第一に、文字列「名前＝"」と「/*」から「*/」までの文字列と文字列「"」とが引き渡され、第二に、文字列「種類＝"c"」が引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、注釈文登録処理と図６の前処理命令文解析処理とを終了し、図５のステップＳ２０７へ処理を進める。
【００９２】
一方、ステップＳ３３１において、処理対象行のテキストに「//」が存在していると判断した場合（Ｓ３３１；「//」）、ＣＰＵ１０ａは、ステップＳ３３５へ処理を進める。
【００９３】
ステップＳ３３５では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【００９４】
次のステップＳ３３６では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、「//」から行末までの文字列が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「注釈文」が引き渡される。さらに、登録プロセスには、「追加情報」フィールドに記録される情報として、第一に、文字列「名前＝"」と「/*」から行末までの文字列と文字列「"」とが引き渡され、第二に、文字列「種類＝"c++"」が引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、注釈文登録処理を終了して図６の前処理命令文解析処理を終了する。その後、ＣＰＵ１０ａは、、処理対象行のテキストにおいて処理が済んだ部分の最後尾の文字を処理対象文字に切り替えて、図５のステップＳ２０７へ処理を進める。
【００９５】
また、図５のステップＳ２０２において、ステップＳ２０１又は後述のステップＳ２０９において読み込んだ処理対象文字が「/」の文字であると判断した場合（Ｓ２０２；「/」）、ＣＰＵ１０ａは、ステップＳ２０５へ処理を進める。
【００９６】
ステップＳ２０５では、ＣＰＵ１０ａは、処理対象文字「/」の次の文字が「/」か「*」の文字であるか否かを、判別する。そして、ＣＰＵ１０ａは、処理対象文字「/」の次の文字が「/」か「*」の文字ではないと判断した場合（Ｓ２０５；ＮＯ）、ステップＳ２０８へ処理を進め、処理対象文字「/」の次の文字が「/」か「*」の文字であると判断した場合（Ｓ２０５；ＹＥＳ）、ステップＳ２０６へ処理を進める。
【００９７】
ステップＳ２０６では、ＣＰＵ１０ａは、注釈文登録処理を実行する。なお、この注釈文登録処理の内容については、図１１を用いて説明したので、ここではその説明を省略する。ＣＰＵ１０ａは、この注釈文登録処理を実行することによって注釈文を構成要素管理テーブル１８に登録した後、処理対象行のテキストにおいて処理が済んだ部分の最後尾の文字を処理対象文字に切り替えて、ステップＳ２０７へ処理を進める。
【００９８】
ステップＳ２０７では、ＣＰＵ１０ａは、処理対象行のテキストにおいて、処理対象文字の直後に続く文字が存在するか否かを、判別する。そして、ＣＰＵ１０ａは、処理対象文字の直後に続く文字が存在しないと判断した場合（Ｓ２０７；ＮＯ）、字句取得処理を終了して図４のステップＳ１０６へ処理を進め、処理対象文字の直後に続く文字が存在すると判断した場合（Ｓ２０７；ＹＥＳ）、ステップＳ２０９へ処理を進める。
【００９９】
また、ステップＳ２０２において、ステップＳ２０１又は後述のステップＳ２０９において読み込んだ処理対象文字が「#」及び「/」以外の文字であると判断した場合（Ｓ２０２；その他）、ＣＰＵ１０ａは、ステップＳ２０８へ処理を進める。
【０１００】
ステップＳ２０８では、ＣＰＵ１０ａは、処理対象行のテキストにおいて、処理対象文字の後に続く文字が空白を挟んで離間しているか否かを、判別する。そして、処理対象文字の後に続く文字が空白を挟んで離間していないと判断した場合（Ｓ２０８；ＮＯ）、ＣＰＵ１０ａは、ステップＳ２０９へ処理を進める。
【０１０１】
ステップＳ２０９では、ＣＰＵ１０ａは、処理対象文字の次の文字を読み込み、読み込んだ文字を新たに処理対処文字とする。その後、ＣＰＵ１０ａは、ステップＳ２０２へ処理を戻す。
【０１０２】
一方、ステップＳ２０８において、処理対象文字の後に続く文字が空白を挟んで離間していると判断した場合（Ｓ２０８；ＹＥＳ）、ＣＰＵ１０ａは、ステップＳ２１０へ処理を進める。
【０１０３】
ステップＳ２１０では、ＣＰＵ１０ａは、処理対象行のテキストにおいて、処理対象文字を最後尾とする一連の文字列を字句として一時記憶する。その後、ＣＰＵ１０ａは、字句取得処理を終了して図４のステップＳ１０６へ処理を進める。
【０１０４】
ステップＳ１０６では、ＣＰＵ１０ａは、ステップＳ１０５の処理を実行した結果、字句の取得に成功したか否かを、判別する。そして、ＣＰＵ１０ａは、字句の取得に成功しなかったと判断した場合（Ｓ１０６；ＮＯ）、ステップＳ１０８へ処理を進め、字句の取得に成功したと判断した場合（Ｓ１０６；ＹＥＳ）、ステップＳ１０７へ処理を進める。
【０１０５】
ステップＳ１０７では、ＣＰＵ１０ａは、外部宣言解析処理を実行する。図１２は、外部宣言解析処理の内容を示すフローチャートである。
【０１０６】
外部宣言解析処理の開始後、最初のステップＳ５０１では、ＣＰＵ１０ａは、処理対象行におけるステップＳ１０５で取得した字句以後の全ての文字列を、処理対象文字列として読み込む。
【０１０７】
次のステップＳ５０２では、ＣＰＵ１０ａは、ステップＳ５０１において読み込んだ処理対象文字列中の予約語，識別子，及び、区切子に基づいて、外部宣言の種類を判別する。そして、外部宣言の種類が変数の宣言であった場合（Ｓ５０２；変数の宣言）、ＣＰＵ１０ａは、ステップＳ５０３へ処理を進める。なお、この時の処理対象文字列は、型指定子と変数名の識別子とからなる文字列か、或いは、型指定子と変数名の識別子と「＝」と初期値の識別子とからなる文字列となっている。
【０１０８】
ステップＳ５０３では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１０９】
次のステップＳ５０４では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、ステップＳ５０１において読み込んだ処理対象文字列中が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「変数の宣言」が引き渡される。さらに、登録プロセスには、「追加情報」フィールドに記録される情報として、第一に、文字列「名前＝"」と上記処理対象文字列中の変数名と文字列「"」とが引き渡され、第二に、文字列「型＝"」と上記処理対象文字列中の型指定子と文字列「"」とが引き渡され、第三に、文字列「初期値＝"」と上記処理対象文字列中の初期値（無い場合は空欄）と文字列「"」とが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、外部宣言解析処理を終了し、図４のステップＳ１０８へ処理を進める。
【０１１０】
また、図１２のステップＳ５０２において、外部宣言の種類が関数の宣言であった場合（Ｓ５０２；関数の宣言）、ＣＰＵ１０ａは、ステップＳ５０５へ処理を進める。なお、この時の処理対象文字列は、リンケージの予約語と返却値の型指定子と関数名の識別子と「(」と仮引数の型指定子と変数の識別子と「)」とからなる文字列となっている。
【０１１１】
ステップＳ５０５では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１１２】
次のステップＳ５０６では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、ステップＳ５０１において読み込んだ処理対象文字列が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「関数の宣言」が引き渡される。さらに、登録プロセスには、「追加情報」フィールドに記録される情報として、第一に、文字列「名前＝"」と上記処理対象文字列中の関数名と文字列「"」とが引き渡され、第二に、文字列「リンケージ＝"」と上記処理対象文字列中のリンケージの予約語に対応する文字（「外部」と「内部」の何れか、予約語が無い場合は「外部」）と文字列「"」とが引き渡され、第三に、文字列「型＝"」と上記処理対象文字列中の各型指定子（返却値の型指定子＝（返却値の型指定子，…））と文字列「"」とが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、外部宣言解析処理を終了し、図４のステップＳ１０８へ処理を進める。
【０１１３】
また、図１２のステップＳ５０２において、外部宣言の種類が関数の定義であった場合（Ｓ５０２；関数の定義）、ＣＰＵ１０ａは、ステップＳ５０７へ処理を進める。なお、この時の処理対象文字列は、リンケージの予約語と返却値の型指定子と関数名の識別子と「(」と仮引数の型指定子と仮引数としての変数名と「)」とブロック（複合文）とからなる文字列となっている。
【０１１４】
ステップＳ５０７では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１１５】
次のステップＳ５０８では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、ステップＳ５０１において読み込んだ処理対象文字列中のブロックの直前までの文字列が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「関数の定義」が引き渡される。さらに、登録プロセスには、「追加情報」フィールドに記録される情報として、第一に、文字列「名前＝"」と上記処理対象文字列中の関数名と文字列「"」とが引き渡され、第二に、文字列「リンケージ＝"」と上記処理対処文字列中のリンケージの予約語に対応する文字（「外部」と「内部」の何れか、予約語が無い場合は「外部」）と文字列「"」とが引き渡され、第三に、文字列「型＝"」と上記処理対象文字列中の型指定子と文字列「"」とが引き渡され、第四に、文字列「引数リスト＝"」と上記処理対象文字列中の仮引数（変数名，変数名，…）と文字列「"」とが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、ステップＳ５０９へ処理を進める。
【０１１６】
ステップＳ５０９では、ＣＰＵ１０ａは、処理対象文字列中のブロックを処理対象として、ブロック内解析処理を実行する。図１３及び図１４は、ブロック内解析処理の内容を示すフローチャートである。
【０１１７】
ブロック内解析処理の開始後、最初のステップＳ６０１では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り上げる。
【０１１８】
次のステップＳ６０２では、ＣＰＵ１０ａは、処理対象ブロックの中から一行目の文字列を処理対象文字列として読み込む。但し、ＣＰＵ１０ａは、一行目の文字列の中に「/*」か「//」が存在する場合には、これら「/*」か「//」の直前までの文字列を、処理対象文字列として読み込む。読み込み後、ＣＰＵ１０ａは、ステップＳ６０３へ処理を進める。
【０１１９】
ステップＳ６０３では、ＣＰＵ１０ａは、ステップＳ６０２又は後述のステップＳ６１６において読み込んだ処理対象文字列がどの種類の文字列であるかを、判別する。そして、処理対象文字列が内部宣言を示す文字列であると判断した場合（Ｓ６０３；内部宣言）、ＣＰＵ１０ａは、ステップＳ６０４へ処理を進める。
【０１２０】
ステップＳ６０４では、ＣＰＵ１０ａは、処理対象文字列が内部宣言のうちのどの種類の宣言を示す文字列であるかを、判別する。そして、処理対象文字列が変数の宣言を示す文字列であると判断した場合（Ｓ６０４；変数の宣言）、ＣＰＵ１０ａは、ステップＳ６０５へ処理を進める。
【０１２１】
ステップＳ６０５では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１２２】
次のステップＳ６０６では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、上記処理対象文字列中の変数名が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「変数の宣言」が引き渡される。さらに、登録プロセスには、「追加情報」フィールドに記録される情報として、第一に、文字列「名前＝"」と上記処理対象文字列中の変数名と文字列「"」とが引き渡され、第二に、文字列「型＝"」と上記処理対象文字列中の型指定子と文字列「"」とが引き渡され、第三に、文字列「初期値＝"」と上記処理対象文字列中の初期値（無い場合は空欄）と文字列「"」とが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、ステップＳ６１３へ処理を進める。
【０１２３】
一方、ステップＳ６０４において、処理対象文字列が関数の宣言を示す文字列であると判断した場合（Ｓ６０４；関数の宣言）、ＣＰＵ１０ａは、ステップＳ６０７へ処理を進める。
【０１２４】
ステップＳ６０７では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１２５】
次のステップＳ６０８では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、上記処理対象文字列中の関数名が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「関数の宣言」が引き渡される。さらに、登録プロセスには、「追加情報」フィールドに記録される情報として、第一に、文字列「名前＝"」と上記処理対象文字列中の関数名と文字列「"」とが引き渡され、第二に、文字列「リンケージ＝"」と上記処理対象文字列中のリンケージの予約語に対応する文字（「外部」と「内部」の何れか、予約語が無い場合は「外部」）と文字列「"」とが引き渡され、第三に、文字列「型＝"」と上記処理対象文字列中の各型指定子（返却値の型指定子＝（返却値の型指定子，…））と文字列「"」とが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、ステップＳ６１３へ処理を進める。
【０１２６】
一方、ステップＳ６０３において、ＣＰＵ１０ａは、ステップＳ６０２又は後述のステップＳ６１６において読み込んだ処理対象文字列が文を示す文字列であると判断した場合（Ｓ６０３；文）、ＣＰＵ１０ａは、ステップＳ６０９へ処理を進める。
【０１２７】
ステップＳ６０９では、ＣＰＵ１０ａは、処理対象文字列が文のうちのどの種類を示す文字列であるかを、判別する。そして、処理対象文字列がｉｆ文を示す文字列であると判断した場合（Ｓ６０９；ｉｆ文）、ＣＰＵ１０ａは、ステップＳ６１０へ処理を進める。
【０１２８】
ステップＳ６１０では、ＣＰＵ１０ａは、ｉｆ文登録処理を実行する。図１５は、ｉｆ文登録処理の内容を示すフローチャートである。
【０１２９】
ｉｆ文登録処理の開始後、最初のステップＳ７０１では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１３０】
次のステップＳ７０２では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、文字列「ｉｆ」が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「分岐」が引き渡され、「追加情報」フィールドに記録される情報として、文字列「種類＝"if"」が引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、ステップＳ７０３へ処理を進める。
【０１３１】
ステップＳ７０３では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り上げる。
【０１３２】
次のステップＳ７０４では、ＣＰＵ１０ａは、処理対象文字列の中から条件式（ｉｆの直後の括弧に囲まれた文字列）を読み込む。
【０１３３】
次のステップＳ７０５では、ＣＰＵ１０ａは、ステップＳ７０４において読み込んだ条件式を処理対象式文として、式文登録処理を実行する。図１６から図１８は、式文登録処理の内容を示すフローチャートである。
【０１３４】
式文登録処理の開始後、最初のステップＳ８０１では、ＣＰＵ１０ａは、処理対象式文の種類を判別する。そして、処理対象式文の種類が関数の呼出であると判断した場合（Ｓ８０１；関数の呼出）、ＣＰＵ１０ａは、ステップＳ８１１へ処理を進める。
【０１３５】
ステップＳ８１１では、ＣＰＵ１０ａは、処理対象式文に対応するハッシュ値をハッシュ関数を用いて算出し、前述したグローバルシンボル管理テーブルにおける当該ハッシュ値の示す番地から、処理対象式文の中の関数名を宣言している構成要素のＩＤを読み出す。
【０１３６】
次のステップＳ８１２では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１３７】
次のステップＳ８１３では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、処理対象式文の中の関数名が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「関数の呼出」が引き渡され、「追加情報」フィールドに記録される情報として、文字列「種類＝"」と上記関数名と「"」とが引き渡され、「参照先」フィールドに記録される情報として、ステップＳ８１１において読み出されたＩＤが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、ステップＳ８１４へ処理を進める。
【０１３８】
ステップＳ８１４では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り上げる。
【０１３９】
次のステップＳ８１５では、ＣＰＵ１０ａは、処理対象式文の中の関数が持つ一つ以上の引数を読み込む。
【０１４０】
次に、ＣＰＵ１０ａは、第１の処理ループＬ１を実行する。すなわち、ＣＰＵ１０ａは、ステップＳ８１５において読み込んだ各引数を一つずつ処理対象として特定することにより、全ての引数のそれぞれに対し、ステップＳ８６１を順に実行する。
【０１４１】
ステップＳ８６１では、ＣＰＵ１０ａは、式文登録処理を実行する。なお、この式文登録処理は、ここで説明している式文登録処理と同じものであるので、説明は省略する。また、この式文登録処理は、この時点で起動している説明中の式文登録処理とは別プロセスとして並行に実行される。この式文登録処理が実行されることによって、処理対象の引数が構成要素管理テーブル１８に登録されることとなる。この式文登録処理の実行後、ＣＰＵ１０ａは、処理対象の引数に対するステップＳ８６１の実行を終了する。
【０１４２】
ＣＰＵ１０ａは、ステップＳ８１５において読み込んだ全ての引数のそれぞれに対してステップＳ８６１を実行した後、ステップＳ８１６へ処理を進める。
【０１４３】
ステップＳ８１６では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り下げる。その後、ＣＰＵ１０ａは、式文登録処理を終了して、図１５のステップＳ７０６へ処理を進める。
【０１４４】
また、ステップＳ８０１において、処理対象式文の種類が条件式であると判断した場合（Ｓ８０１；条件式）、ＣＰＵ１０ａは、ステップＳ８２１へ処理を進める。
【０１４５】
ステップＳ８２１では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１４６】
次のステップＳ８２２では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、処理対象式文の中の条件式が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「条件式」が引き渡され、「追加情報」フィールドに記録される情報として、文字列「種類＝"」と上記条件式の種別を示す文字列（例えば「ｉｎｔ値の比較」）と「"」とが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、ステップＳ８２３へ処理を進める。
【０１４７】
ステップＳ８２３では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り上げる。
【０１４８】
次のステップＳ８２４では、ＣＰＵ１０ａは、処理対象式文の中の条件式の左辺と右辺とを読み込む。
【０１４９】
次に、ＣＰＵ１０ａは、第２の処理ループＬ２を実行する。すなわち、ＣＰＵ１０ａは、ステップＳ８２４において読み込んだ左辺と右辺とを一つずつ処理対象として特定することにより、各辺に対し、ステップＳ８７１を順に実行する。
【０１５０】
ステップＳ８７１では、ＣＰＵ１０ａは、式文登録処理を実行する。なお、前述したように、この式文登録処理は、ここで説明している式文登録処理と同じものであるので、説明は省略する。また、この式文登録処理は、この時点で起動している説明中の式文登録処理とは別プロセスとして並行に実行される。この式文登録処理が実行されることによって、処理対象の辺が構成要素管理テーブル１８に登録されることとなる。この式文登録処理の実行後、ＣＰＵ１０ａは、処理対象の辺に対するステップＳ８７１の実行を終了する。
【０１５１】
ＣＰＵ１０ａは、ステップＳ８１５において読み込んだ左辺と右辺とに対してステップＳ８７１をそれぞれ実行した後、ステップＳ８２５へ処理を進める。
【０１５２】
ステップＳ８２５では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り下げる。その後、ＣＰＵ１０ａは、式文登録処理を終了して、図１５のステップＳ７０６へ処理を進める。
【０１５３】
また、ステップＳ８０１において、処理対象式文の種類が関数の呼出でも条件式でもないと判断した場合（Ｓ８０１；その他）、ＣＰＵ１０ａは、処理対象式文が変数かマクロであるとして、ステップＳ８３１へ処理を進める。
【０１５４】
ステップＳ８３１では、ＣＰＵ１０ａは、ステップＳ８１１では、ＣＰＵ１０ａは、処理対象式文に対応するハッシュ値をハッシュ関数を用いて算出し、前述したグローバルシンボル管理テーブル，ローカルシンボル管理テーブル，及び、マクロシンボル管理テーブルのうち、このハッシュ値の示す番地を持つシンボル管理テーブルから、処理対象式文に対応する変数名又はマクロ名を宣言している構成要素のＩＤを読み出す。
【０１５５】
次のステップＳ８３２では、ＣＰＵ１０ａは、ステップＳ８３１においてＩＤが読み出されたシンボル管理テーブルが前述した三つのシンボル管理テーブルのうちのどれであるかを、判別する。そして、ＩＤが読み出されたシンボル管理テーブルがマクロシンボル管理テーブル以外であると判断した場合（Ｓ８３２；変数）、ＣＰＵ１０ａは、ステップＳ８３３へ処理を進める。
【０１５６】
ステップＳ８３３では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１５７】
次のステップＳ８３４では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、処理対象式文の中の変数名が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「変数の参照」が引き渡され、「追加情報」フィールドに記録される情報として、文字列「名前＝"」と上記変数名と「"」とが引き渡され、「参照先」フィールドに記録される情報として、ステップＳ８３１において読み出されたＩＤが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、式文登録処理を終了して、図１５のステップＳ７０６へ処理を進める。
【０１５８】
一方、ステップＳ８３２において、ＩＤが読み出されたシンボル管理テーブルがマクロシンボル管理テーブルであると判断した場合（Ｓ８３２；マクロ）、ＣＰＵ１０ａは、ステップＳ８３５へ処理を進める。
【０１５９】
ステップＳ８３５では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１６０】
次のステップＳ８３６では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、処理対象式文の中のマクロ名が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「マクロの参照」が引き渡され、「追加情報」フィールドに記録される情報として、文字列「名前＝"」と上記マクロ名と「"」とが引き渡され、「参照先」フィールドに記録される情報として、ステップＳ８３１において読み出されたＩＤが引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、ステップＳ８３７へ処理を進める。
【０１６１】
ステップＳ８３７では、ＣＰＵ１０ａは、処理対象式文におけるマクロ名の直後の括弧に囲まれる引数の個数が０であるか１以上であるかを、判別する。そして、ＣＰＵ１０ａは、引数の個数が０であると判断した場合（Ｓ８３７；０）、式文登録処理を終了して図１５のステップＳ７０６へ処理を進め、引数の個数が１以上であると判断した場合（Ｓ８３７；１以上）、ステップＳ８３８へ処理を進める。
【０１６２】
ステップＳ８３８では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り上げる。
【０１６３】
次のステップＳ８３９では、ＣＰＵ１０ａは、処理対象式文からこれら引数を読み込む。
【０１６４】
次に、ＣＰＵ１０ａは、第３の処理ループＬ３を実行する。すなわち、ＣＰＵ１０ａは、ステップＳ８３９において読み込んだ各引数を一つずつ処理対象として特定することにより、各引数に対し、ステップＳ８８１を順に実行する。
【０１６５】
ステップＳ８８１では、ＣＰＵ１０ａは、式文登録処理を実行する。なお、前述したように、この式文登録処理は、ここで説明している式文登録処理と同じものであるので、説明は省略する。また、この式文登録処理は、この時点で起動している説明中の式文登録処理とは別プロセスとして並行に実行される。この式文登録処理が実行されることによって、処理対象の引数が構成要素管理テーブル１８に登録されることとなる。この式文登録処理の実行後、ＣＰＵ１０ａは、処理対象の引数に対するステップＳ８８１の実行を終了する。
【０１６６】
ＣＰＵ１０ａは、ステップＳ８３９において読み込んだ全ての引数のそれぞれに対してステップＳ８８１を実行した後、ステップＳ８４０へ処理を進める。
【０１６７】
ステップＳ８４０では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り下げる。その後、ＣＰＵ１０ａは、式文登録処理を終了して、図１５のステップＳ７０６へ処理を進める。
【０１６８】
ステップＳ７０６では、ＣＰＵ１０ａは、処理対象文字列の中からthen節の文字列（ｉｆの直後の括弧の次に並ぶ文字列）を読み込む。なお、この文字列は、式文である場合もあるが、ブロック（複合文）やｉｆ文である場合もある。
【０１６９】
次のステップＳ７０７では、ＣＰＵ１０ａは、ステップＳ７０６において読み込んだ文字列を処理対象として、ブロック内解析処理を実行する。なお、このブロック内解析処理は、ここで説明しているブロック内解析処理と同じものであるので、説明は省略する。また、このブロック内解析処理は、この時点で起動している説明中のブロック内解析処理とは別プロセスとして並行に実行される。このブロック内解析処理が実行されることによって、ステップＳ７０６において読み込んだ文字列内の各構成要素が構成要素管理テーブル１８に登録されることとなる。このブロック内解析処理の実行後、ＣＰＵ１０ａは、ステップＳ７０８へ処理を進める。
【０１７０】
ステップＳ７０８では、ＣＰＵ１０ａは、処理対象文字列の次の行にelse節の文字列が存在するか否かを、判別する。そして、ＣＰＵ１０ａは、else節の文字列がないと判断した場合（Ｓ７０８；ＮＯ）、ステップＳ７１１へ処理を進め、else節の文字列があると判断した場合（Ｓ７０８；ＹＥＳ）、ステップＳ７０９へ処理を進める。
【０１７１】
ステップＳ７０９では、ＣＰＵ１０ａは、処理対象文字列の次の行の文字列を、新たな処理対象として読み込む。
【０１７２】
次のステップＳ７１０では、ＣＰＵ１０ａは、ステップＳ７０９において読み込まれたelse節の文字列を処理対象文字列として、ブロック内解析処理を実行する。なお、前述したように、このブロック内解析処理は、ここで説明しているブロック内解析処理と同じものであるので、説明は省略する。また、このブロック内解析処理は、この時点で起動している説明中のブロック内解析処理とは別プロセスとして並行に実行される。このブロック内解析処理が実行されることによって、ステップＳ７０９において新たに処理対象とされたelse節の文字列内の各構成要素が構成要素管理テーブル１８に登録されることとなる。このブロック内解析処理の実行後、ＣＰＵ１０ａは、ステップＳ７１１へ処理を進める。
【０１７３】
ステップＳ７１１では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り下げる。その後、ＣＰＵ１０ａは、ｉｆ文登録処理を終了して、図１４のステップＳ６１３へ処理を進める。
【０１７４】
また、図１４のステップＳ６０９において、処理対象文字列がreturn文を示す文字列であると判断した場合（Ｓ６０９；ｒｅｔｕｒｎ文）、ＣＰＵ１０ａは、ステップＳ６１１へ処理を進める。
【０１７５】
ステップＳ６１１では、ＣＰＵ１０ａは、ｒｅｔｕｒｎ文登録処理を実行する。図１９は、ｒｅｔｕｒｎ文登録処理の内容を示すフローチャートである。
【０１７６】
ｒｅｔｕｒｎ文登録処理の開始後、最初のステップＳ９０１では、ＣＰＵ１０ａは、事前に起動されている登録プロセス（図８参照）に対し、実行開始を指示する。
【０１７７】
次のステップＳ９０２では、ＣＰＵ１０ａは、実行開始を指示した登録プロセスに対し、登録に係る情報を引き渡す。登録プロセスには、構成要素管理テーブル１８における「構成要素」フィールドに記録するための情報として、文字列「ｒｅｔｕｒｎ」が引き渡され、「構成要素種類名」フィールドに記録するための情報として、文字列「制御文」が引き渡され、「追加情報」フィールドに記録される情報として、文字列「種類＝"return"」が引き渡される。ＣＰＵ１０ａは、登録プロセスに対して情報を引き渡した後、ステップＳ９０３へ処理を進める。
【０１７８】
ステップＳ９０３では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り上げる。
【０１７９】
次のステップＳ９０４では、ＣＰＵ１０ａは、処理対象文字列の中の復帰値（「return」の後に続く数値）を読み込む。
【０１８０】
次のステップＳ９０５では、ＣＰＵ１０ａは、ステップＳ９０４において読み込んだ復帰値を処理対象として、式文登録処理を実行する。なお、この式文登録処理の内容については、図１６乃至図１８を用いて先に説明しているので、ここでは説明を省略する。この式文登録処理が実行されることにより、復帰値が構成要素管理テーブル１８に登録されることとなる。この式文登録処理の実行後、ＣＰＵ１０ａは、ステップＳ９０６へ処理を進める。
【０１８１】
ステップＳ９０６では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り下げる。その後、ＣＰＵ１０ａは、ｒｅｔｕｒｎ文登録処理を終了し、図１４のステップＳ６１３へ処理を進める。
【０１８２】
また、図１４のステップＳ６０９において、処理対象文字列がif文を示す文字列でもreturn文を示す文字列でもないと判断した場合（Ｓ６０９；式文）、ＣＰＵ１０ａは、処理対象文字列が式文であるとして、ステップＳ６１２へ処理を進める。
【０１８３】
ステップＳ６１２では、ＣＰＵ１０ａは、処理対象文字列について、式文登録処理を実行する。なお、この式文登録処理の内容については、図１６から図１８を用いて先に説明しているので、ここでは説明を省略する。この式文登録処理が実行されることにより、処理対象文字列中の構成要素が構成要素管理テーブル１８に登録されることとなる。この式文登録処理の実行後、ＣＰＵ１０ａは、ステップＳ６１３へ処理を進める。
【０１８４】
ステップＳ６１３では、ＣＰＵ１０ａは、処理対象文字列において「/*」か「//」が存在するか否かを、判別する。そして、ＣＰＵ１０ａは、処理対象文字列において「/*」も「//」も存在していないと判断した場合（Ｓ６１３；ＮＯ）、ステップＳ６１５へ処理を進め、処理対象文字列以降に「/*」か「//」が存在していると判断した場合（Ｓ６１３；ＹＥＳ）、ステップＳ６１４へ処理を進める。
【０１８５】
ステップＳ６１４では、ＣＰＵ１０ａは、注釈文登録処理を実行する。なお、この注釈文登録処理の内容については、図１１を用いて先に説明したので、ここでは説明を省略する。この式文登録処理が実行されることにより、処理対象文字列以降の注釈文が構成要素管理テーブル１８に登録されることとなる。この注釈文登録処理の実行後、ＣＰＵ１０ａは、ステップＳ６１５へ処理を進める。
【０１８６】
ステップＳ６１５では、ＣＰＵ１０ａは、処理対象のブロック内の全ての行に対して処理をやり終えたか否かを、判別する。そして、処理対象のブロック内に未処理の行があると判断した場合（Ｓ６１５；ＮＯ）、ＣＰＵ１０ａは、ステップＳ６１６へ処理を進める。
【０１８７】
ステップＳ６１６では、ＣＰＵ１０ａは、処理対象のブロック内から次の行の文字列を処理対象として読み込む。その後、ＣＰＵ１０ａは、図１３のステップＳ６０３へ処理を戻す。
【０１８８】
一方、ステップＳ６１５において、処理対象のブロック内の全ての行に対して処理をやり終えたと判断した場合（Ｓ６１５；ＹＥＳ）、ＣＰＵ１０ａは、ステップＳ６１７へ処理を進める。
【０１８９】
ステップＳ６１７では、ＣＰＵ１０ａは、ＲＡＭ１０ｂ内の所定領域に記憶している階層番号を１だけ繰り下げる。その後、ＣＰＵ１０ａは、ブロック内解析処理を終了するとともに、図１２の外部宣言解析処理を終了して、図４のステップＳ１０８へ処理を進める。
【０１９０】
ステップＳ１０８では、ＣＰＵ１０ａは、ソースコード１２内の全ての行に対して処理をやり終えたか否かを、判別する。そして、ソースコード１２内に未処理の行があると判断した場合（Ｓ１０８；ＮＯ）、ＣＰＵ１０ａは、ステップＳ１０９へ処理を進める。
【０１９１】
ステップＳ１０９では、ＣＰＵ１０ａは、ソースコード１２内から次の行のテキストを処理対象として読み込む。その後、ＣＰＵ１０ａは、ステップＳ１０５へ処理を戻す。
【０１９２】
一方、ステップＳ１０８において、ソースコード１２内の全ての行に対して処理をやり終えたと判断した場合（Ｓ１０８；ＹＥＳ）、ＣＰＵ１０ａは、テーブル作成処理を終了する。
【０１９３】
以上に説明したテーブル作成処理が、図２に示されるソースコード１２の一例について実行されると、図３に示されるような内容の構成要素管理テーブル１８が作成されることとなる。
【０１９４】
ＣＰＵ１０ａは、ビューワ１７を起動した後、ビューワ１７の命令に従って、このテーブル作成処理を実行して、操作者に指定されたソースコード１２についての構成要素管理テーブル１８を作成する。そして、この構成要素管理テーブル１８を作成した後、ＣＰＵ１０ａは、ビューワ１７の命令に従って、操作者に指定されたソースコード１２を表示装置１０ｃに一覧表示する。そして、ＣＰＵ１０ａは、ビューワ１７の命令に従って、ソースコード検索プログラム１７ｂをＨＤＤ１０ｇから読み込んで、ソースコード検索処理を実行する。図２０は、ソースコード検索処理の内容を示すフローチャートである。
【０１９５】
ソースコード検索処理の開始後、最初のステップＳ１００１では、ＣＰＵ１０ａは、検索条件入力画面を表示装置１０ｃに表示する。なお、この検索条件入力画面は、図示していないが、検索条件を入力するためのテキストボックスを、含んでいる。なお、このテキストボックスには、少なくとも、構成要素種類名と追加情報のうちの一つとが検索条件として入力される。検索条件の入力表現の例としては、構成要素種類名と追加情報とをセミコロンにて区切ってなる「変数の参照；型＝"int"」がある。また、テキストボックスには、それに検索条件として入力される構成要素種類名に応じて、さらに、構成要素種類名と追加情報のうちの一つとからなる条件式が入力される場合がある。条件式が検索条件に追加される場合における入力表現の例としては、検索条件と括弧にて囲まれた条件式とをセミコロンにて区切ってなる「分岐；種類＝"if"；[制御文；種類＝"return"]」がある。この検索条件入力画面には、テキストボックスに対して入力を済んだ際にクリックされる実行ボタンと、検索を取り止める際にクリックされるキャンセルボタンとを、含んでいる。そして、ＣＰＵ１０ａは、この検索条件入力画面を表示装置１０ｃに表示した後、この画面上のボタンがクリックされるまで待機し、何れかのボタンがクリックされると、ステップＳ１００２へ処理を進める。
【０１９６】
ステップＳ１００２では、ＣＰＵ１０ａは、クリックされたボタンが実行ボタン（図示略）であるかキャンセルボタン（図示略）であるかを、判別する。そして、ＣＰＵ１０ａは、クリックされたボタンがキャンセルボタンであると判断した場合（Ｓ１００２；キャンセルボタン）、ソーステキスト検索処理を終了し、クリックされたボタンが実行ボタンであると判断した場合（Ｓ１００２；実行ボタン）、ステップＳ１００３へ処理を進める。
【０１９７】
ステップＳ１００３では、ＣＰＵ１０ａは、実行ボタン（図示略）がクリックされた時点でテキストボックス（図示略）に入力されていた構成要素種類名と追加情報とをキーとして、構成要素管理テーブル１８を検索する。
【０１９８】
次のステップＳ１００４では、ＣＰＵ１０ａは、検索条件として入力された構成要素種類名を「構成要素種類名」フィールドに格納するとともに検索条件として入力された追加情報を「追加情報」フィールドに格納するレコードを、構成要素管理テーブル１８から検出できたか否かを、判別する。そして、ＣＰＵ１０ａは、当該レコードを構成要素管理テーブル１８から検出できなかったと判断した場合（Ｓ１００４；ＮＯ）、ソーステキスト検索処理を終了し、当該レコードを構成要素管理テーブル１８から検出できたと判断した場合（Ｓ１００４；ＹＥＳ）、ステップＳ１００５へ処理を進める。
【０１９９】
ステップＳ１００５では、ＣＰＵ１０ａは、検索条件入力画面（図示略）のテキストボックスに入力された検索条件に条件式が追加されているか否かを、判別する。そして、ＣＰＵ１０ａは、当該検索条件に条件式が追加されていないと判断した場合（Ｓ１００５；ＮＯ）、ステップＳ１００８へ処理を進め、当該検索条件に条件式が追加されていると判断した場合（Ｓ１００５；ＹＥＳ）、ステップＳ１００６へ処理を進める。
【０２００】
ステップＳ１００６では、ＣＰＵ１０ａは、当該検索条件に追加されている条件式（構成要素種類名と追加情報）をキーとして、構成要素管理テーブル１８を検索する。
【０２０１】
次のステップＳ１００７では、ＣＰＵ１０ａは、当該条件式として入力された構成要素種類名及び追加情報をそれぞれ「構成要素種類名」及び「追加情報」フィールドに格納するレコードを、構成要素管理テーブル１８から検出できたか否かを、判別する。そして、そして、ＣＰＵ１０ａは、当該レコードを構成要素管理テーブル１８から検出できなかったと判断した場合（Ｓ１００７；ＮＯ）、ソーステキスト検索処理を終了し、当該レコードを構成要素管理テーブル１８から検出できたと判断した場合（Ｓ１００７；ＹＥＳ）、ステップＳ１００８へ処理を進める。
【０２０２】
ステップＳ１００８では、ＣＰＵ１０ａは、ステップＳ１００４において検出されたレコードの「記述位置」フィールドに格納される位置情報に基づいて、表示装置１０ｃに表示中のソースコード１２のうちの検出された構成要素を強調表示する。
【０２０３】
次のステップＳ１００９では、ＣＰＵ１０ａは、ステップＳ１００４において検出されたレコードの「参照先」フィールドに格納されるＩＤを読み込み、このＩＤと同じＩＤを持つレコードを構成要素管理テーブル１８から抽出する。
【０２０４】
次のステップＳ１０１０では、ＣＰＵ１０ａは、ステップＳ１００９において抽出したレコードの「記述位置」フィールドに格納される位置情報に基づいて、表示装置１０ｃに表示中のソースコード１２のうちの抽出された構成要素を強調表示する。その後、ＣＰＵ１０ａは、ソースコード検索処理を終了する。
【０２０５】
以上に説明したような処理が実行されるため、本実施形態のプログラム開発用装置１０は、以下に記述するように作用する。
【０２０６】
ソフトウエア開発に従事する開発者は、自分のプログラム開発用装置１０において、ビューワ１７を起動した後、内容を確認したいソースコード１２を指定して、オープンファイルを指示する。すると、指定したソースコード１２の内容が表示装置１０ｃに一覧表示される。このとき、プログラム開発用装置１０では、指定したソースコード１２についての構成要素管理テーブル１８が作成される。そして、表示装置１０ｃにソースコード１２の内容が表示された後、表示装置１０ｃには、ソースコード１２を表示しているウインドウの上に重なるように検索条件入力画面（図示略）が表示される。開発者は、この検索条件入力画面上のテキストボックスに、ソースコード１２の中で確認したい変数や関数やマクロなどを検出するための検索条件を入力し、場合によっては更に条件式を入力し、実行ボタンをクリックする。すると、表示装置１０ｃに表示中のソースコード１２の中で、検索条件に合致した構成要素と、その構成要素に関連する構成要素が有る場合にはその関連する構成要素とが、強調表示される。
【０２０７】
なお、強調表示される構成要素と検索条件との関係について説明する。例えば、開発者が、構成要素種類名の検索条件として「変数の宣言」を選択し、追加情報の検索条件として、「名前＝"a"」を選択したとする（上記の入力表現の例で言えば「変数の宣言；名前＝"a"」をテキストボックスに入力する）。すると、図３の構成要素管理テーブル１８からは、id06が付与されているレコードが検出され、そのレコードに基づいて、表示装置１０ｃに表示中のソースコード１２における７行目の「int a」が強調表示される。これにより、開発者は、ソースコード１２内における整数型変数「a」の宣言位置を、瞬時に確認することができる。
【０２０８】
また、開発者が、構成要素種類名の検索条件として「変数の参照」を選択し、追加情報の検索条件として「型＝"int"」を選択したとする（上記の入力表現の例で言えば「変数の参照；型＝"int"」をテキストボックスに入力する）。すると、図３の構成要素管理テーブル１８からは、id09，id11，id14，id15，id18，id19，id22が付与されているレコードが検出され、それらレコードに基づいて、表示装置１０ｃに表示中のソースコード１２における９行目，１０行目，１１行目，１３行目の「a」と「b」が強調表示される。更に、それら検出されたレコードの「参照先」フィールドに格納されているid06，id07が読み出され、これらid06，id07が付与されているレコードに基づいて、７行目と８行目の「a」と「b」が強調表示される。これにより、開発者は、ソースコード１２内における整数型変数「a」と「b」が利用されている位置とともに、これら「a」と「b」の宣言位置をも、瞬時に確認することができる。
【０２０９】
また、開発者が、構成要素種類名の検索条件として「分岐」を選択し、追加情報の検索条件として「種類＝"if"」を選択し、更に、ｉｆ文の下位階層の構造を検索するための条件式として「制御文」と「種類＝"return"」とを選択する（上記の入力表現の例で言えば「分岐；種類＝"if"；[制御文；種類＝"return"]」をテキストボックスに入力する）。すると、図３の構成要素管理テーブル１８からは、id12が付与されているレコードが検出され、さらに、そのレコードが検索結果として出力できるかどうかが、条件式[制御文；種類＝"return"]に基づいて判断される。そして、この条件式を用いた検索の結果、id16が付与されているレコードが検出されるため、id12のレコードが検索結果として出力可能となる。これにより、id12のレコードに基づいて、１０行目の「if」が強調表示される。開発者は、この強調表示により、下位構造の中に「return」を持つ「if」を、ソースコードの中から簡単に探し出すことができる。
【０２１０】
以上に説明したように作用するため、本実施形態のプログラム開発用装置１０によれば、文字列そのものを検索条件とせずとも、文法上の構成要素を示す構成要素種類名とその追加情報の一つとを検索条件としてソースコード１２を検出することができる。また、関数や変数やマクロが使用されている箇所と、それらを宣言又は定義している箇所とを、簡単に確認できるため、その宣言位置や定義位置を通じてスコープ範囲を瞬時に確認することが容易となる。さらに、検索対象を、ブロック内に規定の文字列を持っている予約語や関数とすることができるため、文法上誤りのあるブロック構造を簡単に発見することができるようになる。
【図面の簡単な説明】
【０２１１】
【図１】本発明の実施形態であるプログラム開発用装置の概略図
【図２】ソースコードの一例を示す図
【図３】構成要素管理テーブルのデータ構造の一例を示す図
【図４】テーブル作成処理の内容を示すフローチャート
【図５】字句取得処理の内容を示すフローチャート
【図６】前処理命令文解析処理の内容を示すフローチャート
【図７】#include行登録処理の内容を示すフローチャート
【図８】登録プロセスが実行する処理の内容を示すフローチャート
【図９】シンボル登録処理の内容を示すフローチャート
【図１０】#define行登録処理の内容を示すフローチャート
【図１１】注釈文登録処理の内容を示すフローチャート
【図１２】外部宣言解析処理の内容を示すフローチャート
【図１３】ブロック内解析処理の内容を示すフローチャート
【図１４】ブロック内解析処理の内容を示すフローチャート
【図１５】ｉｆ文登録処理の内容を示すフローチャート
【図１６】式文登録処理の内容を示すフローチャート
【図１７】式文登録処理の内容を示すフローチャート
【図１８】式文登録処理の内容を示すフローチャート
【図１９】ｒｅｔｕｒｎ文登録処理の内容を示すフローチャート
【図２０】ソースコード検索処理の内容を示すフローチャート
【符号の説明】
【０２１２】
１０    プログラム開発用装置
１０ａ  ＣＰＵ
１０ｂ  ＲＡＭ
１０ｃ  表示装置
１０ｄ  入力装置
１０ｅ  ＦＤＤ
１０ｆ  ＣＣＤ
１０ｇ  ＨＤＤ
１１    基本ソフトウエア
１２    ソースコード
１３    エディタ
１４    コンパイラ
１５    ライブラリ
１６    リンカ
１７    ビューワ
１７ａ  テーブル作成プログラム
１７ｂ  ソースコード検索プログラム
１８    構成要素管理テーブル
【図１】
2006085585.tif 000003
【図２】
2006085585.tif 000004
【図３】
2006085585.tif 000005
【図４】
2006085585.tif 000006
【図５】
2006085585.tif 000007
【図６】
2006085585.tif 000008
【図７】
2006085585.tif 000009
【図８】
2006085585.tif 000010
【図９】
2006085585.tif 000011
【図１０】
2006085585.tif 000012
【図１１】
2006085585.tif 000013
【図１２】
2006085585.tif 000014
【図１３】
2006085585.tif 000015
【図１４】
2006085585.tif 000016
【図１５】
2006085585.tif 000017
【図１６】
2006085585.tif 000018
【図１７】
2006085585.tif 000019
【図１８】
2006085585.tif 000020
【図１９】
2006085585.tif 000021
【図２０】
2006085585.tif 000022