JPH07281905A - 型宣言修正装置 - Google Patents

型宣言修正装置

Info

Publication number
JPH07281905A
JPH07281905A JP6065797A JP6579794A JPH07281905A JP H07281905 A JPH07281905 A JP H07281905A JP 6065797 A JP6065797 A JP 6065797A JP 6579794 A JP6579794 A JP 6579794A JP H07281905 A JPH07281905 A JP H07281905A
Authority
JP
Japan
Prior art keywords
maximum value
type
variable structure
declaration
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.)
Withdrawn
Application number
JP6065797A
Other languages
English (en)
Inventor
Hiroyuki Izumi
寛幸 泉
Tadamitsu Ryu
忠光 龍
Hiroyuki Tominaga
浩之 富永
Masahiko Murakawa
雅彦 村川
Masanobu Toyoda
雅信 豊田
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP6065797A priority Critical patent/JPH07281905A/ja
Publication of JPH07281905A publication Critical patent/JPH07281905A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 本発明は、型宣言修正装置に関し、プログラ
ム中から型や添字範囲の宣言を取り出して変数構造体に
置き換えてシミュレートして最大値などを収集し、適切
な型や添字範囲に自動修正し、型や添字範囲の過大によ
るメモリ浪費を無くしたり、型や添字範囲の過少による
エラーを回避したりすることを目的とする。 【構成】 プログラム中から変数の型宣言を取り出し、
現在値および最大値の領域を持つ変数構造体21に置き
換える変数構造体置換手段2と、この変数構造体21に
置き換え後のプログラムに、テストデータを入力して実
行したときの最大値を最大値の領域に保存しつつシミュ
レートするシュミレータ3と、このシミュレート後の変
数構造体21の最大値の領域から取り出した最大値をも
とにプログラム中の変数の型宣言を修正する宣言修正手
段4とを備えるように構成する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、プログラム中の型宣言
や添字範囲を自動修正する型宣言修正装置に関するもの
である。プログラミング言語において、ユーザが用いる
変数について、変数の格納領域の大きさを示す型を宣言
しなければならない。また、配列については配列の各要
素の格納領域の大きさを示す型を宣言すると同時に、配
列自身の格納領域の大きさ示す添字の大きさあるいは添
字範囲を宣言しなければならない。これらの型や添字範
囲を適切に自動修正することが望まれている。
【0002】
【従来の技術】従来、プログラム中で変数や配列を使用
する場合、型や型と添字範囲を固定的に宣言していた。
例えば変数の型について、整数型の場合、 ・short ・int ・long のいずれに固定的に宣言していた。また、実数型の場
合、 ・float ・double のいずれかに固定的に宣言していた。また、配列の場
合、型は変数の場合と同様に整数型あるいは実数型につ
いて上述の中からいずれかを固定的に宣言していた。ま
た、配列の添字範囲については、最大値、あるいは最小
値と最大値を固定的に宣言するようにしていた。
【0003】
【発明が解決しようとする課題】従来は上述したように
変数の型や配列の型については、整数型あるいは実数型
に対応して上述の中からいずれかを固定的に宣言してい
たため、型の宣言が大き過ぎた場合、無駄なメモリを使
用してしまうという問題が発生する。逆に型の宣言が小
さ過ぎた場合、領域のオーバーフローエラーが発生して
しまい、値が不正確になってしまうか、計算を実行でき
なくなってしまう問題が発生する。このために、変数や
配列の型について、大きめに宣言してしまい、メモリ資
源を無駄に使用するという問題が生じていた。
【0004】また、配列の添字範囲についても同様に、
過大の添字範囲を宣言するとメモリ資源を無駄に使用し
てしまう問題が発生し、一方、過少の添字範囲を宣言す
るとエラーとなってしまう問題が発生する。
【0005】このため、変数や配列の型の宣言、更に配
列の添字範囲の宣言について、適切な宣言に自動修正す
ることが望まれている。本発明は、これらの問題を解決
するため、プログラム中から型や添字範囲の宣言を取り
出して変数構造体に置き換えてシミュレートして最大値
などを収集し、適切な型や添字範囲に自動修正し、型や
添字範囲の過大によるメモリ浪費を無くしたり、型や添
字範囲の過少によるエラーを回避したりすることを目的
としている。
【0006】
【課題を解決するための手段】図1は、本発明の原理ブ
ロック図を示す。図1において、プログラム1は、プロ
グラミング言語によってプログラムされたソースプログ
ラムである。
【0007】変数構造体置換手段2は、プログラム1か
ら取り出した変数の型宣言、配列の型宣言、配列の添字
範囲を、変数構造体21に置き換えるものである。変数
構造体21は、現在値、最大値、あるいは添字範囲の最
大値(あるいは最大値と最小値)を格納する領域を持つ
ものである。
【0008】シミュレータ3は、変数構造体21に置き
換え後のプログラムに、テストデータを入力して実行し
たときの最大値を最大値の領域などに保存しつつシミュ
レートするものである。
【0009】宣言修正手段4は、シミュレート後の変数
構造体21の最大値の領域から取り出した最大値をもと
にプログラム中の変数あるいは配列の型宣言を修正した
り、最大値(あるいは最大値と最小値)の領域から取り
出した最大値(あるいは最大値と最小値)をもとにプロ
グラム中の配列の添字範囲を修正したりするものであ
る。
【0010】コンパイラ5は、型宣言や添字範囲を修正
した後のプログラムをコンパイルするものである。実行
手段6は、コンパイル後のモジュールを実行するもので
ある。
【0011】
【作用】本発明は、図1に示すように、変数構造体置換
手段2がプログラム中から変数の型宣言を取り出し、現
在値および最大値の領域を持つ変数構造体21に置き換
え、シミュレータ3が変数構造体21に置き換え後のプ
ログラムに、テストデータを入力して実行したときの最
大値を最大値の領域に保存しつつシミュレートし、宣言
修正手段4がシミュレート後の変数構造体21の最大値
の領域から取り出した最大値をもとにプログラム中の変
数の型宣言を修正するようにしている。
【0012】また、変数構造体置換手段2がプログラム
中から配列の型宣言を取り出し、現在値および最大値の
領域を持つ変数構造体21に置き換え、シミュレータ3
が変数構造体21に置き換え後のプログラムに、テスト
データを入力して実行したときの最大値を最大値の領域
に保存しつつシミュレートし、宣言修正手段4がシミュ
レート後の変数構造体21の最大値の領域から取り出し
た最大値をもとにプログラム中の配列の型宣言を修正す
るようにしている。
【0013】また、変数構造体置換手段2がプログラム
中から配列の添字範囲を取り出し、現在値および最大値
(あるいは最大値と最小値)の領域を持つ変数構造体2
1に置き換え、シミュレータ3が変数構造体21に置き
換え後のプログラムに、テストデータを入力して実行し
たときの最大値(あるいは最大値と最小値)を最大値
(あるいは最大値と最小値)の領域に保存しつつシミュ
レートし、宣言修正手段4がシミュレート後の変数構造
体21の最大値(あるいは最大値と最小値)の領域から
取り出した最大値(あるいは最大値と最小値)をもとに
プログラム中の配列の添字範囲を修正するようにしてい
る。
【0014】また、コンパイラ5がプログラム中の型宣
言あるいは添字範囲を修正した後のプログラムをコンパ
イルして実行形式のモジュールを生成し、実行手段6が
この実行形式のモジュールを実行するようにしている。
【0015】従って、プログラム中から型や添字範囲の
宣言を取り出して変数構造体に置き換えてシミュレート
して最大値などを収集し、適切な型や添字範囲に自動修
正し、型や添字範囲の過大によるメモリ浪費を無くした
り、型や添字範囲の過少によるエラーを回避したりする
ことが可能となる。
【0016】
【実施例】次に、図2から図13を用いて本発明の実施
例の構成および動作を順次詳細に説明する。
【0017】図2は、本発明の全体動作説明フローチャ
ートを示す。これは、図1の構成の全体の動作を説明し
たものである。図2において、S1は、ソースプログラ
ムP0を入力する。これは、図1のプログラミングした
プログラム(ソースプログラムP0)1を入力する。
【0018】S2は、ソースプログラムP0から型宣言
および添字範囲を取り出す。これは、例えば図4のソー
スプログラムP0から変数の型宣言 ・int ・long ・short ・float ・double や、配列の型宣言と添字範囲 ・int a[100] ・long b[200] ・short c[300] ・float f[200] ・double g[300] を取り出す。
【0019】S3は、ソースプログラムP0内の型宣言
と配列添字範囲とを変数構造体21に置き換えたものを
ソースプログラムP1とする。これは、例えば図4のソ
ースプログラムP0中の変数の型宣言、あるいは配列の
型宣言と添字範囲を取り出し、変数構造体21に置き換
えたものを図示のソースプログラムP1とする(図4の
例では、vsi、vsfによって置換して変数構造体2
1である旨を表現し、シミュレート時にシュミレータ3
が自動的に変数構造体21(図3参照)に置き換え、シ
ミュレートする)。
【0020】S4は、テストデータの入力を行う。これ
は、ソースプログラムP0に実行させようとするデータ
と同様のデータをテストデータとして入力する。S5
は、ソースプログラムP1の実行シミュレーションを行
う。これは、S4で入力されたテストデータをもとに、
シミュレータ3がソースプログラムP1を実行する。こ
の際、図6を用いて後述するように、変数の型宣言や配
列の型宣言と添字範囲に置換した図3の変数構造体21
中の現在値の領域に現在の値を代入/参照して処理を実
行すると共に、そのときの最大値(あるいは最大値と最
小値)を最大値(あるいは最大値と最小値)の領域に保
存しておく。
【0021】S6は、各変数構造体21の最大値(最小
値)を取り出す。S7は、ソースプログラムP1内の変
数構造体21を修正した型宣言と配列添字範囲とに置き
換えたものをソースプログラムP2とする。これは、S
6でシミュレート後の変数構造体21の最大値(あるい
は最大値と最小値)の領域から取り出した最大値(ある
いは最大値と最小値)をもとに、最適な変数の型宣言、
配列の型宣言と添字範囲を決定し(図7から図13を用
いて後述する)、この決定したものでソースプログラム
P1中の変数構造体21を置き換え、ソースプログラム
P2を作成する。
【0022】S8は、ソースプログラムP2のコンパイ
ルを行う。これにより、実行可能形式のモジュールがで
きたこととなる。S9は、S8でコンパイル後のP2を
実行する。
【0023】以上によって、ソースプログラムP0の変
数の型宣言、配列の型宣言と添字範囲を取り出して変数
構造体21に置換してソースプログラムP1を生成し、
このソースプログラムP1にテストデータを入力してシ
ミュレートしてそのときの最大値(あるいは最大値と最
小値)を当該変数構造体21中に記憶しておき、シミュ
レート後に変数構造体21中から取り出した最大値(あ
るいは最大値と最小値)とをもとに変数の型宣言、配列
の型宣言と添字範囲を最適に修正し、修正後のソースプ
ログラムP2をコンパイルして実行する。これらによ
り、ソースプログラムP0の変数の型宣言や配列の型宣
言と添字範囲をテストデータによって自動的に最適に修
正した後、コンパイルして実行し、型や添字範囲の過大
によるメモリ浪費を無くしたり、型や添字範囲の過少に
よるエラーを回避したりすることが可能となった。以下
順次詳細に説明する。
【0024】図3は、本発明の変数構造体例を示す。こ
れは、記述したように、ソースプログラムから取り出し
た変数の型宣言や配列の型宣言と添字範囲を置換する変
数構造体21の例である。
【0025】図3の(a)は、変数構造体例を示す。こ
れは、図示のように、 ・現在値 ・今までの最大値 ・今までの最小値 を格納する領域を設けたものである。現在値は、変数、
配列、添字範囲が現在の値を格納する領域である。今ま
での最大値は、現在値に代入した最大値を保存する領域
である。今なでの最小値は、現在値に代入した最小値を
保存する領域である。
【0026】図3の(b)は、変換構造体例を示す。こ
れは、図示のように、 ・現在値 ・今までの最大値 ・今までの最小値 ・最新値へのポインタ ・最初の値 ・次の値 ・・・ ・最新値(=現在値) を格納する領域を設けたものである。ここで、最新値へ
のポインタは、最初の値、次の値、・・・最新値(=現
在値)というように時系列に全てのデータを保存したと
きに最新値を指すポインタである。これにより、時系列
に全ての現在値の領域に代入された値が保存されるの
で、シミュレート後にこの時系列のデータを順次参照し
てその値の範囲を検出することができる。
【0027】図4は、本発明の整数と実数の型宣言の変
換例を示す。これは、ソースプログラムP0について、
整数の型宣言と、実数の型宣言を見つけて、変数構造体
21に変換する様子を示す。即ち、ソースプログラムP
0から ・変数の整数の型宣言として、 ・int x ・long x ・short z ・配列の整数の型宣言および添字範囲として、 ・int a[100] ・long b[200] ・short c[300] ・変数の実数の型宣言として、 ・float ff ・double gg ・配列の実数の型宣言および整数の添字範囲として、 ・float f[200] ・double g[300] を取り出し、ソースプログラムP1に示すようにそれぞ
れ図示のvsi、vsfを用いた記述に変換する。この
記述vsiは整数向けの変数構造体の宣言を記述したも
のであり、記述vsfは実数向けの変数構造体の宣言を
記述したものであり、シミュレータ3による実行時に、
図3の(a)あるいは(b)に示す変数構造体21に変
換されるものである。
【0028】図5は、本発明の配列の添字範囲の変換例
を示す。これは、ソースプログラムP0について、配列
の添字範囲を見つけ、変数構造体21に変換する様子を
示す。即ち、ソースプログラムP0から ・配列の添字範囲aの添字変数i ・配列の添字範囲aの添字変数j ・配列の添字範囲fの添字変数k ・配列の添字範囲gの添字変数h を見つけて取り出し、ソースプログラムP1に示すよう
にそれぞれ図示のvsi(整数向け)、vsf(実数向
け)を用いた記述に変換する。この記述vsiは整数向
けの変数構造体の宣言を記述したものであり、記述vs
fは実数向けの変数構造体の宣言を記述したものであ
り、シミュレータ3による実行時に、図3の(a)ある
いは(b)に示す変数構造体21に変換されるものであ
る。
【0029】次に、図6のフローチャートに示す順序に
従い、図4および図5の変数構造体21に変換後のソー
スプログラムP1の実行シミュレーション例を詳細に説
明する。
【0030】図6において、S11は、ソースプログラ
ムP1の命令文を1つずつ取り出す。S12は、取り出
した命令文を解釈し、 ・変数への値の代入命令か? ・変数の値の参照命令か? ・それ以外の代入命令か? のいずれかを判別する。
【0031】S13は、S12で代入命令と判別された
ので、変数構造体21の時系列配列に値を格納する。S
14は、変数構造体21の現在値の欄に値を代入する。
【0032】S15は、代入された値が最大値か判別す
る。これは、現在値の欄に代入した値が、最大値に格納
されている値よりも大きいか判別する。YESの場合に
は、S16で変数構造体21の最大値の欄に値を代入し
て最大値を更新し、S11に戻る。一方、NOの場合に
は、S17に進む。
【0033】S17は、代入された値が最小値か判別す
る。これは、現在値の欄に代入した値が、最小値に格納
されている値よりも小さいか判別する。YESの場合に
は、S18で変数構造体21の最小値の欄に値を代入し
て最小値を更新し、S11に戻る。一方、NOの場合に
も、S11に戻る。
【0034】以上のS13からS18によって、取り出
した命令が代入命令であった場合、現在値を変数構造体
21の現在値の欄の代入、現在値が最大値よりも大きい
ときは変数構造体21の最大値を更新し、現在値が最小
値よりも小さいときは変数構造体21の最小値を更新し
て最大値/最初値を記憶しておく。
【0035】S19は、S12で参照命令と判別された
ので、変数構造体21の現在値の欄(領域)を参照し、
その値を読み出す。そして、S11に戻る。以上のS1
9によって、取り出した命令が参照命令であった場合、
代入命令で代入された変数構造体21の現在値の欄から
その値を読み出す。
【0036】S20は、S12でそれ以外の命令と判別
されたので、命令文をそのまま実行する。そして、S1
1に戻る。以上のS20によって、取り出した命令が代
入命令や参照命令以外であった場合、その命令をそのま
ま実行する。
【0037】次に、図7のフローチャートに示す順序に
従い、変数の型宣言の修正するときの手順を詳細に説明
する。図7において、S21は、もとのプログラムP0
を入力する。これは、例えば図4のソースプログラムP
0を入力する。
【0038】S22は、プログラムP0内の変数xを変
数構造体xに置き換えたソースプログラムP1を作成す
る(図4参照)。S23は、ソースプログラムP1に対
して、テストデータを入力してシミュレーションを実行
する(図6参照)。
【0039】S24は、ソースプログラムP1内にもは
や変数構造体21が存在するか判別する。NOの場合に
は、S25でプログラムP2(変数の型宣言を適切に修
正した後のソースプログラムP2)を出力する。一方、
NOの場合には、S26に進む。
【0040】S26は、ソースプログラムP1から変数
構造体xを1つ取り出す。ソースプログラムP0内でそ
れに対応する変数をxと仮にここでは名づける。S27
は、P0内のxがshortまたはintまたはlon
gのような整数型としてソースプログラムP0内で型宣
言されているか判別する。YESの場合には、S28で
xの整数型宣言の修正を行い(図8を用いて後述す
る)、無駄なメモリ資源を浪費したり、過少によるエラ
ーを回避したりする。そして、S24に戻る。一方、N
Oの場合には、S29に進む。
【0041】S29は、P0内のxがfloatまたは
doubleのような実数型としてソースプログラムP
0内で型宣言されているか判別する。YESの場合に
は、S30でxの実数型宣言の修正を行う(図9を用い
て後述する)。そして、S24に戻る。一方、NOの場
合には、S24に戻る。
【0042】以上によって、シミュレーション後の変数
構造体21を取り出し、対応するソースプログラムP0
の変数xが整数型(short、int、long)の
場合にS28でxの整数の型宣言を修正し(図8)、変
数xが実数型(float、double)の場合にS
30でxの実数の型宣言を修正する(図9)。これらに
より、変数の型宣言が最適に修正され、無駄なメモリ資
源を浪費したり、過少によるエラーを回避したりするこ
とが可能となる。
【0043】図8は、本発明の整数の型宣言の修正フロ
ーチャートを示す。これは、図7のS28の詳細な修正
フローチャートである。図8において、S31は、ソー
スプログラムP1内の変数構造体xの最大値をxmax
とする。
【0044】S32は、型宣言shortで取りうる計
算機上の整数の最大値を(short)とする。S33
は、型宣言intで取りうる計算機上の整数の最大値を
(int)とする。
【0045】S34は、型宣言longで取りうる計算
機上の整数の最大値を(long)とする。S35は、
xmax≦(short)か判別する。YESの場合に
は、変数構造体21から取り出した最大値xmaxが計
算機の取りうる(short)よりも小さいと判明した
ので、S36でソースプログラムP2内の変数xの型宣
言をshortとする。即ち、 short x; int x: long x; は、short x;とする。そして、S37に進む。
一方、NOの場合には、S37に進む。
【0046】S37は、(short)≦xmax≦
(int)か判別する。YESの場合には、変数構造体
21から取り出した最大値xmaxが計算機の取りうる
(short)よりも大きく、(int)よりも小さい
と判明したので、S38でソースプログラムP2内の変
数xの型宣言をintとする。即ち、 short x; int x: long x; は、int x;とする。そして、S39に進む。一
方、NOの場合には、S39に進む。
【0047】S39は、(int)≦xmax≦(lo
ng)か判別する。YESの場合には、変数構造体21
から取り出した最大値xmaxが計算機の取りうる(i
nt)よりも大きく、(long)よりも小さいと判明
したので、S40でソースプログラムP2内の変数xの
型宣言をlongとする。即ち、 short x; int x: long x; は、long x;とする。そして、S41に進む。一
方、NOの場合には、S41に進む。
【0048】S41は、(long)≦xmaxか判別
する。YESの場合には、変数構造体21から取り出し
た最大値xmaxが計算機の取りうる(long)より
も大きいと判明したので、S42でユーザにその旨通知
して指示を受ける。例えば、その指示は ・テストデータを変えて再実行する ・ユーザ指示でlongまたはintに型宣言する などである。そして、終了する。一方、NOの場合に
は、終了する。
【0049】以上によって、整数の型宣言は、シミュレ
ート後の変数構造体21から取り出した最大値xmax
と、計算機上の整数の最大値(short)、(in
t)、(long)とを比較して必要最小限のサイズの
型宣言に自動的に修正されることとなる。
【0050】図9は、本発明の実数の型宣言の修正フロ
ーチャートを示す。これは、図7のS30の詳細な修正
フローチャートである。図9において、S51は、ソー
スプログラムP1内の変数構造体xの最大値をxmax
とする。
【0051】S52は、型宣言floatで取りうる計
算機上の整数の最大値を(float)とする。S53
は、型宣言doubleで取りうる計算機上の整数の最
大値を(double)とする。
【0052】S54は、xmax≦(float)か判
別する。YESの場合には、変数構造体21から取り出
した最大値xmaxが計算機の取りうる(float)
よりも小さいと判明したので、S55でソースプログラ
ムP2内の変数xの型宣言をfloatとする。即ち、 float x; double x: は、float x;とする。そして、S56に進む。
一方、NOの場合には、S56に進む。
【0053】S56は、(float)≦xmax≦
(double)か判別する。YESの場合には、変数
構造体21から取り出した最大値xmaxが計算機の取
りうる(float)よりも大きく、(double)
よりも小さいと判明したので、S57でソースプログラ
ムP2内の変数xの型宣言をdoubleとする。即
ち、 float x; double x: は、double x;とする。そして、S58に進
む。一方、NOの場合には、S58に進む。
【0054】S58は、(double)≦xmaxか
判別する。YESの場合には、変数構造体21から取り
出した最大値xmaxが計算機の取りうる(doubl
e)よりも大きいと判明したので、S59でユーザにそ
の旨通知して指示を受ける。例えば、その指示は ・テストデータを変えて再実行する ・ユーザ指示でfloatまたはdoubleに型宣言
する などである。そして、終了する。一方、NOの場合に
は、終了する。
【0055】以上によって、実数の型宣言は、シミュレ
ート後の変数構造体21から取り出した最大値xmax
と、計算機上の実数の最大値(float)、(dou
ble)とを比較して必要最小限のサイズの型宣言に自
動的に修正されることとなる。
【0056】次に、図10のフローチャートに示す順序
に従い、配列の型宣言の修正するときの手順を詳細に説
明する。図10において、S61は、もとのプログラム
P0を入力する。これは、例えば図4のソースプログラ
ムP0を入力する。
【0057】S62は、プログラムP0内の任意の配列
a[ ]の各要素a[i]を変数構造体a[i]に置き
換えたソースプログラムP1を作成する(図4参照)。
S63は、ソースプログラムP1に対して、テストデー
タを入力してシミュレーションを実行する(図6参
照)。
【0058】S64は、ソースプログラムP1内に配列
(変数構造体21)が存在するか判別する。NOの場合
には、S65でソースプログラムP2(配列の型宣言を
適切に修正した後のソースプログラムP2)を出力す
る。一方、NOの場合には、S66に進む。
【0059】S66は、ソースプログラムP1から配列
(変数構造体x)を1つ取り出す。ソースプログラムP
0内でそれに対応する配列をa[ ]と仮にここでは名
づける。
【0060】S67は、P0内のa[ ]がshort
またはintまたはlongのような整数型としてソー
スプログラムP0内で型宣言されているか判別する。Y
ESの場合には、S68で配列a[ ]の整数型宣言の
修正を行い(図11を用いて後述する)、無駄なメモリ
資源を浪費したり、過少によるエラーを回避したりす
る。そして、S64に戻る。一方、NOの場合には、S
69に進む。
【0061】S69は、P0内のa[ ]がfloat
またはdoubleのような実数型としてソースプログ
ラムP0内で型宣言されているか判別する。YESの場
合には、S70で配列a[ ]の実数型宣言の修正を行
う(図12を用いて後述する)。そして、S64に戻
る。一方、NOの場合には、S64に戻る。
【0062】以上によって、シミュレーション後の変数
構造体21を取り出し、対応するソースプログラムP0
の配列a[ ]が整数型(short、int、lon
g)の場合にS68で配列a[ ]の整数の型宣言を修
正し(図11)、配列a[]が実数型(float、d
ouble)の場合にS70で配列a[ ]の実数の型
宣言を修正する(図12)。これらにより、配列の型宣
言が最適に修正され、無駄なメモリ資源を浪費したり、
過少によるエラーを回避したりすることが可能となる。
【0063】図11は、本発明の配列の整数の型宣言の
修正フローチャートを示す。これは、図10のS68の
詳細な修正フローチャートである。図11において、S
71は、ソースプログラムP1内の配列a[ ](変数
構造体)の最大値の行での最大値をamaxとする。
【0064】S72は、型宣言shortで取りうる計
算機上の整数の最大値を(short)とする。S73
は、型宣言intで取りうる計算機上の整数の最大値を
(int)とする。
【0065】S74は、型宣言longで取りうる計算
機上の整数の最大値を(long)とする。S75は、
amax≦(short)か判別する。YESの場合に
は、配列a(変数構造体21)から取り出した最大値a
maxが計算機の取りうる(short)よりも小さい
と判明したので、S76でソースプログラムP2内の配
列a[ ]の型宣言をshortとする。即ち、 short a[ ]; int a[ ]: long a[ ]; は、short a[ ];とする。そして、S77に
進む。一方、NOの場合には、S77に進む。
【0066】S77は、(short)≦xmax≦
(int)か判別する。YESの場合には、変数構造体
21から取り出した最大値xmaxが計算機の取りうる
(short)よりも大きく、(int)よりも小さい
と判明したので、S78でソースプログラムP2内の配
列a[ ]の型宣言をintとする。即ち、 short a[ ]; int a[ ]: long a[ ]; は、int a[ ];とする。そして、S79に進
む。一方、NOの場合には、S79に進む。
【0067】S79は、(int)≦xmax≦(lo
ng)か判別する。YESの場合には、変数構造体21
から取り出した最大値xmaxが計算機の取りうる(i
nt)よりも大きく、(long)よりも小さいと判明
したので、S80でソースプログラムP2内の配列a
[ ]の型宣言をlongとする。即ち、 short a[ ]; int a[ ]: long a[ ]; は、long a[ ];とする。そして、S81に進
む。一方、NOの場合には、S81に進む。
【0068】S81は、(long)≦xmaxか判別
する。YESの場合には、変数構造体21から取り出し
た最大値xmaxが計算機の取りうる(long)より
も大きいと判明したので、S82でユーザにその旨通知
して指示を受ける。例えば、その指示は ・テストデータを変えて再実行する ・ユーザ指示でlongまたはintに型宣言する などである。そして、終了する。一方、NOの場合に
は、終了する。
【0069】以上によって、配列の整数の型宣言は、シ
ミュレート後の変数構造体21から取り出した最大値x
maxと、計算機上の整数の最大値(short)、
(int)、(long)とを比較して必要最小限のサ
イズの配列の型宣言に自動的に修正されることとなる。
【0070】図12は、本発明の配列の実数の型宣言の
修正フローチャートを示す。これは、図10のS70の
詳細な修正フローチャートである。図12において、S
91は、ソースプログラムP1内の配列a[ ]の変数
構造体xの最大値の行での最大値をamaxとする。
【0071】S92は、型宣言floatで取りうる計
算機上の整数の最大値を(float)とする。S93
は、型宣言doubleで取りうる計算機上の整数の最
大値を(double)とする。
【0072】S94は、xmax≦(float)か判
別する。YESの場合には、変数構造体21から取り出
した最大値xmaxが計算機の取りうる(float)
よりも小さいと判明したので、S95でソースプログラ
ムP2内の配列a[ ]をfloatとする。即ち、 float a[ ]; double a[ ]; は、float a[ ];とする。そして、S96に
進む。一方、NOの場合には、S96に進む。
【0073】S96は、(float)≦xmax≦
(double)か判別する。YESの場合には、変数
構造体21から取り出した最大値xmaxが計算機の取
りうる(float)よりも大きく、(double)
よりも小さいと判明したので、S97でソースプログラ
ムP2内の配列a[ ]の型宣言をdoubleとす
る。即ち、 float a[ ]; double a[ ]; は、double a[ ];とする。そして、S98
に進む。一方、NOの場合には、S98に進む。
【0074】S98は、(double)≦xmaxか
判別する。YESの場合には、変数構造体21から取り
出した最大値xmaxが計算機の取りうる(doubl
e)よりも大きいと判明したので、S59でユーザにそ
の旨通知して指示を受ける。例えば、その指示は ・テストデータを変えて再実行する ・ユーザ指示でfloatまたはdoubleに型宣言
する などである。そして、終了する。一方、NOの場合に
は、終了する。
【0075】以上によって、配列の実数の型宣言は、シ
ミュレート後の変数構造体21から取り出した最大値x
maxと、計算機上の実数の最大値(float)、
(double)とを比較して必要最小限のサイズの配
列の型宣言に自動的に修正されることとなる。
【0076】図13は、本発明の配列の添字範囲の修正
フローチャートを示す。図13において、S101は、
もとのソースプログラムP0を入力する。S102は、
ソースプログラムP0内の任意の配列a[ ]に対し、
構文解析によりa[ ]の配列添字として用いられてい
る変数を見つける。
【0077】S103は、a[ ]の配列添字として用
いられている全ての変数iを、その対応する変数構造体
iに置き換えたものをソースプログラムP1とする。S
104は、ソースプログラムP1に対して、テストデー
タを入力してシミュレーションを実行する。
【0078】S105は、a[ ]の配列添字として用
いられている全ての変数の時系列配列内の値を調べて、
その最大値をmaxiとする。S106は、配列a
[ ]の大きさ宣言が、a[max]のように領域の大
きさで宣言しているか?、あるいはa[min,ma
x]のように、添字範囲の最小値と最大値で宣言してい
るか判別する。領域の大きさで宣言していると判別され
た場合には、S107でソースプログラムP0内の配列
a[ ]の大きさ宣言を、a[ma]に置き換えたもの
を、ソースプログラムP2とする。ここで、maは、ユ
ーザの指定によりmaxiが、maxiより少しだけ大
きな整数値である。
【0079】また、S106で添字範囲の最小値と最大
値で宣言されていると判別された場合には、S108で
a[ ]の配列添字として用いられる全ての変数の時系
列配列内の値を調べて、その最小値をminiとする。
【0080】S109は、ソースプログラムP0内の配
列a[ ]の大きさ宣言を、a[mi.ma]に置き換
えたものを、ソースプログラムP2とする。ここで、m
aは、ユーザの指定によりmaxiが、maxiより少
しだけ大きな整数値である。miは、ユーザの指定によ
りminiかminiより少しだけ小さな整数値であ
る。
【0081】S110は、ソースプログラムP2を出力
する。以上によって、配列の添字範囲の宣言は、シミュ
レート後の変数構造体21から取り出した最大値xma
xをもとに領域の大きさで宣言されている場合に添字範
囲を修正し、一方、添字範囲の最小値と最大値で宣言さ
れている場合に最大値と最小値をもとに添字範囲を修正
し、必要最小限のサイズの配列の添字範囲に自動的に修
正されることとなる。
【0082】
【発明の効果】以上説明したように、本発明によれば、
プログラム中から型や添字範囲の宣言を取り出して変数
構造体21置き換えてシミュレートして最大値などを収
集し、適切な型や添字範囲に自動修正する構成を採用し
ているため、型や添字範囲の過大によるメモリ浪費を無
くしたり、型や添字範囲の過少によるエラーを回避した
りすることができる。これらにより、 (1) 型宣言や配列宣言と添字範囲の宣言を行うプロ
グラミング言語で記述されたソースプログラムについ
て、予め変数値の範囲を小さく宣言してしまった結果、
生じるエラーを実際の実行時に回避できる。
【0083】(2) また、予め変数値の範囲を大きく
宣言してしまった結果、使わないメモリの過大な専有
を、実際の実行時に回避できる。 (3) その結果、不必要なメモリ消費を無くすと共に
エラーを回避回避し、プログラム自体を小さくすること
ができる。
【図面の簡単な説明】
【図1】本発明の原理ブロック図である。
【図2】本発明の全体動作説明フローチャートである。
【図3】本発明の変数構造体例である。
【図4】本発明の整数と実数の型宣言の変換例である。
【図5】本発明の配列の添字範囲の変換例である。
【図6】本発明のプログラムP1の実行シミュレーショ
ン例である。
【図7】本発明の変数の型宣言の修正フローチャートで
ある。
【図8】本発明の整数の型宣言の修正フローチャートで
ある。
【図9】本発明の実数の型宣言の修正フローチャートで
ある。
【図10】本発明の配列の型宣言の修正フローチャート
である。
【図11】本発明の配列の整数の型宣言の修正フローチ
ャートである。
【図12】本発明の配列の実数の型宣言の修正フローチ
ャートである。
【図13】本発明の配列の添字範囲の修正フローチャー
トである。
【符号の説明】
1:プログラム 2:変数構造体置換手段 21:変数構造体 3:シミュレータ 4:宣言修正手段 5:コンパイラ 6:実行手段
フロントページの続き (72)発明者 村川 雅彦 神奈川県川崎市中原区上小田中1015番地 富士通株式会社内 (72)発明者 豊田 雅信 神奈川県川崎市中原区上小田中1015番地 富士通株式会社内

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】プログラム中から変数の型宣言を取り出
    し、現在値および最大値の領域を持つ変数構造体(2
    1)に置き換える変数構造体置換手段(2)と、 この変数構造体(21)に置き換え後のプログラムに、
    テストデータを入力して実行したときの最大値を上記最
    大値の領域に保存しつつシミュレートするシュミレータ
    (3)と、 このシミュレート後の上記変数構造体(21)の最大値
    の領域から取り出した最大値をもとに上記プログラム中
    の変数の型宣言を修正する宣言修正手段(4)とを備え
    たことを特徴とする型宣言修正装置。
  2. 【請求項2】プログラム中から配列の型宣言を取り出
    し、現在値および最大値の領域を持つ変数構造体(2
    1)に置き換える変数構造体置換手段(2)と、 この変数構造体(21)に置き換え後のプログラムに、
    テストデータを入力して実行したときの最大値を上記最
    大値の領域に保存しつつシミュレートするシュミレータ
    (3)と、 このシミュレート後の上記変数構造体(21)の最大値
    の領域から取り出した最大値をもとに上記プログラム中
    の配列の型宣言を修正する宣言修正手段(4)とを備え
    たことを特徴とする型宣言修正装置。
  3. 【請求項3】プログラム中から配列の添字範囲を取り出
    して、現在値および添字範囲の最大値(あるいは最小値
    と最大値)の領域を持つ変数構造体(21)に置き換え
    る変数構造体置換手段(2)と、 この変数構造体(21)に置き換え後のプログラムに、
    テストデータを入力して実行したときの最大値(あるい
    は最大値と最小値)を上記最大値(あるいは最小値と最
    大値)の領域に保存しつつシミュレートするシュミレー
    タ(3)と、 このシミュレート後の上記変数構造体(21)の最大値
    (あるいは最小値と最大値)の領域から取り出した最大
    値(あるいは最小値と最大値)をもとに上記プログラム
    中の配列の添字範囲を修正する宣言修正手段(4)とを
    備えたことを特徴とする型宣言修正装置。
  4. 【請求項4】上記プログラム中の型宣言あるいは添字範
    囲を修正した後のプログラムをコンパイルして実行形式
    のモジュールを生成することを特徴とする請求項1また
    は請求項2または請求項3に記載の型宣言修正装置。
