JPH0981411A - コンパイラ - Google Patents

コンパイラ

Info

Publication number
JPH0981411A
JPH0981411A JP7241059A JP24105995A JPH0981411A JP H0981411 A JPH0981411 A JP H0981411A JP 7241059 A JP7241059 A JP 7241059A JP 24105995 A JP24105995 A JP 24105995A JP H0981411 A JPH0981411 A JP H0981411A
Authority
JP
Japan
Prior art keywords
program
intermediate code
data area
compiler
inspection
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
JP7241059A
Other languages
English (en)
Inventor
Masaharu Nakazawa
正治 中澤
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 JP7241059A priority Critical patent/JPH0981411A/ja
Publication of JPH0981411A publication Critical patent/JPH0981411A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

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

Abstract

(57)【要約】 【課題】 コンパイラに関し,ソースプログラムの仕様
に依存することなく,データ領域の引用の検査をするオ
ブジェクトプログラムを生成することを目的とする。 【解決手段】 ソースプログラムを基に実行可能な形式
のオブジェクトプログラムを生成するコンパイラにおい
て,ソースプログラムを解析して中間コードの集合を生
成するプログラム解析部と,中間コードを結合してオブ
ジェクトプログラムを生成するオブジェクトプログラム
生成部とを備え,オブジェクトプログラム生成部は中間
コードの集合に含まれるデータ領域の引用に基づいて生
成された中間コードを検索し,該中間コードを基に該定
義の引用の正当性を検査する検査プログラムを呼び出す
中間コードを該中間コードの集合に組み込む構成をも
つ。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】データ領域の引用の正当性を
検査するコンパイラに関する。コンピュータ用高級言語
プログラムはソースプログラムをコンパイラにより実行
可能な形式のオブジェクトプログラムに翻訳する必要が
ある。このような高級言語で作成したソースプログラム
に,例えばデータ領域の定義外の領域を引用する等の誤
りが含まれていると,オブジェクトプログラムが正しく
動作しない。そのため,コンパイラによりオブジェクト
プログラムに翻訳する際にその誤りを指摘して表示する
必要がある。
【0002】
【従来の技術】ソースプログラムはデータ領域に関する
宣言文(データ領域の定義)およびそれらを引用する実
行文により構成される。また,コンパイラによりオブジ
ェクトプログラムを生成して実行する時に,データ領域
の引用の正当性の検査(プログラムの実行においてデー
タ領域の位置を表す値が得られた時,その値がデータ領
域の定義の範囲内にあるかないかの検査)等の検査を行
うか,あるいは行わないかを指定することができる。そ
して,検査することが指定されている場合には,例えば
データ領域の引用の正当性の検査をするような時,検査
をしない場合のオブジェクトプログラムとは別にそれら
のデータ領域に関する情報およびその検査プログラムを
呼び出す中間コードを含むオブジェクトプログラムを生
成し,実行時に検査プログラムを呼び出して検査するよ
うにしていた。
【0003】図9は従来のコンパイラを示す。図9にお
いて,110はソースプログラムである。
【0004】111は,データ領域の定義である(宣言
文)。例えば,配列,文字列,構造体(定義Aに要素
b,cが含まれる等)である。111’はデータ領域の
引用文である(プログラムの実行文であって,データ領
域の位置を表す値が含まれるか,もしくは演算結果とし
てその値が得られるもの等)。
【0005】112はコンパイラである。114はソー
ス解析部であって,ソースプログラムを解析するもので
ある。115は意味解析部であって,ソースプログラム
の意味を解析するものである。
【0006】116は中間コード生成部であって,ソー
スプログラムの意味解析結果に基づいて機械語に近い言
語である中間コードを生成するものである。117は最
適化処理部であって,引用されていない数式等のプログ
ラムの実行に必要のない中間コードを削除する等でプロ
グラムの最適化を行うものである。
【0007】118はオブジェクトプログラム生成部で
あって,中間コードの集合を基にオブジェクトプログラ
ムを生成するものである。120はオブジェクトプログ
ラム実行部である。
【0008】121は実行結果出力部である。125は
検査プログラムライブラリであって,各種検査プログラ
ムを備えているライブラリである。
【0009】図10は従来のコンパイラのフローチャー
トである。図10により図9の従来のコンパイラの動作
を説明する。 コンパイルにおいて検査指定がない場合。
【0010】S1 コンパイラ112はソースプログラ
ム110を入力する。 S2 データ領域の引用の正当性等の検査をするかしな
いかを判定する。今の場合,検査の指定がないのでS3
に進む。検査の指定があればS10に進む。
【0011】S3 ソース解析部114は入力されたプ
ログラムの文字列からプログラム文を抽出する等の構文
解析をする。 S4 意味解析部115はソース解析して得られたプロ
グラム文の意味を解析する。
【0012】S5 中間コード生成部116は意味解析
結果に基づいて中間コードを生成する。 S6 最適化処理部117はソースプログラム110の
中間コード群に対して,無駄がなく最適にプログラムが
実行できるように最適化処理をする。
【0013】S7 オブジェクトプログラム生成部11
8は中間コード群の各中間コードを結合(リンク)する
等でオブジェクトプログラムを生成する。 S8 オブジェクトプログラム実行部120は生成され
たオブジェクトプログラムを実行する。
【0014】S9 実行結果出力部121は実行結果を
出力する。 コンパイルにおいて検査指定がある場合。 S1 コンパイラ112はソースプログラム110を入
力する。
【0015】S2 検査指定があるか判断する。今の場
合,検査指定があるのでS11に進む。 S11 ソース解析部114は入力されたソースプログ
ラム110に対してソース解析をする。
【0016】S12 意味解析部115はソース解析に
より得られたプログラム文に対して意味解析をする。 S13 中間コード生成部116は意味解析結果に基づ
いて中間コードを生成する。
【0017】S14 検査指定があるので,ソース解析
結果,意味解析結果を基にデータ領域等の検査対象の情
報に関する中間コードを生成する。例えば,データ領域
の引用の正当性の検査であれば,データ領域の先頭番
地,データ領域の大きさ,データを配列する番地,デー
タの大きさ等を表す中間コードを生成する。
【0018】S15 対象とする検査プログラムを呼び
出す中間コードを生成する。 S6 最適化処理部117はソースプログラム110の
中間コード群に対して,プログラムの実行に無駄がなく
最適に実行できるように最適化処理をする。
【0019】S7 オブジェクトプログラム生成部11
8は中間コードを係合し,オブジェクトプログラムを生
成する。このとき,S14,S15で生成した検査のた
めの中間コードがS13で生成した中間コード群に挿入
されるように結合する。
【0020】S8 オブジェクトプログラム実行部12
0は検査プログラムを呼び出す中間コードを含むオブジ
ェクトプログラムを実行する。実行において,検査プロ
グラムを呼び出す中間コードにより検査プログラムライ
ブラリ125から指定する検査プログラムを呼出してデ
ータ領域の引用文で引用されているデータ領域が定義さ
れた範囲内にあるか,ないか等を検査する。
【0021】S9 実行結果出力部121は実行結果を
出力する。
【0022】
【発明が解決しようとする課題】上記のように,データ
領域の検査を指定してソースプログラムをコンパイラす
る時は,ソースプログラムのデータ領域の定義の宣言文
を基にそれぞれの検査をする検査プログラムを呼び出す
中間コードを生成し,ソースプログラムを翻訳したオブ
ジェクトプログラム中に挿入するようにしていた。そし
て,プログラム実行時に検査プログラムのルーチンを呼
び出して,検査プログラムによりデータ領域の引用の正
当性を検査していた。そのため,従来のコンパイラでは
検査がプログラム言語の仕様に依存し,言語仕様の変
更,拡張等がなされる度に,コンパイラもしくは検査プ
ログラムの側にも変更を必要とした。
【0023】また,従来のコンパイラで検査を指定した
場合には,ソースプログラムの定義(宣言文)および実
行文に対応する本来のオブジェクトコードとは別に,デ
ータ領域の引用の正当性を検査する仕組み(中間コー
ド)がオブジェクトプログラムに生成される。そのた
め,例えば,データ領域のアドレス計算をする中間コー
ド群は本来のオブジェクトコードと検査のためのオブジ
ェクトコードの双方に含まれて双方でアドレス計算をす
る等のように処理が重複し,実行時間を低下させてい
た。
【0024】さらに,従来のコンパイラは,コンパイラ
内において検査を行う場合と検査を行わない場合の2系
統の翻訳機構が必要であった。本発明は,言語仕様の変
更,拡張等に依存することなくデータ領域の引用の正当
性を検査することができ,かつ検査指定があった場合に
も高速に実行できるコンパイラを提供することを目的と
する。
【0025】
【課題を解決するための手段】ソースプログラムを翻訳
して得られる実行可能な形式のオブジェクトプログラム
は,配列の要素,文字列の要素および構造体の要素等の
集合データの中の要素を引用する場合,集合データの先
頭番地にその先頭番地からの変移を加えることによって
目的の要素の番地を求める。これらのデータの引用は中
間コードのオペランドにおいて,ベース(集合データの
先頭番地)とインデックス(集合データの先頭番地から
の変移)で表現される特殊な構成をもつ。
【0026】中間コード群は,ソースプログラムの記述
内容がコンピュータの機械語に近い形式で変換された情
報の集合であり,この情報は最終的にオブジェクトプロ
グラムに変換される。各中間コードは,一つの機能と定
義および引用されるデータ領域情報を指す複数のオペラ
ンドで構成される。
【0027】ここで,データ領域の引用の正当性の検査
をする場合には,中間コードの並びの中から,ベースと
インデックスを使用してデータ領域を引用している中間
コードに着目して該当するものをすべて検出する。この
中間コードは引用されるデータ領域の先頭番地,データ
領域全体の大きさおよび引用されるデータの長さを,該
当する中間コードのオペランドに指定されているデータ
領域情報から求めることができる。これらの情報は,プ
ログラムの実行上必要なものであり,データ領域情報に
は必ず存在する。
【0028】この中間コードの検索方法は,ソースプロ
グラムの情報を直接参照しないため,言語仕様に依存す
ることなく目的の中間コードを検索できる。以上の結果
得られた情報に基づいて,検査を行う命令列または検査
手続きの呼出しの機能を持つ中間コードをそれぞれの該
当の中間コードの直前に挿入する。
【0029】そして,検査は下記のように行い結果を出
力する。 ベース,インデックスおよび引用されるデータの長
さの加算結果が,データ領域の先頭番地とデータ領域全
体の大きさの加算結果より大きいならば,データ領域の
不等な引用であるので,その旨を利用者に通知する。
【0030】 ベース及びインデックスの加算結果
が,データ領域の先頭番地とデータ領域全体の大きさの
加算結果より大きいならば,データ領域の不等な引用で
あるので,その旨を利用者に通知する。
【0031】 ベース及びインデックスの加算結果
が,データ領域の先頭番地より小さいならば,データ領
域の不等な引用であるので,その旨を利用者に通知す
る。これらの検査において,ベースの値とインデックス
の値の加算結果を,本来該当データを引用するための計
算結果と共有することにより実行性能を向上させること
ができる。
【0032】また,コンパイラは一般的に,ソース解析
部,意味解析部,中間コード生成部,中間コード最適化
部及びオブジェクトプログラム生成部で構成され,この
順番に動作する。本発明は,検査プログラムを呼び出す
中間コードをオブジェクトプログラム生成部において作
成するようにする。そのため,中間コードの形式は,デ
ータ領域の引用の正当性を検査する命令列に対して,命
令列を生成する場合と生成しない場合で共通にすること
ができる。
【0033】そこで,本発明は,ソースプログラムを基
に実行可能な形式のオブジェクトプログラムを生成する
コンパイラにおいて,ソースプログラムを解析して中間
コードの集合を生成するプログラム解析部と,中間コー
ドを結合してオブジェクトプログラムを生成するオブジ
ェクトプログラム生成部とを備え,該オブジェクトプロ
グラム生成部は中間コードの集合に含まれるデータ領域
の引用に基づいて生成された中間コードを検索し,該中
間コードを基に該定義の引用の正当性を検査する検査プ
ログラムを呼び出す中間コードを該中間コードの集合に
組み込むようにした。
【0034】図1は本発明の基本構成を示す。図1にお
いて,1はソースプログラムである。
【0035】2はコンパイラである。2’はプログラム
解析部であって,ソースプログラム1の構文解析,構文
解析により求められたプログラム文の意味解析,中間コ
ード群の生成をするものである。
【0036】3はソース解析部であって,ソースプログ
ラム1の構文解析(文字列を解析してプログラム文を求
める等の処理)をするものである。4は意味解析部であ
って,構文解析の結果求められたプログラム文の意味を
解析するものである。
【0037】5は中間コード生成部であって,意味解析
の結果に基づいて中間コードを生成するものである。6
はオブジェクトプログラム生成部であって,プログラム
解析部2’で生成した中間コードの集合(中間コード
群)を結合して実行可能な形式のプログラムを生成する
ものである。その時,オブジェクトプログラム生成部6
は,コンパイラにおいて検査することが指定されている
場合には,プログラム解析部2’で生成された中間コー
ド群を解析して検査に必要な情報を求め,その情報につ
いての中間コードおよび検査プログラムを呼び出す中間
コードを生成してプログラム解析部2’で生成した中間
コード群に挿入する。検査が指定されている場合には,
そのようにして検査情報,検査プログラムの呼出しの中
間コードを実行文の中間コード群に結合して実行形式プ
ログラムを作成する。
【0038】7は検査をするか,しないかの判定の処理
である。8はデータ領域の引用の正当性の検査に必要な
情報を検索して,その中間コードを生成する処理であ
る。
【0039】9はデータ領域の引用の正当性の検査プロ
グラムを呼び出す中間コードを生成するものである。1
0はオブジェクトプログラムを生成する処理であって,
中間コード群の各中間コードを結合して実行形式プログ
ラムを作成する処理である。
【0040】11は実行形式のオブジェクトプログラム
である。12は検査プログラムライブラリであって,各
種検査プログラムを備えるものである。
【0041】図2は本発明の基本構成の説明図である。
図2において,1はソースプログラムである。
【0042】11’はデータ領域の定義(宣言文)であ
る。12’はデータ領域を引用する文である。実行文で
あって,データ領域の定義文で定義された値を含む文,
もしくは演算により定義された値が得られるものであ
る。データ領域の位置を表す値を含む文,もしくは演算
によりデータ領域の位置を表す値が得られるものであ
る。
【0043】13,13’は中間コード群である(中間
コードの集合)。中間コード群13’は検査のための中
間コードを含まないものである。14はデータ領域の引
用に基づく中間コードである。
【0044】中間コード群13’において,15はデー
タ領域の引用の正当性検査に必要な情報の中間コードで
ある。16はデータ領域の引用の正当性を検査する検査
プログラムを呼び出す中間コードである。
【0045】14はデータ領域の引用に基づく中間コー
ドである(中間コード群13のデータ領域の引用に基づ
く中間コードに同じ)。図2を参照して図1の本発明の
基本構成の説明する。
【0046】コンパイラ2はソースプログラム1を入力
する。ソース解析部3はソースプログラム1の構文解析
をする。そして,その構文解析により求められたプログ
ラム文に対して意味解析部4は意味解析をし,中間コー
ド生成部5はその中間コードを生成する。
【0047】オブジェクトプログラム生成部6は検査の
指示の有無を判定する。データ領域の引用の正当性の検
査の指示がなければ,プログラム解析部2’の作成した
中間コード群13に対して結合処理を行いオブジェクト
プログラムを生成する。あるいは,その検査の指示があ
れば,中間コード群13の中間コードを分析して,デー
タ領域の引用に基づく中間コード14の有無を検索す
る。そして,その中間コード14が有れば,その中間コ
ード14を基に定義の引用の正当性検査に必要な情報
(引数等)の中間コード15を作成する。さらに,その
検査をする検査プログラムを呼び出す中間コード16を
生成し,中間コード群13’を得る。
【0048】そして,それらの中間コード15,16が
データ領域の引用に基づく中間コード14の前に挿入さ
れるように中間コード群13’の各中間コードを結合
し,実行形式のオブジェクトプログラム11を作成す
る。オブジェクトプログラム11を実行する場合,検査
プログラムを呼び出すオブジェクトプログラムにより検
査プログラムが検査プログラムライブラリ12から呼び
出され,データ領域の引用の正当性の検査がされる。
【0049】本発明によれば,ソースプログラムに基づ
いて生成された中間コードの集合(中間コード群)か
ら,データ領域の引用の正当性の検査に必要な中間コー
ドを生成するので,検査のための中間コードの生成処理
がソースプログラムの仕様に依存することがない。その
ため,言語仕様の変更,拡張等があっても,コンパイ
ラ,検査プログラムライブラリを変更することなくコン
パイルすることができる。
【0050】また,本発明では,オブジェクトプログラ
ムにおいて,ソースプログラムの定義(宣言文)および
実行文に対応する命令列とデータ領域の正当性を検査す
る命令列の一部を共通に利用しているので,コンパイル
から実行結果が得られるまでの時間が短縮される。例え
ば,データ領域の引用にはプログラム実行時にその領域
の番地の計算をするが,本発明ではその計算結果をデー
タ領域の引用の正当性検査にも利用する。そのため,本
発明によればデータ領域の引用の正当性検査をする場合
にも,プログラムの実行時間を高速に行うことができ
る。
【0051】また,本発明では,定義の引用の正当性検
査に必要な中間コードの生成をコンパイラの終了部分で
あるオブジェクトプログラム生成部において生成するの
で,それ以前のプログラム解析部におけるコンパイラの
内部インタフェースが,検査をする場合としない場合と
で共通であるので,本発明によれば検査のために必要な
機能を実現するためのコンパイラの負担が少ない。
【0052】
【発明の実施の形態】図3は本発明の実施例構成であ
る。図3において,1はソースプログラムである。
【0053】2はコンパイラである。21はプログラム
解析部であって,部名として,ソース解析部,意味解析
部,中間コード生成部を含み,ソースプログラムの記述
を中間コードに変換するものである。
【0054】22,22’,22”は中間コード群であ
る。中間コード群22’は最適化処理を実施済みのもの
である。中間コード群22”は検査プログラムを引用す
る中間コードを挿入済みのものである。
【0055】23は最適化部であって,部名として中間
コード最適化部を持ち,不要な記述(使用されていない
演算式等)を削除する等でプログラムの性能を改善する
ものである。
【0056】25はオブジェクトプログラム生成部であ
って,部名としてコード生成部を持つものである。オブ
ジェクトプログラム生成部25は,中間コード群から集
合データ(配列,文字列,構造体)の要素引用部分を抽
出する処理,データ領域の引用の正当性検査プログラム
を呼び出す中間コードを挿入する処理,中間コード群か
らオブジェクトプログラムを生成する処理等を行うもの
である。
【0057】26はオブジェクトプログラムである。図
4は定義されたデータ領域の例であって,「INTEG
ER A(10),ISUB」で定義されるデータ領域
である。
【0058】30は定義されたデータ領域である。A
(1),A(2),・・・,A(10)は配列要素であ
る。ad2は定義されたデータ領域の先頭番地である。
配列要素の一個のデータ領域の幅は4であり,データ領
域の全体の幅は40である。ad2+t2は先頭番地か
らの変移であって,配列要素A(3)の引用番地である
(図4の場合t2=8である)。
【0059】コンパイラの起動時に検査(翻訳オプショ
ンDEBUG(RAGE))を指定すると次の動作をす
る。コンパイラ内のオブジェクトプログラム生成部25
は,この翻訳オプションの有効の指定があると,次の動
作をする。
【0060】(1) 各中間コードを先頭から順次検索
して,中間コードの各オペランドにおいて,ベース+イ
ンデックスの形式でデータ領域を引用している中間コー
ド(集合体の中間コード)を探す。
【0061】(2) その中間コードの直前に,次の情
報を引数とするライブラリ呼出しの機能を持つ中間コー
ドを挿入する。 (a) データ領域の引用番地(ベース(先頭番地)+イ
ンデックス) (b) 引用されるデータ領域の先頭番地(ベース) (c) データ領域全体の大きさ (d) 引用されるデータの長さ (e) データ名 これらの情報は,現在処理中の中間コードのオペランド
で指定されているデータ領域情報から獲得する。図4の
例の場合, (a) データ領域の引用番地はad2+t
2である。 (b) 引用されるデータ領域の先頭番地はa
d2である。 (c) データ領域全体の大きさは40であ
る。 (d) 引用されるデータの長さは4である。(e)
データ名はAである。
【0062】(3) 上記の動作を中間コードが終了す
るまで繰り返す。 これらの過程を経て生成されたオブジェクトプログラム
は実行時にデータ領域の引用の正当性を検査するライブ
ラリを呼び出す。呼び出されたライブラリは引数で与え
られた情報に基づいて次の検査を行う。
【0063】 ベース,インデックスおよび引用され
るデータの長さの加算結果が,データ領域の先頭番地と
データ領域全体の大きさの加算結果より大きいならば,
データ領域の不等な引用であるので,その旨を利用者に
通知する。
【0064】 ベース及びインデックスの加算結果
が,データ領域の先頭番地とデータ領域全体の大きさの
加算結果より大きいならば,データ領域の不等な引用で
あるので,その旨を利用者に通知する。
【0065】 ベース及びインデックスの加算結果
が,データ領域の先頭番地より小さいならば,データ領
域の不等な引用であるので,その旨を利用者に通知す
る。次に,図3の構成の動作を詳述する。
【0066】図5は本発明の中間コードの実施例である
(検査プログラムを呼び出す中間コードを挿入する以前
のもの)。図5において,1はソースプログラムであ
る。
【0067】22は中間コード群である。ソースプログ
ラム1は,10個の要素を持つ配列Aを定義するもので
ある。「INTEGER A(10),ISUB」の意
味は,データが整数型であり,配列名がAであり,要素
数が10であることを表す。ISUBは整数のパラメー
タである。
【0068】ISUB=3でISUBに3を代入する
(この行はデータ領域の正当性検査対象外である)。A
(ISUB)=3はA(ISUB=3)=3であること
を表す。この行はデータ領域の引用の正当性検査対象と
なるものである。A(ISUB)の引用番地はAの先頭
番地(ベース)+(ISUB−1)×4である。
【0069】中間コード群22はソースプログラム1を
コンパイルした中間コードである。「MOVE ISU
B,CC3」は,第2オペランドのCC3(定数であっ
て値3)を第1オペランドのISUBに代入する演算を
表す。
【0070】「SUB t1,ISUB,CC1」は,
ISUBからCC1(定数であって値1)を引いて,レ
ジスタt1に保持する演算を表す。「MULT t2,
t1,CC4」は,t1にCC4(定数であって値4)
を掛けて,結果をレジスタt2に保持することを演算す
るものである。
【0071】「ST bxop,CC3」はCC3(=
3)をbxopにストアすることを表すものである。b
xopはad2(Aの先頭番地)にレジスタt2に保持
されている値を加算したものであって,A(ISUB)
のアドレスである。即ち,CC3=3をA(3)のアド
レスに代入することを表し,A(3)=3とすることを
指示するものである。
【0072】データ領域情報において,ISUBは先頭
番地がad1であって,データの大きさが4(単位はバ
イトである。以下同じ)の利用者定義変数である。
【0073】Aは先頭番地がad2であって,データの
大きさが40の利用者定義変数である。CC1は先頭番
地がad3であって,データの大きさが4の定数であ
る。
【0074】CC3は先頭番地がad4であって,デー
タの大きさが4の定数である。CC4は先頭番地がad
5であって,データの大きさが4の定数である。t1は
先頭番地なしであって,データの大きさが4の一時名で
ある。
【0075】t2は先頭番地なしであって,データの大
きさが4の一時名である。bxopはベース(A)(A
の先頭番地)+インデックス(t2)である集合データ
(配列,文字列,構造体)の要素を引用するものである
(A(ISUB)のアドレスを引用するものである)。
【0076】図6は本発明の中間コードの実施例であっ
て,検査プログラムを呼び出す中間コードを挿入した状
態である。22’は中間コード群であって,検査プログ
ラムを呼び出す中間コードを挿入した後の状態である。
【0077】「CALL 0,lib,arg」はデー
タ領域の正当性検査プログラムを呼び出す中間コードで
ある。argはデータ領域の定義に基づく中間コードb
xopをもとに生成される。
【0078】libは先頭番地がad6でデータの大き
さが4である。ad6はデータ領域の正当性検査のプロ
グラムの先頭番地である。argは先頭番地がad7で
あって,データの大きさが20のものである。argの
内容は,実引数の並び(bxop,ad2,40,4,
A)である。
【0079】ここでbxopは前述した集合体の要素を
引用するものであり,アドレス(大きさ4)である。a
d2は配列Aの先頭番地(大きさ4)であり,40は配
列Aの領域の幅(4バイトが10個)を表すものである
(大きさは4)。4は1要素の大きさであり Aはエラ
ーメッセージを表示する時に配列Aにエラーがあること
を表示するためのものである。
【0080】中間コード群22”の「CALL 0,l
ib,arg」により(0は第1オペランドにデータが
ないことを表す),argの実引数の並び(bxop,
ad2,40,4,A)を引数としてad6の検査プロ
グラム(liblary)が呼び出される。そして,検
査プログラムはarg(bxop,ad2,40,4,
A)に従って,「ST bxop,CC3」の演算結果
が定義されたデータ領域の範囲に収まっているかいない
かを判定する。
【0081】図7,図8は本発明のコンパイラのフロー
チャートである。図7,図8により図3の本発明の実施
例構成の動作を説明する(必要に応じて図5,図6を参
照する)。
【0082】S1 コンパイラ2はソースプログラム1
を入力する。 S2 ソース解析部は,ソースプログラム1の構文解析
をする。 S3 意味解析部は構文解析により求められたプログラ
ム文の意味解析をする。
【0083】S4 中間コード生成部は意味解析の結果
により中間コードを生成する。そしてプログラム全部の
中間コードにより構成される中間コード群22を得る。 S5 最適化部23により,中間コード群22の最適化
を行う(図3の中間コード群22’を得る)。
【0084】S6,S7 オブジェクトプログラム生成
部25は中間コードを1個入力する。中間コードがあれ
ばS8に進み,なければS12に進む。 S8はデータ領域の引用の正当性検査の指定があるかな
いかを判定し,その検査の指定があればS9に進み,そ
の検査の指定がなければS6以降の処理を繰り返す。
【0085】S9 中間コードは集合データを引用して
いるかあるいは引用していなかを判定する(例えば,b
xopの記述の有無で判定する)。引用していればS1
0に進み,引用していなければS6以降の処理を繰り返
す。
【0086】S10 データ引用の正当性の検査のため
の実引数の並びを作成する。図6の中間コードの実施例
の場合,検査プログラムの実引数の並び(bxop,a
d2,40,4,A)を作成する。
【0087】S11 集合データの引用の中間コード
(bxop等)の直前にデータ引用の正当性検査プログ
ラムを呼び出す中間コードを挿入する。例えば,図6の
中間コードの実施例の場合「CALL 0,lib,a
rg」を作成する。その後,S6以降の処理を繰り返
す。
【0088】S7 以上の処理を各中間コードについて
行い,中間コードを全て検索したら,求めた中間コード
群に対して結合処理(リンク)を行い,S12以降の処
理で実行形式のオブジェクトプログラムを生成する。
【0089】S12,S13 データ引用の正当性検査
プログラムの呼出しがあるか判定し,なければS15に
進み,あれば,S14でデータ引用の正当性の検査プロ
グラムを参照するためのオブジェクトを生成する(検査
のために挿入した中間コードを実行形式プログラムに結
合するオブジェクトプログラムを生成する)。
【0090】S15 全ての中間コードを機械語に変換
する。 S16 実行形式プログラム(オブジェクトプログラ
ム)を実行する。 オブジェクトプログラムの実行において, ベース,インデックスおよび引用されるデータの長
さの加算結果が,データ領域の先頭番地とデータ領域全
体の大きさの加算結果より大きいならば,データ領域の
不等な引用であるので,その旨を利用者に通知する。
【0091】 ベース及びインデックスの加算結果
が,データ領域の先頭番地とデータ領域全体の大きさの
加算結果より大きいならば,データ領域の不等な引用で
あるので,その旨を利用者に通知する。
【0092】 ベース及びインデックスの加算結果
が,データ領域の先頭番地より小さいならば,データ領
域の不等な引用であるので,その旨を利用者に通知す
る。
【0093】
【発明の効果】本発明によれば,ソースプログラムに基
づいて生成された中間コードの集合から,ソースプログ
ラムの仕様に依存することなく,データ領域の引用の正
当性の検査のための中間コードを生成できる。そのた
め,言語仕様の変更,拡張等があっても,コンパイラ,
検査プログラムライブラリを変更する必要がなく,プロ
グラム開発の能率が大幅に向上する。
【0094】また,本発明では,オブジェクトプログラ
ムにおいて,ソースプログラムの定義(宣言文)および
実行文に対する命令列とデータ領域の引用の正当性の検
査をする命令列の一部を共通に利用しているので,デー
タ領域の引用の正当性の検査をするコンパイルの実行時
間が短縮される。
【0095】また,本発明では,データ領域の引用の正
当性検査に必要な中間コードをコンパイラの終了部分で
あるオブジェクトプログラム生成部において行うので,
それ以前のプログラム解析部におけるコンパイラの内部
インタフェースは検査をする場合としない場合とで共通
化できる。そのため,本発明によれば検査のために必要
な機能を実現するためのコンパイラの負担が少ない。
【図面の簡単な説明】
【図1】本発明の基本構成を示す図である。
【図2】本発明の基本構成の説明図である。
【図3】本発明の実施例構成を示す図である。
【図4】定義されたデータ領域の例を示す図である。
【図5】本発明の中間コードの実施例を示す図である。
【図6】本発明の中間コードの実施例を示す図である。
【図7】本発明のコンパイラのフローチャートを示す図
である。
【図8】本発明のコンパイラのフローチャートを示す図
である。
【図9】従来のコンパイラを示す図である。
【図10】従来のコンパイラのフローチャートを示す図
である。
【符号の説明】
1:ソースプログラム 2:コンパイラ 2’:プログラム解析部 3:ソース解析部 4:意味解析部 5:中間コード生成部 6:オブジェクトプログラム生成部 7:データ領域の引用の正当性検査の指定の有無を判定
する処理 8:データ領域の引用の正当性の検査に必要な情報を検
索して,その中間コードを生成する処理 9:データ領域の引用の正当性の検査プログラムを呼び
出す中間コードを生成する処理 10:オブジェクトプログラムを生成する処理 11:オブジェクトプログラム 12:検査プログラムライブラリ

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラムを基に実行可能な形式
    のオブジェクトプログラムを生成するコンパイラにおい
    て,ソースプログラムを解析して中間コードの集合を生
    成するプログラム解析部と,中間コードを結合してオブ
    ジェクトプログラムを生成するオブジェクトプログラム
    生成部とを備え,該オブジェクトプログラム生成部は中
    間コードの集合に含まれるデータ領域の引用に基づいて
    生成された中間コードを検索し,該中間コードを基に該
    定義の引用の正当性を検査する検査プログラムを呼び出
    す中間コードを該中間コードの集合に組み込むことを特
    徴とするコンパイラ。
  2. 【請求項2】 データ領域の定義が配列もしくは文字列
    もしくは構造体の定義であることを特徴とする請求項1
    に記載のコンパイラ。
  3. 【請求項3】 データ領域の定義情報を引数として検査
    プログラムを呼び出す中間コードを検査対象の中間コー
    ドの直前に組み込むことを特徴とする請求項1に記載の
    コンパイラ。
  4. 【請求項4】 該定義の引用の正当性の検査は,引用さ
    れたデータ領域の位置を表す値が定義された範囲内にあ
    るかないかを検査するものであることを特徴とする請求
    項1もしくは2に記載のコンパイラ。
