JPS62137641A - 高級言語のコンパイラ - Google Patents

高級言語のコンパイラ

Info

Publication number
JPS62137641A
JPS62137641A JP27692985A JP27692985A JPS62137641A JP S62137641 A JPS62137641 A JP S62137641A JP 27692985 A JP27692985 A JP 27692985A JP 27692985 A JP27692985 A JP 27692985A JP S62137641 A JPS62137641 A JP S62137641A
Authority
JP
Japan
Prior art keywords
variable
register
area
address
variables
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
JP27692985A
Other languages
English (en)
Inventor
Yoshinori Takahashi
義則 高橋
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.)
Omron Corp
Original Assignee
Omron Tateisi Electronics Co
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 Omron Tateisi Electronics Co filed Critical Omron Tateisi Electronics Co
Priority to JP27692985A priority Critical patent/JPS62137641A/ja
Publication of JPS62137641A publication Critical patent/JPS62137641A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〈産業上の利用分野〉 本発明は、C言語等の高級言語をコンパイルする高級言
語のコンパイラに関する。
〈従来の技術〉 C言語等の高級言語で曹かれたプログラムからオブジェ
クトプログラムを生成するコンパイラでは、通常、変数
をメモリ上に置き各種の処理を行なっている。
またこのようなコンパイラの他にも、従来、変数をレジ
スタ上に置き、高速でこれを処理するものも知られてい
る。
〈発明が解決しようとする問題点〉 しかしながらこのような従来のコンパイラにおいては、
メモリ上に置かれた変数のアドレスを取ることができる
だけで、レジスタ上に置かれた変数のアドレスを取るこ
とができなかったので、変数のアドレスを必要とする場
合には、高速性を要求されている処理があるにもかかわ
らず、変数をレジスタに置く型宣言を行なうことができ
ないという問題があった。
本発明は上記の事情に鑑み、レジスタ上に置かれた変数
に対してもアドレスをとることができ、これによって高
速性が要求される処理を含む場合にも、レジスタ上に置
かれた変数のアドレスを関数の引数などとして用いるこ
とができる高級言語のコンパイラを提供することを目的
としている。
〈問題点を解決するための手段〉 上記問題点を解決するため本発明による高級言語のコン
パイラは、変数をレジスタおよびメモリに割り付ける割
付は手段と、前記メモリ上にある変数のアドレスを取り
出すアドレス情報取出し手段とを備えた高級言語のコン
パイラにおいて、レジスタ内の変数に対応するエリアを
前記メモリ上に擬似的に制り付ける擬似エリア割付は手
段と、関数をコールする前に前記レジスタ内の変数を前
記エリアにセットする変数セット手段と、関数の実行終
了後に前記エリアの変数を元のレジスタに復元する復元
手段とを備えたことを特徴としている。
〈実施例〉 第1図は本発明による高級言語のコンパイラの一実施例
を示すブロック図である。
この図に示すコンパイラ1はC言語によって記述された
ソースプログラム2からオブジェクトプログラム3を生
成するものであり、その内部にはプログラムに基づいて
各回路を制御するCPU4と、このCPU4の作業エリ
アとなるスタックメモリ5とが設けられている。
この場合、CPU4は前記ソースプログラムから前記オ
ブジェクトプログラム3を生成するのに必要な通常の機
能、例えば構文解析機能、中間コード生成機能等の他に
、その内部にあるレジスタにセットされた変数に対して
アドレスを取るアドレス割付は機能が設けられている。
また前記ソースプログラム21−j:、例えば第2図に
示す如く1行目〜7行目に税関数mainが記述され、
8行目〜16行目にこの税関数mainで呼ばれる子関
数SUbが記述されたものであシ、3行目〜5行目でこ
の税関数mainで使用される各変数a。
b、cが定義されている。
この場合、各変数a、b、cの定義から明らかなように
、変数a、cがメモリ変数で、残りの変数すだけがレジ
スタ変数になっている。
また6行目で、各変数a、b+cの頭に記号&を付けて
これら各変数a、b、cのアドレスを引数として子関数
SUbに渡しているが、この場合本発明ではレジスタ変
数に対してアドレスを取る機能が付加されているので、
従来のもののようにコンバイルエラーにならない。
また8行目では、仮の変数ga a gb 1gCの並
び方が示されている。
また9行目〜11行目では、これら仮の変数の頭に記号
※を何けてデータ定義がなされ、子関数SUhの関数本
体でこれら仮の変数ga # gb 1gcがアドレス
として使えるようになっている。
また133行目〜15目では、アドレスとして使われる
これら仮の変数ga l gb 1gcに各々値1゜2
.3がセットされている。
また前記スタックメモリ5は、次に述べるように使用さ
れる。
まず、税関数mainの開始直前では、第3図に示すよ
うに、そのスタックポインタが番地S Poを指してい
る。この番地SPoで示されるエリア6には税関数ma
inが終了したときのリターンアドレスがセットされる
次いで、税関数mainの実行に移った時、このスタッ
クメモリ5にレジスタ変数テンポラリエリア7および自
動変数エリア8がとられて、スタックポインタが番地S
PIを指す。この場合、この実施例においては、変数a
leがメモリ変数であるから、これらの変数a、cは自
動変数エリア8にセットされる。また、変数すはレジス
タ変数であるから前記自動変数エリア8にはなく、本来
、CPU4のレジスタ内にあるが、本発明ではレジスタ
変数すのアドレスを引数として子関数5UbK渡たす必
要があるときに、レジスタ内にある変数すを前記レジス
タ変数テンポラリエリア7に転送し、そのアドレスをと
れるようにしている。
次いで、子関数SUbのコールが必要になった時点で、
前記自動変数エリア8にある変数a+cのアドレスが引
数として引数エリア9にセットされるとともに、前記レ
ジスタ変数テンポラリエリア7にある変数すのアドレス
が引数として前記引数エリア9にセットされ、この後、
エリア10に親関数mainへのリターンアドレスがセ
ットされ、子関数SUbがコールされる。
次いで、この子関数SUbの実行が始まる直前において
は、スタックポインタが番地SPtを指す。
この後、子関数SUbの実行が始じまったときに、前記
スタックメモリ5に子関数用のエリア11がとられ、前
記スタックポインタが番地SP3を指す。
そして、この子関数SUbの実行が終了したとき、スタ
ックポインタが番地SP、を指す。
この後、レジスタ変数テンポラリエリア7にある変数す
がCPU4のレジスタに戻される。
次に、第4図のフローチャートを参照しながらこの実施
例の全体的な動作を説明する。
まず、ソースプログラム2の翻訳が始まれば、CPU4
はステップSTIで、各変数の名前と、そのタイプを、
スタックポインタで指される番地SPlからのオフセッ
ト値(相対アドレス値)とがセットされたシンボル・テ
ーブルを作成する。
次いで、CPU4はステップST2で全ての引数をセッ
トし終ったかどうかをチェックし、もしこれが終了して
いなければ、ステップST3でこの引数がレジスタ変数
に対応しているかどうかをチェックする。
そしてこの引数がレジスタ変数に対応したものでなけれ
ば、CPU4はステップST4でこの引数がアドレスか
どうかをチェックし、もしこの引数がアドレスであると
きには、ステップST5でこのときの変数であるレジス
タ変数の内容をレジスタ変数テンポラリエリア7に転送
し、ステップST6でこのレジスタ変数テンポラリエリ
ア7にセットされたこの変数(この実施例では、変数b
)のアドレスをセットしてステップST8で引数のセッ
ト命令を出力する。この後、CPU4は前記ステップS
T2へ戻る。
また前記ステップST3において、引数がレジスタ変数
に対応するものでないと判断されたシ、ステップST4
で引数としてアドレスが要求されていないときには、C
PU4は前記ステップST3 。
S T 4 カらステップST7へ分岐し、ここでこの
変数に対応した引数をセ1ッ卜し、ステップST8へ進
む。
そして全ての引数のセットを終了したとき、CPU4は
前記ステップST2からステップST9へ分岐し、ここ
で子関数SUbのコール命令を出力してこれを呼出す。
次いで、この子関数SUbの実行が終了すれば、CPU
4はステップ5TIOでリターン処理命令を出力してス
テップ5TIIで、前記ステップST5においてレジス
タ変数テンポラリエリア7にセットしたレジスタ変数の
内容を元のレジスタに転送する。これにより、レジスタ
変数のアドレスを引数として子関数SUbに渡すとき以
外には、レジスタ変数をレジスタ内に保持させることが
でき、このレジスタ変数を用いた高速処理を達成するこ
とができる。
〈発明の効果〉 以上説明したように本発明によれば、次に述べる効果を
得ることができる。
(11高速性が必貿な変数であシ、かつこの変数のアド
レスが必要な場合においても、この変数をレジスタ変数
とすることができ、これによってその高速性を維持する
ことができる。
(2)  自動変数をレジスタ宣言なしで、レジスタ変
数とするコンパイラにおいても、本発明を適用すること
によって変数のアドレスをとることができる。
【図面の簡単な説明】
第1図は本発明による高級言語のコンパイラの一実施例
を示すブロック図、第2図は同実施例で用いられるソー
スプログラムの一例を示す図、第3図は同実施例におけ
るスタックメモリの使用例を説明するだめの模式図、第
4図は同実施例の動作例を示すフローチャートである。 4・・・割付は手段、アドレス情報手段、擬似エリア割
付は手段、変数セット手段、復元手段(CPU)、5・
・・メモリ(スタックメモリ)。

Claims (1)

    【特許請求の範囲】
  1. 変数をレジスタおよびメモリに割り付ける割付け手段と
    、前記メモリ上にある変数のアドレスを取り出すアドレ
    ス情報取出し手段とを備えた高級言語のコンパイラにお
    いて、レジスタ内の変数に対応するエリアを前記メモリ
    上に擬似的に割り付ける擬似エリア割付け手段と、関数
    をコールする前に前記レジスタ内の変数を前記エリアに
    セツトする変数セツト手段と、関数の実行終了後に前記
    エリアの変数を元のレジスタに復元する復元手段とを備
    えたことを特徴とする高級言語のコンパイラ。
JP27692985A 1985-12-11 1985-12-11 高級言語のコンパイラ Pending JPS62137641A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP27692985A JPS62137641A (ja) 1985-12-11 1985-12-11 高級言語のコンパイラ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP27692985A JPS62137641A (ja) 1985-12-11 1985-12-11 高級言語のコンパイラ

Publications (1)

Publication Number Publication Date
JPS62137641A true JPS62137641A (ja) 1987-06-20

Family

ID=17576368

Family Applications (1)

Application Number Title Priority Date Filing Date
JP27692985A Pending JPS62137641A (ja) 1985-12-11 1985-12-11 高級言語のコンパイラ

Country Status (1)

Country Link
JP (1) JPS62137641A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012063914A (ja) * 2010-09-15 2012-03-29 Ricoh Co Ltd コンパイル装置及び方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012063914A (ja) * 2010-09-15 2012-03-29 Ricoh Co Ltd コンパイル装置及び方法

Similar Documents

Publication Publication Date Title
US5586328A (en) Module dependency based incremental compiler and method
JPH01154267A (ja) 入出力機器制御プログラムのアドレス解決方法
US5901314A (en) Method for reducing the size of computer programs
JP2752094B2 (ja) 論理型言語におけるバックトラック処理方式
US6854113B1 (en) Mixed-mode execution for object-oriented programming languages
JPS62137641A (ja) 高級言語のコンパイラ
US7246135B2 (en) Sharing classes between programs
Kim et al. Migrating Legacy Software Systems to Corba based Distributed Environments through an Automatic Wrapper Generation Technique [versión electrónica]
Plasmeijer Clean: a programming environment based on term graph rewriting
JPH08272621A (ja) 動的メモリ領域を確保する関数呼出しの処理方法
JP2000132406A (ja) オブジェクトメモリ最適化方法
JPH0293947A (ja) 電子計算機
JPH1021087A (ja) コンパイル方法
JP2601541B2 (ja) Fortran入出力並び処理方式
JPS58166455A (ja) 関係型デ−タベ−ス・システム
JPS63163636A (ja) 並列処理実行方式
JPH0675757A (ja) 仮想空間常駐プログラムのリンク方式
JPH05143356A (ja) コンパイラ装置
JPS61264441A (ja) コンパイル処理方式
JPH03177930A (ja) コンパイルコード生成処理方法
JPH04266126A (ja) サブルーチンコール制御方式
JPS62147534A (ja) プログラムテスト方式
JPH0447337B2 (ja)
JPS6155752A (ja) 拡張記憶装置の制御方式
JPH01120631A (ja) 分割コンパイル方式の実行用データ管理方式