JPH0535497A - 論理型言語の実現方式 - Google Patents

論理型言語の実現方式

Info

Publication number
JPH0535497A
JPH0535497A JP18597191A JP18597191A JPH0535497A JP H0535497 A JPH0535497 A JP H0535497A JP 18597191 A JP18597191 A JP 18597191A JP 18597191 A JP18597191 A JP 18597191A JP H0535497 A JPH0535497 A JP H0535497A
Authority
JP
Japan
Prior art keywords
predicate
definition
program
divided
clause
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
JP18597191A
Other languages
English (en)
Inventor
Yuji Shimada
裕司 嶋田
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.)
KOBE NIPPON DENKI SOFTWARE KK
NEC Software Kobe Ltd
Original Assignee
KOBE NIPPON DENKI SOFTWARE KK
NEC Software Kobe 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 KOBE NIPPON DENKI SOFTWARE KK, NEC Software Kobe Ltd filed Critical KOBE NIPPON DENKI SOFTWARE KK
Priority to JP18597191A priority Critical patent/JPH0535497A/ja
Publication of JPH0535497A publication Critical patent/JPH0535497A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【構成】述語を分割定義する宣言と述語の部分定義を形
成する原始プログラム13,14を入力とし、prol
ogコンパイラ12により分割定義用の特別な命令を含
む目的プログラム115,116を生成する。prol
ogインタプリタ11は、目的プログラム115,11
6を読み込み、連結構造体113,114を使用してそ
れぞれの分割定義部分を1つの述語に連結し、述語テー
ブル112により管理する。分割定義述語が再帰呼び出
しを含む場合には、コードエントリ118を利用する。
分割定義述語が実行される時には、連結構造体113,
114中に設定された分割定義用命令を実行し、制御ス
タック111、一時変数領域117を使用して分割定義
述語中のカット述語の呼び出し、目的プログラム11
3,114間のバックトラックの動作に対応する。 【効果】上記により、大規模なデータを処理する応用プ
ログラムを容易に作成し、また、保守も容易にできる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、論理型言語の実現に関
し、プロログ(以下、prologと称す)等の論理型
言語を用いて記述された応用プログラムを実行する論理
型言語の実現方式に関する。
【0002】
【従来の技術】従来の技術について図面を参照して説明
する。
【0003】図7,図8は従来例の応用プログラムの形
式およびprologインタプリタ内での述語テーブル
の構造を示す図である。
【0004】図7,8の従来例の論理言語型の実現シス
テムの応用プログラムの形式およびprologインタ
プリタ内での述語テーブルにおいて、prolog処理
系71は、応用プログラム72と、応用プログラム72
の実行制御の管理をするための述語テーブル73とから
成り、応用プログラム72は、応用プログラム72を構
成する規則節74と、それぞれの事実節75,76,7
7とから形成されている。
【0005】ここで、規則節74は親(X,Y)で示さ
れる事実が真であれば先祖(X ,Y)で示される事実
は真であるという規則を示す。
【0006】また、事実節75は、親(太郎、花子)で
示される事実が真であることを示す。このように、pr
olog応用プログラムではいくつかの規則節と事実節
よりプログラムが構成され、その実行制御管理は述語テ
ーブル73の情報によりとり行われる。また、述語テー
ブル73の構成要素として述語名b81、述語の引数個
数b82、述語の定義アドレスb83があり、応用プロ
グラムを構成する個々の述語に関する情報が格納され
る。個々の述語がプログラムとして実行される形式に
は、原始プログラムとして入力され、解釈実行される場
合と、目的プログラムに翻訳したのち、実行される場合
がある。原始プログラムで解釈実行される場合には、実
行速度が遅いが、述語定義の内容の変更は可能であるの
に対し、目的プログラムに翻訳したプログラムの実行
は、高速であるが、述語の定義の変更はできない。
【0007】
【発明が解決しようとする課題】上述したように従来の
論理型言語の実現方式では、目的プログラムを生成する
prologコンパイラに同一の手続きで大量の節を持
つ述語定義を含むプログラムが与えられた場合に、その
コンパイラの限界によっては目的プログラムとして翻訳
が不可能になる場合がある。そのため、プログラムを原
始プログラムの形式で解釈実行した場合には、実行速度
が低下する。
【0008】また、大量にある節をいくつかのファイル
に分割して定義し、コンパイラに与えて目的プログラム
を生成して実行する場合には、述語の内容を分割してそ
れぞれを別の述語として定義し、順次それぞれの述語を
呼び出すように修正しなければならないという問題が生
じる。
【0009】本発明の目的は、論理型言語において、述
語名を変更することなく、1つの述語定義を複数のファ
イルに分割定義することを可能にし、節を大量に持つ述
語を複数のファイルに分割して管理し、目的プログラム
として実行することにより、上記の欠点を除去し、大規
模なデータを処理する応用プログラムを容易に作成し、
また、保守も容易にできる論理型言語の実現方式を提供
することにある。
【0010】
【課題を解決するための手段】本発明の論理型言語の実
現方式は、述語型の事実節と規則節を用いた応用プログ
ラムを作成、実行する論理型言語の実現方式において、
述語型の事実節と規則節から構成される1つの述語の定
義を複数のファイルに分割して定義する際に、述語の定
義が複数のファイルに分割されていることを指示する宣
言部と応用プログラムの動作を定義する述語定義部とか
ら構成されるプログラム形式を持つ応用プログラムが原
始プログラムとして指定された場合には、宣言部で指定
された述語に対応する述語定義部の事実節並びに規則節
のコード生成時に指定された述語を分割して定義するた
めの特別な命令列を生成し、目的プログラムを作成し、
作成された目的プログラムを入力する際に同じ述語を構
成する別の目的プログラムと結合し、分割した述語のた
めの特別な命令を設定し、分割した述語の呼び出し時に
特別な命令を実行している。
【0011】
【実施例】まず、以下に本発明を実施する場合の動作の
概要を以下に述べる。
【0012】論理型言語のプログラムにおいて、述語を
分割定義するためには、述語の定義に先だって指定する
述語の定義が複数のファイルに分割されていることを宣
言する。コンパイラは、当該宣言を読み込んだ時に、述
語が分割定義であることを認識する。そして、述語定義
部を読み込んだあと、分割定義述語に対して専用の命令
列を生成し、目的プログラムを生成する。分割定義述語
を含む目的プログラムがprologインタプリタに読
み込まれる際には、インタプリタ内の述語テーブルを参
照し、既に読み込まれている同一述語の他の分割定義部
分と結合する。分割定義述語の実行時には、専用の制御
命令を実行し、カット、バックトラックの動作に対応す
る。
【0013】次に、本発明の実施例について図面を参照
して説明する。
【0014】図1は本発明に一実施例の論理型言語の実
現方式の処理方法を示す構成図である。
【0015】図1において、本実施例の処理方法は、p
rologインタプリタ11と、prologコンパイ
ラ12と、分割定義した原始プログラム13,14とか
ら構成されており、prologインタプリタ11は、
プログラムの実行制御の情報を保持する制御スタック1
11と、述語テーブル112と、分割定義した述語の目
的プログラムを1つの述語として実行するための連結構
造体113,114と、目的プログラム115,116
と、分割定義述語の実行に使用する一時変数領域117
と、分割定義述語での再帰呼び出しに使用するコードエ
ントリ118とから構成されている。
【0016】図1では、prologコンパイラ12に
より原始プログラム13,14を目的プログラム11
5,116に翻訳し、目的プログラム115,116を
prologインタプリタ11内に読み込んだことを示
している。
【0017】図2は本実施例の分割定義を行うために原
始プログラムが持つ形式の一例を示す図である。
【0018】この図2は、図1の原始プログラム13,
14の形式に該当しており、指定する述語が分割定義す
る述語であることを示す宣言部21と、その述語を含む
述語定義部22を示している。
【0019】図3は本実施例の分割定義した述語の定義
の一例を示す図である。
【0020】図3は、原始プログラム13の内容を示し
たもので、宣言部21の分割定義の宣言36、述語定義
部22を構成する節31,32,33,34,35から
成る。
【0021】節31は、述語呼び出しq/1が成功すれ
ば、述語全体の候補節を削除する機能を持つカット述語
!を含む。節32、33は、節31の実行に失敗したと
きの代替節である。
【0022】図4は本実施例の分割定義述語を取り扱う
prologインタプリタの持つ述語テーブルの一例を
示す図である。
【0023】そして、本述語テーブル112は、述語名
a41と、述語の引数個数a42と、述語の定義アドレ
スa43と、分割定義述語であるかどうかを示すマーク
44との関係を示している。
【0024】図5は本実施例のprologコンパイラ
12で生成した目的プログラムをprologインタプ
リタ11内に読み込んだときの状態の一例を示す図であ
る。
【0025】図5において、述語テーブル112中のp
/1述語の情報としてマーク44が分割定義述語である
ことを示し、述語定義アドレス43の内容として連結構
造体113の格納位置を示している。連結構造体113
は、情報として目的プログラム115、命令mtry5
1、次の連結構造体114へのポインタを保持する。連
結構造体114は、目的プログラム116、命令mtr
ust52を保持している。また、コードエントリ11
8は、分割定義した述語の先頭を保持する連結構造体1
13へのポインタを持つ。
【0026】図6は本実施例の分割定義述語の実行制御
の一例を示す図である。
【0027】図6において、各選択点は、分割定義述語
の実行前に存在する最新の選択点610と、連結構造体
113の保持する命令mtry51が作成する選択点6
11と、目的プログラム115の実行中に作成する選択
点612とがある。そして、連結構造体114は、命令
mtrust52、目的プログラム116を保持する。
【0028】次に、その動作について説明する。
【0029】prologコンパイラ12が原始プログ
ラム13,14を翻訳し、目的プログラムを生成する際
に、述語が分割定義であることを指定する宣言部21を
読み込み、宣言で指定した述語を分割定義述語として認
識する。そして、述語定義部22を読み込み、目的プロ
グラム115,116を生成する。目的プログラムを生
成する際に、宣言部21で指定した述語に対しては、分
割定義述語実行直前の選択点の情報を破壊しないように
情報の記憶領域として一時変数領域117を割当られる
命令列が生成される。例えば、図3のプログラム中の述
語p/1の節31は本体部にカット述語!を含む。当該
カット述語を分割定義述語の中で実行する場合には、述
語p/1の定義に対する候補節をすべて消去するため
に、p/1述語実行直前の選択点の情報が必要となる。
この選択点の情報は、p/1述語の実行開始前に一時変
数領域117に保存し、カット述語実行時に参照する。
p/1述語の翻訳時には、この一時変数領域117を使
用予約済みの変数として目的コードを生成する。
【0030】次に、prologコンパイラ12によっ
て生成された目的プログラム115,116をprol
ogインタプリタ11内に入力する時の動作について図
4、図5を参照して説明する。
【0031】まず、目的プログラム115を入力する場
合には、述語テーブル112内に述語名a41、述語の
引数個数a42を登録し、述語が分割定義の述語である
場合、分割定義を示すマーク44を設定し、述語に対応
する連結構造体113を作成する。読み込んだ目的プロ
グラム115は連結構造体113によって保持する。ま
た、連結構造体113は、述語定義に関するコードエン
トリ118と述語テーブル112中の述語定義位置を述
語の定義アドレスa43によって指し示す。そして、連
結講造体113中に分割定義述語の専用命令として実行
制御命令の命令mtry51を設定する。
【0032】次に、目的プログラム116を入力する場
合の説明を行う。
【0033】述語テーブル112中のマーク44を参照
すると、p/1が分割定義述語であることがわかるた
め、先の目的プログラム115の入力時と同様に連結構
造体114を作成し、目的プログラム116を保持す
る。当該分割定義述語は既に1部分読み込まれているた
め、連結構造体114は連結構造体113の後続部分と
して連結する。そして、連結構造体114中に実行制御
命令として命令mtrust52を設定する。もし、目
的プログラム116中に再帰呼び出しを行う目的コード
が存在する場合には、目的プログラム116よりコード
エントリ118へのポインタを設定する。
【0034】次に、分割定義述語の実行制御について図
6を参照して述べる。
【0035】述語p/1を実行する場合には、述語テー
ブル112内のマーク44によって述語が分割定義述語
であることが判別できる。
【0036】次に、述語テーブル112の述語定義位置
を述語の定義アドレスa43が示す連結構造体113内
の実行制御命令の命令mtry51を実行する。
【0037】命令mtry令51は、現在時点での選択
点610を一時変数領域117に保存し、後続の連結構
造体があるかどうかを判別する。後続が存在する場合に
は、選択点611を制御スタック11上に生成する。そ
して、生成した選択点にその候補節として後続の連結構
造体114へのポインタを設定する。その後、目的プロ
グラム115に実行制御を移す。
【0038】目的プログラム115内では、述語p/1
は3つの節を保持している。
【0039】そのため、節31を実行する前に選択点6
12を制御スタック11上に作成し、目的プログラム1
15の実行に入る。節31の本体部の実行でカット述語
を実行する場合には、先に一時変数領域117に保存し
た選択点610が保持する情報を使用して制御スタック
11から選択点の削除を行う。図6の場合には、目的プ
ログラム115実行中に作成した選択点612、目的プ
ログラム116内のp/1述語への選択点611を削除
する。節31のカット述語を実行する前にバックトラッ
クが生じた場合には、実行制御は節32に移行する。も
し、節32、節33の実行に失敗した場合には、選択点
612を削除したのち、バックトラック処理を行う。こ
のとき、バックトラック処理で参照する選択点は、先に
命令mtry51中で作成した選択点611である。選
択点611には、その候補節として連結構造体114へ
のポインタが設定されているため、そのポインタの先に
実行制御を移す。そして、連結構造体114の持つ分割
述語実行制御命令の命令mtrust52の実行を行
う。命令mtrust52は、命令mtry51で作成
した選択点611を制御スタック11より削除し、その
後の最新の選択点610を一時変数領域117に保存し
たのち、目的プログラム116に制御を移す。目的プロ
グラム116内でバックトラックが生じた場合には、選
択点610に基づき実行制御を行う。
【0040】以上述べたように、複数のファイルに分割
して定義した同名、同一引数個数の述語を目的プログラ
ムの形式で1つの述語として取り扱い、従来のように修
正を行わずに、プログラムを高速に実行する。
【0041】
【発明の効果】以上説明したように、本発明の論理型言
語の実現方式は、論理型言語において、述語名を変更す
ることなく、1つの述語定義を複数のファイルに分割定
義することを可能にし、節を大量に持つ述語を複数のフ
ァイルに分割し、管理して目的プログラムとして実行す
ることにより、大規模なデータを処理する応用プログラ
ムを容易に作成し、また、保守も容易にできるという効
果がある。
【図面の簡単な説明】
【図1】本発明に一実施例の論理型言語の実現方式の処
理方法を示す構成図である。
【図2】本実施例の分割定義を行うために原始プログラ
ムが持つ形式の一例を示す図である。
【図3】本実施例の分割定義した述語の定義の一例を示
す図である。
【図4】本実施例の分割定義述語を取り扱うprolo
gインタプリタの持つ述語テーブルの一例を示す図であ
る。
【図5】本実施例のprologコンパイラ12で生成
した目的プログラムをprologインタプリタ11内
に読み込んだときの状態の一例を示す図である。
【図6】本実施例の分割定義述語の実行制御の一例を示
す図である。
【図7】従来例の応用プログラムの形式およびprol
ogインタプリタ内での述語テーブルの構造を示す図で
ある。
【図8】従来例の応用プログラムの形式およびprol
ogインタプリタ内での述語テーブルの構造を示す図で
ある。
【符号の説明】
11 prologインタプリタ 12 prologコンパイラ 13,14 原始プログラム 21 宣言部 22 述語定義部 31,32,33,34,35 節 36 宣言 41 述語名a 42 述語の引数個数a 43 述語の定義アドレスa 44 マーク 51 命令mtry 52 命令mtrust 71 prolog処理系 72 応用プログラム 73 述語テーブル 74 規則節 75,76,77 事実節 81 述語名b 82 述語の引数個数b 83 述語の定義アドレスb 111 制御スタック 112 述語テーブル 113,114 連結構造体 115,116 目的プログラム 117 一時変数領域 118 コードエントリ 610,611,612 選択点

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 述語型の事実節と規則節を用いた応用プ
    ログラムを作成、実行する論理型言語の実現方式におい
    て、前記述語型の事実節と規則節から構成される1つの
    述語の定義を複数のファイルに分割して定義する際に、
    前記述語の定義が複数のファイルに分割されていること
    を指示する宣言部と応用プログラムの動作を定義する述
    語定義部とから構成されるプログラム形式を持つ応用プ
    ログラムが原始プログラムとして指定された場合には、
    前記宣言部で指定された述語に対応する前記述語定義部
    の事実節並びに規則節のコード生成時に前記指定された
    述語を分割して定義するための特別な命令列を生成し、
    目的プログラムを作成し、前記作成された目的プログラ
    ムを入力する際に同じ述語を構成する別の目的プログラ
    ムと結合し、前記分割した述語のための特別な命令を設
    定し、前記分割した述語の呼び出し時に前記特別な命令
    を実行することを特徴とする論理型言語の実現方式。