JP7241059A 1995-09-20 1995-09-20 コンパイラ Withdrawn JPH0981411A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7241059A JPH0981411A (ja) 1995-09-20 1995-09-20 コンパイラ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7241059A JPH0981411A (ja) 1995-09-20 1995-09-20 コンパイラ

Publications (1)

Publication Number Publication Date
JPH0981411A true JPH0981411A (ja) 1997-03-28

Family

ID=17068702

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7241059A Withdrawn JPH0981411A (ja) 1995-09-20 1995-09-20 コンパイラ

Country Status (1)

Country Link
JP (1) JPH0981411A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006172206A (ja) * 2004-12-16 2006-06-29 Canon Inc 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体
JP2014219969A (ja) * 2013-04-30 2014-11-20 富士通株式会社 ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体
JP2016162460A (ja) * 2015-03-05 2016-09-05 富士通株式会社 未知のバイナリプログラムに対する有効入力シーケンスの判定
JP2024541026A (ja) * 2021-10-27 2024-11-06 北京字節跳動網絡技術有限公司 コード管理の方法及び装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006172206A (ja) * 2004-12-16 2006-06-29 Canon Inc 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体
JP2014219969A (ja) * 2013-04-30 2014-11-20 富士通株式会社 ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体
JP2016162460A (ja) * 2015-03-05 2016-09-05 富士通株式会社 未知のバイナリプログラムに対する有効入力シーケンスの判定
JP2024541026A (ja) * 2021-10-27 2024-11-06 北京字節跳動網絡技術有限公司 コード管理の方法及び装置

