(57)【特許請求の範囲】
【請求項１】
バッファを備えたコンピュータによりソースコード内のマクロ呼び出しをマクロ定義によって展開するマクロ展開方法であって、
前記コンピュータは、
前記ソースコードの文字列から字句解析により第１のトークンを切り出してトークン配列を生成するステップと、
前記トークン配列を入力として、前記トークン配列から順に前記第１のトークンを前記バッファに読み込むステップと、
前記バッファ内の前記各第１のトークンについて前記マクロ呼び出しに該当する部分であるか否かを判定し、前記マクロ呼び出しに該当する部分ではない場合に、前記バッファ内の前記各第１のトークンを処理結果として出力して前記バッファをクリアするステップと、
前記バッファ内の前記各第１のトークンが前記マクロ呼び出しに該当する部分である場合に、前記バッファ内の前記各第１のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定し、前記マクロ呼び出しとして完結している場合に、前記マクロ呼び出しとして完結している部分を対応する前記マクロ定義の内容によって置換して展開するステップと、
前記マクロ呼び出しを展開した文字列から字句解析により第２のトークンを切り出すステップと、
切り出した前記各第２のトークンを、入力の前記トークン配列の先頭に戻し、前記バッファにおいて前記マクロ呼び出しを展開した部分をクリアするステップとを実行することを特徴とするマクロ展開方法。
【請求項２】
請求項１に記載のマクロ展開方法において、
前記コンピュータは、
前記バッファ内の前記各第１のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定する際に、前記バッファ内の先頭からの前記各第１のトークンの全部または一部によって判定することを特徴とするマクロ展開方法。
【請求項３】
請求項１に記載のマクロ展開方法において、
前記コンピュータは、
前記バッファ内の前記各第１のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定する際に、前記バッファ内の後端からの前記各第１のトークンの全部または一部によって判定することを特徴とするマクロ展開方法。
【請求項４】
請求項１に記載のマクロ展開方法において、
前記コンピュータは、
前記バッファ内の前記各第１のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定する際に、前記コンピュータに対する指示に基づいて、前記バッファ内の先頭からの前記各第１のトークンの全部または一部によって判定するか、前記バッファ内の後端からの前記各第１のトークンの全部または一部によって判定するかを切り替えることを特徴とするマクロ展開方法。
【請求項５】
バッファを備えるコンピュータに、ソースコード内のマクロ呼び出しをマクロ定義によって展開するマクロ展開処理を実行させるためのプリプロセッサであって、
前記コンピュータに、
前記ソースコードの文字列から字句解析により第１のトークンを切り出してトークン配列を生成するステップと、
前記トークン配列を入力として、前記トークン配列から順に前記第１のトークンを前記バッファに読み込むステップと、
前記バッファ内の前記各第１のトークンについて前記マクロ呼び出しに該当する部分であるか否かを判定し、前記マクロ呼び出しに該当する部分ではない場合に、前記バッファ内の前記各第１のトークンを処理結果として出力して前記バッファをクリアするステップと、
前記バッファ内の前記各第１のトークンが前記マクロ呼び出しに該当する部分である場合に、前記バッファ内の前記各第１のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定し、前記マクロ呼び出しとして完結している場合に、前記マクロ呼び出しとして完結している部分を対応する前記マクロ定義の内容によって置換して展開するステップと、
前記マクロ呼び出しを展開した文字列から字句解析により第２のトークンを切り出すステップと、
切り出した前記各第２のトークンを、入力の前記トークン配列の先頭に戻し、前記バッファにおいて前記マクロ呼び出しを展開した部分をクリアするステップとを実行させることを特徴とするプリプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラミング言語などによって記述されたソースコードに対するマクロ展開の技術に関し、特に、多段のマクロ展開処理を含むマクロ展開方法およびプリプロセッサに適用して有効な技術に関するものである。
【背景技術】
【０００２】
プログラミング言語などによって記述されたソースコードに対しては、一般的に、コンパイラによって字句解析や構文解析、意味解析などが行われ、その後、最適化などの処理を経てオブジェクトコードが生成される。ここでコンパイラにおいては一般的に、ソースコードに対して字句解析を行う前に、プリプロセッサによって、ソースコード内のマクロ呼び出しを、ソースコードやヘッダファイルなどに定義されているマクロ定義によって展開するマクロ展開処理を含む前処理が行われる。
【０００３】
ここで、マクロ呼び出しには、例えば、マクロ呼び出しにおける入力パラメータがさらにマクロ呼び出しによって記述されているなど、マクロ呼び出しが多段のネスト構造で記述されている場合がある。
【０００４】
このとき、プリプロセッサでは、マクロ呼び出しを展開する際に、一般的には、例えば非特許文献１に記載されているように、マクロ呼び出しを展開した後、新たに展開されたテキストに対してさらにマクロ呼び出しがあるか否かのスキャンを行うことで、多段のネスト構造となっているマクロ呼び出しの展開を可能としている。なお、このような多段のマクロ呼び出しにおいて、ネストの内側から展開するか、外側から展開するかのいずれを優先させるかはコンパイラによって異なる場合がある。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“ＲＡＤ  Ｓｔｕｄｉｏオンラインヘルプ  Ｃ＋＋リファレンス”、[online]、EMBARCADERO TECHNOLOGIES、［平成２１年１１月２日検索］、インターネット＜URL:http://docwiki.embarcadero.com/RADStudio/ja/Define＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ここで、例えば、ソースコードの記述がプログラミングの規約・ルール等に沿っているか否かなどをチェックするコードチェックツールを考えた場合に、当該コードチェックツールは、一般的にコンパイラと同様のマクロ展開や、字句解析、構文解析などの処理を行い、その処理結果に対して種々の解析を行う機能を備えることになる。このとき、例えば、コードチェックツールのプリプロセッサは、当該ソースコードから実行可能プログラムを生成するために利用される実環境のコンパイラのプリプロセッサと同様の処理仕様を有していることが望ましい。
【０００７】
しかしながら従来のプリプロセッサでは、例えば、上述したような多段のマクロ呼び出しの展開の優先順について、これを変更可能とするような実装はされていない。従って、コードチェックツール等におけるプリプロセッサでは、多段のマクロ呼び出しの展開における優先順について、実環境のコンパイラの仕様に応じて適宜変更することが可能であるように柔軟に実装する必要がある。
【０００８】
またその際に、例えば、プリプロセッサに対する実行時の処理オプションの指定によって優先順に基づく処理の内容を切り替えられるようにするという手法などが考えられるが、切り替えによって実行される各処理は、プリプロセッサの開発・保守の生産性などを考慮すると、可能な限り簡素で、処理の重複も少なく効率的に実装できるのが望ましい。
【０００９】
一方、従来のプリプロセッサにおける多段のマクロ展開の処理方法自体についても、上述したように、マクロ呼び出しを展開した後、展開後のテキストに対してさらにマクロ呼び出しがあるか否か（マクロ展開が可能か否か）のスキャンを行うというのが一般的であり、プリプロセッサでの実装は効率性や柔軟性に乏しいものである。
【００１０】
そこで本発明の目的は、プリプロセッサにおいて多段のマクロ呼び出しの展開を含むマクロ展開処理を柔軟かつ簡素に実装することができるマクロ展開方法および当該マクロ展開方法を実装したプリプロセッサを提供することにある。本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、以下のとおりである。
【００１２】
本発明の代表的な実施の形態によるマクロ展開方法は、コンピュータプログラムによりソースコード内のマクロ呼び出しをマクロ定義によって展開するマクロ展開方法であって、以下のステップを実行することを特徴とするものである。
【００１３】
すなわち、前記コンピュータプログラムは、前記ソースコードの文字列から字句解析により第１のトークンを切り出してトークン配列を生成するステップと、前記トークン配列を入力として、前記トークン配列から順に前記第１のトークンをバッファに読み込むステップと、前記バッファ内の前記各第１のトークンについて前記マクロ呼び出しに該当する部分であるか否かを判定し、前記マクロ呼び出しに該当する部分ではない場合に、前記バッファ内の前記各第１のトークンを処理結果として出力して前記バッファをクリアするステップとを実行する。
【００１４】
さらに、前記バッファ内の前記各第１のトークンが前記マクロ呼び出しに該当する部分である場合に、前記バッファ内の前記各第１のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定し、前記マクロ呼び出しとして完結している場合に、前記マクロ呼び出しとして完結している部分を対応する前記マクロ定義の内容によって置換して展開するステップと、前記マクロ呼び出しを展開した文字列から字句解析により第２のトークンを切り出すステップと、切り出した前記各第２のトークンを、入力の前記トークン配列の先頭に戻し、前記バッファにおいて前記マクロ呼び出しを展開した部分をクリアするステップとを実行することを特徴とするものである。
【発明の効果】
【００１５】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。
【００１６】
本発明の代表的な実施の形態によれば、マクロ展開によって生成された文字列を入力文字列に戻すことで、プリプロセッサにおけるマクロ展開の処理アルゴリズムを簡素化し、マクロ展開処理の柔軟性やプリプロセッサの開発・保守の生産性などを向上させることが可能となる。
【図面の簡単な説明】
【００１７】
【図１】本発明の一実施の形態であるプリプロセッサにおけるマクロ展開処理の例を示したフローチャートである。
【図２】本発明の一実施の形態における多段のマクロ展開の処理例を示した図である。
【図３】本発明の一実施の形態における多段のマクロ展開の別の処理例を示した図である。
【発明を実施するための形態】
【００１８】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００１９】
本発明の一実施の形態であるプリプロセッサは、一般的なプリプロセッサと同様に、ソースコード内のマクロ呼び出しを、ソースコードやヘッダファイルなどに定義されているマクロ定義によって展開するマクロ展開処理を含む前処理を行い、処理結果として前処理後のソースコードを出力するソフトウェアプログラムである。
【００２０】
［マクロ展開処理フロー］
図１は、本実施の形態であるプリプロセッサにおけるマクロ展開処理の例を示したフローチャートである。プリプロセッサは、まず、ソースコードから文字を切り出して文字配列を生成する（Ｓ１０１）。次に、ソースコード（文字配列）に対して字句解析を行ってトークンを切り出してトークン配列を生成する（Ｓ１０２）。なお、ソースコードから文字を切り出し字句解析によってトークン化する手法については一般的なプリプロセッサのものと同様であるため、ここでの説明は省略する。
【００２１】
次に、ステップＳ１０１で切り出したトークン配列１１０内の各トークンを順に入力として処理を繰り返すループ処理を開始する（Ｓ１０３）。ループ処理では、まず、対象のトークンをマクロ展開処理用のバッファに読み込む（Ｓ１０４）。このとき、バッファ内に既にトークンが存在する場合は後端に連結する形で読み込む。なお、当該バッファは、プリプロセッサがマクロ展開処理時にプリプロセッサが動作するコンピュータシステムのメモリ上に設けるデータ領域である。
【００２２】
次に、プリプロセッサは、バッファ内のトークンがマクロ定義に該当する部分であるか否かを判定する（Ｓ１０５）。マクロ定義に該当する部分である場合は、バッファ内のトークンがマクロ定義として完結しているか否かを判定する（Ｓ１０６）。マクロ定義として完結している場合には、バッファ内のトークンの内容（マクロ定義）をマクロテーブルに出力してバッファをクリアする（Ｓ１０７）。なお、マクロテーブルに出力したトークンの内容（マクロ定義）について、後の解析において利用するために、後述するステップＳ１０９の処理と同様に拡張文字として出力してもよい。
【００２３】
ステップＳ１０６においてバッファ内のトークンがマクロ定義として完結していない場合は、次のトークンの処理に移る（Ｓ１１３、Ｓ１０３）。なお、ソースコードにおいてマクロ定義はマクロ呼び出しよりも前に記述されている必要があるため、通常は、以降のマクロ展開の処理が実行される前に、上記の処理によってマクロテーブルにマクロ定義が保持されることになる。
【００２４】
ステップＳ１０５においてバッファ内のトークンがマクロ定義に該当しない場合は、次に、バッファ内のトークンがマクロ呼び出しに該当する部分であるか否か、すなわち、マクロ定義に対する参照（呼び出し）を含んでいるか否かを判定する（Ｓ１０８）。マクロ呼び出しに該当しない場合は、バッファ内のトークンをマクロ展開の処理結果として出力してバッファをクリアし（Ｓ１０９）、次のトークンの処理に移る（Ｓ１１３、Ｓ１０３）。なお、バッファ内のトークンを処理結果として出力する際には、すでに出力されている結果の後端に連結する形で出力する。
【００２５】
ステップＳ１０８においてバッファ内のトークンがマクロ呼び出しに該当する部分である場合には、次に、バッファ内のトークンの全部または一部がマクロ呼び出しとして完結し、マクロ定義による展開が可能であるか否かを判定する（Ｓ１１０）。
【００２６】
ここで、マクロ展開が可能であるか否かを判定する際に、プリプロセッサに対する指示内容に応じて、多段のマクロ呼び出しにおいてネストの内側から展開するか外側から展開するかのいずれを優先させるかを切り替えることが可能であることが望ましい。すなわち、外側から優先的に展開する場合は、バッファ内のトークンを先頭から判断して、各トークンの連結がマクロ呼び出しとして完結している場合（すなわち、図１の処理フローではバッファ内の先頭から後端までの全てのトークンがマクロ呼び出しとして完結している場合）に、マクロ展開可能と判定する。
【００２７】
一方、内側から優先的に展開する場合は、バッファ内のトークンを逆に後端から判断して、トークン（バッファ内の一部のトークンである場合がある）の連結がマクロ呼び出しとして完結している場合に、当該トークンの部分についてマクロ展開可能と判定する。なお、プリプロセッサに対する、マクロ展開の際の内側からの展開と外側からの展開のいずれを優先させるかの指示は、プリプロセッサの実行時のオプションとして指示したり、設定ファイル等に予め指定しておいたりなど、種々の方法によって行うことができる。
【００２８】
ステップＳ１１０においてバッファ内のトークンの全部または一部がマクロ呼び出しとして完結しておらずマクロ展開できない場合は、次のトークンの処理に移る（Ｓ１１３、Ｓ１０３）。一方、マクロ展開が可能である場合には、バッファ内のマクロ呼び出しとして完結している部分のトークンをマクロ定義に対応するトークンにより置換して展開する（Ｓ１１１）。さらに、マクロ展開した部分のトークンを入力のトークン配列の先頭に戻して、マクロ展開した部分のバッファをクリアし（Ｓ１１２）、次のトークンの処理に移る（Ｓ１１３、Ｓ１０３）。
【００２９】
上記の処理を入力のトークン配列（ステップＳ１１２において戻されたトークンを含む）が空になるまで繰り返してマクロ展開の処理を終了する。これにより、ソースコード（トークン配列１１０の全てのトークン）に対してマクロ展開を行った結果の出力を得ることができる。
【００３０】
上述したように、本実施の形態では、バッファ内でマクロ展開した結果の文字列に対して、そのまま出力せずに、多段のマクロ展開を考慮して入力に戻す。これにより、バッファ内でマクロ展開した文字列に対してさらに再スキャンしてマクロ呼び出しの判定を行うというような処理を要さずにマクロ展開処理を実装することができる。また、多段のマクロ呼び出しにおいてネストの内側から展開するか外側から展開するかのいずれを優先させるかによって異なる処理を必要最小限に抑えることができるため、簡素かつ柔軟にマクロ展開処理を実装することができる。
【００３１】
［マクロ展開の具体例］
図２は、本実施の形態における多段のマクロ展開の処理例を示した図である。図２の例では、多段のマクロ呼び出しにおいてネストの外側から優先的に展開する場合の例を示している。すなわち、バッファ内に読み込んだトークンを先頭から判断して、各トークンの連結がマクロ呼び出しとして完結している場合（すなわち、本実施の形態ではバッファ内の先頭から後端までの全てのトークンがマクロ呼び出しとして完結している場合）に、マクロ展開可能と判定する。
【００３２】
図中で、ソースコード１００は、Ｃ言語で記述された多段のマクロ展開を有するソースコードである。なお、入力となるソースコード１００は、Ｃ言語などのプログラミング言語やＸＭＬ（eXtensible Markup Language）などのタグ言語によって記述されたものに限らず、マクロ定義およびマクロ呼び出しを有するものであれば適用可能である。また、ソースコード１００は複数のファイルから構成されていてもよく、例えば、マクロ定義を有するヘッダファイルなどを含んでいてもよい。
【００３３】
ソースコード１００の３行目の右辺は、マクロ定義“ＭＵＬ（ｘ，ｙ）”を呼び出しているが、その際に入力パラメータ“ｘ”としてマクロ定義“ＮＮ”を呼び出すという多段のマクロ呼び出しの構造を有している。この式は、図１のステップＳ１０１、Ｓ１０２の処理により、例えば図示するようなトークンに分割され、トークン配列１１０に保持される。プリプロセッサは、このトークン配列１１０を入力としてマクロ展開を行う。なお、この時点で、ソースコード１００の１行目および２行目のマクロ定義（“ＭＵＬ（ｘ，ｙ）”および“ＮＮ”）は、図１のステップＳ１０５、Ｓ１０６およびＳ１０７の処理によりマクロテーブルに登録されているものとする。
【００３４】
まず、入力のトークン配列１１０の先頭のトークン“ＭＵＬ”をマクロ展開処理用のバッファであるマクロ用バッファ１０に読み込む（図中の（１））。このとき、マクロ用バッファ１０内のトークン“ＭＵＬ”は、マクロ呼び出しに該当する部分（すなわち、マクロテーブルに登録されているマクロ定義“ＭＵＬ（ｘ，ｙ）”に該当する部分）であり、かつマクロ呼び出しとして完結していない（マクロ展開できない）ため、マクロ用バッファ１０の内容を出力せずに次のトークンの処理に移る（図中の（２））。
【００３５】
以降の処理では、入力のトークン配列１１０から順次トークンを読み込んでマクロ用バッファ１０の後端に連結するが、マクロ用バッファ１０内のトークンの連結がマクロ呼び出しとして完結しないため、読み込みを継続する。その後、“）”のトークンを読み込んだ時点で、マクロ用バッファ１０内の先頭からのトークンの連結“ＭＵＬ（ＮＮ，３）”がマクロ呼び出しとして完結し、マクロ展開可能となる（図中の（３））。
【００３６】
従って、プリプロセッサは、トークンの連結“ＭＵＬ（ＮＮ，３）”をマクロ定義“ＭＵＬ（ｘ，ｙ）”の内容“ｘ＊ｙ”によって展開し、文字列“ＮＮ＊３”を得る。その後、文字列“ＮＮ＊３”を、図１のステップＳ１１２の処理によって“ＮＮ”、“＊”、“３”の各トークンに分割して切り出す。切り出した各トークンは出力せず、図１のステップＳ１１３の処理により多段のマクロ展開を考慮して入力のトークン配列１１０の先頭に戻す。
【００３７】
次のトークンの処理として、プリプロセッサは、入力のトークン配列１１０の先頭のトークン“ＮＮ”をマクロ用バッファ１０に読み込む（図中の（４））。このとき、マクロ用バッファ１０内のトークン“ＮＮ”は、マクロ呼び出しに該当する部分であり、かつマクロ呼び出しとして完結し、マクロ展開可能である（図中の（５））。従って、プリプロセッサは、トークン“ＮＮ”をマクロ定義によって展開して文字列“１０”を得て、これをトークンとして切り出す。切り出したトークンは出力せず、多段のマクロ展開を考慮して入力のトークン配列１１０の先頭に戻す。
【００３８】
次のトークンの処理として、プリプロセッサは、入力のトークン配列１１０の先頭のトークン“１０”をマクロ用バッファ１０に読み込む（図中の（６））。このとき、マクロ用バッファ１０内のトークン“１０”は、マクロ呼び出しに該当しないため、プリプロセッサは、マクロ用バッファ１０の内容（トークン“１０”）をマクロ展開結果として出力し、次のトークンをマクロ用バッファ１０に読み込む（図中の（７）、（８））。以降のトークンは全てマクロ呼び出しに該当しないためそのまま出力され、トークン配列１１０の全てのトークンを処理した後に、マクロ展開処理の結果として“１０＊３；”の文字列を得ることができる。
【００３９】
一方、図３は、本実施の形態における多段のマクロ展開の別の処理例を示した図である。図３の例では、多段のマクロ呼び出しにおいてネストの内側から優先的に展開する場合の例を示している。すなわち、マクロ用バッファ１０内のトークンを逆に後端から判断して、トークンの連結がマクロ呼び出しとして完結している場合に、当該トークンの部分についてマクロ展開可能と判定する。
【００４０】
図中の（１）および（２）までの処理は、上述の図２の（１）および（２）で示したものと同様である。その後、入力のトークン配列１１０から順次トークンを読み込んでマクロ用バッファ１０の後端に連結するが、“ＮＮ”のトークンを読み込んだ時点で、マクロ用バッファ１０内の後端のトークン“ＮＮ”がマクロ呼び出しとして完結し、マクロ展開可能となる（図中の（３））。従って、プリプロセッサは、トークン“ＮＮ”をマクロ定義によって展開して文字列“１０”を得て、図２の例と同様に、図１のステップＳ１１２の処理によって文字列“１０”をトークンとして切り出す。切り出したトークンは出力せず、図１のステップＳ１１３によって、多段のマクロ展開を考慮して入力のトークン配列１１０の先頭に戻す。
【００４１】
次のトークンの処理として、プリプロセッサは、入力のトークン配列１１０の先頭のトークン“１０”をマクロ用バッファ１０に読み込む（図中の（４））。このとき、マクロ用バッファ１０内のトークン“ＭＵＬ（１０”は、マクロ呼び出しに該当する部分であり、かつマクロ呼び出しとして完結していないため、マクロ用バッファ１０の内容を出力せずに次のトークンの処理に移る（図中の（５））。
【００４２】
以降の処理では、入力のトークン配列１１０から順次トークンを読み込んでマクロ用バッファ１０の後端に連結するが、マクロ用バッファ１０内のトークンの連結がマクロ呼び出しとして完結しないため、読み込みを継続する。その後、“）”のトークンを読み込んだ時点で、マクロ用バッファ１０内の後端からのトークンの連結“ＭＵＬ（１０，３）”がマクロ呼び出しとして完結し、マクロ展開可能となる（図中の（６））。
【００４３】
従って、プリプロセッサは、トークンの連結“ＭＵＬ（１０，３）”をマクロ定義“ＭＵＬ（ｘ，ｙ）”の内容“ｘ＊ｙ”によって展開し、文字列“１０＊３”を得る。その後、文字列“１０＊３”を“１０”、“＊”、“３”の各トークンに分割して切り出す。切り出した各トークンは出力せず、多段のマクロ展開を考慮して入力のトークン配列１１０の先頭に戻す。以降の（７）〜（１０）の処理は、上述の図２の（６）〜（９）で示したものと同様である。
【００４４】
以上に示したように、本発明の一実施の形態であるプリプロセッサのマクロ展開方法によれば、マクロ用バッファ１０内でマクロ展開した文字列に対して、そのまま出力せずに、多段のマクロ展開を考慮して入力に戻すことで、バッファ内でマクロ展開した文字列に対してさらに再スキャンしてマクロ呼び出しの判定を行うというような処理を実装することを要しない。
【００４５】
また、多段のマクロ呼び出しにおいてネストの内側から展開するのか外側から展開するのかのいずれを優先させるかによって異なる処理を、マクロ用バッファ１０内のトークンに対するマクロ展開の可否（マクロ呼び出しが完結しているか否か）をマクロ用バッファ１０の先頭から判断するか後端から判断するかという必要最小限の処理の相違に抑えることができる。これらにより、プリプロセッサにおいて簡素かつ柔軟にマクロ展開処理を実装することができる。
【００４６】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【００４７】
例えば、本実施の形態におけるマクロ展開方法は、上述したプリプロセッサに限らずマクロ呼び出しをマクロ定義によって展開するマクロ展開処理を行う種々のソフトウェアプログラムに適用可能である。
【産業上の利用可能性】
【００４８】
本発明は、プログラミング言語などによって記述されたソースコードに対する多段のマクロ展開処理を含むマクロ展開方法およびプリプロセッサに利用可能である。
【符号の説明】
【００４９】
１０…マクロ用バッファ、１００…ソースコード、１１０…トークン配列。
【図１】
0005385103.tif 000002
【図２】
0005385103.tif 000003
【図３】
0005385103.tif 000004