JPH11154093A - プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体 - Google Patents

プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体

Info

Publication number
JPH11154093A
JPH11154093A JP32119797A JP32119797A JPH11154093A JP H11154093 A JPH11154093 A JP H11154093A JP 32119797 A JP32119797 A JP 32119797A JP 32119797 A JP32119797 A JP 32119797A JP H11154093 A JPH11154093 A JP H11154093A
Authority
JP
Japan
Prior art keywords
program
definition
macro
macro definition
source program
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.)
Pending
Application number
JP32119797A
Other languages
English (en)
Inventor
Akira Furukawa
彰 古川
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP32119797A priority Critical patent/JPH11154093A/ja
Publication of JPH11154093A publication Critical patent/JPH11154093A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 デバッグ時にマクロ定義の定義内容を簡単に
確認できる。 【解決手段】 本発明は、マクロ定義及びこのマクロ定
義の定義内容を参照する参照命令が書込まれたCソース
プログラムを、一旦、参照命令をこの参照命令の指示す
るマクロ定義の定義内容に従って展開した後、この展開
後のCソースプログラムを翻訳してオブジェクトプログ
ラムを生成するプログラムコンパイラに適用される。そ
して、Cソースプログラムを展開する過程でマクロ定義
の内容を示す文字列配列変数を得て、展開後のCソース
プログラムに付加するようにしている。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はCソースプログラム
をオブジェクトプログラムに翻訳するプログラムコンパ
イラの技術に関わり、特にプログラムのデバッグを効率
よく実施できるプログラムコンパイラ及びこのコンパイ
ラに用いられるコンパイラ用プログラムを記録した記録
媒体に関する。
【0002】
【従来の技術】C言語で記述されたソースプログラムに
おいては、プログラム内にマクロと呼ばれる定義名を使
用することが可能である。すなわち、プログラムに繰返
し使用される複雑な関数や数値に対して特定のマクロと
呼ばれる定義名を設定し、このマクロ定義と、このマク
ロ定義に対応する実際の関数や数値等の定義内容との関
係をプログラムとは別の例えばインクルードファイル内
に登録しておく。
【0003】そして、実際のソースプログラムを作成す
るに際して、インクルードファイル内に設定されている
こと示すマクロ定義(定義名)を記述しておけば、それ
以降、該当マクロ定義に対して設定されている複雑な関
数や数値を使用する場合は、該当マクロ定義の参照命令
を記述するのみでよい。
【0004】したがって、ソースプログラム作成時にお
ける複雑な記述の繰返しの簡略化や、関連する内容の記
述の統一等を図ることができ、ソースプログラムを効率
的に作成できる。
【0005】そして、このようなマクロ定義を含むソー
スプログラムをコンピュータが実際に実行可能なオブジ
ェクトプログラムに翻訳するコンパイラにおいては、そ
の翻訳の前処理において、ソースプログラムに含まれる
マクロ定義の参照命令を、この参照命令が指示するマク
ロ定義の定義内容をインクルードファイル内から読出し
て、この読出した定義内容に従って展開する。そして、
ソースプログラム内にマクロ定義及びこのマクロ定義の
参照命令が存在しない状態にする。
【0006】このような前処理が終了したソースプログ
ラムを翻訳してコンピュータが実際に実行可能なオブジ
ェクトプログラムを生成する。一方、一般に、新規に作
成したプログラムや一部変更したプログラムに対して
は、該当プログラムに文法的誤りが存在するか否か、命
令が正しく実行されるか、正しくレジスタが指定される
か等を調べるデバッグ処理を実施するようにしている。
【0007】
【発明が解決しようとする課題】しかしながら、上述し
たようにマクロ定義及び該当マクロ定義の参照命令を含
むC言語で記述したソースプログラムを翻訳してオブジ
ェクトプログラムを生成するプログラムコンパイラにお
いてもまだ解決すべき次のような問題があった。
【0008】すなわち、前述したように、新規プログラ
ムや一部変更プログラムに対しては必ずデバッグ処理を
実施するようにしている。このデバッグ処理は、本来、
デバッグ対象のプログラムがオブジェクトプログラムに
翻訳された後に実行される。
【0009】そして、このデバッグ処理過程で何等かの
プログラム上の異常が発見された場合には、プログラム
技術者は、その異常原因を究明する必要がある。この異
常原因究明の一つとして、前述したマクロ定義の定義内
容を確認する必要が生じる場合がある。
【0010】しかし、前述したように、デバッグ処理は
プログラムがオブジェクトプログラムに翻訳された後に
実行されるので、このデバッグ処理機能を用いては、す
でにマクロ定義の参照命令が通常の命令に展開された後
のソースプログラムにはマクロ定義が含まれないので、
このマクロ定義の定義内容はもちろんこのマクロ定義の
定義内容を記憶しているインクルードファイルを特定す
ることはできない。
【0011】そこで、プログラム技術者は、何等かの手
法を用いて、各マクロ定義の定義内容を記憶したインク
ルードファイルを探し出して、プログラム編集(エディ
タ)機能を用いて、該当インクルードファイルから対象
とするマクロ定義の定義内容を読出して確認する必要が
ある。
【0012】しかし、マクロ定義の定義内容がどのイン
クルードファイルに記憶されているかは、たとえこのプ
ログラムを作成したプログラム技術者であっても、プロ
グラム内に多数のマクロ定義を設定した場合は、簡単に
探し出せない。また、たとえ探し出せたとしても非常に
繁雑な作業となる。
【0013】また、マクロ定義がネストしていたり、同
一のマクロ定義(定義名)に対して複数の定義内容が存
在して、ソースプログラムにおいてコンパイルの前処理
における該当マクロ定義の参照命令を展開する場合に、
いずれの定義内容を用いるかをオプション指定する場合
がある。このような場合は、たとえマクロ定義の定義内
容を記憶したインクルードファイルが特定されたとして
も、実際にプログラムに採用された定義内容を正確に特
定する作業が繁雑になる。
【0014】このように、従来のコンパイラにおいて
は、マクロ定義及びこのマクロ定義に対する参照命令を
含むC言語で記述されたソースプログラムを効率的にデ
バッグできない問題があった。
【0015】本発明はこのような事情に鑑みてなされた
ものであり、たとえマクロ定義及びこのマクロ定義に対
する参照命令を含むC言語で記述されたソースプログラ
ムであっても、デバッグ操作者がデバッグ処理過程で必
要に応じてマクロ定義の定義内容を簡単に確認でき、デ
バッグ作業処理効率を大幅に向上できるプログラムコン
パイラ及びこのコンパイラに用いられるコンパイラ用プ
ログラムを記録した記録媒体を提供することを目的とす
る。
【0016】
【課題を解決するための手段】上記課題を解消するため
に本発明は、マクロ定義及びこのマクロ定義の定義内容
を参照する参照命令が書込まれたCソースプログラム
を、一旦、参照命令をこの参照命令の指示するマクロ定
義の定義内容に従って展開した後、この展開後のCソー
スプログラムを翻訳してオブジェクトプログラムを生成
するプログラムコンパイラにおいて、Cソースプログラ
ムを展開する過程でマクロ定義の内容を示す文字列配列
変数を得て、展開後のCソースプログラムに付加してい
る。
【0017】このように構成されたプログラムコンパイ
ラにおいては、C言語で記述されたプログラムにたとえ
マクロ定義及びこのマクロ定義の参照命令が書き込まれ
ていたとしても、展開後のCソースプログラムにはマク
ロ定義の内容を示す通常の文字列配列変数が残ることに
なる。なお、この文字列配列変数はこの文字列配列配列
変数が指定する文字配列を命令と見なさなくて、ただ単
なる文字と見なす機能を有する。したがって、この文字
列配列変数の存在によってこの記述内容の命令が実行さ
れることはない。
【0018】したがって、デバッグ操作者は、デバッグ
処理過程で必要に応じてこの文字列配列変数の内容から
マクロ定義の定義内容を簡単に確認できる。また、別の
発明は、マクロ定義及びこのマクロ定義の定義内容を参
照する参照命令が書込まれたCソースプログラムを、一
旦、参照命令をこの参照命令の指示するマクロ定義の定
義内容に従って展開した後、この展開後のCソースプロ
グラムを翻訳してオブジェクトプログラムを生成するた
めのコンピュータ読取り可能なコンパイラ用プログラム
を記録した記録媒体である。
【0019】そして、このコンパイラ用プログラムは、
コンピュータに、Cソースプログラムを展開する過程で
マクロ定義の内容を示す文字列配列変数を得て、展開後
のCソースプログラムに付加させている。
【0020】このように構成されたコンパイラ用プログ
ラムを記録した記録媒体を用いることによって、上述し
た機能を有していない従来のプログラムコンパイラに対
しても、デバッグ時に簡単に上述したマクロ定義におけ
る定義内容を参照できる機能を付加できる。
【0021】
【発明の実施の形態】以下本発明一実施形態を図面を用
いて説明する。図1は、実施形態のプログラムコンパイ
ラの概略構成を示すブロック図である。このプログラム
コンパイラはコンピュータ等の一種の情報処理装置で構
成されており、HDD等の補助記憶装置に形成された複
数のファイルと、RAM等の主記憶部等の記録媒体に記
憶されたアプリケーションプログラム上にプログラムモ
ジュールとして形成された複数の処理部とで構成されて
いる。
【0022】すなわち、図示するように、このプログラ
ムコンパイラ内には、プログラムモジュールとして、外
部のプログラムファイル1からプロクラムを取込むプロ
グラム取込部2と、コンパイル前処理部3と、マクロ定
義マージ部4と、オブジェクト生成部5とが設けられて
いる。
【0023】さらに、このプログラムコンパイラ内に
は、マクロ定義テーブル6、マクロ展開一時ファイル
7、マクロ定義抽出ファイル8、マクロ展開ファイル
9、オブジェクトプログラムファイル10が設けられて
いる。
【0024】次に、各部の詳細動作を順番に説明する。
プログラムファイル1内にはソースプログラムファイル
11と複数のインクルードファイル12とが設けられて
いる。ソースプログラムファイル11内には図3に示す
ように、C言語で記述されたソースプログラム11aが
記憶されている。このソースプログラム11aには、複
数のマクロ定義(定義名)13と複数の参照命令14が
記述されている、各インクルードファイル12内には、
各マクロ定義13に対する具体的定義内容が記憶されて
いる。
【0025】プログラム取込処理部2は、このプログラ
ムコンパイラが起動されると、プログラムファイル1の
ソースプログラムファイル11のソースプログラム11
aを1行ずつ読取ると共に、読取り過程でマクロ定義1
3が現れると、図3に示すように、このマクロ定義13
に対応するインクルードファイル12から定義内容を読
取って、マクロ定義13の次にその定義内容を展開し
て、取込ソースプログラム15を順次作成しながら、コ
ンパイル前処理部3へ転送する。
【0026】コンパイル前処理部3は、内部にマクロ定
義特殊処理ルーチン16を有しており、図3に示す定義
内容が展開済みの取込ソースプログラム15が順次入力
されると図2に示すコンパイル前処理を実行する。
【0027】図2において、取込ソースプログラム15
の1行分のデータを読取る(S1)。そして、読取った
1行分のデータがマクロ定義13及び参照命令14以外
の通常のデータの場合は(S2)、この1行分のデータ
をマクロ展開一時ファイル7に書込む。そして、S5に
て未読出の行が存在すれば、S1へ戻り、次の行のデー
タを読出す。
【0028】S4にて読出した1行分のデータがマクロ
定義13の場合は、このマクロ定義13及びこのマクロ
定義13に続く定義内容をマクロ定義テーブル6へ書込
む(S5)。さらに、このマクロ定義と定義内容とをマ
クロ定義抽出ファイル8内に文字列配列変数として書込
む(S6)。具体的には下記のフォーマットで記載す
る。
【0029】 static const char 定義名 [ ]=“定義内容“; したがって、このマクロ定義13及び定義内容はマクロ
展開一時ファイル7内に書込まれない。
【0030】また、S7にて読出した1行分のデータが
マクロ定義13に対する参照命令14の場合は、この参
照命令14をこの参照命令14が指定するマクロ定義の
定義内容をマクロ定義テーブル6から読取って、この定
義内容を展開した状態でマクロ展開一時ファイル7に書
込む(S8)。
【0031】そして、S4にてプログラム取込処理部2
で取込んだソースプログラム15に対する全ての行に対
するマクロ展開一時ファイル7又はマクロ定義抽出ファ
イル8及びマクロ定義テーブル6に対する書込処理が終
了すると、マクロ定義マージ処理部4を起動する(S
9)。
【0032】この状態においては、マクロ展開一時ファ
イル7内には、図3に示すように、ソースプログラム1
5における参照命令14を定義内容に従って展開された
定義展開内容17に置換えたマクロ展開済のソースプロ
グラム16が記憶されている。
【0033】マクロ定義マージ処理部4は、マクロ展開
一時ファイル7内に記憶されているマクロ展開済のソー
スプログラム16の先頭にマクロ定義抽出ファイル8に
記憶されている各文字列配列変数18を挿入して、図3
に示すように、新たなマクロ展開済のソースプログラム
19を作成する。そして、この新たなマクロ展開済のソ
ースプログラム19をマクロ展開ファイル9へ書込む。
【0034】オブジェクト生成部5は、マクロ展開ファ
イル9に記憶された新たなマクロ展開済のソースプログ
ラム19を翻訳して、ソースプログラムをコンピュータ
が実際に実行可能なオブジェクトプログラム20を生成
する。この場合、文字列配列変数18もそのままオブジ
ェクトプログラムに翻訳される。オブジェクト生成部5
は、生成したオブジェクトプログラム20をオブジェク
トプログラムファイル10へ格納する。
【0035】次にこのように構成されたプログラムコン
バイラにおいて、別途デバッグ装置を用いて又はこのコ
ンパイラに組込まれたデバッグ機能を用いて、作成され
たソースプログラムをデバッグする場合、最終のオブジ
ェクトプログラムファイル19に記憶された翻訳後のオ
ブジェクトプログラム20に対してデバック処理を実施
する。
【0036】そして、デバッグ装置は、このオブジェク
トプログラム20内に何等かの異常を検出すると、その
異常箇所を元のソースプログラムに逆変換した状態で図
4に示すように、表示部21のソースプログラム表示ウ
インドウ22内に表示して、デバッグの操作者に報知す
る。
【0037】一方、デバッグ装置はオブジェクトプログ
ラム20の先頭部分に各マクロ定義13の実際の定義内
容17が文字列配列変数18として組込まれているの
で、この文字列配列変数18から該当参照命令14に対
応する定義内容17を得ることができる。
【0038】したがって、例えば図4に示すように、ソ
ースプログラム上の異常箇所に、マクロ定義に対する参
照命令14が含まれる場合は、命令入出力ウインドウ2
2にその定義内容17を表示することが可能となる。
【0039】また、必要に応じて、デバッグ処理過程
で、参照命令14が現れる毎に、たとえ異常でなくと
も、該当参照命令14に対応する定義内容17を表示し
てもよい。
【0040】このように、C言語で記述されたプログラ
ムにたとえマクロ定義及びこのマクロ定義の参照命令が
書込まれていたとしても、展開後のソースプログラム1
6及び翻訳後のオブジェクトプログラム20にはマクロ
定義の定義内容17を示す文字列配列変数18が残るこ
とになる。
【0041】したがって、デバッグ操作者は、デバッグ
処理過程で必要に応じてこの文字列配列変数の内容から
マクロ定義の定義内容を簡単に確認できる。その結果、
マクロ定義13及びこのマクロ定義に対する参照命令1
4を含むC言語で記述されたソースプログラムを効率的
にデバッグできる。
【0042】なお、上述した実施形態において記載した
手法は、コンピュータに実行させることのできるコンパ
イラ用プログラムとして、例えば磁気ディスク(フロッ
ピーディスク、ハードディスク等)、光ディスク(CD
−ROM、DVD等)、半導体メモリなどの記録媒体に
書込んで各種装置に適用したり、通信媒体により伝送し
て各種装置に適用することも可能である。本プログラム
コンパイラを実現するコンピュータは、記録媒体に記録
されたコンパイラ用プログラムを読込み、このコンパイ
ラ用プログラムによって動作が制御されることにより、
上述した処理を実行する。
【0043】
【発明の効果】以上説明したように、本発明のプログラ
ムコンパイラ及びこのコンパイラに用いられるコンパイ
ラ用プログラムを記録した記録媒体においては、Cソー
スプログラムを展開する過程でマクロ定義の内容を示す
文字列配列変数を得て、展開後のCソースプログラムに
付加するようにしている。
【0044】したがって、たとえマクロ定義及びこのマ
クロ定義に対する参照命令を含むC言語で記述されたソ
ースプログラムであっても、デバッグ操作者がデバッグ
処理過程で必要に応じてマクロ定義の定義内容を簡単に
確認でき、デバッグ作業処理効率を大幅に向上できる。
【図面の簡単な説明】
【図1】 本発明の一実施形態のプログラムコンパイラ
の概略構成を示すブロック図
【図2】 同プログラムコンパイラにおけるコンパイル
前処理部の前処理動作を示す流れ図
【図3】 同プログラムコンパイラにおけるソースプロ
グラムがオブジェクトプロクラムに変換されるまでの変
遷を示す図
【図4】 同プログラムコンパイラで変換されるプログ
ラムに対するデバッグ結果を示す図
【符号の説明】
1…プログラムファイル 2…プログラム取込処理部 3…コンパイル前処理部 4…マクロ定義マージ処理部 5…オブジェクト生成部 6…マクロ定義テーブル 7…マクロ展開一時ファイル 8…マクロ展開抽出ファイル 9…マクロ展開一時ファイル 10…オブジェクトプログラムファイル 11…ソースプログラムファイル 12…インクルードファイル 13…マクロ定義 14…参照命令 17…定義内容

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 マクロ定義及びこのマクロ定義の定義内
    容を参照する参照命令が書込まれたCソースプログラム
    を、一旦、前記参照命令をこの参照命令の指示するマク
    ロ定義の定義内容に従って展開した後、この展開後のC
    ソースプログラムを翻訳してオブジェクトプログラムを
    生成するプログラムコンパイラにおいて、 前記Cソースプログラムを展開する過程で前記マクロ定
    義の内容を示す文字列配列変数を得て、前記展開後のC
    ソースプログラムに付加することを特徴とするプログラ
    ムコンパイラ。
  2. 【請求項2】 マクロ定義及びこのマクロ定義の定義内
    容を参照する参照命令が書込まれたCソースプログラム
    を、一旦、前記参照命令をこの参照命令の指示するマク
    ロ定義の定義内容に従って展開した後、この展開後のC
    ソースプログラムを翻訳してオブジェクトプログラムを
    生成するためのコンピュータ読取り可能なコンパイラ用
    プログラムを記録した記録媒体であって、 前記コンパイラ用プログラムは、コンピュータに、 前記Cソースプログラムを展開する過程で前記マクロ定
    義の内容を示す文字列配列変数を得て、前記展開後のC
    ソースプログラムに付加させることを特徴とするコンパ
    イラ用プログラムを記録した記録媒体。
