JP2007265095A - ソースプログラム検証プログラム - Google Patents

ソースプログラム検証プログラム Download PDF

Info

Publication number
JP2007265095A
JP2007265095A JP2006090123A JP2006090123A JP2007265095A JP 2007265095 A JP2007265095 A JP 2007265095A JP 2006090123 A JP2006090123 A JP 2006090123A JP 2006090123 A JP2006090123 A JP 2006090123A JP 2007265095 A JP2007265095 A JP 2007265095A
Authority
JP
Japan
Prior art keywords
macro
source program
program
replacement
definition
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
JP2006090123A
Other languages
English (en)
Inventor
Hiroto Minoura
寛人 箕浦
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.)
Hitachi Software Engineering Co Ltd
Original Assignee
Hitachi Software Engineering Co 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 Hitachi Software Engineering Co Ltd filed Critical Hitachi Software Engineering Co Ltd
Priority to JP2006090123A priority Critical patent/JP2007265095A/ja
Publication of JP2007265095A publication Critical patent/JP2007265095A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

【課題】前処理を行った後もマクロの情報が無くならない前処理後ソースプログラムでのマクロ置換表示を提供すること。
【解決手段】ソースプログラムを翻訳する段階にて、前処理指令の実行を必要とするソースプログラム検証プログラムであって、前処理後ソースプログラムでのマクロ置換表示は、マクロの置換の並びの前後にマクロを示す文字を埋め込む手段と、そのマクロを示す文字からマクロ置き換えしたことを示す情報を得る手段を設けたものである。
【選択図】 図6

Description

