JPH05143356A - コンパイラ装置 - Google Patents

コンパイラ装置

Info

Publication number
JPH05143356A
JPH05143356A JP3303621A JP30362191A JPH05143356A JP H05143356 A JPH05143356 A JP H05143356A JP 3303621 A JP3303621 A JP 3303621A JP 30362191 A JP30362191 A JP 30362191A JP H05143356 A JPH05143356 A JP H05143356A
Authority
JP
Japan
Prior art keywords
language
stack
pseudo code
register
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.)
Pending
Application number
JP3303621A
Other languages
English (en)
Inventor
Koki Kawamura
耕基 川村
Kazunori Nishikawa
一紀 西川
Yoshikazu Sato
嘉一 佐藤
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.)
Oki Electric Industry Co Ltd
Original Assignee
Oki Electric Industry 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 Oki Electric Industry Co Ltd filed Critical Oki Electric Industry Co Ltd
Priority to JP3303621A priority Critical patent/JPH05143356A/ja
Publication of JPH05143356A publication Critical patent/JPH05143356A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 レジスタを利用した場合と同等の実行速度を
維持し、異常終了時の原因解析をスタックを利用したと
きの同様に行えるコンパイラ装置を提供すること。 【構成】 図1は、高位言語で書かれたソース・プログ
ラムを下位言語に翻訳するコンパイラ装置である。ソー
スプログラム1は高位言語により記述されたプログラム
であり構文/意味解析部2に入力される。構文/意味解
析部2は、ソースプログラム1を分析し中間語によるプ
ログラム3に変換する。擬似コード生成部4は中間語3
を入力し下位言語を生成するための擬似コード5を生成
する。機械語生成部6は入力した擬似コード5より機械
語オブジョクト7を生成する。また、構文/意味解析部
2は、ソースプログラム1よりサブルーチンや関数で受
け渡されるパラメタ型情報8を収集しこれの設定を行な
う。パラメタ型情報8は擬似コード生成部4で参照され
る。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はプログラミング用高位言
語(高級言語)で書かれたプログラムを翻訳して機械語
などの下位言語を出力するコンパイラ装置に関する。
【0002】
【従来の技術】サブルーチンや関数といったプログラム
の実行単位の実行時に必要な情報をスタックに格納し、
これを管理する方式をスタックマシンと呼んでいる。こ
のようなスタックマシンにおいて、実行時に必要な情報
としては、サブルーチンや関数の呼び出し元の環境(レ
ジスタ値や戻り先アドレス)、呼び出し先と呼び出し元
との間でやりとりされたパラメタ、そのプログラム単位
の実行時に局所的に発生するメモリ領域などがある。図
5には、サブルーチン(関数)の呼び出し系列が、処理
fの実行時に処理gを呼び出し、処理gの実行時に処理
hを呼び出したf→g→hの処理を行ったときのスタッ
クの内容が示されている。なお、同図において「SP」
はスタックポインタを示している。スタックマシンにお
いて、サブルーチンや関数を呼び出す際に、パラメタを
受け渡す方法として、従来のコンパイラでは、スタック
を利用する方式とレジスタを利用する方式のいずれかが
とられている。
【0003】スタックを利用する方式では、パラメタを
スタックに格納するために、PUSH系の命令が用いら
れている。PUSH命令とは、スタックにデータを格納
すると、スタックポインタ(SP)の値を更新する命令
である。たとえばレジスタR0のデータをスタックに格
納するPUSH命令を実行した場合、このデータがスタ
ックに格納され、スタックポインタの値が更新される。
図6にはPUSH命令実行の前後でのスタックのスタッ
クポインタの様子が示されている。また、ハードウェア
によってPUSH系の命令がない場合には、スタックポ
インタを調整するADD系の命令と、パラメタの値を格
納するMOVE系の命令を組み合せて同様の処理を行っ
ていた。
【0004】一方、レジスタを利用する方式では、パラ
メタをレジスタに格納するために、MOVE系の命令が
用いられている。
【0005】一般に、スタックを利用する方式は、その
翻訳対象のプログラムの実行速度が遅くなる。これは、
パラメタを渡す側でスタックへ格納し、パラメタを受け
取る側でスタックからの取り出しを行いさらにスタック
ポインタの調整を行なわなければならず、その分ロスが
発生するためである。一方、レジスタを利用する方式で
は、パラメタを渡す側でレジスタに値を格納し、受け取
る側でそのレジスタをそのまま使用する。このため、ロ
スはほとんどなく、実行速度はスタックを利用する方式
に比べて速くなる。
【0006】しかし、レジスタを利用する方式では、翻
訳対象プログラムが何らかの原因で異常終了した場合、
終了した時のメモリ(スタック)レジスタの状態を残し
ておく手段があったとしても、スタック上にデータ(パ
ラメタの値)が残っていないので関数やサブルーチンの
呼び出し系列が分からないという欠点がある。このため
レジスタを利用する方式では異常終了した原因を解析す
ることが非常に困難となる。その逆にスタックを利用す
る方式では、スタック上にデータが残っているため、原
因の解析が容易であるという長所があった。
【0007】
【発明が解決しようとする課題】スタックまたはレジス
タを利用してコンパイラ装置が機械語を生成する場合
も、スタックを利用する方式ではパラメタ受け渡しに伴
う実行時間のロスが発生し、またレジスタを利用する方
式では異常終了時の原因の解析ができないという問題点
が発生した。
【0008】本発明はこのような従来技術の欠点を解消
し、レジスタを利用した場合と同等の実行速度を維持
し、異常終了時の原因解析をスタックを利用したときの
同様に行えるコンパイラ装置を提供することを目的とす
る。
【0009】
【課題を解決するための手段】本発明は上述の課題を解
決するために、プログラミング用高位言語で書かれたプ
ログラムを所定の下位言語に翻訳するコンパイラ装置
は、プラグラム用高位言語で書かれたソースプログラム
の構文や意味を解析して中間語に変換する構文/意味解
析手段と、構文/意味解析手段により変換された中間語
を入力し、これより下位言語を生成するための擬似コー
ドを生成する擬似コード生成手段と、擬似コード生成手
段により生成された擬似コードを入力し、これより下位
言語オブジェクトを生成する下位言語生成手段とを有
し、擬似コード生成手段は、擬似コードを生成する際、
サブルーチンや関数の呼出しにおけるパラメタの受渡し
を、パラメタの型情報に応じてレジスタおよびスタック
の両方またはいずれかを利用して行う。
【0010】
【作用】本発明によれば、構文/意味解析手段は、プラ
グラム用高位言語で書かれたソースプログラムの構文や
意味を解析して中間語に変換するとともに、パラメタ型
の情報を設定する。構文/意味解析手段により変換され
た中間語は擬似コード生成手段に入力され、擬似コード
生成手段はパラメタ型の情報を参照することにより下位
言語を生成するための擬似コードを生成する。擬似コー
ド生成手段により生成された擬似コードは、下位言語生
成手段に送られ、これにより下位言語オブジェクトが生
成される。
【0011】
【実施例】次に添付図面を参照して本発明によるコンパ
イラ装置の実施例を詳細に説明する。
【0012】図1は、高位言語で書かれたソース・プロ
グラムを機械語またはそれに近いプログラム言語などの
下位言語に翻訳する本発明におけるコンパイラ装置の実
施例である。同図において、ソースプログラム1は、た
とえばフォートラン(FORTRAN)、コボル(CO
BOL)、パスカル(PASCAL)またはC言語など
の高位言語により記述されたプログラムである。高位言
語で記述されたソースプログラム1は構文/意味解析部
2に入力される。
【0013】構文/意味解析部2は、ソースプログラム
1を分析し、複雑さが高水準のプログラム言語と機械語
との中間に位置する中間語によるプログラム3に変換す
る。変換された中間語3は擬似コード生成部4に送られ
る。擬似コード生成部4は中間語3を入力し、これより
機械語などの下位言語を生成するための擬似コード5を
生成する。生成された擬似コード5は機械語生成部6に
入力される。機械語生成部6は、入力した擬似コード5
より機械語オブジョクト7を生成する。
【0014】また、構文/意味解析部2は、入力したソ
ースプログラム1よりパラメタ型情報8を収集し、これ
の設定を行なってメモリ上に格納する。パラメタ型情報
8とは、サブルーチン関数の呼出しにおける各々の実パ
ラメタの型の情報であり、たとえば整数型(long
型、int型、short型、char型:各々符号
「有」と「無」がある)、ポインタ型、double/
float型、構造体/共用体などがある。サブルーチ
ンや関数で受け渡されるパラメタ型情報8は、メモリ上
に格納され、擬似コード生成部4で参照される。なお、
本実施例では、擬似コード生成部4で実行される擬似コ
ード生成処理にその特徴がある。このため図2〜図4を
用いてこの生成処理を詳細に説明する。
【0015】図2には擬似コード生成部4の処理フロー
が示されている。擬似コード生成部4は、まず中間語3
(図1参照)の読込み処理を実行する(100)。この
処理100によりある一定長の中間語3を読み込むと、
読み込んだ中間語3より擬似コードの生成処理を行う
(104)。処理104で行う擬似コードの生成は、関
数やサブルーチンの呼出しの場合とそれ以外の場合とで
分けて行う。このため処理106でこの判断を行なって
いる。もし、中間語3が関数やサブルーチンの呼び出し
の場合、その内容に応じて関数やサブルーチンの呼出し
のコードとして、そのパラメタをレジスタに格納する擬
似コードを生成し、さらにそのパラメタをスタックに格
納する擬似コードを生成する(108)。また、中間語
3が関数やサブルーチンの呼出し以外の場合には、関数
やサブルーチンの呼出し以外の中間語に対しての擬似コ
ード生成を行う(110)。処理108または処理11
0が終わると、処理100に戻り、中間語3の読み込み
を行う。そして、読み込む中間語3が無くなった場合、
擬似コード生成部4の処理を終了する(102)。
【0016】図4には、翻訳対象プログラム上での変数
に対応する中間語3の処理フローが示されている。同図
に示されているパラメタにおける擬似コード生成処理
は、図2に示した処理108や処理110にて行われ
る。以下、同図を用いてパラメタにおける擬似コード生
成処理を詳細に説明する。初めに、入力した変数(具体
的には変数に対応する中間語)がパラメタか否かを判断
する(200)。パラメタでない場合には、変数の割り
当て領域がメモリ(スタック)か否かを中間語より索引
し、スタックであればメモリからレジスタへ設定する擬
似コードを生成する(204)。また、変数の割り当て
領域がレジスタに割り当てられていれば擬似コードは生
成しない。なお、実際にはサブルーチンや関数以外の擬
似コードを生成する場合にはこの処理204が実行され
る。
【0017】一方、変数がパラメタの場合には、パラメ
タの擬似コードを生成する(202)。そして、構文/
意味解析部2(図1参照)で設定したパラメタ型情報8
を参照して、パラメタの型の判定を行う(206)。具
体的にはパラメタの型が整数型もしくはポインタ型であ
ればパラメタをスタックおよびレジスタの両方に格納す
る擬似コードを生成する(208)。このとき、パラメ
タがメモリ上にあれば、メモリ→スタック、メモリ→レ
ジスタの擬似コードを生成し、パラメタがレジスタ上に
あれば、レジスタ→スタック、レジスタ→レジスタの擬
似コードを生成する。ここでレジスタ→レジスタの場
合、パラメタのレジスタと受け渡しのためのレジスタは
同じで良いし、また異なるレジスタでも構わない。パラ
メタが整数型またはポインタ型でない場合、すなわちパ
ラメタがfloat/double型または構造体/共
用体の場合には、パラメタをスタックに格納する擬似コ
ードを生成する(210)。
【0018】また、図2の処理108で行うスタックへ
格納するパラメタの擬似コードを生成する際、レジスタ
渡しの場合に使う実レジスタにパラメタを割当て、その
実レジスタを使用してスタックへの格納の擬似コードを
生成する。これにより、メモリ→レジスタ(レジスタ渡
しのため)、メモリ→(レジスタ)→メモリ(スタック
渡しのため)の1つのパラメタに対して2つのパターン
の擬似コードが必要な所が、メモリ→レジスタ→メモリ
の1パターンで済む。よって、レジスタ渡しだけの方
式、スタック渡しだけの方式と比べて格納のための擬似
コードはほとんど違わないことになる。また、パラメタ
をスタックにも格納するので異常終了時のスタックの情
報が残すことができる。
【0019】以上のように、擬似コード生成部4(図1
参照)は、中間語3が関数やサブルーチンの呼び出しの
場合、その中の所定のパラメタをレジスタとスタックに
格納する。これにより擬似コード生成部4は、図3
(d)のような擬似コードを生成することができる。図
3には、高位言語をC言語とした場合のソースプログラ
ムとその擬似コードの例が示されている。同図におい
て、(a)にはC言語により記述されたパラメタa,
b,cを有するサブルーチンのソースプログラムの一例
が、(b)にはスタック利用方式による従来技術におけ
る擬似コードの一例が、(c)にはレジスタ利用方式に
よる従来技術における擬似コードの一例が、(d)には
本実施例による擬似コードの一例がそれぞれ示されてい
る。また、同図における(e)(f)(g)はそれぞ
れ、実行時のパラメタの様子が示されている。すなわ
ち、(e)には(b)の処理を行ったときのスタック状
態が、また(f)には(c)の処理を行ったときのスタ
ックとレジスタの状態が、さらに(g)には(d)の処
理を行ったときのスタックとレジスタの状態が示されて
いる。同図(g)で明らかなように本実施例では、生成
された擬似コードによりパラメタa,b,cがレジスタ
とスタックに格納される。このため、たとえば翻訳プロ
グラムが実行時に異常終了した場合でもスタックにパラ
メタが残っているため原因解析が可能となるとともに、
パラメタを受け取る際にはレジスタを使用することによ
り実行速度が速くなる。
【0020】このように本実施例では、擬似コード生成
部4(図1参照)で生成された擬似コードにより、サブ
ルーチンや関数の呼び出しにおけるパラメタの受渡しを
レジスタとスタックの両方を利用して行うような機械語
のオブジェクトを生成することができる。このため、機
械語プログラムの実行時間を少なくするための最適化処
理を行えるとともに、翻訳プログラムが実行時に異常終
了した場合でも原因解析を行うことが可能となる。
【0021】
【発明の効果】このように本発明のコンパイラ装置によ
れば、関数やサブルーチンの呼出しにおけるパラメタの
受け渡しをレジスタ、スタックの両方を利用して行う。
翻訳対象プログラムを実行する際にはレジスタを使用す
ることにより、翻訳対象プログラムの実行時間をスタッ
ク方式に比べて速くすることができる。また、スタック
には翻訳プログラムの異常終了時の原因解析のためのス
タック情報が残るため、この情報を参照することにより
異常における原因解析を容易に行うことが可能となる。
【図面の簡単な説明】
【図1】本発明によるコンパイラ装置の実施例を示した
機能ブロック図、
【図2】図1に示した実施例における擬似コード生成の
概要を示した動作フロー、
【図3】ソースプログラムから生成される擬似コード
と、その格納の一過程を示した説明図、
【図4】図2に示した擬似コード生成におけるパラメタ
の擬似コード生成における概要を示した動作フロー、
【図5】スタックマシンの動作説明図、
【図6】PUSH命令を実行したときのスタックの状態
示した説明図である。
【符号の説明】
2 構文/意味解析部 4 擬似コード生成部 6 機械語生成部

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 プログラミング用高位言語で書かれたプ
    ログラムを所定の下位言語に翻訳するコンパイラ装置に
    おいて、 前記プラグラム用高位言語で書かれたソースプログラム
    の構文や意味を解析して中間語に変換する構文/意味解
    析手段と、 前記構文/意味解析手段により変換された中間語を入力
    し、これより前記下位言語を生成するための擬似コード
    を生成する擬似コード生成手段と、 前記擬似コード生成手段により生成された擬似コードを
    入力し、これより下位言語オブジェクトを生成する下位
    言語生成手段とを有し、 前記擬似コード生成手段は、擬似コードを生成する際、
    サブルーチンや関数の呼出しにおけるパラメタの受渡し
    を、パラメタの型情報に応じてレジスタおよびスタック
    の両方またはいずれかを利用して行うことを特徴とする
    コンパイラ装置。
  2. 【請求項2】 請求項1に記載のコンパイラ装置におい
    て、前記構文/意味解析手段は前記入力したソースプロ
    グラムより前記サブルーチンや関数で受け渡されるパラ
    メタ型の情報を設定し、このパラメタ型の情報が前記擬
    似コード生成手段により参照されて擬似コードが生成さ
    れることを特徴とするコンパイラ装置。
