JP5385103B2 - マクロ展開方法およびプリプロセッサ - Google Patents

マクロ展開方法およびプリプロセッサ Download PDF

Info

Publication number
JP5385103B2
JP5385103B2 JP2009266740A JP2009266740A JP5385103B2 JP 5385103 B2 JP5385103 B2 JP 5385103B2 JP 2009266740 A JP2009266740 A JP 2009266740A JP 2009266740 A JP2009266740 A JP 2009266740A JP 5385103 B2 JP5385103 B2 JP 5385103B2
Authority
JP
Japan
Prior art keywords
macro
token
buffer
call
completed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009266740A
Other languages
English (en)
Other versions
JP2011113148A (ja
Inventor
勇 長谷川
綾太郎 木村
俊介 山城
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nomura Research Institute Ltd
Original Assignee
Nomura Research Institute Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nomura Research Institute Ltd filed Critical Nomura Research Institute Ltd
Priority to JP2009266740A priority Critical patent/JP5385103B2/ja
Publication of JP2011113148A publication Critical patent/JP2011113148A/ja
Application granted granted Critical
Publication of JP5385103B2 publication Critical patent/JP5385103B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、プログラミング言語などによって記述されたソースコードに対するマクロ展開の技術に関し、特に、多段のマクロ展開処理を含むマクロ展開方法およびプリプロセッサに適用して有効な技術に関するものである。
プログラミング言語などによって記述されたソースコードに対しては、一般的に、コンパイラによって字句解析や構文解析、意味解析などが行われ、その後、最適化などの処理を経てオブジェクトコードが生成される。ここでコンパイラにおいては一般的に、ソースコードに対して字句解析を行う前に、プリプロセッサによって、ソースコード内のマクロ呼び出しを、ソースコードやヘッダファイルなどに定義されているマクロ定義によって展開するマクロ展開処理を含む前処理が行われる。
ここで、マクロ呼び出しには、例えば、マクロ呼び出しにおける入力パラメータがさらにマクロ呼び出しによって記述されているなど、マクロ呼び出しが多段のネスト構造で記述されている場合がある。
このとき、プリプロセッサでは、マクロ呼び出しを展開する際に、一般的には、例えば非特許文献1に記載されているように、マクロ呼び出しを展開した後、新たに展開されたテキストに対してさらにマクロ呼び出しがあるか否かのスキャンを行うことで、多段のネスト構造となっているマクロ呼び出しの展開を可能としている。なお、このような多段のマクロ呼び出しにおいて、ネストの内側から展開するか、外側から展開するかのいずれを優先させるかはコンパイラによって異なる場合がある。
"RAD Studioオンラインヘルプ C++リファレンス"、[online]、EMBARCADERO TECHNOLOGIES、[平成21年11月2日検索]、インターネット<URL:http://docwiki.embarcadero.com/RADStudio/ja/Define>
ここで、例えば、ソースコードの記述がプログラミングの規約・ルール等に沿っているか否かなどをチェックするコードチェックツールを考えた場合に、当該コードチェックツールは、一般的にコンパイラと同様のマクロ展開や、字句解析、構文解析などの処理を行い、その処理結果に対して種々の解析を行う機能を備えることになる。このとき、例えば、コードチェックツールのプリプロセッサは、当該ソースコードから実行可能プログラムを生成するために利用される実環境のコンパイラのプリプロセッサと同様の処理仕様を有していることが望ましい。
しかしながら従来のプリプロセッサでは、例えば、上述したような多段のマクロ呼び出しの展開の優先順について、これを変更可能とするような実装はされていない。従って、コードチェックツール等におけるプリプロセッサでは、多段のマクロ呼び出しの展開における優先順について、実環境のコンパイラの仕様に応じて適宜変更することが可能であるように柔軟に実装する必要がある。
またその際に、例えば、プリプロセッサに対する実行時の処理オプションの指定によって優先順に基づく処理の内容を切り替えられるようにするという手法などが考えられるが、切り替えによって実行される各処理は、プリプロセッサの開発・保守の生産性などを考慮すると、可能な限り簡素で、処理の重複も少なく効率的に実装できるのが望ましい。
一方、従来のプリプロセッサにおける多段のマクロ展開の処理方法自体についても、上述したように、マクロ呼び出しを展開した後、展開後のテキストに対してさらにマクロ呼び出しがあるか否か(マクロ展開が可能か否か)のスキャンを行うというのが一般的であり、プリプロセッサでの実装は効率性や柔軟性に乏しいものである。
そこで本発明の目的は、プリプロセッサにおいて多段のマクロ呼び出しの展開を含むマクロ展開処理を柔軟かつ簡素に実装することができるマクロ展開方法および当該マクロ展開方法を実装したプリプロセッサを提供することにある。本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、以下のとおりである。
本発明の代表的な実施の形態によるマクロ展開方法は、コンピュータプログラムによりソースコード内のマクロ呼び出しをマクロ定義によって展開するマクロ展開方法であって、以下のステップを実行することを特徴とするものである。
すなわち、前記コンピュータプログラムは、前記ソースコードの文字列から字句解析により第1のトークンを切り出してトークン配列を生成するステップと、前記トークン配列を入力として、前記トークン配列から順に前記第1のトークンをバッファに読み込むステップと、前記バッファ内の前記各第1のトークンについて前記マクロ呼び出しに該当する部分であるか否かを判定し、前記マクロ呼び出しに該当する部分ではない場合に、前記バッファ内の前記各第1のトークンを処理結果として出力して前記バッファをクリアするステップとを実行する。
さらに、前記バッファ内の前記各第1のトークンが前記マクロ呼び出しに該当する部分である場合に、前記バッファ内の前記各第1のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定し、前記マクロ呼び出しとして完結している場合に、前記マクロ呼び出しとして完結している部分を対応する前記マクロ定義の内容によって置換して展開するステップと、前記マクロ呼び出しを展開した文字列から字句解析により第2のトークンを切り出すステップと、切り出した前記各第2のトークンを、入力の前記トークン配列の先頭に戻し、前記バッファにおいて前記マクロ呼び出しを展開した部分をクリアするステップとを実行することを特徴とするものである。
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。
本発明の代表的な実施の形態によれば、マクロ展開によって生成された文字列を入力文字列に戻すことで、プリプロセッサにおけるマクロ展開の処理アルゴリズムを簡素化し、マクロ展開処理の柔軟性やプリプロセッサの開発・保守の生産性などを向上させることが可能となる。
本発明の一実施の形態であるプリプロセッサにおけるマクロ展開処理の例を示したフローチャートである。 本発明の一実施の形態における多段のマクロ展開の処理例を示した図である。 本発明の一実施の形態における多段のマクロ展開の別の処理例を示した図である。
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一の符号を付し、その繰り返しの説明は省略する。
本発明の一実施の形態であるプリプロセッサは、一般的なプリプロセッサと同様に、ソースコード内のマクロ呼び出しを、ソースコードやヘッダファイルなどに定義されているマクロ定義によって展開するマクロ展開処理を含む前処理を行い、処理結果として前処理後のソースコードを出力するソフトウェアプログラムである。
[マクロ展開処理フロー]
図1は、本実施の形態であるプリプロセッサにおけるマクロ展開処理の例を示したフローチャートである。プリプロセッサは、まず、ソースコードから文字を切り出して文字配列を生成する(S101)。次に、ソースコード(文字配列)に対して字句解析を行ってトークンを切り出してトークン配列を生成する(S102)。なお、ソースコードから文字を切り出し字句解析によってトークン化する手法については一般的なプリプロセッサのものと同様であるため、ここでの説明は省略する。
次に、ステップS101で切り出したトークン配列110内の各トークンを順に入力として処理を繰り返すループ処理を開始する(S103)。ループ処理では、まず、対象のトークンをマクロ展開処理用のバッファに読み込む(S104)。このとき、バッファ内に既にトークンが存在する場合は後端に連結する形で読み込む。なお、当該バッファは、プリプロセッサがマクロ展開処理時にプリプロセッサが動作するコンピュータシステムのメモリ上に設けるデータ領域である。
次に、プリプロセッサは、バッファ内のトークンがマクロ定義に該当する部分であるか否かを判定する(S105)。マクロ定義に該当する部分である場合は、バッファ内のトークンがマクロ定義として完結しているか否かを判定する(S106)。マクロ定義として完結している場合には、バッファ内のトークンの内容(マクロ定義)をマクロテーブルに出力してバッファをクリアする(S107)。なお、マクロテーブルに出力したトークンの内容(マクロ定義)について、後の解析において利用するために、後述するステップS109の処理と同様に拡張文字として出力してもよい。
ステップS106においてバッファ内のトークンがマクロ定義として完結していない場合は、次のトークンの処理に移る(S113、S103)。なお、ソースコードにおいてマクロ定義はマクロ呼び出しよりも前に記述されている必要があるため、通常は、以降のマクロ展開の処理が実行される前に、上記の処理によってマクロテーブルにマクロ定義が保持されることになる。
ステップS105においてバッファ内のトークンがマクロ定義に該当しない場合は、次に、バッファ内のトークンがマクロ呼び出しに該当する部分であるか否か、すなわち、マクロ定義に対する参照(呼び出し)を含んでいるか否かを判定する(S108)。マクロ呼び出しに該当しない場合は、バッファ内のトークンをマクロ展開の処理結果として出力してバッファをクリアし(S109)、次のトークンの処理に移る(S113、S103)。なお、バッファ内のトークンを処理結果として出力する際には、すでに出力されている結果の後端に連結する形で出力する。
ステップS108においてバッファ内のトークンがマクロ呼び出しに該当する部分である場合には、次に、バッファ内のトークンの全部または一部がマクロ呼び出しとして完結し、マクロ定義による展開が可能であるか否かを判定する(S110)。
ここで、マクロ展開が可能であるか否かを判定する際に、プリプロセッサに対する指示内容に応じて、多段のマクロ呼び出しにおいてネストの内側から展開するか外側から展開するかのいずれを優先させるかを切り替えることが可能であることが望ましい。すなわち、外側から優先的に展開する場合は、バッファ内のトークンを先頭から判断して、各トークンの連結がマクロ呼び出しとして完結している場合(すなわち、図1の処理フローではバッファ内の先頭から後端までの全てのトークンがマクロ呼び出しとして完結している場合)に、マクロ展開可能と判定する。
一方、内側から優先的に展開する場合は、バッファ内のトークンを逆に後端から判断して、トークン(バッファ内の一部のトークンである場合がある)の連結がマクロ呼び出しとして完結している場合に、当該トークンの部分についてマクロ展開可能と判定する。なお、プリプロセッサに対する、マクロ展開の際の内側からの展開と外側からの展開のいずれを優先させるかの指示は、プリプロセッサの実行時のオプションとして指示したり、設定ファイル等に予め指定しておいたりなど、種々の方法によって行うことができる。
ステップS110においてバッファ内のトークンの全部または一部がマクロ呼び出しとして完結しておらずマクロ展開できない場合は、次のトークンの処理に移る(S113、S103)。一方、マクロ展開が可能である場合には、バッファ内のマクロ呼び出しとして完結している部分のトークンをマクロ定義に対応するトークンにより置換して展開する(S111)。さらに、マクロ展開した部分のトークンを入力のトークン配列の先頭に戻して、マクロ展開した部分のバッファをクリアし(S112)、次のトークンの処理に移る(S113、S103)。
上記の処理を入力のトークン配列(ステップS112において戻されたトークンを含む)が空になるまで繰り返してマクロ展開の処理を終了する。これにより、ソースコード(トークン配列110の全てのトークン)に対してマクロ展開を行った結果の出力を得ることができる。
上述したように、本実施の形態では、バッファ内でマクロ展開した結果の文字列に対して、そのまま出力せずに、多段のマクロ展開を考慮して入力に戻す。これにより、バッファ内でマクロ展開した文字列に対してさらに再スキャンしてマクロ呼び出しの判定を行うというような処理を要さずにマクロ展開処理を実装することができる。また、多段のマクロ呼び出しにおいてネストの内側から展開するか外側から展開するかのいずれを優先させるかによって異なる処理を必要最小限に抑えることができるため、簡素かつ柔軟にマクロ展開処理を実装することができる。
[マクロ展開の具体例]
図2は、本実施の形態における多段のマクロ展開の処理例を示した図である。図2の例では、多段のマクロ呼び出しにおいてネストの外側から優先的に展開する場合の例を示している。すなわち、バッファ内に読み込んだトークンを先頭から判断して、各トークンの連結がマクロ呼び出しとして完結している場合(すなわち、本実施の形態ではバッファ内の先頭から後端までの全てのトークンがマクロ呼び出しとして完結している場合)に、マクロ展開可能と判定する。
図中で、ソースコード100は、C言語で記述された多段のマクロ展開を有するソースコードである。なお、入力となるソースコード100は、C言語などのプログラミング言語やXML(eXtensible Markup Language)などのタグ言語によって記述されたものに限らず、マクロ定義およびマクロ呼び出しを有するものであれば適用可能である。また、ソースコード100は複数のファイルから構成されていてもよく、例えば、マクロ定義を有するヘッダファイルなどを含んでいてもよい。
ソースコード100の3行目の右辺は、マクロ定義“MUL(x,y)”を呼び出しているが、その際に入力パラメータ“x”としてマクロ定義“NN”を呼び出すという多段のマクロ呼び出しの構造を有している。この式は、図1のステップS101、S102の処理により、例えば図示するようなトークンに分割され、トークン配列110に保持される。プリプロセッサは、このトークン配列110を入力としてマクロ展開を行う。なお、この時点で、ソースコード100の1行目および2行目のマクロ定義(“MUL(x,y)”および“NN”)は、図1のステップS105、S106およびS107の処理によりマクロテーブルに登録されているものとする。
まず、入力のトークン配列110の先頭のトークン“MUL”をマクロ展開処理用のバッファであるマクロ用バッファ10に読み込む(図中の(1))。このとき、マクロ用バッファ10内のトークン“MUL”は、マクロ呼び出しに該当する部分(すなわち、マクロテーブルに登録されているマクロ定義“MUL(x,y)”に該当する部分)であり、かつマクロ呼び出しとして完結していない(マクロ展開できない)ため、マクロ用バッファ10の内容を出力せずに次のトークンの処理に移る(図中の(2))。
以降の処理では、入力のトークン配列110から順次トークンを読み込んでマクロ用バッファ10の後端に連結するが、マクロ用バッファ10内のトークンの連結がマクロ呼び出しとして完結しないため、読み込みを継続する。その後、“)”のトークンを読み込んだ時点で、マクロ用バッファ10内の先頭からのトークンの連結“MUL(NN,3)”がマクロ呼び出しとして完結し、マクロ展開可能となる(図中の(3))。
従って、プリプロセッサは、トークンの連結“MUL(NN,3)”をマクロ定義“MUL(x,y)”の内容“x*y”によって展開し、文字列“NN*3”を得る。その後、文字列“NN*3”を、図1のステップS112の処理によって“NN”、“*”、“3”の各トークンに分割して切り出す。切り出した各トークンは出力せず、図1のステップS113の処理により多段のマクロ展開を考慮して入力のトークン配列110の先頭に戻す。
次のトークンの処理として、プリプロセッサは、入力のトークン配列110の先頭のトークン“NN”をマクロ用バッファ10に読み込む(図中の(4))。このとき、マクロ用バッファ10内のトークン“NN”は、マクロ呼び出しに該当する部分であり、かつマクロ呼び出しとして完結し、マクロ展開可能である(図中の(5))。従って、プリプロセッサは、トークン“NN”をマクロ定義によって展開して文字列“10”を得て、これをトークンとして切り出す。切り出したトークンは出力せず、多段のマクロ展開を考慮して入力のトークン配列110の先頭に戻す。
次のトークンの処理として、プリプロセッサは、入力のトークン配列110の先頭のトークン“10”をマクロ用バッファ10に読み込む(図中の(6))。このとき、マクロ用バッファ10内のトークン“10”は、マクロ呼び出しに該当しないため、プリプロセッサは、マクロ用バッファ10の内容(トークン“10”)をマクロ展開結果として出力し、次のトークンをマクロ用バッファ10に読み込む(図中の(7)、(8))。以降のトークンは全てマクロ呼び出しに該当しないためそのまま出力され、トークン配列110の全てのトークンを処理した後に、マクロ展開処理の結果として“10*3;”の文字列を得ることができる。
一方、図3は、本実施の形態における多段のマクロ展開の別の処理例を示した図である。図3の例では、多段のマクロ呼び出しにおいてネストの内側から優先的に展開する場合の例を示している。すなわち、マクロ用バッファ10内のトークンを逆に後端から判断して、トークンの連結がマクロ呼び出しとして完結している場合に、当該トークンの部分についてマクロ展開可能と判定する。
図中の(1)および(2)までの処理は、上述の図2の(1)および(2)で示したものと同様である。その後、入力のトークン配列110から順次トークンを読み込んでマクロ用バッファ10の後端に連結するが、“NN”のトークンを読み込んだ時点で、マクロ用バッファ10内の後端のトークン“NN”がマクロ呼び出しとして完結し、マクロ展開可能となる(図中の(3))。従って、プリプロセッサは、トークン“NN”をマクロ定義によって展開して文字列“10”を得て、図2の例と同様に、図1のステップS112の処理によって文字列“10”をトークンとして切り出す。切り出したトークンは出力せず、図1のステップS113によって、多段のマクロ展開を考慮して入力のトークン配列110の先頭に戻す。
次のトークンの処理として、プリプロセッサは、入力のトークン配列110の先頭のトークン“10”をマクロ用バッファ10に読み込む(図中の(4))。このとき、マクロ用バッファ10内のトークン“MUL(10”は、マクロ呼び出しに該当する部分であり、かつマクロ呼び出しとして完結していないため、マクロ用バッファ10の内容を出力せずに次のトークンの処理に移る(図中の(5))。
以降の処理では、入力のトークン配列110から順次トークンを読み込んでマクロ用バッファ10の後端に連結するが、マクロ用バッファ10内のトークンの連結がマクロ呼び出しとして完結しないため、読み込みを継続する。その後、“)”のトークンを読み込んだ時点で、マクロ用バッファ10内の後端からのトークンの連結“MUL(10,3)”がマクロ呼び出しとして完結し、マクロ展開可能となる(図中の(6))。
従って、プリプロセッサは、トークンの連結“MUL(10,3)”をマクロ定義“MUL(x,y)”の内容“x*y”によって展開し、文字列“10*3”を得る。その後、文字列“10*3”を“10”、“*”、“3”の各トークンに分割して切り出す。切り出した各トークンは出力せず、多段のマクロ展開を考慮して入力のトークン配列110の先頭に戻す。以降の(7)〜(10)の処理は、上述の図2の(6)〜(9)で示したものと同様である。
以上に示したように、本発明の一実施の形態であるプリプロセッサのマクロ展開方法によれば、マクロ用バッファ10内でマクロ展開した文字列に対して、そのまま出力せずに、多段のマクロ展開を考慮して入力に戻すことで、バッファ内でマクロ展開した文字列に対してさらに再スキャンしてマクロ呼び出しの判定を行うというような処理を実装することを要しない。
また、多段のマクロ呼び出しにおいてネストの内側から展開するのか外側から展開するのかのいずれを優先させるかによって異なる処理を、マクロ用バッファ10内のトークンに対するマクロ展開の可否(マクロ呼び出しが完結しているか否か)をマクロ用バッファ10の先頭から判断するか後端から判断するかという必要最小限の処理の相違に抑えることができる。これらにより、プリプロセッサにおいて簡素かつ柔軟にマクロ展開処理を実装することができる。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
例えば、本実施の形態におけるマクロ展開方法は、上述したプリプロセッサに限らずマクロ呼び出しをマクロ定義によって展開するマクロ展開処理を行う種々のソフトウェアプログラムに適用可能である。
本発明は、プログラミング言語などによって記述されたソースコードに対する多段のマクロ展開処理を含むマクロ展開方法およびプリプロセッサに利用可能である。
10…マクロ用バッファ、100…ソースコード、110…トークン配列。