本発明は、マクロの展開処理を必要とするソースプログラム(C言語等)の翻訳に関し、特にマクロの置き換え後の表示に関するものである。
Cソースプログラムの翻訳においては、Cソースプログラムから目的プログラムを生成するまでに、複数の翻訳段階の規則がある。これらの翻訳段階の実装は、一般に、前処理とコンパイラと呼ばれる2つの実装に区別されている。前処理は、ソースプログラムに記述されている前処理指令と呼ばれるものによって、処理条件の組込み、ソースファイルの組込み、及びマクロ置き換えなどを行う。コンパイラは、前処理が処理したCソースプログラムを入力し、それを目的プログラムに変換する。この一連の処理によって、Cソースプログラムは翻訳される。このCソースプログラムは、C言語仕様に従った記述でさえあれば、目的プログラムを作ることができる。
最近、ソースコードを静的に解析するツールが注目されている。これはCソースプログラム上で曖昧な記述があってもそれをコンパイラが勝手に解釈して翻訳してしまうことを注意したり、コーディング作法的な指摘をするためである。この指摘には、マクロ定義やマクロ呼び出しについての指摘もある。
このような、マクロに関して、デバッグ時にマクロ定義の定義展開内容が確認できるものが開示されている。
図9は、プログラムファイルの構成図である。図9に示すように、プログラムファイル内(図略)にはソースプログラムファイル31と複数のインクルードファイル32とが設けられている。ソースプログラムファイル31内には、C言語で記述されたソースプログラム31aが記憶されている。このソースプログラム31aには、複数のマクロ定義(定義名)33と複数の参照命令34が記述されている。そして、各インクルードファイル32内には、各マクロ定義33に対する具体的な定義内容が記憶されている。
プログラム取込処理部(図略)では、プログラムコンパイラが起動されると、ソースプログラム31aを1行ずつ読取ると共に、読取り過程でマクロ定義33が現れると、このマクロ定義33に対応するインクルードファイル32から定義内容を読取って、マクロ定義33の次にその定義内容を展開して、取込ソースプログラム35を順次作成しながら、コンパイル前処理部(図略)へ転送する。
このとき、C言語で記述されたプログラムに、たとえマクロ定義33及びこのマクロ定義33の参照命令34が書込まれていたとしても、展開後のソースプログラム36,39及び翻訳後のオブジェクトプログラム40にはマクロ定義33の定義展開内容37を示す文字列配列変数38が残ることになる。
したがって、デバッグ操作者は、デバッグ処理過程で必要に応じてこの文字列配列変数38の内容からマクロ定義33の定義展開内容37を簡単に確認でき、マクロ定義33及びこのマクロ定義33に対する参照命令34を含むC言語で記述されたソースプログラム31aをデバッグすることができる(例えば、特許文献1参照)。
特開平11−154093号公報(段落番号0024〜0041、図2、図3)
しかしながら、前処理の翻訳段階で処理するマクロ置き換えは、マクロ定義に従ってマクロ名を置換の並びに置き換えることであり、これによって、マクロ置き換え後のソースプログラムからは、マクロ呼び出しが見えなくなるという問題があった。
また、コンパイラではマクロ置き換え後、ソースプログラムを処理するので、そのソースプログラムにエラーなどを検出したときに、そのエラーがマクロ定義に問題があったとしてもマクロに関する情報が欠乏するため、マクロ置き換えに関する指摘を出力することができない。また、静的解析ツールでも同じことが言える。このため、前処理を行ったソースプログラムからは、マクロ置き換えに関する指摘を出力することができないという問題があった。
これは、マクロ置き換えに関する情報をマクロ置き換え後、ソースプログラム以外で表現すれば良く、ここではマクロ置き換えに関する情報をマクロ置き換え情報と定義する。
しかし、コンパイラや静的解析ツールが何らかの情報をマクロ置き換え後にソースプログラムから得ようとする場合、その都度マクロ置き換え情報を参照する必要があり、効率的ではない。
本発明は、前記問題を解決するために創案されたものであり、前処理を行った後もマクロの情報が無くならないソースプログラム検証プログラムを提供することを課題とする。
上記課題を達成するために、本発明に係るソースプログラム検証プログラムは、ソースプログラムを翻訳する段階にて、前処理指令の実行を必要とするソースプログラム検証プログラムであって、前記前処理指令の実行段階でのマクロ呼び出しの展開において、その展開前に前記マクロ展開前を示す文字と、前記マクロの展開後にマクロ展開後を示す文字とを埋め込むことを特徴とする。
すなわち、前処理後ソースプログラムでのマクロ置換表示は、置き換えるマクロの置換の並びの前後にマクロを示す文字を埋め込む手段と、そのマクロを示す文字からマクロ定義の情報を得る手段を設けたものである。
前処理後ソースプログラムからマクロ置き換えした部分が機械的に判別でき、前処理を行った後もマクロの情報が無くならないソースプログラム検証プログラムを提供することができる。
以下、本発明を適用したソースプログラム検証プログラムの一実施の形態について、図面を参照して詳細に説明する。
図1は、ソースプログラム検証プログラムの構成図である。図1に示すように、ソースプログラム検証プログラム(ソースコード検証プログラム)2は、コンピュータ101のメモリ102上に記憶される。このソースプログラム検証プログラム2の目的は、ソースプログラム1を入力して、前処理後ソースプログラム6を出力することである。このソースプログラム検証プログラム2は幾つかの機能をもっているが、本発明の実施例としてマクロ定義処理部3とマクロ置き換え処理部4に特化して記述する。マクロ定義処理部3では、マクロ名とその置換の並びをマクロ定義テーブル5に出力する。
マクロ置き換え処理部4は、マクロ呼び出しによるマクロ名からマクロ定義テーブル5を走査し、その置換の並びを取り出す。そして、マクロの置換の並びをマクロ使用情報7に出力する。
図2は、マクロ定義処理部が処理するマクロ定義テーブルの内容を示す図である。図2に示すように、このテーブルは、マクロ番号8、マクロ名9および置換の並び10から構成される。
図1に示すマクロ定義処理部3は、ソースプログラム1からマクロ定義を入力する毎に、マクロ定義テーブル5に1行を追加する。その1行に、ユニークな番号をマクロ番号8に、そのマクロ名をマクロ名9に、そして、その置換の並びを置換の並び10に格納する。
マクロ置き換え処理部4は、処理するマクロ名に対して、マクロ定義テーブル5からそのマクロ名のマクロ番号8と置換の並び10を抽出する。
図3は、本実施例によるマクロ置換の並びの出力例である。図3に示すように、この形式は、特殊文字11でマクロ番号12を囲む文字列をマクロ展開前14とし、マクロ展開前と同じ特殊文字を配した文字列をマクロ展開後15として置換の並び13の左右に配置する。さらに、前処理の後続の翻訳段階で、展開したマクロの照会情報として、マクロ定義テーブル5の内容をマクロ使用情報7に出力する。ここで使用する特殊文字は、マクロの位置をわかりやすくするためのものなので、ユーザがマクロの位置を判別できる文字であれば特殊文字にかかわらず何の文字でも良い。
図4は、マクロ定義処理の動作を示すフローチャートである。図4に示すように、マクロ定義処理部3は前処理制御プログラム(ソースプログラム検証プログラム)2の中にある制御から、マクロを定義する前処理指令の入力に基づいて、マクロ定義処理をする(ステップ401)。ここでは、マクロ展開前14とマクロ展開後15に使用するユニークなマクロ番号8を決定する(ステップ402)。そして、マクロ定義テーブル5にマクロ番号8、マクロ名9および置換の並び10をマクロ定義テーブル5に追加する(ステップ403)。そして、マクロ定義処理部3の呼び出し元に戻る(ステップ404)。
図5は、マクロ置き換え処理の動作を示すフローチャートである。図5に示すように、マクロ置き換え処理部4は前処理制御プログラム2の中にある制御から、マクロの呼び出しに基づいて、マクロ置き換え処理をする(ステップ501)。ここでは、置き換えるマクロ名からマクロ定義テーブル5を走査し、そのマクロのマクロ番号8、及び、置換の並び10を取り出す(ステップ502)。そして、マクロ展開前14の文字を作成し、出力する(ステップ503)。次に、置換の並び10を出力する(ステップ504)。そして、マクロ展開後15の文字を作成し、出力する(ステップ505)。次に、置き換えたマクロの情報として、マクロ番号8、マクロ名9、及び、置換の並び10をマクロ使用情報7に出力する(ステップ506)。最後に、マクロ置き換え処理部4の呼び出し元に戻る(ステップ507)。
このあと、後続の翻訳段階では、前処理後ソースプログラム6とマクロ使用情報7を入力することによって、どのマクロを使用したかが判断できる。
このように前処理したものを図6に示す。
図6に示すように、if文16の条件式は、flg==TRUEとなっているため、通常に前処理を行った場合は、これは、flg==1 と処理されるだけである。本発明では、マクロ名TRUEのマクロ番号を値2とした場合、if文18の条件式に示す通り、特殊文字19で値2を囲んだマクロ展開前と、次にマクロの置換の並び20と、最後にマクロ展開後の文字列を展開する。
これによって、前処理後ソースプログラムに示すように、このif文18の条件式ではflg変数21を等式でTRUEマクロ17で比較していることが判断できる。
ここで本発明を静的解析ツールに応用した場合、TRUEマクロにより論理値を等式で比較していることが判明し、このコーディングを指摘することができる。
このように本発明による処理を行った後にコンパイルする場合には、コンパイラは特殊文字を一律にパターンとして認識する実装ができるので、この特殊文字をマクロ使用情報として記録し、メッセージを出力する場合など、マクロ名をメッセージに付加することができる。
また、特殊文字に1バイトで16進数7Fを用いた場合、図6の前処理後ソースプログラムでは、これをプログラム編集エディタなどで見たときに、そのエディタの設定によっては図7や図8に示すような見え方をするのでマクロ使用箇所を判断し易い。
図7、図8は、エディタ画面を示している。
以上のように、本実施の形態のマクロ置換表示を使用した場合、次のような効果がある。
(1)前処理後のソースプログラムを眺めた場合、どこにマクロ呼び出しがあったかを明示的に表現することができる。
(2)コンパイラや静的解析ツールなどに応用した場合、マクロ呼び出しを前処理後ソースプログラムから効率的に得ることができる。
以上、好ましい実施の形態について説明したが、本発明は前記実施の形態に限定されるものではなく、本発明の要旨を逸脱することのない範囲内において適宜の変更が可能なものである。例えば、本実施の形態ではC言語のソースプログラムを取り上げたがC言語から派生するC++言語などにも本発明は適用可能である。
本発明の一実施形態に係る前処理の構成を示す構成図である。 マクロ定義テーブルに格納されているデータの内容を示す図である。 マクロ置き換え処理によるマクロ置換の並びの形式を示す構成図である。 マクロ定義処理の動作を示すフローチャートである。 マクロ置き換え処理の動作を示すフローチャートである。 本発明による前処理実施例を示す図である。 本発明による前処理実施例をエディタで参照をした例を示す図である。 本発明による前処理実施例をエディタで参照をした例を示す図である。 従来例に係るプログラムファイルの構成図である。
符号の説明
1 ソースプログラム
2 ソースコード検証プログラム(ソースプログラム検証プログラム)
3 マクロ定義処理部
4 マクロ置き換え処理部
5 マクロ定義テーブル
6 前処理後ソースプログラム
7 マクロ使用情報
8,12 マクロ番号
9 マクロ名
10,13 置換の並び
11,19 特殊文字
14 マクロ展開前
15 マクロ展開後
16,18 if文
17 TRUEマクロ
20 置換の並び
21 flg変数
22,23 特殊文字