JP6065797A 1994-04-04 1994-04-04 型宣言修正装置 Withdrawn JPH07281905A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP6065797A JPH07281905A (ja) 1994-04-04 1994-04-04 型宣言修正装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6065797A JPH07281905A (ja) 1994-04-04 1994-04-04 型宣言修正装置

Publications (1)

Publication Number Publication Date
JPH07281905A true JPH07281905A (ja) 1995-10-27

Family

ID=13297388

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6065797A Withdrawn JPH07281905A (ja) 1994-04-04 1994-04-04 型宣言修正装置

Country Status (1)

Country Link
JP (1) JPH07281905A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005301415A (ja) * 2004-04-07 2005-10-27 Ricoh Co Ltd コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム
WO2014006693A1 (ja) * 2012-07-03 2014-01-09 株式会社日立製作所 故障影響評価システム及び評価方法
JP2015007820A (ja) * 2013-06-24 2015-01-15 キヤノン株式会社 情報処理装置、情報処理方法及びプログラム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005301415A (ja) * 2004-04-07 2005-10-27 Ricoh Co Ltd コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム
WO2014006693A1 (ja) * 2012-07-03 2014-01-09 株式会社日立製作所 故障影響評価システム及び評価方法
JPWO2014006693A1 (ja) * 2012-07-03 2016-06-02 株式会社日立製作所 故障影響評価システム及び評価方法
JP2015007820A (ja) * 2013-06-24 2015-01-15 キヤノン株式会社 情報処理装置、情報処理方法及びプログラム