JP32119797A 1997-11-21 1997-11-21 プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体 Pending JPH11154093A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP32119797A JPH11154093A (ja) 1997-11-21 1997-11-21 プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP32119797A JPH11154093A (ja) 1997-11-21 1997-11-21 プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体

Publications (1)

Publication Number Publication Date
JPH11154093A true JPH11154093A (ja) 1999-06-08

Family

ID=18129882

Family Applications (1)

Application Number Title Priority Date Filing Date
JP32119797A Pending JPH11154093A (ja) 1997-11-21 1997-11-21 プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体

Country Status (1)

Country Link
JP (1) JPH11154093A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007265098A (ja) * 2006-03-29 2007-10-11 Fujitsu Ten Ltd マクロ定義情報取得装置
JP2007265095A (ja) * 2006-03-29 2007-10-11 Hitachi Software Eng Co Ltd ソースプログラム検証プログラム
JP2007304840A (ja) * 2006-05-11 2007-11-22 Matsushita Electric Ind Co Ltd コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
JP2013137716A (ja) * 2011-12-28 2013-07-11 Hitachi Information & Control Solutions Ltd マクロ展開装置及びプログラム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007265098A (ja) * 2006-03-29 2007-10-11 Fujitsu Ten Ltd マクロ定義情報取得装置
JP2007265095A (ja) * 2006-03-29 2007-10-11 Hitachi Software Eng Co Ltd ソースプログラム検証プログラム
JP2007304840A (ja) * 2006-05-11 2007-11-22 Matsushita Electric Ind Co Ltd コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
JP2013137716A (ja) * 2011-12-28 2013-07-11 Hitachi Information & Control Solutions Ltd マクロ展開装置及びプログラム