Claims (5)

  1. バッファを備えたコンピュータによりソースコード内のマクロ呼び出しをマクロ定義によって展開するマクロ展開方法であって、
    前記コンピュータは
    前記ソースコードの文字列から字句解析により第1のトークンを切り出してトークン配列を生成するステップと、
    前記トークン配列を入力として、前記トークン配列から順に前記第1のトークンを前記バッファに読み込むステップと、
    前記バッファ内の前記各第1のトークンについて前記マクロ呼び出しに該当する部分であるか否かを判定し、前記マクロ呼び出しに該当する部分ではない場合に、前記バッファ内の前記各第1のトークンを処理結果として出力して前記バッファをクリアするステップと、
    前記バッファ内の前記各第1のトークンが前記マクロ呼び出しに該当する部分である場合に、前記バッファ内の前記各第1のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定し、前記マクロ呼び出しとして完結している場合に、前記マクロ呼び出しとして完結している部分を対応する前記マクロ定義の内容によって置換して展開するステップと、
    前記マクロ呼び出しを展開した文字列から字句解析により第2のトークンを切り出すステップと、
    切り出した前記各第2のトークンを、入力の前記トークン配列の先頭に戻し、前記バッファにおいて前記マクロ呼び出しを展開した部分をクリアするステップとを実行することを特徴とするマクロ展開方法。
  2. 請求項1に記載のマクロ展開方法において、
    前記コンピュータは
    前記バッファ内の前記各第1のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定する際に、前記バッファ内の先頭からの前記各第1のトークンの全部または一部によって判定することを特徴とするマクロ展開方法。
  3. 請求項1に記載のマクロ展開方法において、
    前記コンピュータは
    前記バッファ内の前記各第1のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定する際に、前記バッファ内の後端からの前記各第1のトークンの全部または一部によって判定することを特徴とするマクロ展開方法。
  4. 請求項1に記載のマクロ展開方法において、
    前記コンピュータは
    前記バッファ内の前記各第1のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定する際に、前記コンピュータに対する指示に基づいて、前記バッファ内の先頭からの前記各第1のトークンの全部または一部によって判定するか、前記バッファ内の後端からの前記各第1のトークンの全部または一部によって判定するかを切り替えることを特徴とするマクロ展開方法。
  5. バッファを備えるコンピュータに、ソースコード内のマクロ呼び出しをマクロ定義によって展開するマクロ展開処理を実行させるためのプリプロセッサであって、
    前記コンピュータに、
    前記ソースコードの文字列から字句解析により第1のトークンを切り出してトークン配列を生成するステップと、
    前記トークン配列を入力として、前記トークン配列から順に前記第1のトークンを前記バッファに読み込むステップと、
    前記バッファ内の前記各第1のトークンについて前記マクロ呼び出しに該当する部分であるか否かを判定し、前記マクロ呼び出しに該当する部分ではない場合に、前記バッファ内の前記各第1のトークンを処理結果として出力して前記バッファをクリアするステップと、
    前記バッファ内の前記各第1のトークンが前記マクロ呼び出しに該当する部分である場合に、前記バッファ内の前記各第1のトークンの全部または一部が前記マクロ呼び出しとして完結しているか否かを判定し、前記マクロ呼び出しとして完結している場合に、前記マクロ呼び出しとして完結している部分を対応する前記マクロ定義の内容によって置換して展開するステップと、
    前記マクロ呼び出しを展開した文字列から字句解析により第2のトークンを切り出すステップと、
    切り出した前記各第2のトークンを、入力の前記トークン配列の先頭に戻し、前記バッファにおいて前記マクロ呼び出しを展開した部分をクリアするステップとを実行させることを特徴とするプリプロセッサ。