JP3303621A 1991-11-19 1991-11-19 コンパイラ装置 Pending JPH05143356A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3303621A JPH05143356A (ja) 1991-11-19 1991-11-19 コンパイラ装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3303621A JPH05143356A (ja) 1991-11-19 1991-11-19 コンパイラ装置

Publications (1)

Publication Number Publication Date
JPH05143356A true JPH05143356A (ja) 1993-06-11

Family

ID=17923193

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3303621A Pending JPH05143356A (ja) 1991-11-19 1991-11-19 コンパイラ装置

Country Status (1)

Country Link
JP (1) JPH05143356A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003501742A (ja) * 1999-06-07 2003-01-14 マイクロソフト コーポレイション 中間言語内のオペランド・タイプの推定
KR100915762B1 (ko) * 2005-11-19 2009-09-04 인터내셔널 비지네스 머신즈 코포레이션 통합 개발 환경에서의 의사 번역

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003501742A (ja) * 1999-06-07 2003-01-14 マイクロソフト コーポレイション 中間言語内のオペランド・タイプの推定
KR100915762B1 (ko) * 2005-11-19 2009-09-04 인터내셔널 비지네스 머신즈 코포레이션 통합 개발 환경에서의 의사 번역

Similar Documents

Publication Publication Date Title
US7784039B2 (en) Compiler, compilation method, and compilation program
JP4346316B2 (ja) 複数の意味レベルによるアスペクト指向プログラミングのための方法
US8448152B2 (en) High-level language, architecture-independent probe program compiler
JP2000507373A (ja) インタラクティブソフトウェア開発システム
JPS61103247A (ja) 翻訳プログラム作成システム
US5692196A (en) System and method for conditionally compiling a software compilation unit
US5826088A (en) System for protecting computer software written in interpreted language
US6233732B1 (en) Compiling system using intermediate codes to store a plurality of values
KR0125605B1 (ko) 프로그램의 아키덱쳐 변환방법 및 장치와 그 방법 및 장치를 사용하여 프로그램의 동작을 검증하는 방법 및 장치
JPH05143356A (ja) コンパイラ装置
JPH01277934A (ja) パラメータリスト参照方法の切換え方式
JPH10187461A (ja) 言語処理方式
JPS5922140A (ja) 対話型コンパイル方式
US20090112568A1 (en) Method for Generating a Simulation Program Which Can Be Executed On a Host Computer
JPH11154093A (ja) プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体
JP2503632B2 (ja) 目的プログラム生成方式
JP3424596B2 (ja) シンボル参照情報のキャッシュ方法ならびに装置
JPH03269733A (ja) コンパイル装置
JPH06119203A (ja) デバック行削除装置
WO1997007452A1 (en) Programmable compiler
JPH1195995A (ja) データフロー解析装置、データフロー解析方法及びそのためのコンピュータプログラムを記録した記録媒体
JPH10207738A (ja) 言語処理システム
JPH0385639A (ja) プログラム言語翻訳機
JPH10154079A (ja) プログラム変換装置および記憶媒体
Ishijima et al. A Small Engineering Workbench On A Personal Computer

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20000704