Similar Documents

Publication Publication Date Title
JPS63201834A (ja) オブジエクト・モジユール生成方法
JPH0793186A (ja) 既存テストプログラムの再利用方法
JPH11154093A (ja) プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体
JP3196675B2 (ja) 言語処理方式
GB2420638A (en) Method of substituting code fragments in Internal Representation
JPH06110733A (ja) プログラムのテストケース生成装置
JPH1185536A (ja) 原始プログラムのエラー自動修正装置及び方法
JP2943590B2 (ja) インタプリタ型シミュレーション方法
JPH11327887A (ja) 自動部品化機能付コンパイラシステムおよび記録媒体
JP2000207226A (ja) コ―ド最適化装置、言語処理装置及びコ―ド最適化方法
JPH0510692B2 (ja)
JP2009080681A (ja) プログラム構造解析方法及び装置
JP3003459B2 (ja) プログラム作成支援装置
JP2001125793A (ja) コンパイラシステム及びコンパイル方法並びに記録媒体
JPH04209029A (ja) 並列処理プログラム翻訳処理装置
JP3210203B2 (ja) プログラム試験方法及びsqlシミュレータ
JPH05108372A (ja) コンパイラ最適化処理内容の出力方式
JPS59231649A (ja) コンパイルリスト出力処理方式
JPH07105014A (ja) 言語処理システムのシンボル処理方式
JPH10207738A (ja) 言語処理システム
JPH06103113A (ja) 差分テストデバック支援方法
JPH06110750A (ja) 関係データベースをアクセス可能なアプリケーションプログラムのメイクファイルの自動生成方法
JPH11143705A (ja) ソースプログラムチェック装置および記録媒体
JPS63269229A (ja) 文字列操作系命令コンパイル処理方式
JPH05274126A (ja) プログラム合成システム