JPH034331A - 宣言的に定義された数論的関数処理方式 - Google Patents

宣言的に定義された数論的関数処理方式

Info

Publication number
JPH034331A
JPH034331A JP13951089A JP13951089A JPH034331A JP H034331 A JPH034331 A JP H034331A JP 13951089 A JP13951089 A JP 13951089A JP 13951089 A JP13951089 A JP 13951089A JP H034331 A JPH034331 A JP H034331A
Authority
JP
Japan
Prior art keywords
language
program
processing
function
logic synthesis
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
JP13951089A
Other languages
English (en)
Inventor
Katsushige Hino
克重 日野
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP13951089A priority Critical patent/JPH034331A/ja
Publication of JPH034331A publication Critical patent/JPH034331A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

【発明の詳細な説明】 (概要〕 高レベルのプログラム言語で記述されたプログラムを、
それより低レベルのプログラム言語に翻訳する計算機言
語処理システムにおいて実現される宣言的に定義された
数論的関数処理方式に関し。
数論的関数を宣言的に定義するだけで、それを実行でき
るようにし、ソフトウェアの生産性および信幀性を向上
させる手段を提供することを目的とし。
宣言的に定義された数論的関数を1作業用の関数テーブ
ルを作成する中間命令および関数テーブルのフィールド
を調べる中間命令を含む手続き型プログラムに変換する
論理合成規則を記憶する論理合成規則記憶部と、プログ
ラム言語の翻訳時に。
上記論理合成規則に従って、宣言的に定義された数論的
関数をもとに1手続き型プログラムを自動合成する処理
手段を備えるように構成する。
〔産業上の利用分野〕
本発明は、高レベルのプログラム言語で記述されたプロ
グラムを、それより低レベルのプログラム言語に翻訳す
る計算機言語処理ソステムにおいて実現される宣言的に
定義された放論的関数処理方式に関する。
現在のソフトウェア開発では、計算機指向の言語による
プログラミングが中心的な作業になっているが そのプ
ログラミングのだめの労力がますます膨大化し、開発期
間が長期化する傾向にある。
ソフトウェアの生産性を向上させるために、従来の計算
機指向の言語から離れて、自然な表現が可能であり、し
かも最終的に計算機による実行が可能となる仕様記述言
語の実現が望まれる。
〔従来の技術〕
ソフトウェアを開発するうえで、与えられた問題をその
まま宣言的に(その問題を解くためのアルゴリズムは書
かないで)記述でき、しかもそれが通常の計算機上で実
行できるようになることは。
ソフトウェアの生産性と信頼性の向上に、大きな寄与と
なると考えられる。
従来にも、いわゆるPROLOGやLISPなどの言語
により、その一部を達成してきているがこれらの言語は
1手続き型プログラムとの親和性の点で、熟知者以外に
は、使いこなすことが難しいこともあった。
(発明が解決しようとする課題〕 例えば、自然語に近い構文則を持ち、かつ、動的仕様も
自然に記述できる仕様記述言語のうえで。
政論的関数のようなものの宣言的記述が可能であり、そ
れが実行可能であれば、プログラムの初心者でも、比較
的簡単に、求める解を得ることができると考えられる。
本発明は上記問題点の解決を図り、政論的関数を宣言的
に定義するだけで、それを実行できるようにし、ソフト
ウェアの生産性および信※■性を向上させる手段を提供
することを目的としている。
〔課題を解決するための手段〕
第1図は本発明の構成例を示す。
図中、10は翻訳対象となる高レベル・ソースプログラ
ム、12は論理合成規則を記憶する論理合成規則記憶部
、13は表現変換/論理合成処理部、14は高レベル・
ソースプログラム10について自動合成した結果の論理
合成結果、14−1はテーブル作成中間命令、14−2
はテーブルチェンク中間命令を表す。
本発明で扱う高レベル・ソースプログラムIOでは、政
論的関数を宣言的に定義できるようになっている。政論
的関数の宣言的定義の記述は。
般には1例えば次のような形式になっている。
FORsome、FUNc : f HERE ここで、FUNCは、自然数から自然数への関数の集合
を表し、fは、その集合上を走る変数である。また、A
は、rの宣言的定義であり、Pは。
そうして決まったfを使った何らかの処理を表している
表現変換/論理合成処理部13は、高レベル・ソースプ
ログラム10の宣言的定義を、所定の変換規則に従って
、まず1例えば2分木で表現できるような内部形式を持
つ正規表現に変換する。
この正規表現への変換は1本発明の実施に、必須ではな
いが、ここでは、書き換えのためのパターンマツチング
を容易にするために用いている。
その正規表現は ΣFUNCA  λf(P)    −・−・・(a)
である、Σは、 some、(’ある〜」という意味)
に対応している。λは、fが変数として使われることを
示す論理束縛記号を表している。
論理合成規則記憶部12には、正規表現を、さらに低レ
ベルのプログラムに書き換えるための各種の論理合成規
則が記憶されるが、特に本発明では この論理合成規則
の中に、宣言的に定義された政論的関数を2手続き型プ
ログラムに変換する規則が記憶されるようになっている
表現変換/論理合成処理部13は、上記(a)の正規表
現を、主としてパターンマツチングによる書き換え手法
により1手続き型プログラムに変換する処理を行う。そ
して、その結果を、論理合成結果14として出力する。
論理合成結果14には。
テーブル作成中間命令14−1 (makefunc)
やテーブルチエツク中間命令14−2 (checkd
ef)などが含まれる。
テーブル作成中間命令14−1は、実行により決定した
値を設定するための数値フィールドを持つ放論的関数テ
ーブルを作成する中間命令であり。
テーブルチエツク中間命令14−2は、その関数テーブ
ルのフィールドに、未定義フィールドが残っているかど
うかを調べる中間命令である。
論理合成結果14は、これらの中間命令を含む手続き型
プログラムとなっており、必要に応じてこれらをさらに
目的言語に変換し、目的言語のコンパイルなどを行って
、実行可能なプログラムを生成できるようになっている
〔作用〕
放論的関数の宣言的定義を、関数テーブルを利用して問
題を解く手続き型プログラムに自動合成し それを実行
可能とするため、与えられた問題をそのまま宣言的に記
述するだけで、アルゴリズム等の考慮が不要となる。し
たがって、計算機指向の考え方によるプログラミングは
不要となり。
ソフトウェアの生産性向上および信頼性向上が可能にな
る。
(実施例〕 第2図は本発明を適用するシステムの構成例。
第3図は本発明の一実施例についての全体の処理フロー
、第4図は本発明の一実施例に優る放論的関数処理フロ
ー、第5図は本発明の一実施例による関数テーブルの使
用例を示す。
本発明の実施例に係るプログラム言語を、仮に。
ここでは「言語L」と呼ぶ、以下、この言語りに関する
処理構成を説明する。
言語りのシステム構成とその用法を、第2図に示す。
言語り処理システム21は、仕様記述20からプログラ
ム合成・展開、ならびにその結果導出された目的プログ
ラムの実行までを含むトータルなソフトウェア開発シス
テムである。
言語り処理システム21は、大きく分類すると。
表現変換系22.論理合成系23.目的言語展開系24
.および実行系31の各コンポーネントからなる。言語
しで記述したプログラムをこのシステムに投入すると、
最終的には、目的言語(例えば周知のC言語)で書かれ
たソースプログラムとデータ定義30が自動的に導出さ
れ、さらにコンパイルされることにより、ただちに実行
可能なモジュールが作成される。
各コンポーネントは、それぞれ次のような役割を果たす
■表現変換系22: 言語りで表現されたプログラムを
、主として表現変換規則25を用いて。
内部的表現(言語りの基本側を項とする2分木)に変換
する。また、その逆の変換・を行う。
■論理合成系23: 与えられた二語り表現のプログラ
ムを、接続詞、論理演算詞、論理限定詞。
名詞および形容詞の意味定義に従って論理合成し。
少数の中間命令と構文要素(すなわち中間言語)のみか
らなるプログラムを出力する。
■目的言語展開系24: 論理合成された中間語表現の
プログラムを、特定の目的言語表現のプログラムに展開
する。このとき、そのプログラムが動作するのに必要な
データ定義も自動的に抽出する。
■実行系31: 以上の各コンポーネントを通して出力
された目的言語表現のプログラムをコンパイルし、かつ
実行する。そもそも言語りにおけるシステムの仕様記述
の中には、そのシステムに対して投入されたコマンドの
構文と意味の定義が含まれているので、そのシステムを
実行させるときに改めてコマンドの定義をする必要はな
く、ただちに実行可能である。
なお、これらの各コンポーネントが使う諸規則は、実際
には、言語り処理システム21に内蔵された項書換え系
のもとで1項書換え規則として働く。
言語りでは、基本的に1名詞と形容詞と論理詞と接続詞
を使って仕様を記述する。こういえば分かるとおり、言
語して書くということは、自然語で書くということとほ
ぼ等しい、したがって、自然語でものごとを記述すると
きに特別の記述法がないのと同様に、言語りによる特別
の仕様記述法というものはない。言語りがもつ基本詞を
うまく使って適切に表現するというだけである。強いて
特徴を挙げるとすれば、以下がある。
(1)言語りは、自然語のうちの論理的意味にかかわる
部分だけを抽出した言語である。したがって、仕様記述
言語としては、自然語より、むしろ正確で分かり易い。
(2)言語りは、いわば「語業共有方弐によるソフトウ
ェア開発」を暗黙のうちに強いる。つまり。
°″同じコトバを使ってソフトウェアを開発し、かつ、
同じコトバを使っている限り、プログラム相互のインタ
フェースに食い違いがないことや、それらが全体として
も正しいことが、自動的に保証される°”というソフト
ウェア開発のやりかたが可能になる。
(3)言語りには、動詞はない。これは、言語りがあく
まで論理に基礎をおいた言語であることと関係する。つ
まり、言語りにおいて動的仕様(〜する)は、一種の状
態(〜である)の系列として表現される(しかし、まさ
に「系列(脈絡)」を表現する点で、いわゆる状態遷移
表現とはまったく異なる)。動的仕様の簡単な記述例を
挙げれば。
ある物Xが地点pから地点qに移動するということは、
言語りでは、  ”the、物: x = at−th
e、地点:p悼ihe、物: x = at−the、
地点:q (つまり、「物Xは今、地点pにいて、その
後、地点qにいる」)というように表現する。
(4)言語りにおけるソフトウェアシステム全体の記述
は、そのシステムに対する外界からの刺激(典型的には
、そのシステムに対して投入され得るコマンド)とその
意味(これは与えられた刺激に対してそのシステムがと
るべき反応でもある)とを対応的に定義するという形で
行われる。そして、そのシステムに対して一つの刺激(
コマンド)が与えられると、必ず、そのシステムの中に
一つのプロセスが生成され、そのプロセスがその刺激(
コマンド)に対応する反応を示す(実行する)という実
行形態をとる。
第2図に示す言語り処理システムの全体の処理フローは
、第3図に示すようになる。以下の説明における■〜■
は、第3図に示す処理■〜■に対応する。
■ 仕様記述20として入力した筒易構文を1表現変換
系22により5正規表現に変換する。
■ 次に、論理合成系23による処理によって、論理合
成規則27を操り返し通用し、言語りの正規表現から手
続き型プログラムを自動合成する。
■ 論理合成結果の中間命令および中間構文を用いた手
続き型プログラムを、低レベルのプログラム言語2例え
ば周知のC言語等に展開する。
■ 以下の処理は、従来の既存システムと同様でよく、
目的言語のコンパイル、結合編集などを行い実行可能形
式になったロードモジュールを実行すこの言語り処理シ
ステム21において、特に1本発明は、放論的関数の扱
いに関連しているので、その部分について、詳細に説明
する。他の言語処理システムにおいても2本発明に係る
宣言的に定義された放論的関数についての処理方式を、
同様に適用することができる。
第3図に示す処理■によって自動合成された放論的関数
についての手続き型プログラムは9例えば第4図に示す
処理■〜■を実行するプログラムである。
■ まず1作業用の放論的関数テーブルの領域を確保し
、そのテーブルのフィールドを、すべて未定義(und
ef 1ned)に初期設定する。
■ 宣言的定義の部分(第1図に示す高レベル・ソース
プログラム10において、Aの部分)を実行する。これ
によって、該当するテーブルのフィールド値が決まった
場合には、そのフィールド値の設定が行われる。
■ 関数テーブルでの未定義フィールドの有無を調べる
■ 未定義フィールドがある場合、処理■へ戻って。
同様に処理を繰り返す。
■ 未定義フィールドがなくなったならば、第1図に示
す高レベル・ソースプログラム10におけるPの部分を
処理し、求められた値を返却する。
例えば、よく知られたフィボナッチ関数や、マツカーシ
ーの91関数の値を求めるプログラムは、言語りによる
と1次の(a)、 (b)のように記述することができ
る。
言1↓C,に=配証述 (a)放論的関数= ′フィボナッチ:a′− FORthe、NUMBER:a、some、FIIN
c:ff<a>=answer W!IERE f<0>=1  and f<1>=1  and for all、NUMBER:x f<x+2>=f<x+1>+f<x>Φ)放論的関数
= ′91関数=a′− FORthe、NUMBER:a、some、FUNc
:ff<a>=answer IIERE for  all、NLIMBER:x((x>100
  →  f<x>=x−1)  and(X≦100
 −*   f<x>−fd<x+1b>))上の記述
は、はとんど数学の教科書に出てくるような表現そのも
のであり、アルゴリズムの考慮がまったくいらないもの
になっている。もちろん。
こうした放論的関数のようなものに限らず、言語しにお
ける制約記述は、このようなスタイルで表現される。
上記(a)に述べたフィボナッチ関数は3次のように記
述しても、同じ値を得ることが、できる。
FORsome、  FUNC:f HERE (FORall、NUMBER:x f<x+2>d<x+1>+f<x>)  andf<
0>=1   and f<b=1 FORthe、NUMBER:a f<a>=answer この例のほうが、実行のし方が複雑になるが。
その分だけ詳しい説明ができるので、これを例に手続き
型プログラムへの変換およびその実行を説明する。
(1)この記述は、第1図に示す論理合成規則記憶部1
2における論理合成規則の左辺(正規表現の部分)と、
パターンが一敗する。
Aとして。
(FORall、NuMBER:x f<x+2>d<x+1>+f<x>)  andf<
0>=1  and f<1>=1 をとり。
Pとして。
FORthe、NUMBER:a f<a>=answer をとればよい。
(2)シたがって、第1図に示したような論理合成規則
を適用すれば、このプログラムは1次のように合成(変
形)される。
aakefunc(f) REI’EAT   ω 0 0 (FORall、NUMB[!R:x f<x+2>=f<x+1>+f<x>)  andf
<O>=1   and fd>=1 ND checkdef(f) IF  rtn=I HEN 0 FORthe、NUMB[!R:a f<a>=answer reak ND [!LSE noop END ここで、  ’makefunc(f) Jは、放論的
関数テーブルの領域を確保して、その中の数値フィール
ドをすべて“未定義(undef 1ned) ”に初
期設定し。
確保した領域のアドレスをfに記入する処理を行う中間
命令である。この放論的関数テーブルをFとして、  
rmakefunc(F、f) Jというようにしても
よい。
rl?EPEAT  co  Do  〜END Jは
、無限回、 DOからENDまでの処理を繰り返して実
行することを示す中間構文である。ただし、その中で、
 break文が実行されたときは、その繰り返しを中
断する。
rFORall、NUMBER:x  P Jの形の中
間構文は。
Xの中に値0を記入して、Pを実行し5次にXに値1を
記入して、Pを実行し、さらに、・・・・・・という処
理を5 xの値が特定の値に達するまで繰り返すことを
指示する。ただし、Pの中にbreak文が現れている
場合には、この繰り返しを中断することがある。
r IF−T)IEN−ELSE〜」の機能は、既存の
プログラム言語でも同様な機能があるので、説明するま
でもないであろう。
rcheckdef(f) Jは、fの内容が指す放論
的関数テーブルの数値フィールドが、すべて未定義でな
ければ、復帰コード領域rtnに1を設定し、そうでな
ければ、0を設定する処理を行う中間命令である。
rbreak Jは、当break文を含む最も内側の
REPEAT文またはrFORall、A:x  P 
Jによるループを脱出し、そのループの直後にプログラ
ム実行点を移す中間言語である。
r noop Jは、ノー・オペレーションを示し、何
も行わないで、当noop文の直後の文にプログラム実
行点を移す中間言語である。
(3)以上のプログラムを1手続き型プログラムとして
実行すればよい。
■ まず、 makefunc(f)を実行すると、第
5図(イ)に示すような放論的関数テーブル50ができ
る。図において、→はポインタを表し、?は未定義を表
す何らかの記号である。
■ 次に、 REPEATのループの中に入る。そうし
て。
まず FORall、NIIMBER:x f<x+2>=f<x+b+f<x>)を実行する。し
かし、どの自然数Xについても未定義なので、この命令
の実行が終わっても放論的関数テーブル50の内容は、
全く変わらない。
■ 次に、 f<O>= 1およびf<1>−1が実行
されるであろう。これにより、放論的関数テーブル50
の内容は、第5図(ロ)に示すように変わる。
■ その次には、 checkdef(f)が実行され
るが。
いまだ放論的関数テーブル50には、未定義のフィール
ドがあるので rtn=oとなって その実行が終わる
。したがって、その次にある判定文では、 ELSEの
ルートを走り1結局もう一度REPEATのループの中
が実行されることになる。
■ そうして1再び FORall、NUMBER:x f<x+2>=f<x+1>+f<x>が実行される。
まず、x=Oの場合には、 f<2>d<1>+f<0
>  が実行され、その結果、放論的関数テーブル5゜
の内容は、第5図(ハ)に示すように変わる。
次に、X・1の場合として、 f<3>=f<2>+f
d>が実行され、放論的関数テーブル5oの内容は第5
図(ニ)に示すように変わる。
同様にして、結局。
FORa口、NLI?!BER:x f<x+2>=f<x+1>+f<x>の実行の結果、
放論的関数テーブル5oの内容は、第5図(ホ)に示す
ように、すべてフィールドが定義された状態になる。
■ 次に、再び、 checkdef(F)が実行され
るが今度は、放論的関数テーブル5oには、未定義のフ
ィールドがないので、 ran = 1となってその実
行が終わる。したがって、その次にある判定文では、 
TIIENのルートを走り1 そこでは数論的関数テー
ブル50のa番目のフィールドの内容を、 f<a>の
値として答える処理を行い、かつ、無限繰り返しループ
(REPEAT CD)からの脱出を行う。
実際、このとき、■までの処理の結果、この放論的関数
テーブル50のa番目のフィールドには、フィボナッチ
関数f <a>の値が入っているはずである。
もちろん、フィボナッチ関数に限らず、他の放論的関数
についても、同様に手続き型プログラムに変換して処理
することが可能である。
〔発明の効果〕
以上説明したように1本発明によれば、自然言語に近い
ようなプログラム言語の上で、放論的関数の宣言的記述
が可能になるので、ソフトウェアの生産性の向上および
信頼性の向上に対して、寄与するところが大きい。
第1図は本発明の構成例。
第2図は本発明を適用するシステムの構成例。
第3図は本発明の一実施例についての全体の処理フロー 第4図は本発明の一実施例に係る放論的関数処理フロー 第5図は本発明の一実施例による関数テーブルの使用例
を示す。
図中、10は高レベル・ソースプログラム、12は論理
合成規則記憶部、13は表現変換/論理合成処理部、1
4は論理合成結果、14−1はテーブル作成中間命令、
14−2はテーブルチエツク中間命令を表す。

Claims (1)

  1. 【特許請求の範囲】 高レベルのプログラム言語で記述されたプログラムを、
    それより低レベルのプログラム言語に翻訳する計算機言
    語処理システムにおいて、 宣言的に定義された数論的関数を、作業用の関数テーブ
    ルを作成する中間命令および関数テーブルのフィールド
    を調べる中間命令を含む手続き型プログラムに変換する
    論理合成規則を記憶する論理合成規則記憶部(12)と
    、 プログラム言語の翻訳時に、上記論理合成規則に従って
    、宣言的に定義された数論的関数をもとに、手続き型プ
    ログラムを自動合成する処理手段(13)とを備えてい
    ることを特徴とする宣言的に定義された数論的関数処理
    方式。
JP13951089A 1989-06-01 1989-06-01 宣言的に定義された数論的関数処理方式 Pending JPH034331A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP13951089A JPH034331A (ja) 1989-06-01 1989-06-01 宣言的に定義された数論的関数処理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP13951089A JPH034331A (ja) 1989-06-01 1989-06-01 宣言的に定義された数論的関数処理方式

Publications (1)

Publication Number Publication Date
JPH034331A true JPH034331A (ja) 1991-01-10

Family

ID=15246981

Family Applications (1)

Application Number Title Priority Date Filing Date
JP13951089A Pending JPH034331A (ja) 1989-06-01 1989-06-01 宣言的に定義された数論的関数処理方式

Country Status (1)

Country Link
JP (1) JPH034331A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10915709B2 (en) * 2016-04-28 2021-02-09 Masoud Amri Voice-controlled system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10915709B2 (en) * 2016-04-28 2021-02-09 Masoud Amri Voice-controlled system

Similar Documents

Publication Publication Date Title
US5701487A (en) Method and apparatus for displaying locations of errors detected inside software macro calls
Akin Object-oriented programming via Fortran 90/95
Steingartner et al. Software support for course in semantics of programming languages
Dandamudi Introduction to assembly language programming: from 8086 to Pentium processors
Solter et al. Professional C++
Skansholm Java from the Beginning
JPH034331A (ja) 宣言的に定義された数論的関数処理方式
JP5399601B2 (ja) 実装コード開発システム、及び実装コード開発プログラム
JPH05346332A (ja) 試験プログラム実行方法
Bobrow et al. List processing and extension of language facility by embedding
Koffman et al. Objects, Abstraction, Data Structures and Design: Using C++
Budd C++ for Java Programmers
Motara String diagrams for modelling functional programming
FORM REPOR DOCMENTTIONPAGEREAD IN4STRUCTION4S
Thompson et al. Functional programming through the curriculum
bin Uzayr Mastering C++ Programming Language: A Beginner’s Guide
Pimparkhede Computer programming with C++
Chang et al. Design methodologies for simulation translators (with a case study)
Feldman Edward W. Czeck
Jeffery Build Your Own Programming Language: A programmer's guide to designing compilers, interpreters, and DSLs for solving modern computing problems
Sloman et al. PoPLoo: A MULTILANGUAGE PROGRAM
Blake BLAKE: A language designed for Programming I
Brown SUPERMAC—A macro facility that can be added to existing compilers
McDonald et al. Denotational semantics of a command interpreter and their implementation in Standard ML
Lee VDL—a Definition system for all levels