Claims (1)

  1. ソースプログラムを翻訳する段階にて、前処理指令の実行を必要とするソースプログラム検証プログラムであって、
    前記前処理指令の実行段階でのマクロ呼び出しの展開において、その展開前に前記マクロ展開前を示す文字と、
    前記マクロの展開後にマクロ展開後を示す文字と、
    を埋め込むことを特徴とするソースプログラム検証プログラム。

JP2006090123A 2006-03-29 2006-03-29 ソースプログラム検証プログラム Pending JP2007265095A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006090123A JP2007265095A (ja) 2006-03-29 2006-03-29 ソースプログラム検証プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006090123A JP2007265095A (ja) 2006-03-29 2006-03-29 ソースプログラム検証プログラム

Publications (1)

Publication Number Publication Date
JP2007265095A true JP2007265095A (ja) 2007-10-11

Family

ID=38638007

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006090123A Pending JP2007265095A (ja) 2006-03-29 2006-03-29 ソースプログラム検証プログラム

Country Status (1)

Country Link
JP (1) JP2007265095A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011113147A (ja) * 2009-11-24 2011-06-09 Nomura Research Institute Ltd ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63257038A (ja) * 1987-04-14 1988-10-24 Nec Corp 原始プログラム変換における対応識別情報付加方式
JPH02178841A (ja) * 1988-12-29 1990-07-11 Nec Corp 言語処理プリプロセッサ
JPH11143705A (ja) * 1997-11-11 1999-05-28 Fujitsu Ltd ソースプログラムチェック装置および記録媒体
JPH11154093A (ja) * 1997-11-21 1999-06-08 Toshiba Corp プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63257038A (ja) * 1987-04-14 1988-10-24 Nec Corp 原始プログラム変換における対応識別情報付加方式
JPH02178841A (ja) * 1988-12-29 1990-07-11 Nec Corp 言語処理プリプロセッサ
JPH11143705A (ja) * 1997-11-11 1999-05-28 Fujitsu Ltd ソースプログラムチェック装置および記録媒体
JPH11154093A (ja) * 1997-11-21 1999-06-08 Toshiba Corp プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011113147A (ja) * 2009-11-24 2011-06-09 Nomura Research Institute Ltd ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム

Similar Documents

Publication Publication Date Title
JP4057938B2 (ja) コンパイラ、コンパイル方法、及びプログラム開発ツール
US9632754B2 (en) Auto generation and linkage of source code to test cases
US20080250231A1 (en) Program code conversion apparatus, program code conversion method and recording medium
JP2009176064A (ja) ソフトウェアリファクタリング支援装置および方法
JP2007018254A (ja) 言語処理装置
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
CN110147238B (zh) 一种程序编译方法、装置及系统
JP2011013887A (ja) ソフトウェア開発支援装置
JP2004185508A (ja) プログラム解析装置およびプログラム
JP2007265095A (ja) ソースプログラム検証プログラム
JP2007102380A (ja) 可変性を有する制御部品のデバッグ方法、及びデバッグ支援装置
JP2009258796A (ja) プログラム開発装置及びプログラム開発方法
JP2010287101A (ja) ソフトウエアデバッグ装置及び方法
JP5702265B2 (ja) プログラム自動生成装置およびプログラム自動生成方法
US20170344351A1 (en) Information processing apparatus, compiling management method, and recording medium
JP2006285754A (ja) プログラムソースコード自動生成装置
JP2008204023A (ja) プログラマブルコントローラシステム、プログラマブルコントローラのデバッグ方法
JPH10293683A (ja) プログラムの比較解析装置、プログラムの比較解析方法、及びプログラムの比較解析プログラムを記録した機械読み取り可能な記録媒体
JP2007265098A (ja) マクロ定義情報取得装置
KR100290623B1 (ko) 데이터베이스의 데이터 제어방법
JP2009042951A (ja) プログラム中のデータ抽出方法及び装置
JP4371000B2 (ja) Idlコンパイル装置、idlコンパイル方法及びidlコンパイラ
JP2006146731A (ja) プログラム、記憶媒体、アセンブラ装置、コンパイラ装置、シミュレータ装置及びエミュレータ装置
JP2006268777A (ja) ソースコード管理システム、ソースコード管理方法、およびソースコード管理プログラム
CN118034708A (zh) 一种基于静态分析的二进制程序控制流重建方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Effective date: 20080627

Free format text: JAPANESE INTERMEDIATE CODE: A621

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100412

A131 Notification of reasons for refusal

Effective date: 20110308

Free format text: JAPANESE INTERMEDIATE CODE: A131

A521 Written amendment

Effective date: 20110428

Free format text: JAPANESE INTERMEDIATE CODE: A523

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110524

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110704

A02 Decision of refusal

Effective date: 20110809

Free format text: JAPANESE INTERMEDIATE CODE: A02