Similar Documents

Publication Publication Date Title
JP3946233B2 (ja) 画像表示システム
CA2061012C (en) Enhanced neural network shell for application programs
JPS62208166A (ja) シミュレーションプログラム生成方法
JPH0658678B2 (ja) 回路設計を合成する為のプロセス及び装置
US5912819A (en) Method for designing an architectural system
JPH04102926A (ja) 繰り返しループの展開最適化方式
US6757884B2 (en) Application specific integrated circuit design tool and file structure
US5101362A (en) Modular blackboard based expert system
JPH07281905A (ja) 型宣言修正装置
JP3297213B2 (ja) 集積回路シミュレータ及び集積回路のシミュレーション方法
JPH06124202A (ja) プログラムを実行するためのデジタル信号処理装置
JPH05101141A (ja) 高位合成装置
US20020174151A1 (en) Calculation method and apparatus
JPH0763643A (ja) 流体解析装置
JPS61147336A (ja) ロ−ドモジユ−ルの世代管理方式
JP2841403B2 (ja) ループ最適化処理方法
JP2938170B2 (ja) 機能設計支援装置
JPH08137684A (ja) プログラム転送方法、プログラム開発システムならびにプログラム開発装置およびプログラム実行装置
Hadley The performance enhancement of a run-time reconfigurable FPGA system through partial reconfiguration
Waldschmidt et al. FPGA synthesis for cellular processing
JPH09265400A (ja) コンパイル最適化方式
JP4278580B2 (ja) プログラム変更方法、プログラマブルコントローラおよびプログラム編集装置。
JP3006505B2 (ja) 並列プロセスを含むプログラムの修正装置、修正方法、および修正プログラムを記憶する記憶媒体
Almeida et al. Verification of hardware implementations through correctness of their recursive definitions in PVS
JPS60169906A (ja) プログラマブルコントロ−ラ

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20010605