JP18597191A 1991-07-25 1991-07-25 論理型言語の実現方式 Pending JPH0535497A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP18597191A JPH0535497A (ja) 1991-07-25 1991-07-25 論理型言語の実現方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP18597191A JPH0535497A (ja) 1991-07-25 1991-07-25 論理型言語の実現方式

Publications (1)

Publication Number Publication Date
JPH0535497A true JPH0535497A (ja) 1993-02-12

Family

ID=16180085

Family Applications (1)

Application Number Title Priority Date Filing Date
JP18597191A Pending JPH0535497A (ja) 1991-07-25 1991-07-25 論理型言語の実現方式

Country Status (1)

Country Link
JP (1) JPH0535497A (ja)

Similar Documents

Publication Publication Date Title
US5249275A (en) Apparatus and method enabling a compiled program to exactly recreate its source code
JPS6375835A (ja) 目的コ−ド、プログラム・リスト及び設計文書を生成する装置
JP5147240B2 (ja) リバーシブルなデザイン・ツリーの変換のための方法とシステム
JP3318051B2 (ja) 翻訳処理方法
JPH0277841A (ja) 論理型言語におけるバックトラック処理方式
JPH0535497A (ja) 論理型言語の実現方式
Barnard et al. Hierarchic syntax error repair for LR grammars
US6742164B1 (en) Method, system, and program for generating a deterministic table to determine boundaries between characters
JP2765911B2 (ja) データ駆動型制御方法およびコンパイル装置
JP2607975B2 (ja) デバック方式
JPS5846439A (ja) 計算機のプログラム編集方法
JP3240647B2 (ja) コンピュータ言語の構造化処理方式
JPS63132335A (ja) 計算機言語処理系の実行方式
JPH02308355A (ja) インタプリタにおける入力手続き管理方式
JPH0690669B2 (ja) 文字列操作系命令コンパイル処理方式
JPH06100971B2 (ja) 翻訳処理方式
JPH06175862A (ja) 電子計算機装置
JPH04101226A (ja) インタープリタ型言語処理方式
JPS63156254A (ja) インタプリタにおける中間テキストの管理方法
JPH01111236A (ja) 計算機
JP2000148501A (ja) グラフ構造データを用いた論理型言語処理系の実現方法及びコンピュータ制御プログラムを格納した記憶媒体
JPS61206041A (ja) プログラム言語の拡張方法
JPH0731601B2 (ja) 情報処理装置
JPH05282138A (ja) ドキュメンタの文書生成方法
JPH06119203A (ja) デバック行削除装置