JP3906669B2 - 例外処理の翻訳方法 - Google Patents

例外処理の翻訳方法 Download PDF

Info

Publication number
JP3906669B2
JP3906669B2 JP2001327104A JP2001327104A JP3906669B2 JP 3906669 B2 JP3906669 B2 JP 3906669B2 JP 2001327104 A JP2001327104 A JP 2001327104A JP 2001327104 A JP2001327104 A JP 2001327104A JP 3906669 B2 JP3906669 B2 JP 3906669B2
Authority
JP
Japan
Prior art keywords
exception
processing
block
statement
processing block
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.)
Expired - Fee Related
Application number
JP2001327104A
Other languages
English (en)
Other versions
JP2003131886A (ja
Inventor
広和 小林
大典 横塚
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 Ltd
Original Assignee
Hitachi 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 Ltd filed Critical Hitachi Ltd
Priority to JP2001327104A priority Critical patent/JP3906669B2/ja
Publication of JP2003131886A publication Critical patent/JP2003131886A/ja
Application granted granted Critical
Publication of JP3906669B2 publication Critical patent/JP3906669B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、プログラミング言語の処理系に関する。特に、例外からの復帰場所が次の文であるプログラム言語を、例外からの復帰場所が次の文ではないプログラム実行環境に翻訳する場合に関する。
【0002】
【従来の技術】
あるプログラミング言語Aで記述されたプログラムを、多言語をサポートするプログラム実行環境Bで実行したい場合には、プログラミング言語Aのプログラムをプログラム実行環境Bの実行コードに変換する必要がある。このような変換を行う場合には、プログラム言語Aの例外処理をプログラム実行環境Bにおいて行える必要がある。この場合、従来は例外を自前の低レベル処理で実装していた。しかし、プログラム実行環境Bが備える例外処理機構を利用することによって、プログラム実行環境Bで利用できるプログラム言語間において、例外を言語によらず統一して扱えるという利点がある。したがって、プログラム言語Aの例外処理をプログラム実行環境Bの例外処理に翻訳する必要がある。
【0003】
プログラム言語Aは、通常処理部とそれに対応する例外処理部を持ち、例外が発生した場合に、通常処理を中断し例外処理に移行し、例外処理の実行が完了したら、例外が発生した次の文から実行を再開する。このようなプログラム言語Aの例としてCOBOLなどがあげられる。例外処理を行うCOBOLプログラムを図5の501のプログラムに示す。プログラム501は例外処理部502と、通常処理部503をもつ。通常処理部503の処理中に例外が発生した場合には、例外処理部502を実行し、例外処理部502の実行が終了したら、通常処理部503の実行を例外が発生した次の文から再開する。
【0004】
プログラム実行環境Bは、通常処理部と例外処理部を持ち、例外が発生した場合には通常処理を中断し例外処理に移行し、例外処理が終了したら次の通常処理部から実行を再開する。プログラム実行環境Bの例外処理の例を図6の実行コード601に示す。実行コード601は、tryによって始まる通常処理部602と、catchによってはじまる例外処理部603からなるブロック604が複数組み合わさったものからなる。ブロック604において例外処理を行わない場合は、通常処理部602だけを持つブロックとなる。通常処理部602において例外が発生すると、例外処理部603の実行に移行する。例外処理が終了すると次のブロックの通常処理部から実行を再開する。
【0005】
プログラミング言語Aからプログラム実行環境Bに翻訳する場合に、例外からの復帰場所が次の文になるようにするために、プログラム実行環境Bではプログラム言語Aの一文ごとに例外からの復帰場所を設ける。つまり、このような例外の翻訳を行う場合には、プログラム実行環境Bにおいては、例外からの復帰場所が次の文となるようにするために、一文ごとに例外処理部を設ける必要がある。
【0006】
【発明が解決しようとする課題】
このような翻訳方法は、例外処理のコードが多くなるという欠点があり、また例外処理を行うための処理時間が大きくなりプログラムの実行速度に悪影響を及ぼしうる。
【0007】
【課題を解決するための手段】
例外処理部を翻訳する際に、例外処理部が明示的な例外からの復帰場所を持つかを調べる。そして、復帰場所の指示がある場合には、例外処理部を生成せず、復帰場所の指示がない場合には、例外処理部を生成する。
【0008】
さらに、例外処理部を翻訳する際に、処理しえる例外の種類を解析して調べる。処理しえる例外が、例外の発生後通常処理の再開が不可能である致命的な例外しかない場合には、例外処理部を生成せず、致命的でない例外も処理しえる場合には、例外処理部を生成する。さらに、通常処理部の各文を解析して調べ、その文が例外を発生し得るなら例外処理部を生成し、発生し得ないなら例外処理部を生成しない。
【0009】
【発明の実施の形態】
以下、本発明の実施例を,図面を参照しつつ説明する。なお,これにより本発明が限定されるものではない。
【0010】
本発明を利用する言語処理系のプログラムは図1に示すような計算機上で動作する。図1の計算機はプロセッサ101と主記憶102,バス103,ディスク装置104,CD−ROMドライブ105を有する。そして、請求項5の記録媒体に相当するCD−ROM106からCD−ROMドライブ105を介して請求項4の言語処理系のプログラムをディスク装置104にとりこむ。そして、ディスク装置104から言語処理系のプログラムなどを、バス103を介して主記憶102にとりこみ,プロセッサ101で実行する。
【0011】
本発明を利用する言語処理系の構成を図2に示す。言語処理系は本発明のプログラミング言語Aのコンパイラ201とプログラム実行環境Bの仮想機械205から構成されている。本発明の例外処理翻訳部202は本発明のプログラミング言語Aのコンパイラ201がソースプログラム204をプログラム実行環境Bの実行コード203に変換する過程において例外の情報を検出し、その情報に従って例外処理の方法を決定する。
【0012】
本発明のプログラミング言語Aのコンパイラ201が例外処理の方法を決定する過程について,図3を用いて説明する。コンパイラ201は処理301でソースプログラム204を入力として受け取り,中間表現に変換する。続く処理202で中間表現を解析して例外処理の方法を決定する。処理202は具体的にはコンパイル対象の例外処理部に図4に示す処理を適用することで例外の処理方法を決定する。
【0013】
図4の処理は、例外処理の翻訳法を決定する過程について説明した図である。図4の処理において、図5の501のような例外処理法を行うプログラムを図6の601のような例外処理法を行う実行コードに翻訳する。
【0014】
図4の処理ではまず、処理401で処理対象プログラム501の例外処理部502を検査し、例えばCOBOLのRESUME文などのような例外処理からの復帰文が存在するかを求める。判断402で例外処理からの復帰文が存在するかを確認する。例外からの復帰文が存在しない場合には処理406に進み、例外からの復帰文が存在する場合には処理403に進む。処理403では例外処理部502内の例外からの復帰文の復帰先をすべて調べる。この処理は例えば、COBOLをコンパイル対象としている場合、RESUMU文の復帰先が次の文になっているか、プロシジャ名が指定されているかを確認することによって行う。判断404において例外からの復帰文の復帰先が次の文の場合があるならば処理405に進み,ないならば処理408に進む。処理405では、通常処理部503の各文に対して例外が発生するかを調べる。この処理は図9に示す処理をそれぞれの文に対して適用することによって行う。処理901において処理対象の文が関数の呼び出しを行うかどうかを求める。判断902において関数呼び出しを行う場合は処理903に進み、そうでない場合は処理904に進む。処理904では、表1001を参照して文中に含まれる命令が例外を発生するかの論理和を求める。図10の表1001はプログラミング言語Aの定義から作成された表で命令が例外を発生するかを示す表である。フィールド1002は各命令名を保持し、フィールド1003は対応するフィールドの命令が例外を発生するかの真偽値を保持する。例外を発生する場合は真の値を保持し、例外を発生しない場合は偽の値を保持する。図9に戻って、判断905では、求めた論理和から例外が発生する場合は処理903に進み、そうでない場合は処理906に進む。処理903では、例外が発生すると決定する。処理906では例外が発生しないと決定する。
【0015】
図4に戻って判断409は処理405で求めた各文が例外を発生するかの情報を用い、例外を発生する場合は処理410に進み、そうでない場合は処理411に進む。処理410では、図6の実行コードにあるように、通常処理部503の文それぞれに対してtry/catchからなる例外処理部を生成する。処理411では、例外処理を起こす文だけに対して例外処理部を生成し、例外処理を起こさない場合には例外処理部の生成を行わない。例えば、プログラム501の文1は例外発生を行わず、その他の文が例外発生を起こす場合には図8の実行コード801のように、文1に対しては例外処理部のないブロック802を生成し、その他の部分に対してはtry/catchからなる例外処理部の生成を行う。処理408では図7のプログラム701にあるように通常処理部503の文すべてに対して一つの例外処理部を生成する。処理406では、例外処理部502が処理可能な例外の種類の集合を作成する。集合の作成は、たとえばCOBOLでは例外処理部502のUSE文を調べ、USE文で処理すると宣言されている例外の集合を求める。判断407では、作成した集合がすべて致命的な例外かを調べる。致命的な例外だけの場合は、処理408に進み致命的な例外以外を含む場合は処理405に進む。
【0016】
図3に戻り、処理202で例外処理の方法が決定したら処理302に進んで中間表現を実行コードに変換する。変換が終了したらコンパイル作業は終了である。
【0017】
以上の処理により、例外からの復帰先が次の文でない例外処理部と、致命的な例外だけを処理する例外処理部を翻訳する場合、例外処理部の生成を抑制し、さらに、例外を発生しない文に対して例外処理部を生成しないようにする。このようにしてプログラムサイズを小さくし、プログラムの実行速度を改善する。
【0018】
【発明の効果】
例外処理部の生成を減少し、プログラムサイズを小さくし、プログラムの実行速度を改善する。
【図面の簡単な説明】
【図1】実行機械の例。
【図2】言語処理系の構成例。
【図3】例外処理文の生成の例。
【図4】例外処理の翻訳方法の例。
【図5】プログラム言語Aのソースコード例。
【図6】プログラム実行環境Bの実行コード例。
【図7】複数の文で一つの例外処理部が生成された実行コード例。
【図8】例外処理部の生成が行われなかった実行コード例。
【図9】ある文が例外を発生するかを求める処理の例。
【図10】命令が例外を発生するかを保持する真偽値表の例。
【符号の説明】
401…例外処理部内に例外処理からの復帰文が存在するかを調べる処理、402…例外処理部内に復帰文が存在するかを判定する処理、403…例外処理部内の例外からの復帰文の復帰先を調べる処理、404…例外処理部内に次の文への復帰文があるかを判定する処理、405…各文に対して例外が発生するかを求める処理、406…例外処理部が処理しえる例外をすべて探す処理、407…例外処理部が処理しえる例外が致命的なものだけであるかを判定する処理、408…複数の文で一つのtry/catch文を生成する処理、409…その文が例外を発生するかを判定する処理、410…一文ごとにtry/catchを生成する処理、411…その文に対しtry/catchを生成しない処理。

Claims (5)

  1. 第1の計算機言語で記述されているソースコードを、第2の計算機言語で記述されたソースコードに変換する変換方法であって、
    前記第1の計算機言語で記述されているソースコードにおいては、複数の処理文の記述から成る1つの第1のブロックに対応付けて例外処理部が記述されており、
    前記第1のブロックに属する第1の処理文を実行した際に例外が発生すると、前記対応付けられている例外処理部が実行され、該例外処理部の実行が終了すると、明示的な指定が無い場合には前記第1のブロック内で前記第1の処理文の次に記述されている第2の処理文の実行から再開し、明示的な復帰先の指定が前記例外処理部の中で行われている場合には該指定された復帰先から実行を再開するように取り決められており、
    前記第2の計算機言語で記述されたソースコードにおいては、複数の処理文の記述からなる通常処理ブロックと、該通常処理ブロックにおいて例外が発生した際に実行される例外処理が記述された例外処理ブロックが対応付けられて記述されており、
    第1の通常処理ブロックを実行中に例外が発生すると、前記第1の通常処理ブロックに対応付けられた前記例外処理ブロックが実行され、該例外処理ブロックの実行が終了すると、前記第1の通常処理ブロックの次に記述されている第2の通常処理ブロックの実行から再開するように取り決められており、
    記憶装置から前記第1の計算機言語で記述されているソースコードを読み出し手段が読み出し、
    該読み出されたソースコードに含まれる個々の前記処理文の各々に対応して前記第2の計算機言語で記述されたソースコードにおける前記通常処理ブロックを生成手段が生成して記憶装置に書き込み、
    前記処理文に対応する前記例外処理部において
    前記明示的な指定が無い場合には前記処理文に対応して生成された通常処理ブロックに対応する例外処理ブロックを個別に生成手段が生成して記憶装置に書き込み、
    前記明示的な指定が有る場合には前記処理文に対応して生成された通常処理ブロックに個別に対応する例外処理ブロックは生成せずに、前記処理文が属する前記第1のブロックに含まれるすべての処理文に共通する例外処理ブロックを生成手段が生成して記憶装置に書き込む
    ことを特徴とする変換方法。
  2. 請求項1に記載の変換方法において、
    前記明示的な指示が無い場合であっても、前記例外処理部において処理するように記述されている例外の種類がすべて、通常処理の再開が不可能な致命的な例外である場合には、前記通常処理ブロックの各々に個別に対応する前記例外処理ブロックは作成せずに、前記例外処理部に対応する前記第1のブロックに属するすべての処理文の各々に対応して作成された通常処理ブロック群に共通の例外処理ブロックを生成手段が生成して記憶装置に書き込むことを特徴とする変換方法。
  3. 請求項1または請求項2に記載の変換方法において、
    前記処理文の各々に対応して作成された前記通常処理ブロックの各々に個別に対応する前記例外処理ブロックを作成する際に、前記処理文が例外を発生させる可能性を有する処理文であるか否かを判定手段が判定し、該判定の結果、該処理文が例外を発生させる可能性の無い処理文であることが判明すると、該処理文に対応して生成された通常処理ブロックに対しては、該通常処理ブロックに個別に対応する例外処理ブロックの前記生成手段による生成を抑止手段が抑止することを特徴とする変換方法。
  4. 請求項1または請求項2または請求項3の変換方法を計算機に実行させる変換プログラム。
  5. 請求項4の変換プログラムを格納した計算機読み取り可能な記録媒体。
JP2001327104A 2001-10-25 2001-10-25 例外処理の翻訳方法 Expired - Fee Related JP3906669B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001327104A JP3906669B2 (ja) 2001-10-25 2001-10-25 例外処理の翻訳方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001327104A JP3906669B2 (ja) 2001-10-25 2001-10-25 例外処理の翻訳方法

Publications (2)

Publication Number Publication Date
JP2003131886A JP2003131886A (ja) 2003-05-09
JP3906669B2 true JP3906669B2 (ja) 2007-04-18

Family

ID=19143373

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001327104A Expired - Fee Related JP3906669B2 (ja) 2001-10-25 2001-10-25 例外処理の翻訳方法

Country Status (1)

Country Link
JP (1) JP3906669B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7060801B2 (ja) * 2018-06-06 2022-04-27 富士通株式会社 情報処理装置、コンパイラプログラム及びコンパイル方法

Also Published As

Publication number Publication date
JP2003131886A (ja) 2003-05-09

Similar Documents

Publication Publication Date Title
US9495136B2 (en) Using aliasing information for dynamic binary optimization
US8832672B2 (en) Ensuring register availability for dynamic binary optimization
US7065750B2 (en) Method and apparatus for preserving precise exceptions in binary translated code
US5586328A (en) Module dependency based incremental compiler and method
KR100463810B1 (ko) 어드레스되는 구성요소의 물리적 특성에 관한 추측 실패를 검출하는 마이크로프로세서용 메모리 제어기
EP0806725B1 (en) Method and apparatus for early insertion of assembler code for optimization
AU774192B2 (en) Method and apparatus for handling exceptions as normal control flow
JP2008546086A (ja) 共有リソースのためのアクセス協調を伴うプログラムコードを変換する方法および装置
JP5404204B2 (ja) ミスアラインデータアクセスの検出及び処理のためのデバイス、システム、及び方法
JPH09325901A (ja) デバッギングを実施する方法
JPH04225431A (ja) 命令キャッシュ効率を増大するコンピュータ命令をコンパイルする方法
US8839218B2 (en) Diagnosing alias violations in memory access commands in source code
KR20080023728A (ko) 에뮬레이터 성능을 개선하기 위한 가상 코드의 선택적전처리 컴파일
KR19990013980A (ko) 컴파일 방법, 컴파일러, 예외 핸들러 및 프로그램 기록 매체
JP4684571B2 (ja) エミュレーションコンピュータ技術を実行する直接命令
JP3906669B2 (ja) 例外処理の翻訳方法
US5150474A (en) Method for transferring arguments between object programs by switching address modes according to mode identifying flag
US8898625B2 (en) Optimized storage of function variables
US12008372B2 (en) Techniques for reducing CPU privilege boundary crossings
US12032950B2 (en) Embedding code from modules across versioning boundaries
Pichler et al. Hybrid Execution: Combining Ahead-of-Time and Just-in-Time Compilation
CN114489683B (zh) 一种类java语言基于JVM的函数式编程语法实现方法
JP3424596B2 (ja) シンボル参照情報のキャッシュ方法ならびに装置
US7743371B1 (en) System and method for dynamically loading object modules
JP2005301415A (ja) コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040218

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20060419

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060925

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061003

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061201

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20061226

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070108

LAPS Cancellation because of no payment of annual fees