JPH10312313A - C言語の計算機プログラム検査処理方法およびプログラム記憶媒体 - Google Patents
C言語の計算機プログラム検査処理方法およびプログラム記憶媒体Info
- Publication number
- JPH10312313A JPH10312313A JP9122014A JP12201497A JPH10312313A JP H10312313 A JPH10312313 A JP H10312313A JP 9122014 A JP9122014 A JP 9122014A JP 12201497 A JP12201497 A JP 12201497A JP H10312313 A JPH10312313 A JP H10312313A
- Authority
- JP
- Japan
- Prior art keywords
- program
- language
- pattern
- changes
- size
- 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
Links
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【課題】C言語で記述されたソースプログラムから整数
型のオブジェクトの大きさが変わると動作が変わる箇所
を自動的に検出する。 【解決手段】C言語で記述されたCソースプログラム2
を入力し,C言語の仕様によって定まる整数型(char
型,short 型,int 型,long型)のオブジェクトの大き
さが変わるとプログラムの動作が変わるパタンを,入力
したソースプログラムを解析することによって検出す
る。その検出したパタンに該当するソースプログラムが
記述されているファイル名,行番号,オブジェクトを表
す名前と演算に関する情報を検出メッセージ4として出
力する。
型のオブジェクトの大きさが変わると動作が変わる箇所
を自動的に検出する。 【解決手段】C言語で記述されたCソースプログラム2
を入力し,C言語の仕様によって定まる整数型(char
型,short 型,int 型,long型)のオブジェクトの大き
さが変わるとプログラムの動作が変わるパタンを,入力
したソースプログラムを解析することによって検出す
る。その検出したパタンに該当するソースプログラムが
記述されているファイル名,行番号,オブジェクトを表
す名前と演算に関する情報を検出メッセージ4として出
力する。
Description
【0001】
【発明の属する技術分野】本発明は,プログラム言語で
あるC言語(JIS X 3010-1993,ISO/IEC 9899:1990)を
利用して作成された計算機プログラムの検査処理方法で
あって,特に,Cプログラムから整数型のオブジェクト
の大きさが変わると動作が変わる箇所を検出するC言語
の計算機プログラム検査処理方法およびそれを実現する
ためのプログラム記憶媒体に関するものである。
あるC言語(JIS X 3010-1993,ISO/IEC 9899:1990)を
利用して作成された計算機プログラムの検査処理方法で
あって,特に,Cプログラムから整数型のオブジェクト
の大きさが変わると動作が変わる箇所を検出するC言語
の計算機プログラム検査処理方法およびそれを実現する
ためのプログラム記憶媒体に関するものである。
【0002】
【従来の技術】計算機プログラム言語Cは,他のプログ
ラム言語では同様な内容の誤記であれば構文違反や文法
違反になるようなところが,構文違反や文法違反のエラ
ーとはならず,異なる意味のプログラムとなることがあ
り,動作誤りが潜在する可能性がある。
ラム言語では同様な内容の誤記であれば構文違反や文法
違反になるようなところが,構文違反や文法違反のエラ
ーとはならず,異なる意味のプログラムとなることがあ
り,動作誤りが潜在する可能性がある。
【0003】例えば,意図した内容が「if(a==f(x)) 」
であるときに,「if(a=f(x))」と誤記しても構文違反や
文法違反のエラーとはならず,動作誤りが生じる。変数
aの値と関数f(x)の値とが等しいかどうかではな
く,変数aに関数f(x)の値を代入した結果が0か1
かによって,次に実行すべき処理が決定されるからであ
る。
であるときに,「if(a=f(x))」と誤記しても構文違反や
文法違反のエラーとはならず,動作誤りが生じる。変数
aの値と関数f(x)の値とが等しいかどうかではな
く,変数aに関数f(x)の値を代入した結果が0か1
かによって,次に実行すべき処理が決定されるからであ
る。
【0004】また,例えば意図した内容が「x=y / *z ;
/*comment*/ 」であるときに,「x=y /*z ; /*comme
nt*/」というように誤記すると,コメント部分が「/*
comment*/ 」ではなく,「/*z ; /*comment*/」と解
釈されるので,動作誤りが生じる。
/*comment*/ 」であるときに,「x=y /*z ; /*comme
nt*/」というように誤記すると,コメント部分が「/*
comment*/ 」ではなく,「/*z ; /*comment*/」と解
釈されるので,動作誤りが生じる。
【0005】このため,プログラムを作成する際に従う
べきコーディング規約を定め,プログラム作成者等が誤
記を回避するよう努めたり,コーディング規約に違反す
る箇所をソースプログラムから検出することが行われて
きた。
べきコーディング規約を定め,プログラム作成者等が誤
記を回避するよう努めたり,コーディング規約に違反す
る箇所をソースプログラムから検出することが行われて
きた。
【0006】しかし,従来,プログラムが動作する場合
のプロセッサあるいは利用するコンパイラが変わり,整
数型の大きさが変わった時に動作が変わる箇所を検出す
るものはなかった。
のプロセッサあるいは利用するコンパイラが変わり,整
数型の大きさが変わった時に動作が変わる箇所を検出す
るものはなかった。
【0007】
【発明が解決しようとする課題】LSI作成技術の進歩
に伴いマイクロプロセッサのレジスタの幅が,16ビッ
トから32ビット,32ビットから64ビットに拡張さ
れてきている。これを反映してC言語で記述されたソー
スプログラムから,計算機で動作するロードモジュール
を生成する各種のCコンパイラにおけるint 型オブジェ
クトの大きさが2バイトから4バイト,long型オブジェ
クトの大きさが4バイトから8バイトに変わってきてい
る。
に伴いマイクロプロセッサのレジスタの幅が,16ビッ
トから32ビット,32ビットから64ビットに拡張さ
れてきている。これを反映してC言語で記述されたソー
スプログラムから,計算機で動作するロードモジュール
を生成する各種のCコンパイラにおけるint 型オブジェ
クトの大きさが2バイトから4バイト,long型オブジェ
クトの大きさが4バイトから8バイトに変わってきてい
る。
【0008】このため,適切な制約の下に十分注意して
ソースプログラムを作成しないと,特定のプロセッサ,
コンパイラでしか正しく動作しない,という問題があっ
た。また,以前に作成したソースプログラムを,作成し
た時にターゲットとしていなかったプロセッサ,コンパ
イラでも正しく動作させる場合に,プログラムの規模が
大きければなおのこと,どこを修正すればよいかを特定
することが困難であった。
ソースプログラムを作成しないと,特定のプロセッサ,
コンパイラでしか正しく動作しない,という問題があっ
た。また,以前に作成したソースプログラムを,作成し
た時にターゲットとしていなかったプロセッサ,コンパ
イラでも正しく動作させる場合に,プログラムの規模が
大きければなおのこと,どこを修正すればよいかを特定
することが困難であった。
【0009】本発明は上記問題点の解決を図り,C言語
で記述されたソースプログラムから整数型のオブジェク
トの大きさが変わると動作が変わる箇所を,自動的に検
出し,さらに動作が変わらないように修正できるならば
自動修正する手段を提供することを目的とする。
で記述されたソースプログラムから整数型のオブジェク
トの大きさが変わると動作が変わる箇所を,自動的に検
出し,さらに動作が変わらないように修正できるならば
自動修正する手段を提供することを目的とする。
【0010】
【課題を解決するための手段】C言語の仕様書から整数
型(char型,short 型,int 型,long型)のオブジェク
トの大きさが変わると動作が変わるパタン(オブジェク
トに対する単項演算とオブジェクト間の二項演算)を抽
出する。該当パタンを,C言語で記述されたソースプロ
グラムから,ファイル名,行番号,オブジェクトを表す
名前と演算とで特定して検出する。
型(char型,short 型,int 型,long型)のオブジェク
トの大きさが変わると動作が変わるパタン(オブジェク
トに対する単項演算とオブジェクト間の二項演算)を抽
出する。該当パタンを,C言語で記述されたソースプロ
グラムから,ファイル名,行番号,オブジェクトを表す
名前と演算とで特定して検出する。
【0011】ソースプログラムからの検出を進めるに当
たり,一つのソースプログラムをオブジェクトの大きさ
によって異なる解釈をしなければならない事態に陥るこ
とがある。例えば,long型オブジェクトの大きさが4バ
イトのとき,次のプログラム1はプログラム2と動作を
同じくするが,long型オブジェクトの大きさが8バイト
のときにはプログラム3と動作を同じくする。
たり,一つのソースプログラムをオブジェクトの大きさ
によって異なる解釈をしなければならない事態に陥るこ
とがある。例えば,long型オブジェクトの大きさが4バ
イトのとき,次のプログラム1はプログラム2と動作を
同じくするが,long型オブジェクトの大きさが8バイト
のときにはプログラム3と動作を同じくする。
【0012】[プログラム1] #if 0xffffffff>-1 f(int a){return a; } #else g(int b){return b; } #endif [プログラム2] g(int b){return b; } [プログラム3] f(int a){return a; } このようにオブジェクトの大きさによって異なる解釈が
必要な場合に備えて,検査の前にオブジェクトの大きさ
をどの値とみなして検出を進めるかを定めておく。
必要な場合に備えて,検査の前にオブジェクトの大きさ
をどの値とみなして検出を進めるかを定めておく。
【0013】オブジェクトの大きさが変わると動作が変
わるパタンとしてソースプログラムから抽出するパタン
は,以下のパタンである。 (1) wchar_t ,size_t , ptrdiff_t 型オブジェク
トの定義 (2) sizeof(X) ただし,Xはint 型あるいはその別名,およびint 型を
メンバに含む集成型名,あるいは左記の型をもつオブジ
ェクトである。
わるパタンとしてソースプログラムから抽出するパタン
は,以下のパタンである。 (1) wchar_t ,size_t , ptrdiff_t 型オブジェク
トの定義 (2) sizeof(X) ただし,Xはint 型あるいはその別名,およびint 型を
メンバに含む集成型名,あるいは左記の型をもつオブジ
ェクトである。
【0014】(3) sizeof(Y) ただし,Yはlong型あるいはその別名,およびlong型を
メンバに含む集成型名,あるいは左記の型をもつオブジ
ェクトである。
メンバに含む集成型名,あるいは左記の型をもつオブジ
ェクトである。
【0015】(4) unsigned short型オブジェクトとプロ
モーション後int 型のオブジェクトの間の<,<=,
>,>=演算 (5) プロモーション後unsigned型のオブジェクトとlong
型のオブジェクトの間の<,<=,>,>=演算 なお,プロモーションとは,int 型より大きさが小さい
整数型のオブジェクトを演算する場合に,一度int 型ま
たはunsigned型に変換して演算するための変換である。
モーション後int 型のオブジェクトの間の<,<=,
>,>=演算 (5) プロモーション後unsigned型のオブジェクトとlong
型のオブジェクトの間の<,<=,>,>=演算 なお,プロモーションとは,int 型より大きさが小さい
整数型のオブジェクトを演算する場合に,一度int 型ま
たはunsigned型に変換して演算するための変換である。
【0016】(6) unsigned short型オブジェクトと負の
整定数との間の<,<=,>,>=演算 (7) プロモーション後unsigned型のオブジェクトとlong
型の+,−,*,/演算の結果と負の整定数との<,<
=,>,>=演算 (8) 231以上232未満の値をもつ整定数と符号付型との
<,<=,>,>=演算 (9) 27 以上28 未満の値をもつ16進あるいは8進の
整定数と符号付型との<,<=,>,>=演算 (10)プロモーション後unsigned型オブジェクトとlong型
の負の値との<,<=,>,>=演算 (11)long型,unsigned long 型オブジェクトのビット反
転演算 (12)プロモーション後int 型オブジェクト,unsigned型
になるオブジェクトのビット反転 以上の(1) 〜(12)のパタンをソースプログラムから検出
し,その検出結果を出力する。以上のパタンを検出でき
れば,整数型のオブジェクトの大きさが変わることによ
り予期しない動作が生じるようなことに対して事前に対
処することができる。なお,パタンごとに検出するかど
うかを検査の前に指定させて,特定のパタンのみを検出
するようにすることもできる。検出結果に従って,検査
したソースプログラムを自動修正することも可能であ
る。
整定数との間の<,<=,>,>=演算 (7) プロモーション後unsigned型のオブジェクトとlong
型の+,−,*,/演算の結果と負の整定数との<,<
=,>,>=演算 (8) 231以上232未満の値をもつ整定数と符号付型との
<,<=,>,>=演算 (9) 27 以上28 未満の値をもつ16進あるいは8進の
整定数と符号付型との<,<=,>,>=演算 (10)プロモーション後unsigned型オブジェクトとlong型
の負の値との<,<=,>,>=演算 (11)long型,unsigned long 型オブジェクトのビット反
転演算 (12)プロモーション後int 型オブジェクト,unsigned型
になるオブジェクトのビット反転 以上の(1) 〜(12)のパタンをソースプログラムから検出
し,その検出結果を出力する。以上のパタンを検出でき
れば,整数型のオブジェクトの大きさが変わることによ
り予期しない動作が生じるようなことに対して事前に対
処することができる。なお,パタンごとに検出するかど
うかを検査の前に指定させて,特定のパタンのみを検出
するようにすることもできる。検出結果に従って,検査
したソースプログラムを自動修正することも可能であ
る。
【0017】
【発明の実施の形態】図1は,本発明の概要説明図であ
る。図中,1はCPUおよびメモリ等からなる処理装
置,2は検査対象のCソースプログラム,3は検査条件
や抑止条件等の指定情報,4は検査結果の検出メッセー
ジ,5は自動修正した修正ソースプログラム,10はC
ソースプログラムから整数型のオブジェクトの大きさが
変わると動作が変わる箇所を検出するCプログラム検査
部を表す。
る。図中,1はCPUおよびメモリ等からなる処理装
置,2は検査対象のCソースプログラム,3は検査条件
や抑止条件等の指定情報,4は検査結果の検出メッセー
ジ,5は自動修正した修正ソースプログラム,10はC
ソースプログラムから整数型のオブジェクトの大きさが
変わると動作が変わる箇所を検出するCプログラム検査
部を表す。
【0018】Cプログラム検査部10は,Cソースプロ
グラム2を入力し,Cソースプログラム2の構文解析お
よび意味解析を行い,整数型のオブジェクトの大きさが
変わると動作が変わるパタンを検出する。このとき,検
査条件指定または抑止条件指定の指定情報3があれば,
その条件に従って検出する。
グラム2を入力し,Cソースプログラム2の構文解析お
よび意味解析を行い,整数型のオブジェクトの大きさが
変わると動作が変わるパタンを検出する。このとき,検
査条件指定または抑止条件指定の指定情報3があれば,
その条件に従って検出する。
【0019】また,Cプログラム検査部10は,Cソー
スプログラム2中で検出したパタンの部分を,整数型の
オブジェクトの大きさが変わっても動作が変わらない記
述,または意図した所定の動作となるような記述に自動
修正する手段を持つ。
スプログラム2中で検出したパタンの部分を,整数型の
オブジェクトの大きさが変わっても動作が変わらない記
述,または意図した所定の動作となるような記述に自動
修正する手段を持つ。
【0020】図2は,本発明の実施の形態に係るモジュ
ール構成図である。図2のCプログラムチェッカ20お
よびプリプロセッサ24は,図1のCプログラム検査部
10に相当する。この例では,Cプログラムチェッカ2
0およびプリプロセッサ24は,UNIXオペレーティ
ングシステム上で動作し,ソースファイル32等からC
言語で記述されたソースプログラムを入力して構文解析
および意味解析を行い,前述したパタンを検出して,検
出結果の検出メッセージ4をファイルあるいは端末に出
力する。
ール構成図である。図2のCプログラムチェッカ20お
よびプリプロセッサ24は,図1のCプログラム検査部
10に相当する。この例では,Cプログラムチェッカ2
0およびプリプロセッサ24は,UNIXオペレーティ
ングシステム上で動作し,ソースファイル32等からC
言語で記述されたソースプログラムを入力して構文解析
および意味解析を行い,前述したパタンを検出して,検
出結果の検出メッセージ4をファイルあるいは端末に出
力する。
【0021】Cプログラムを検査するための手段は,4
つの論理的な機能区分(カスタマイザ23,プリプロセ
ッサ24,チェッカ本体21,ポストプロセッサ22)
から構成され,カスタマイザ23,プリプロセッサ2
4,Cプログラムチェッカ20の3つのロードモジュー
ルから構成される(図2)。
つの論理的な機能区分(カスタマイザ23,プリプロセ
ッサ24,チェッカ本体21,ポストプロセッサ22)
から構成され,カスタマイザ23,プリプロセッサ2
4,Cプログラムチェッカ20の3つのロードモジュー
ルから構成される(図2)。
【0022】カスタマイザ23は,Cプログラムのチェ
ッカ起動時に一度だけ実行され,Cプログラムチェッカ
20の起動時に指定されたオプション,起動オプション
が指定されないときどのように解釈するかを記述したデ
フォルト情報ファイル30とカスタマイズファイル31
とから,カスタマイズ情報テーブルファイル35を作成
する。
ッカ起動時に一度だけ実行され,Cプログラムチェッカ
20の起動時に指定されたオプション,起動オプション
が指定されないときどのように解釈するかを記述したデ
フォルト情報ファイル30とカスタマイズファイル31
とから,カスタマイズ情報テーブルファイル35を作成
する。
【0023】作成されたカスタマイズ情報テーブルファ
イル35には,どのケースの検査をすべきかの情報や,
sizeof(char)の値,sizeof(short) の値,sizeof(int)
の値,sizeof(long)の値,size_t , ptrdiff_t , w
char_t の型,ソースプログラムが参照するヘッダファ
イルがどのディレクトリにあるかの情報,プログラム起
動時のオプションや環境変数等を保存している。プログ
ラム起動時のオプションは,ここではUNIXのCコン
パイラに倣った内容としている。ヘッダファイル,環境
変数等についてはUNIXシステム等において知られて
いるので,ここでの詳細な説明は省略する。
イル35には,どのケースの検査をすべきかの情報や,
sizeof(char)の値,sizeof(short) の値,sizeof(int)
の値,sizeof(long)の値,size_t , ptrdiff_t , w
char_t の型,ソースプログラムが参照するヘッダファ
イルがどのディレクトリにあるかの情報,プログラム起
動時のオプションや環境変数等を保存している。プログ
ラム起動時のオプションは,ここではUNIXのCコン
パイラに倣った内容としている。ヘッダファイル,環境
変数等についてはUNIXシステム等において知られて
いるので,ここでの詳細な説明は省略する。
【0024】プリプロセッサ24は,ソースファイル3
2,プロトタイプファイル33,マクロ定義ファイル3
4を読み込み,Cソースプログラムの中に記述されてい
る#から始まる行(行制御,ファイル取り込み,マクロ
定義)とマクロの展開を行い,前記パタンに該当する箇
所が見つかれば,エラーファイル37に出力し,マクロ
展開した内容をチェッカ本体21が読むように出力す
る。このファイルを図2では中間ファイル36として示
している。
2,プロトタイプファイル33,マクロ定義ファイル3
4を読み込み,Cソースプログラムの中に記述されてい
る#から始まる行(行制御,ファイル取り込み,マクロ
定義)とマクロの展開を行い,前記パタンに該当する箇
所が見つかれば,エラーファイル37に出力し,マクロ
展開した内容をチェッカ本体21が読むように出力す
る。このファイルを図2では中間ファイル36として示
している。
【0025】チェッカ本体21は,プリプロセッサ24
の出力した中間ファイル36を読み込んで,構文解析,
意味解析を行い,前記パタンに該当する箇所が見つかれ
ば,その情報をエラーファイル37に出力する。
の出力した中間ファイル36を読み込んで,構文解析,
意味解析を行い,前記パタンに該当する箇所が見つかれ
ば,その情報をエラーファイル37に出力する。
【0026】ポストプロセッサ22は,プリプロセッサ
24およびチェッカ本体21によってエラーファイル3
7に出力された内容をマージし,カスタマイズ情報テー
ブルファイル35に記述された内容に従って編集して,
それらを検出メッセージ4として出力する。また,カス
タマイズ情報テーブルファイル35に記述された内容に
従って,整数型のオブジェクトの大きさが変わっても動
作が変わらないようにソースプログラムを修正できる場
合には自動修正して,その修正結果を修正ソースファイ
ル40に出力する。
24およびチェッカ本体21によってエラーファイル3
7に出力された内容をマージし,カスタマイズ情報テー
ブルファイル35に記述された内容に従って編集して,
それらを検出メッセージ4として出力する。また,カス
タマイズ情報テーブルファイル35に記述された内容に
従って,整数型のオブジェクトの大きさが変わっても動
作が変わらないようにソースプログラムを修正できる場
合には自動修正して,その修正結果を修正ソースファイ
ル40に出力する。
【0027】以上のように各モジュールが順に動作し,
作成したCソースプログラムを格納したソースファイル
32を読み込んで,前記パタンに一致する箇所をそのフ
ァイル名と行番号,パタンとそれの構成要素である識別
子あるいは整定数を含んで検出する。
作成したCソースプログラムを格納したソースファイル
32を読み込んで,前記パタンに一致する箇所をそのフ
ァイル名と行番号,パタンとそれの構成要素である識別
子あるいは整定数を含んで検出する。
【0028】以上の処理において補助的に用いられるフ
ァイルについて簡単に説明する。カスタマイズファイル
31は,Cプログラムチェッカの起動時に指定できるオ
プションが指定されなかった場合にどのような解釈をす
るかを記述したファイルである。
ァイルについて簡単に説明する。カスタマイズファイル
31は,Cプログラムチェッカの起動時に指定できるオ
プションが指定されなかった場合にどのような解釈をす
るかを記述したファイルである。
【0029】デフォルト情報ファイル30は,Cプログ
ラムチェッカ20の起動時のオプションで指定しない情
報について指定するファイルであり,例えば,マクロや
型をソースプログラムで定義されているのと同様に定義
する。これはCコンパイラが内部で定義しているプロセ
ッサやオペレーティング・システム(OS)の名前をも
つ識別子を,Cプログラムチェッカ20が倣って定義す
るために利用する。
ラムチェッカ20の起動時のオプションで指定しない情
報について指定するファイルであり,例えば,マクロや
型をソースプログラムで定義されているのと同様に定義
する。これはCコンパイラが内部で定義しているプロセ
ッサやオペレーティング・システム(OS)の名前をも
つ識別子を,Cプログラムチェッカ20が倣って定義す
るために利用する。
【0030】メッセージファイル38は,Cプログラム
チェッカ20が出力するメッセージの雛型(出力時に埋
めるファイル名,行番号,オブジェクト名を除いたメッ
セージ等)を格納しているファイルである。
チェッカ20が出力するメッセージの雛型(出力時に埋
めるファイル名,行番号,オブジェクト名を除いたメッ
セージ等)を格納しているファイルである。
【0031】演算結果ファイル39は,次のようなもの
である。C言語ではint 型より大きさが小さい整数型の
オブジェクトは,演算する場合に一度int 型またはunsi
gned型に変換されてから演算される(この変換をプロモ
ーションと呼ぶ)。この変換は,ケースに依存する。例
えば,sizeof(int) =2の時に,unsigned short型はun
signed型に変換されてから演算されるが,sizeof(int)
=4の時には,int 型に変換されてから演算される。演
算結果ファイル39は,この処理のためのもので,各型
のオブジェクトが各ケースの時にどの型に変換されるか
を記述して保存しているものである。
である。C言語ではint 型より大きさが小さい整数型の
オブジェクトは,演算する場合に一度int 型またはunsi
gned型に変換されてから演算される(この変換をプロモ
ーションと呼ぶ)。この変換は,ケースに依存する。例
えば,sizeof(int) =2の時に,unsigned short型はun
signed型に変換されてから演算されるが,sizeof(int)
=4の時には,int 型に変換されてから演算される。演
算結果ファイル39は,この処理のためのもので,各型
のオブジェクトが各ケースの時にどの型に変換されるか
を記述して保存しているものである。
【0032】カスタマイズ情報テーブルファイル35
は,カスタマイズファイル31と起動オプションとを解
析して編集したファイルである。中間ファイル36は,
プロプロセッサ24が#includeや#define,マクロの展開
を行った結果と定義されているシンボル一覧を出力する
ファイルである。
は,カスタマイズファイル31と起動オプションとを解
析して編集したファイルである。中間ファイル36は,
プロプロセッサ24が#includeや#define,マクロの展開
を行った結果と定義されているシンボル一覧を出力する
ファイルである。
【0033】エラーファイル37は,プリプロセッサ2
4,チェッカ本体21が検出した内容を一旦保持してお
くファイルである。シンボルテーブル50〜52は,プ
ログラム中のシンボル情報を記憶するテーブルであり,
トークンテーブル53は,プログラム中で括弧やコロン
等の区切り記号で区切られた単位の情報を記憶するテー
ブルである。
4,チェッカ本体21が検出した内容を一旦保持してお
くファイルである。シンボルテーブル50〜52は,プ
ログラム中のシンボル情報を記憶するテーブルであり,
トークンテーブル53は,プログラム中で括弧やコロン
等の区切り記号で区切られた単位の情報を記憶するテー
ブルである。
【0034】C言語で記述された計算機プログラムにお
いて,整数型(char型,short 型,int 型,long型)の
オブジェクトの大きさがどのように変わっても動作が変
わらないプログラムは適用範囲が広いが,実現できる機
能範囲が狭くなり必ずしも現実的とはいえない。
いて,整数型(char型,short 型,int 型,long型)の
オブジェクトの大きさがどのように変わっても動作が変
わらないプログラムは適用範囲が広いが,実現できる機
能範囲が狭くなり必ずしも現実的とはいえない。
【0035】char型,short 型,int 型,long型のオブ
ジェクトの大きさは言語仕様から次の条件を満たす必要
がある。 ・sizeof(char)≦sizeof(short) ≦sizeof(int) ≦size
of(long) ・1≦sizeof(char),2≦sizeof(short) ,2≦sizeof
(int) ,4≦sizeof(long) このためプログラムの開発条件は次の多くのケースがあ
る。
ジェクトの大きさは言語仕様から次の条件を満たす必要
がある。 ・sizeof(char)≦sizeof(short) ≦sizeof(int) ≦size
of(long) ・1≦sizeof(char),2≦sizeof(short) ,2≦sizeof
(int) ,4≦sizeof(long) このためプログラムの開発条件は次の多くのケースがあ
る。
【0036】sizeof(int) の値(int型オブジェクトの大
きさ)がプロセッサのレジスタを反映して,16ビッ
ト,32ビット,64ビットの場合が考えられる。した
がって,sizeof(int) だけに関しても, ・16ビットのみ(sizeof(int) =2) ・32ビットのみ(sizeof(int) =4) ・64ビットのみ(sizeof(int) =8) ・16ビットまたは32ビット ・32ビットまたは64ビット ・16または32または64ビット のケースがある。
きさ)がプロセッサのレジスタを反映して,16ビッ
ト,32ビット,64ビットの場合が考えられる。した
がって,sizeof(int) だけに関しても, ・16ビットのみ(sizeof(int) =2) ・32ビットのみ(sizeof(int) =4) ・64ビットのみ(sizeof(int) =8) ・16ビットまたは32ビット ・32ビットまたは64ビット ・16または32または64ビット のケースがある。
【0037】sizeof(char)とsizeof(int) ,sizeof(sho
rt) とsizeof(int) ,sizeof(int)とsizeof(long)の大
小関係について<,=,<または=というケースがさら
に加わる。
rt) とsizeof(int) ,sizeof(int)とsizeof(long)の大
小関係について<,=,<または=というケースがさら
に加わる。
【0038】以上のような各種の開発条件に対応した検
査を可能とするために,Cプログラムチェッカ20に対
して,検査条件を指定することができる。図3は,検査
条件指定の説明図である。
査を可能とするために,Cプログラムチェッカ20に対
して,検査条件を指定することができる。図3は,検査
条件指定の説明図である。
【0039】char,short ,int ,long, wchar_t ,
size_t , ptrdiff_t 型は,ターゲットとなるプロセ
ッサやコンパイラ(環境)によって変わるため,プログ
ラム開発者は,開発条件に関して図3に示すような選択
肢の中から選択する必要がある。
size_t , ptrdiff_t 型は,ターゲットとなるプロセ
ッサやコンパイラ(環境)によって変わるため,プログ
ラム開発者は,開発条件に関して図3に示すような選択
肢の中から選択する必要がある。
【0040】図3(A)は,char,short ,int ,long
型のそれぞれの大きさに関する選択肢であり,図3
(B)は,char型の値の範囲に関する選択肢であり,図
3(C)〜(E)は,それぞれ wchar_t 型,size_t
型, ptrdiff_t 型に関する選択肢を示している。
型のそれぞれの大きさに関する選択肢であり,図3
(B)は,char型の値の範囲に関する選択肢であり,図
3(C)〜(E)は,それぞれ wchar_t 型,size_t
型, ptrdiff_t 型に関する選択肢を示している。
【0041】これらの選択肢の中で「または」「どれで
も」という条件が含まれる場合には,いくつかの環境で
検査対象のプログラムを動作させたいというプログラム
開発者の意思がある。そこで,「または」「どれでも」
を含む条件の場合に動作が変わる箇所をプログラムから
検出する。
も」という条件が含まれる場合には,いくつかの環境で
検査対象のプログラムを動作させたいというプログラム
開発者の意思がある。そこで,「または」「どれでも」
を含む条件の場合に動作が変わる箇所をプログラムから
検出する。
【0042】検査条件は,図3(A)〜(E)のそれぞ
れの場合の積だけ存在することになる。すなわち,
(A)について15種,(B)について3種,(C)に
ついて10種,(D)について5種,(E)について3
種であるから,検査条件は,15×3×10×5×3=
6750通りある。
れの場合の積だけ存在することになる。すなわち,
(A)について15種,(B)について3種,(C)に
ついて10種,(D)について5種,(E)について3
種であるから,検査条件は,15×3×10×5×3=
6750通りある。
【0043】また,不要な検出メッセージ4を出力しな
いようにするため,または不要な自動修正をしないよう
にするため,Cプログラムチェッカ20に対して,抑止
条件を指定することもできる。抑止条件の対象として
は,ファイルとパタンを選択することができ,対象ファ
イルの指定では,前述したパタンがあっても検出しない
ファイルおよびプログラムの行を指定することができ
る。対象パタンの指定では,前述した(1) 〜(12)のパタ
ンのうち,検出を抑止するパタンを指定することができ
る。
いようにするため,または不要な自動修正をしないよう
にするため,Cプログラムチェッカ20に対して,抑止
条件を指定することもできる。抑止条件の対象として
は,ファイルとパタンを選択することができ,対象ファ
イルの指定では,前述したパタンがあっても検出しない
ファイルおよびプログラムの行を指定することができ
る。対象パタンの指定では,前述した(1) 〜(12)のパタ
ンのうち,検出を抑止するパタンを指定することができ
る。
【0044】次に検査後の自動修正の例について説明す
る。図4は,Cソースプログラムについての自動修正の
例を示している。例えば検査対象が,図4に示すような
Cソースプログラム2であったとする。ここで,int 型
が2バイトまたは4バイトで動作を変えたくないものと
する。
る。図4は,Cソースプログラムについての自動修正の
例を示している。例えば検査対象が,図4に示すような
Cソースプログラム2であったとする。ここで,int 型
が2バイトまたは4バイトで動作を変えたくないものと
する。
【0045】このCソースプログラム2について,前述
したパタン抽出を行うと「(4) unsigned short型オブジ
ェクトとプロモーション後int 型のオブジェクトの間の
<,<=,>,>=演算」のパタンが該当する。
したパタン抽出を行うと「(4) unsigned short型オブジ
ェクトとプロモーション後int 型のオブジェクトの間の
<,<=,>,>=演算」のパタンが該当する。
【0046】このプログラムでは,「i<us」の部分(i
とusの値の比較結果) がオブジェクトの大きさによって
変わる。sizeof(short) とsizeof(int) が等しいとき
に,unsigned shortは,int 型ではなく,unsigned型に
プロモートが起きるためである。そこで,int 型が2バ
イトでも4バイトでも動作が変わらないようにするに
は,図4に示すような修正ソースプログラム5に修正す
ればよい。すなわち,動作を変わらないようにするに
は,「i<(int)us 」のように大小比較する変数の型を予
め整合させる。このような自動修正は,前記パタンに対
応したルーチンを用意することにより実現することがで
きる。
とusの値の比較結果) がオブジェクトの大きさによって
変わる。sizeof(short) とsizeof(int) が等しいとき
に,unsigned shortは,int 型ではなく,unsigned型に
プロモートが起きるためである。そこで,int 型が2バ
イトでも4バイトでも動作が変わらないようにするに
は,図4に示すような修正ソースプログラム5に修正す
ればよい。すなわち,動作を変わらないようにするに
は,「i<(int)us 」のように大小比較する変数の型を予
め整合させる。このような自動修正は,前記パタンに対
応したルーチンを用意することにより実現することがで
きる。
【0047】なお,図4に示すCソースプログラム2に
対する検査結果の出力は,例えば「ファイル名:行:i
とusとの<はshort型とint型のサイズ依存」
というような検出メッセージであり,自動修正を行わな
い場合でも,この検出メッセージによってプログラム開
発者に注意を促すことができる。
対する検査結果の出力は,例えば「ファイル名:行:i
とusとの<はshort型とint型のサイズ依存」
というような検出メッセージであり,自動修正を行わな
い場合でも,この検出メッセージによってプログラム開
発者に注意を促すことができる。
【0048】この検出メッセージにおいて,「ファイル
名」の部分には,このCソースプログラム2が格納され
ているファイルのファイル名,「行」の部分には「i<u
s」が記述されている行の行番号が埋め込まれる。
名」の部分には,このCソースプログラム2が格納され
ているファイルのファイル名,「行」の部分には「i<u
s」が記述されている行の行番号が埋め込まれる。
【0049】図5は,図2に示すプリプロセッサ24の
フローチャートである。プリプロセッサ24は,まずス
テップS1では,エラー中断時に制御を移すべき処理の
登録を行う。次に,環境変数,起動オプションの取得を
行い,内部テーブルに設定する(S2)。さらに,トー
クンテーブルの初期化,シンボルテーブルの初期化を行
い(S3,S4),続いてカスタマイズ情報の取得およ
びカスタマイズ情報テーブルファイル35への初期化を
行う(S5)。また,マクロ定義ファイル34およびプ
ロトタイプファイル33の読み込みを行い,内部への初
期化を行う(S6)。
フローチャートである。プリプロセッサ24は,まずス
テップS1では,エラー中断時に制御を移すべき処理の
登録を行う。次に,環境変数,起動オプションの取得を
行い,内部テーブルに設定する(S2)。さらに,トー
クンテーブルの初期化,シンボルテーブルの初期化を行
い(S3,S4),続いてカスタマイズ情報の取得およ
びカスタマイズ情報テーブルファイル35への初期化を
行う(S5)。また,マクロ定義ファイル34およびプ
ロトタイプファイル33の読み込みを行い,内部への初
期化を行う(S6)。
【0050】以上の初期化処理の後,ステップS7で
は,ソースファイル32から順次,検査対象のプログラ
ムを読み込む。ステップS8の判定により「#」から始
まる行のときは,ステップS9へ進み。次の前処理指令
かを判断する。
は,ソースファイル32から順次,検査対象のプログラ
ムを読み込む。ステップS8の判定により「#」から始
まる行のときは,ステップS9へ進み。次の前処理指令
かを判断する。
【0051】#if,#ifdef,#ifndef,#elif,#endif,#else,
#include,#define,#line,#error,#pragma,#ident このいずれかであれば,その前処理指令に対応した処理
を行い(S10),検出パタンに一致するかどうかを判
定する(S11)。検出パタンに一致しなければ,ステ
ップS7へ戻る。検出パタンに一致すれば,診断メッセ
ージをエラーファイル37へ出力し(S12),その
後,ステップS7へ戻る。
#include,#define,#line,#error,#pragma,#ident このいずれかであれば,その前処理指令に対応した処理
を行い(S10),検出パタンに一致するかどうかを判
定する(S11)。検出パタンに一致しなければ,ステ
ップS7へ戻る。検出パタンに一致すれば,診断メッセ
ージをエラーファイル37へ出力し(S12),その
後,ステップS7へ戻る。
【0052】ステップS9で前処理指令でないと判断し
た場合には,構文エラーのメッセージを出力し(S1
3),エラーとして中断処理へ移り(S14),処理を
終了する。
た場合には,構文エラーのメッセージを出力し(S1
3),エラーとして中断処理へ移り(S14),処理を
終了する。
【0053】ステップS8の判定で「#」から始まる行
ではない場合,ステップS15へ進み,通常のコンパイ
ラ等で行われているように,トークンテーブルへの出
力,シンボルテーブルへの出力を行い(S15,S1
6),それらを中間ファイル36へ出力する(S1
7)。以上の処理(S7〜S17)をソースファイル3
2が尽きるまで行い(S18),ソースファイル32が
尽きたら,チェッカ本体21を起動する(S19)。
ではない場合,ステップS15へ進み,通常のコンパイ
ラ等で行われているように,トークンテーブルへの出
力,シンボルテーブルへの出力を行い(S15,S1
6),それらを中間ファイル36へ出力する(S1
7)。以上の処理(S7〜S17)をソースファイル3
2が尽きるまで行い(S18),ソースファイル32が
尽きたら,チェッカ本体21を起動する(S19)。
【0054】図6は,図2に示すチェッカ本体21のフ
ローチャートである。チェッカ本体21は,プリプロセ
ッサ24と同様に,まずステップS21では,エラー中
断時に制御を移すべき処理の登録を行う。次に,環境変
数,起動オプションの取得を行い,内部テーブルに設定
する(S22)。次に,トークンテーブルの読み込み
(S23),シンボルテーブルの読み込み(S24)を
行い,続いてカスタマイズ情報の取得および内部への初
期化を行う(S25)。
ローチャートである。チェッカ本体21は,プリプロセ
ッサ24と同様に,まずステップS21では,エラー中
断時に制御を移すべき処理の登録を行う。次に,環境変
数,起動オプションの取得を行い,内部テーブルに設定
する(S22)。次に,トークンテーブルの読み込み
(S23),シンボルテーブルの読み込み(S24)を
行い,続いてカスタマイズ情報の取得および内部への初
期化を行う(S25)。
【0055】以上の初期化処理の後,ステップS26で
は,プリプロセッサ24の出力を読み込む。それを構文
解析し,内部で構文木を生成する(S27)。そして,
構文木と検出パタンとが一致するかどうかを調べ(S2
8),一致する場合には,診断メッセージをエラーファ
イル37へ出力する(S29)。
は,プリプロセッサ24の出力を読み込む。それを構文
解析し,内部で構文木を生成する(S27)。そして,
構文木と検出パタンとが一致するかどうかを調べ(S2
8),一致する場合には,診断メッセージをエラーファ
イル37へ出力する(S29)。
【0056】次に意味解析し,文を所定の内部形式に変
換する(S30)。なお,構文解析,意味解析等の処理
は,通常のコンパイラで行われている処理と同様である
ので,ここでの詳しい説明は省略する。
換する(S30)。なお,構文解析,意味解析等の処理
は,通常のコンパイラで行われている処理と同様である
ので,ここでの詳しい説明は省略する。
【0057】文を内部形式に変換した後,その内部形式
と検出パタンとが一致するかどうを調べる(S31)。
一致する場合には,診断メッセージをエラーファイル3
7へ出力する(S32)。
と検出パタンとが一致するかどうを調べる(S31)。
一致する場合には,診断メッセージをエラーファイル3
7へ出力する(S32)。
【0058】以上の処理(S26〜S32)をプリプロ
セッサ24の出力ファイルが尽きるまで行い(S3
3),出力ファイルが尽きたら,ポストプロセッサを起
動する(S34)。
セッサ24の出力ファイルが尽きるまで行い(S3
3),出力ファイルが尽きたら,ポストプロセッサを起
動する(S34)。
【0059】図7は,図2に示すポストプロセッサ22
のフローチャートである。ポストプロセッサ22は,ま
ずステップS41でカスタマイズ情報テーブルファイル
35の読み込みを行う。次に,エラーファイル37の読
み込みを行い(S42),読み込んだエラーファイル3
7の内容の診断メッセージを診断対象となったファイ
ル,行の順に並べかえ,中間ファイルを作成する(S4
3)。
のフローチャートである。ポストプロセッサ22は,ま
ずステップS41でカスタマイズ情報テーブルファイル
35の読み込みを行う。次に,エラーファイル37の読
み込みを行い(S42),読み込んだエラーファイル3
7の内容の診断メッセージを診断対象となったファイ
ル,行の順に並べかえ,中間ファイルを作成する(S4
3)。
【0060】次に,作成した中間ファイルから,抑止条
件指定により抑止対象となっている診断メッセージを削
除し,中間ファイルを更新する(S44)。また,この
中間ファイルの内容で,抑止対象となっている診断対象
ファイルに関する診断メッセージを削除する(S4
5)。
件指定により抑止対象となっている診断メッセージを削
除し,中間ファイルを更新する(S44)。また,この
中間ファイルの内容で,抑止対象となっている診断対象
ファイルに関する診断メッセージを削除する(S4
5)。
【0061】残った中間ファイルの内容を検出メッセー
ジ4として,プリンタ,ディスプレイ,ファイル等の出
力装置に出力する(S46)。また,利用者からの指定
と検出結果とに応じて,自動修正が可能であれば,図4
で説明したようなプログラムの自動修正を行い,処理を
終了する。
ジ4として,プリンタ,ディスプレイ,ファイル等の出
力装置に出力する(S46)。また,利用者からの指定
と検出結果とに応じて,自動修正が可能であれば,図4
で説明したようなプログラムの自動修正を行い,処理を
終了する。
【0062】
【実施例】以上のCプログラムチェッカにより,約15
M(千五百万)行のCソースプログラムを調査したとこ
ろ,凡そ100K(十万)行に1箇所の割合でlong型が
4バイトと8バイトとで動作が変わる箇所が発見でき
た。
M(千五百万)行のCソースプログラムを調査したとこ
ろ,凡そ100K(十万)行に1箇所の割合でlong型が
4バイトと8バイトとで動作が変わる箇所が発見でき
た。
【0063】
【発明の効果】以上説明したように,本発明によれば,
プログラムが動作する場合のプロセッサあるいは利用す
るコンパイラが変わり,整数型のオブジェクトの大きさ
が変わったときに動作が変わる箇所を自動的に検出する
ことができるので,各種の環境に応じたプログラムの開
発が容易になり,動作誤りを未然に防止することが可能
になる。さらに,自動修正機能を設けることによって,
より一層の労力の軽減および信頼性の向上が可能にな
る。
プログラムが動作する場合のプロセッサあるいは利用す
るコンパイラが変わり,整数型のオブジェクトの大きさ
が変わったときに動作が変わる箇所を自動的に検出する
ことができるので,各種の環境に応じたプログラムの開
発が容易になり,動作誤りを未然に防止することが可能
になる。さらに,自動修正機能を設けることによって,
より一層の労力の軽減および信頼性の向上が可能にな
る。
【図1】本発明の概要説明図である。
【図2】本発明の実施の形態に係るモジュール構成図で
ある。
ある。
【図3】検査条件指定の説明図である。
【図4】Cソースプログラムについての自動修正の例を
示す図である。
示す図である。
【図5】プリプロセッサのフローチャートである。
【図6】チェッカ本体のフローチャートである。
【図7】ポストプロセッサのフローチャートである。
【符号の説明】 1 処理装置 2 Cソースプログラム 3 指定情報 4 検出メッセージ 5 修正ソースプログラム 10 Cプログラム検査部
Claims (5)
- 【請求項1】 プログラム言語であるC言語を利用して
作成された計算機プログラムの検査処理方法であって,
C言語で記述されたソースプログラムを入力する過程
と,整数型のオブジェクトの大きさが変わるとプログラ
ムの動作が変わるパタンを,入力したソースプログラム
から検出する過程と,前記検出したパタンに該当するソ
ースプログラム情報を出力する過程とを有することを特
徴とするC言語の計算機プログラム検査処理方法。 - 【請求項2】 請求項1記載のC言語の計算機プログラ
ム検査処理方法において,int 型またはlong型のオブジ
ェクトの大きさが第1の場合と第2の場合とで動作が変
わるパタンをソースプログラムから検出する場合に,in
t 型またはlong型のオブジェクトの大きさをどちらか一
方に指定して検査することを特徴とするC言語の計算機
プログラム検査処理方法。 - 【請求項3】 請求項1または請求項2記載のC言語の
計算機プログラム検査処理方法において,前記パタンご
とに検出するかどうかの指定を検査の前に入力する過程
と,指定されたパタンについてのみ検出した結果を出力
する過程とを有することを特徴とするC言語の計算機プ
ログラム検査処理方法。 - 【請求項4】 プログラム言語であるC言語を利用して
作成された計算機プログラムの検査処理方法であって,
C言語で記述されたソースプログラムを入力する過程
と,整数型のオブジェクトの大きさが変わるとプログラ
ムの動作が変わるパタンを,入力したソースプログラム
から検出する過程と,前記検出したパタンに該当するソ
ースプログラムを,整数型のオブジェクトの大きさが変
わっても動作が変わらないかまたは所定の動作となるよ
うに自動修正する過程とを有することを特徴とするC言
語の計算機プログラム検査処理方法。 - 【請求項5】 プログラム言語であるC言語を利用して
作成された計算機プログラムの検査を行うためのプログ
ラムを格納した計算機読み取り可能な記憶媒体であっ
て,C言語で記述されたソースプログラムを入力する手
順と,C言語の仕様によって定まる整数型のオブジェク
トの大きさが変わるとプログラムの動作が変わるパタン
を,入力したソースプログラムから検出する手順と,前
記検出したパタンに該当するソースプログラム情報を出
力する,またはそのソースプログラムを,整数型のオブ
ジェクトの大きさが変わっても動作が変わらないかもし
くは所定の動作となるように自動修正する手順とを計算
機に実行させるプログラムを格納したことを特徴とする
プログラム記憶媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP9122014A JPH10312313A (ja) | 1997-05-13 | 1997-05-13 | C言語の計算機プログラム検査処理方法およびプログラム記憶媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP9122014A JPH10312313A (ja) | 1997-05-13 | 1997-05-13 | C言語の計算機プログラム検査処理方法およびプログラム記憶媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH10312313A true JPH10312313A (ja) | 1998-11-24 |
Family
ID=14825448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP9122014A Pending JPH10312313A (ja) | 1997-05-13 | 1997-05-13 | C言語の計算機プログラム検査処理方法およびプログラム記憶媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH10312313A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003271415A (ja) * | 2002-03-13 | 2003-09-26 | Denso Corp | 実行履歴記録装置、ブレーク命令設定装置、及びプログラム |
CN100334582C (zh) * | 1999-01-08 | 2007-08-29 | 国际商业机器公司 | 在手持装置中存储和检索数据的方法及装置 |
WO2010050128A1 (ja) * | 2008-10-30 | 2010-05-06 | パナソニック株式会社 | コンパイル方法及びコンパイルプログラム |
-
1997
- 1997-05-13 JP JP9122014A patent/JPH10312313A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100334582C (zh) * | 1999-01-08 | 2007-08-29 | 国际商业机器公司 | 在手持装置中存储和检索数据的方法及装置 |
JP2003271415A (ja) * | 2002-03-13 | 2003-09-26 | Denso Corp | 実行履歴記録装置、ブレーク命令設定装置、及びプログラム |
WO2010050128A1 (ja) * | 2008-10-30 | 2010-05-06 | パナソニック株式会社 | コンパイル方法及びコンパイルプログラム |
JP2010108258A (ja) * | 2008-10-30 | 2010-05-13 | Panasonic Corp | コンパイル方法及びコンパイルプログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6901579B1 (en) | Generation of source code from classes and maintaining the comment that indicates the role of the class in the generated source code | |
US10146532B2 (en) | Apparatus and method for detecting code cloning of software | |
US7757225B2 (en) | Linktime recognition of alternative implementations of programmed functionality | |
US5761510A (en) | Method for error identification in a program interface | |
US8082542B2 (en) | Load time in-lining of subroutines | |
US8201143B2 (en) | Dynamic mating of a modified user interface with pre-modified user interface code library | |
US8863101B2 (en) | Compiler generator | |
EP1333374A1 (en) | Dynamic generation of language localized and self-verified Java classes using XML descriptions and static initializers | |
US6820251B1 (en) | System and method for a software recovery mechanism | |
Favre | Preprocessors from an abstract point of view | |
US6415436B1 (en) | Mechanism for cross validating emulated states between different emulation technologies in a dynamic compiler | |
EP1376342A2 (en) | Single pass intermediate language verification algorithm | |
US6611924B1 (en) | Reducing code size of debug output statements | |
JPH10312313A (ja) | C言語の計算機プログラム検査処理方法およびプログラム記憶媒体 | |
EP0528019A1 (en) | METHOD AND DEVICE FOR COMPUTER CODE PROCESSING IN A CODE TRANSLATOR. | |
JP3300090B2 (ja) | 試験プログラム実行方法 | |
US8554522B2 (en) | Detection of design redundancy | |
JPH10312312A (ja) | 仕様によって動作が変わるc言語の計算機プログラム検査処理方法およびプログラム記憶媒体 | |
JPH10307735A (ja) | C++言語の計算機プログラム検査処理方法およびプログラム記憶媒体 | |
MacLennan | The Synmac syntax macroprocessor: Introduction and manual, version 5 | |
EP0526054A2 (en) | Monitoring execution of a computer program to provide test coverage analysis | |
JP3327662B2 (ja) | プログラム翻訳装置及びプログラム翻訳方法 | |
JP3029368B2 (ja) | プログラム誤り検出方法および誤り検出装置 | |
JPH08272623A (ja) | プログラム解析装置及びプログラム解析方法 | |
Neuhold et al. | Specification and proving of command programs |