JPS63132335A - 計算機言語処理系の実行方式 - Google Patents

計算機言語処理系の実行方式

Info

Publication number
JPS63132335A
JPS63132335A JP61278638A JP27863886A JPS63132335A JP S63132335 A JPS63132335 A JP S63132335A JP 61278638 A JP61278638 A JP 61278638A JP 27863886 A JP27863886 A JP 27863886A JP S63132335 A JPS63132335 A JP S63132335A
Authority
JP
Japan
Prior art keywords
type
program
type information
clause
execution
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
JP61278638A
Other languages
English (en)
Inventor
Yoichi Takeuchi
洋一 竹内
Tadashi Hirose
広瀬 正
Hitoshi Kato
整 加藤
Kazuo Nakao
中尾 和夫
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 Microcomputer System Ltd
Hitachi Ltd
Original Assignee
Hitachi Ltd
Hitachi Microcomputer Engineering 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, Hitachi Microcomputer Engineering Ltd filed Critical Hitachi Ltd
Priority to JP61278638A priority Critical patent/JPS63132335A/ja
Publication of JPS63132335A publication Critical patent/JPS63132335A/ja
Pending legal-status Critical Current

Links

Landscapes

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

Abstract

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は計算機システムに係り、型指定のない変数を取
り扱う言語処理系たとえば論理型言語処理系の実行速度
の向上、オブジェクトニードの容量低減に好適な処理方
式に関する。以下、論理型言語処理系を例にとり説明す
る。
〔従来の技術〕
論理型言語のデータのタイプ(型)は変数、定数、参照
に分けられ、さらに定数は整数、実数。
文字定数、リスト、構造体(リスト以外)等に分類され
る。ここで変数は他の任意の型のデータをその値として
取ることができる。また、参照タイプとは他のデータと
同一の値をもっことを示すもので、具体的にポインタで
ある。
論理型言語のプログラム実行時においては、節呼出し処
理に引続いて、呼び出す側の節のデータ(実引数)と呼
び出れる側の節のデータ(仮引数)のユニフィケーショ
ン処理が行なわれる。ユニフィケーション処理とは2つ
のデータのタイプおよび値が一致可能であるか否がを調
べ、もし一致可能ならば、一致させる処理であり、この
処理が可能な場合をユニフィケーションの成功、不可能
な場合をユニフィケーションの失敗という。変数りイブ
のデータには他のタイプの値を代入することができる。
したがって、2つのデータが共に変数タイプの場合、あ
るいは変数タイプと定数タイプの場合は一致可能である
0両者が変数タイプでない場合は両者が等しいタイプの
場合のみ一致可能であり、それ以外は一致不可能である
。ただし、参照タイプのデータはそのデータに含まれる
ポインタの指すデータとの同一性を示すためのものであ
り、ユニフィケーション処理の一致の可否判定には関係
しない。
以上のように、論理型言語処理系のユニフィケーション
処理においては、参照タイプを除くデータのタイプの一
致判定処理が行なわれる。従来の処理系では例えば、プ
ロシーディンゲス・オブ・ザ・ロジック・プログラミン
グ・コンファレンス(1985年)247頁から258
頁(Proceedingsof the Logic
 Programming Conference (
1985)PP247−PP258)において論じられ
ているような゛′モード宣言″を利用した最適化がなさ
れていた。′モード宣言″はプログラム(節)が呼出さ
れる時点の実引数が変数タイプであるか否か、さらに両
方の可能性があるかをあらかじめ示すもので、3種類の
記号(i+t 、#  r、?′)でプログラム中に記
される。′+′は実引数が変数タイプでないこと、′−
′は実引数が変数タイプであること、′?1は実引数の
タイプが′+′。
1−′のどちらかであるか特定できないことを表わす。
第2図にモード宣言を含む論理型言語のプログラムの例
を示す。式21は節fに対するモード宣言であり、節f
の1,2番目の引数が゛+′、3番目の引数が′−′ 
と指定される。ここでは英字の大文字は変数を表わして
いる。
従来の処理系では、モード宣言が′+′の場合には実引
数のタイプが定数タイプのいずれかであること、′−′
の場合には実引数のタイプが変数タイプであることだけ
を前提に、上記ユニフィケーション処理の最適化を行な
っていた。
〔発明が解決しようとする問題点〕
上記の処理方式ではモード宣言が′−′の場合には実引
数のタイプは1種類(変数タイプ)に指定されるが、モ
ード宣言が′+′の場合には実引数のタイプは定数タイ
プの中のどのタイプ(整数タイプ、実数タイプ等)であ
るかは指定されない。
ところが、論理型言語のプログラムでは節呼出し時の実
引数が定数タイプの中のどのタイプであるかを事前に指
定し得る場合がある。例えば、第2図のプログラムにお
いて2節fが呼出される際。
その1,2番目の実引数が文字定数に限られる場合であ
る。このような場合、上記の処理方式では不要なタイプ
判定処理が含まれ、処理速度を低下させる問題があった
本発明の目的は上記問題を解決する論理型言語処理系の
実行方式を提供することにある。
〔問題点を解決するための手段〕
上記目的は、論理型言語処理系にプログラム中の節の引
数のタイプ情報を記憶する手段(タイプ情報記憶手段)
と、実行時に記憶されているタイプ情報に基づき、必要
なタイプ判定処理だけを選択する手段(タイプ判定選択
手段)を設けることにより、達成される。
特に、コンパイル方式の処理系ではタイプ判定選択手段
の代わりに、コンパイル時に記憶されているタイプ情報
に基づき、必要なタイプ判定処理だけを選択してオブジ
ェクトコードを生成する手段(タイプコンパイル手段)
を設けることにより、上記目的は達成される。
〔作用〕
第1図にこれらの手段を利用した論理型言語処理系の構
成を示す、第1図(a)はプログラムを解釈実行する処
理系の場合のものである。あらかじめタイプ情報別実行
ルーチン6にはタイプ情報の種別単位に必要なタイプ判
定処理だけを行なう命令列を備えておく0水力式では、
まず、タイプ情報記憶プログラム1がソースプログラム
2を読み込み、タイプ情報テーブル3を作成する。次い
で、解釈実行制御プログラム4がソースプログラム2を
読み込み、タイプ判定選択プログラム5を起動する。タ
イプ判定選択プログラム5はタイプ情報テーブル3より
対応するタイプ情報を読み出して、タイプ情報別実行ル
ーチン6を選択し実行する。
第1図(b)はコンパイル方式の処理系の構成である。
第1図(a)の場合と同様に、まず、タイプ情報記憶プ
ログラム1がソースプログラム2を読み込み、タイプ情
報テーブル3を作成する。
次いで、タイプコンパイルプログラム7がソースプログ
ラム2とタイプ情報テーブル3を読み出して、オブジェ
クトプログラム8を作成する。
以上では、タイプ情報記憶手段はタイプ情報記憶プログ
ラム1とタイプ情報テーブル3より成る。
次に、このタイプ情報記憶手段について説明する。
タイプ情報記憶方式には以下の2方式がある。
第1の方式はプログラム上にタイプ情報を記す記法を設
け、プログラム入力時にタイプ情報を取り出して記憶す
る方式である。上記記法は従来のモード宣言の中で1十
′が記されていた箇所に、整数タイプでは′1′、実数
タイプでは1r′、文字定数タイプでは′a′、リスト
タイプでは1Q′、構造体(リストを除く)タイプでは
S′と記すものである。第2図のプログラムにおいて節
fの1,2番目の引数のタイプが文字定数であることを
指定する場合1本記法では第3図、式31のように記す
第2の方式は入力したプログラムをもとに自動的にタイ
プ情報を生成する方式である。この方式には(1)節の
呼出し側の引数を調べる方式、(2)筒内部の引数を調
べる方式がある。1番目の方式では、ある節Aを呼出す
節の集合Bが定められるかどうかを調べ、定められる場
合には集合B内の節が節Aを呼出す際の実引数のタイプ
を調べる。もし、これらの実引数のタイプがすべて定ま
っているならば、これらより節Aのタイプ情報を設定す
る。例えば第4図のプログラムにおいては、節rを呼出
す節はp (X、Y)とq (X、Y)に限られており
、しかも両方の節が節rを呼出すときの実引数はタイプ
a(文字定数)であるので。
節rの引数のタイプはaと定める。
2番目の方式では、節A内の仮引数が定数タイプの中の
いずれかのタイプ(整数、実数等)に定まるかどうかを
調べ、もし定まった場合にこれらより節Aのタイプ情報
を設定する。ただし、この方式はモード宣言が十の引数
の場合にだけ有効である。例えば、第5図のプログラム
において1キ節pの1番目の実引数はモード宣言が+で
あって。
節51では1、節52では整数値関数isの引数である
ことから、タイプはi (整数)と定める。
タイプ判定選択処理とタイプコンパイル処理では以下に
示すようにタイプ判定処理の選択を行なう。
第6@に実行前に記憶された引数のタイプ情報と、実行
時に許される実引数のタイプとの対応を示す。本図から
bかるように、タイプ情報が指定されると許される実引
数のタイプは記憶されたタイプか参照タイプの2種類で
ある。上記処理ではこの2種類のデータタイプの判定処
理を選択し。
以下に示す2通り手順で並べる。
第1の手順は許されたタイプの処理を早める手JlN(
優先手順)であり、第7図に示すものである。
本手順では記憶されたタイプかどうかの判定を最初に行
ない(ブロック71)、一致すれば判定処理を終了する
(一致終了)。不一致ならば、参照タイプかどうかの判
定を行なう(ブロック72)。
ここで一致すれば、ブロック73へすすみ、ポインタデ
ータの指すデータについて再度タグ判定処理を繰り返す
、もし不一致ならば、判定処理を終了する(不一致終了
)。
第2の手順は許されるタイプ以外の実引数が生じないこ
とを想定した手順(専用手順)であり、第8図に示すも
のである。本手順では参照タイプかどうかの判定を行な
い(ブロック81)、不一致ならば判定処理を終了する
(一致終了)。一致したならば、ブロック82へすすみ
、ポインタデータの指すデータについて再度タグ判定処
理を繰り返す。
以上述べたように、これらの手順では不要なデータタイ
プの判定処理が省かれるために処理速度は高まる。また
、上記専用手順では、入力データ中にポインタデータが
含まれる場合、優先手順より1つのポインタデータにつ
き判定処理が1回少なくなるため、処理速度は高まる。
(実施例〕 以下、本発明の一実施例を第9〜15図により説明する
0本実施例は汎用計算機上の論角型言語処理システムに
おけるコンパイル方式の処理を示すものである。
第9図(a)は本システムのハードウェア構成を示す図
である1本システムはCPU101とキーボード102
.ディスプレイ103、主メモリ104、ディスク装置
1105から成り、これらがパス106で結合されてい
る。
第9図(b)は本システムのソフトウェア構成を示す図
である0図中の実線は制御の流れ、破線はデータの流れ
を表わす。
インタプリタ110は本システムの起動コマンドにより
起動され、キーボード102より入力されるコマンドに
従って、コンパイラ111の起動。
エディタ112の起動、エリア107内のインタプリタ
用プログラムの実行処理エリア115内のマシン語プロ
グラムの実行処理を行ない、処理結果をディスプレイ1
03に表示する。
エディタ112はキーボード102より入力されるコマ
ンドに従ってソースプログラムを作成し。
エリア113に出力する。
コンパイラ111はエリア113よりソースプログラム
を入力してマシン語プログラムに変換し、エリア115
に出力する。さらに、プログラム中の各節のエリア11
5内におけるアドレスを筒名称テーブル116へ登録す
る。
節名称テーブル116にはエリア117.エリア115
内のプログラムの各節のアドレスを登録する。各レコー
ドには第↓Oalに示すように1節名称117、節用数
個数118、節の種別119、節のアドレス120を記
す、ここで、節の種別とはインタプリタ用プログラムか
、マシン語プログラムかの区別である。
本システムの利用者は以下の手順で論理型プログラムの
コンパイル方式による実行を行なう。
(1)インタプリンタ110の起動後、エディタ112
を起動して、エリア113上にソースプログラムを作成
する。
(2)コンパイラ111を起動して、エリア113内の
ソースプログラムをマシン語プログラムに変換し、エリ
ア115に出力する。各節のエリア115内での7ドレ
スを節アドレステーブル116に登録する。
(3)マシン語プログラムを実行する。
(4)インタプリタの処理を終える。
本論理型言語プログラムでは、従来よりマシン語プログ
ラムの造適化を促進するために、モード宣言を拡張した
タイプ宣言を用いる0本宣言では。
従来のモード宣言で1十′に分類されていた定数タイプ
を、整数タイプ、実数タイプ等が指定できるよう細分し
、また、コンパイラが生成するマシン語の種別を指定す
る。マシン語の種別は前述のタイプ判定処理の優先手順
と専用手順による区分であり、コードIは優先手順、コ
ード■が専用手順を行なうマシン語である。
本宣言における記号とその意味を第11図に示す、記号
°i″  g、#%a#、“息′、′S″は引数のタイ
プが整数、実数2文字定数、リスト。
構造体(リスト以外)であることを表わす、これらは従
来のモード宣言ではすべての記号1+′に含まれるもの
である。記号de11 、 4+j 、  J  eは
従来のモード宣言と同様に引数のタイプが任意。
定数、変数であることを表わす、また、記号J iH9
#r# 、  gal 、  tQ9 、  ′、t 
、  ′−* はコード!、これらに1・′を付したも
のはコード■をコンパイラが生成することを指定する。
次に、このタイプ宣言の利用の方法を中心に。
コンパイラ111の動作について説明する。
第12図はコンパイラワークエリア114内に作られる
データ構成を示す図である。mテーブル121ど節アド
レステーブル122を用いてソースプログラム中の節を
、タイプテーブル123とタイプ記号テーブル124を
用いてソースプログラム中のタイプ宣言を記憶する。ポ
インタ125には節テーブル121のレコードを指すポ
インタ値を入れる。
第13図はコンパイラ111の処理手順を示すフローチ
ャートである。以下、本図に従って処理手順を説明する
ブロック131:ソースプログラムの読み出しとテーブ
ルへの登録 エリア113内のソースプログラムを読み出す。
読み出した節のエリア113内でのアドレスは第14図
に示すように節アドレステーブル121に登録する。ま
た、本テーブルのレコードを指すポインタを節名称と節
引数個数をキーとして節テーブル121に登録する。キ
ーが等しい節が複数ある場合には節アドレステーブルの
該当するレコードをポインタで結び、最後のレコードに
は終端マークを入れる。
読み出したタイプ宣言は第15図に示すように1記号を
ルコードとしてタイプ記号テーブル124に登録する6
本レコードへのポインタは節名称と節引数個数をキーと
してタイプテーブル123に登録する。
ブロック132:ポインタ114の初期セットポインタ
114を節テーブル110の先頭レコードを指すように
セットする。
ブロック133:タイプ宣言の有無判定ポンインタ11
4が指すレコードと等しいキーを持つレコードをタイプ
テーブル113内でサーチする6該当するレコードがあ
れば次のブロック134へ、なければブロック125へ
進む。
ブロック134:最適化コードの生成 節アドレステーブル122のポインタが指す節をソース
プログラムエリア113より、タイプテーブル123の
ポインタが指すタイプ宣言の記号をタイプ記号テーブル
124より読み出す。
タイプ宣言に従ってタイプ判定処理を最適化して、マシ
ン語コードを生成し、エリア115へ出力する。節名称
テーブル116へ本コードを9.@する。ブロック13
6へ進む。
ブロック135:ノーマルコードの生成節アドレステー
ブル122のポインタが指す節をソースプログラムエリ
ア113より読み出して、マシン語コードを生成し、エ
リア115へ出力する。節名称テーブル116へ本コー
ドを登録する。
ブロック136:ポインタ125の更新ポインタ125
が次のレコードを指すよう更新する。
ブロック137:終了判定 ポインタ125が指すレコードが無ければ処理を終える
。さもなければブロック133へ進む。
以上の記したように、本システムにおけるコンパイラは
、節の引数のタイプ情報をプログラム中に記されるタイ
プ宣言から読み取り、タイプ判定処理を高速化するマシ
ン語プログラムを生成する。
〔発明の効果〕
本発明によれば、実行前に節の引数のタイプ情報を従来
の定数タイプ、変数タイ”プといった分類より細分して
記憶し、実行時のタイプ判定処理を高速化する。この結
果、節のユニフィケーション処理が高速化し、論理型言
語のプログラム実行速度が向上する効果がある。
【図面の簡単な説明】

Claims (1)

  1. 【特許請求の範囲】 1、計算機システム上に実現される型指定のない変数を
    扱う言語処理系において、プログラム実行時にその変数
    に代入される値の型の範囲を示すタイプ情報を記憶して
    おき、該タイプ情報に基づき、必要なタイプ判定処理だ
    けを選択して実行命令語列を生成することを特徴とする
    計算機言語処理系の実行方式。 2、上記タイプ情報別に、必要なタイプ判定処理を行な
    う命令語列を備え、実行時にタイプ情報に基づいて対応
    する命令語列を選択し、その命令語列を実行することを
    特徴とする第1項の計算機言語処理系の実行方式。
JP61278638A 1986-11-25 1986-11-25 計算機言語処理系の実行方式 Pending JPS63132335A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP61278638A JPS63132335A (ja) 1986-11-25 1986-11-25 計算機言語処理系の実行方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP61278638A JPS63132335A (ja) 1986-11-25 1986-11-25 計算機言語処理系の実行方式

Publications (1)

Publication Number Publication Date
JPS63132335A true JPS63132335A (ja) 1988-06-04

Family

ID=17600065

Family Applications (1)

Application Number Title Priority Date Filing Date
JP61278638A Pending JPS63132335A (ja) 1986-11-25 1986-11-25 計算機言語処理系の実行方式

Country Status (1)

Country Link
JP (1) JPS63132335A (ja)

Similar Documents

Publication Publication Date Title
US7571427B2 (en) Methods for comparing versions of a program
US5790760A (en) Program generating apparatus and method thereof
US11579856B2 (en) Multi-chip compatible compiling method and device
JPS6375835A (ja) 目的コ−ド、プログラム・リスト及び設計文書を生成する装置
US8332833B2 (en) Procedure control descriptor-based code specialization for context sensitive memory disambiguation
JPH06103463B2 (ja) コード生成方法
CN109829313A (zh) 一种基于代码复用编程防御sgx侧信道攻击的方法及装置
CN115017516A (zh) 一种基于符号执行的模糊测试方法
JP3318051B2 (ja) 翻訳処理方法
EP0638862B1 (en) Method and system for processing language
JPS63132335A (ja) 計算機言語処理系の実行方式
JPS5833775A (ja) コンパイル方法
JP2000207226A (ja) コ―ド最適化装置、言語処理装置及びコ―ド最適化方法
JP2827724B2 (ja) プログラムデバッグ処理方法
JP2002073347A (ja) 例外処理方法及びコンパイラ
JP3240647B2 (ja) コンピュータ言語の構造化処理方式
JPH07105014A (ja) 言語処理システムのシンボル処理方式
JP2004139369A (ja) 定数アドレス領域を指示するポインタ解析方法
JP2019012324A (ja) コンパイラ
JPH06175862A (ja) 電子計算機装置
JPS61148536A (ja) 情報処理システム
van Breda Building an LR parser for Pascal using Forth
JPS5846439A (ja) 計算機のプログラム編集方法
Rohl The influence of programming languages on the design of MU5
Adamski et al. Incremental evaluators for ordered macro attribute grammars