JP2009266740A 2009-11-24 2009-11-24 マクロ展開方法およびプリプロセッサ Expired - Fee Related JP5385103B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009266740A JP5385103B2 (ja) 2009-11-24 2009-11-24 マクロ展開方法およびプリプロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009266740A JP5385103B2 (ja) 2009-11-24 2009-11-24 マクロ展開方法およびプリプロセッサ

Publications (2)

Publication Number Publication Date
JP2011113148A JP2011113148A (ja) 2011-06-09
JP5385103B2 true JP5385103B2 (ja) 2014-01-08

Family

ID=44235458

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009266740A Expired - Fee Related JP5385103B2 (ja) 2009-11-24 2009-11-24 マクロ展開方法およびプリプロセッサ

Country Status (1)

Country Link
JP (1) JP5385103B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116756103B (zh) * 2023-08-23 2023-10-27 北京云枢创新软件技术有限公司 基于使用行的宏定义文本展开方法、电子设备和介质
CN117112730B (zh) * 2023-08-23 2024-03-22 北京云枢创新软件技术有限公司 基于宏展开文本的目标文本搜索方法、电子设备和介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5701487A (en) * 1995-03-27 1997-12-23 Sun Microsystems, Inc. Method and apparatus for displaying locations of errors detected inside software macro calls
JP3130828B2 (ja) * 1997-04-28 2001-01-31 日本電気アイシーマイコンシステム株式会社 アセンブル処理方式