Similar Documents

Publication Publication Date Title
EP0643851B1 (en) Debugger program which includes correlation of computer program source code with optimized objet code
JP4057938B2 (ja) コンパイラ、コンパイル方法、及びプログラム開発ツール
US6588009B1 (en) Method and apparatus for compiling source code using symbolic execution
EP1398695A2 (en) Compiler
JPH05257709A (ja) 並列化判別方法およびそれを用いた並列化支援方法
US20080178149A1 (en) Inferencing types of variables in a dynamically typed language
US7509634B2 (en) SIMD instruction sequence generating program, SIMD instruction sequence generating method and apparatus
JP4157016B2 (ja) コンパイラ装置及びコンパイル方法
JP2002024029A (ja) コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
EP0529049B1 (en) Multilanguage optimizing compiler using templates in multiple pass code generation
US20060195828A1 (en) Instruction generator, method for generating instructions and computer program product that executes an application for an instruction generator
US6539543B1 (en) Method and apparatus for compiling source code by flattening hierarchies
KR102614967B1 (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
WO2024222455A1 (zh) 一种硬件加速指令确定方法、系统、电子设备及存储介质
US20040010780A1 (en) Method and apparatus for approximate generation of source code cross-reference information
JPH0981411A (ja) コンパイラ
US7120905B2 (en) System and method for transformation of assembly code for conditional execution
CN114791811A (zh) 一种基于元函数模板的汇编器实现方法
Tomašević et al. Implementation of the debugging support for the llvm outlining optimization
US6694512B1 (en) Data processing device, data processing method and supply medium thereof
Yukun System Modeling for Smallest Optimizer Compiler System
JP3167386B2 (ja) プログラム自動並列化方法
JPH11195011A (ja) 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体
Volovshchіkov et al. THE C++ LANGUAGE IN PROGRAMMING AND COMPUTER SCIENCE

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20021203