Also Published As

Publication number Publication date
JP2011113148A (ja) 2011-06-09

Similar Documents

Publication Publication Date Title
KR101279179B1 (ko) 병렬 프로그램 생성 방법
JP2007141173A (ja) コンパイルシステム、デバッグシステムおよびプログラム開発システム
JP5385103B2 (ja) マクロ展開方法およびプリプロセッサ
US5522074A (en) Vectorization system for vectorizing loop containing condition induction variables
JP5385102B2 (ja) ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム
JP2006243838A (ja) プログラム開発装置
US8161466B2 (en) Method of pre-processing conditional region
JP6175306B2 (ja) 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体
JP2001290655A (ja) コンパイラ、コンピュータシステム、最適化方法、最適化プログラム、記憶媒体及びプログラム伝送装置
JPH0756745A (ja) 言語処理プログラムのコンパイラ処理方式
US20240202522A1 (en) Device and method for generating deep learning model graph and abstract syntax tree for integrated compiler
JP2009064207A (ja) コンパイル装置
JP5181788B2 (ja) ソースプログラムの言語変換装置、方法及びプログラム
JP2956591B2 (ja) ループ外への条件付き飛び出しがあるループの並列化方法及び装置
JPH08328841A (ja) ソフトウェア生成装置
JP2007122187A (ja) プログラム・コード生成装置
JP2585793B2 (ja) コンパイラシステム
US20090254879A1 (en) Method and system for assuring data integrity in data-driven software
US7478372B2 (en) Method for operating a computer system
JP2004246924A (ja) アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法
JP6447358B2 (ja) ソースコード生成プログラム、ソースコード生成方法およびコンピュータ
JP2008015665A (ja) プログラム解析方法及びプログラム解析装置
Miyazaki et al. A Generator of Hadoop MapReduce Programs that Manipulate One-dimensional Arrays
JPH08272622A (ja) プログラム変換装置
JP5197061B2 (ja) プログラム分割装置および方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120913

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130730

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130912

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131001

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131003

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees