JPH04152486A - データフローグラフ展開方式 - Google Patents

データフローグラフ展開方式

Info

Publication number
JPH04152486A
JPH04152486A JP27818590A JP27818590A JPH04152486A JP H04152486 A JPH04152486 A JP H04152486A JP 27818590 A JP27818590 A JP 27818590A JP 27818590 A JP27818590 A JP 27818590A JP H04152486 A JPH04152486 A JP H04152486A
Authority
JP
Japan
Prior art keywords
stack
node
data flow
operator
syntax tree
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
JP27818590A
Other languages
English (en)
Inventor
Akimichi Kiyo
許 昭倫
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP27818590A priority Critical patent/JPH04152486A/ja
Publication of JPH04152486A publication Critical patent/JPH04152486A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、数式を含むプログラムを、データフローコン
ピュータ上で実行させるために必要となるデータフロー
グラフへ展開するためのデータフローグラフ展開方式に
間するものである。
〔従来の技術〕
従来の数式をデータフローグラフに変換する手法として
、情報処理学会主催並列処理シンポジウムJSPP’ 
89講演論文集227頁〜233頁に見られるように、
演算子テーブルと識別子テーブルの二つの作業テーブル
を用いる方法があった。
演算子テーブルは第10図(a)に示すように、その一
つの項目が数式内に存在する一つの演算子に対応する。
各項目にはプライオリティ(91) 、演算子(92)
 、識別子番号1 (93) 、識別子番号2(94)
 、完了フラグ(95)の計5つのフィールドがある。
また識別子テーブルは、第10図ら)に示すように、数
式内に出現した各々の異なった識別子に対し、識別子番
号(96) 、獲得フラグ(97)の2つのフィールド
を持つ。
a=bXcXdXe+f/ (8−h);   (1)
第11図は、(1)式に示されるある簡単な数式の一例
に対するデータフローグラフである。第11図では、(
1)式の数式の作成段階が示されている。すなわち、a
(1)は、b(2)x c(3) (ステップ103)
、d(4)x e (5) (ステップ105)、b(
2)X c(3)X d(4)X e(5)(ステップ
205)、一方、g(7)xh(8)(ステップ108
)、f (6)/ (g(7) −h(8))  (ス
テップ208)、そして、b(2)x c(3)x d
(4)x e(5)+ f (6)/ (g(7)h(
8))(ステップ308)となる。
従来法によって上記の(1)の数式から第11図のデー
タフローグラフを生成する方法を第12図を参照しなが
ら説明する。
第12図は、従来の数式からデータフローグラフへ変換
する手続きを表している。これにより、式中の演算子と
識別子がそれぞれ出現類に演算子テーブル、識別子テー
ブルに登録される(ステップ121、122)。演算子
のプライオリティは各演算子に固有のものと、括弧によ
るものを併せて決定し、プライオリティを演算子テーブ
ルのプライオリティ(91)に記入する(ステップ12
3)。
次に演算子テーブルの完了フラグ(95)がOのものの
中から、プライオリティの高いもの、あるいは同一プラ
イオリティならテーブル内の並びの順にその回に処理す
べき演算子を決定しくステップ124)、式に対する構
文木からその演算子のオペランドに対応する識別子を調
べる(ステップ125)。
そして、その識別子の識別子番号を識別子チーフルより
獲得し、演算子テーブルの識別子番号1゜2 (93,
94)に設定した後、完了フラグを2とする(ステップ
126)。
同時に、識別子テーブル内での対応する識別子に対し、
テーブル内で先に出現する方の獲得フラグを−1、他方
の獲得フラグを0にする(ステップ127)、次に、前
記獲得フラグがOとなった識別子に対し、その識別子番
号に(filooを加算し、新しい識別子番号とする(
ステップ12B)、こうした処理を演算子テーブル内の
全ての完了フラグが2となるまで繰り返し行う。
第12図で示す処理方法にしたがって、第10図の数式
を処理した場合の、処理前と処理後の演算子テーブル、
識別子テーブルをそれぞれ第13図(a)〜(イ)に示
す。(a)、(ハ)は、データ処理前の演算子テーブル
、1!i別子テーブルであり、(C)、 (d)は、デ
ータ処理後の演算子テーブル、識別子テーブルである。
こうして得られた両テーブルをもとに、識別子番号をデ
ータフローグラフにおけるリンク塩として使用し、識別
子番号の値の小さいものから順に両テーブルの内容をデ
ータフローグラフに書き直すと、第11図のデータフロ
ーグラフが得られる。
〔発明が解決しようとする課題〕
上述した従来法による数式のデータフローグラフへの展
開は、構文木とともに二つの作業テーブルを使用してお
り、そのためのメモリの使用量は構文木の約2倍程度と
なる。したがって、処理すべき数式が長い場合、従来法
ではメモリ使用量が大きくなるのが欠点である。また、
従来法は二つの作業テーブルを作成するフェーズと、作
業テーブルを辿りながらデータフローグラフを生成する
フェーズとからなり、2パスの処理となっている。
そのため、数式のデータフローグラフへの展開手法とし
ては高速性に欠けることも欠点の一つである。
本発明の目的は、上記欠点を解消し、従来法のような作
業テーブルを使わない代わりに、2つの数ワード程度の
大きさのソフトウェア・スタックを使用し、それによっ
て1パスの処理で数式をデータフローグラフに展開する
ことを目的としている。
〔課題を解決するための手段〕
本発明は、数式を含むプログラムを、データフローグラ
フに変換するデータフローグラフ展開方式であって、 第1及び第2のスタックを用い、プログラム内に存在す
る数式の構文木の根を前記第1のスタックにプッシュす
ることにより処理をスタートし、前記構文木を辿りなが
ら、前記第1のスタックより構文木の演算節をホップす
る処理と、ホップされた前記演算節が代入演算子の節か
または単項演算子の節か、さらには2項演算子の節かに
より分岐を行う処理と、 分岐後では前記演算節の枝に出現した他の演算節を前記
第1のスタックにプッシュする処理と、前記データフロ
ーグラフ内のノードに対する入力リンクを生成すると同
時に、前記第2のスタックに入力リンクをプッシュする
処理と、前記データフローグラフ内のノードに対する出
力リンクを生成するために、前記第2のスタックから前
記出力リンクをホップする処理と、前記第1のスタック
が空となったかどうかをチェックし、処理を繰り返すか
または終了させるかを判断する処理とを含み、 処理の終了と同時に、前記数式のデータフローグラフへ
の展開が完了することを特徴とする。
〔作用〕
この発明に係るデータフローグラフ展開方式は、数式を
含むプログラムをデータフローグラフに変換するコンパ
イラにおいて、 メモリ上の二つのソフトウェア・スタックを用い、プロ
グラム内に存在する数式の構文木の根を第1のスタック
にプッシュすることにより処理をスタートし、以後、構
文木を辿りながら、第1のスタックより構文木の節をホ
ップする処理と、ホップされた演算節が代入演算子の節
か、単項演算子の節か、さらには2項演算子の節かによ
って分岐を行う処理と、分岐後では演算節の枝に出現し
た他の演算節を第1のスタックにプッシュする処理と、
データフローグラフ内のノードに対する入力リンクを生
成すると同時に第2のスタックにその入力リンクをプッ
シュする処理と、データフローグラフ内のノードに対す
る出力リンクを生成するために第2のスタックよりその
出力リンクをホップする処理と、第1のスタックが空と
なったかどうかをチェックし、それにより以上の処理を
繰り返すか終了させるかを判断する処理とを行い、処理
の終了と同時に前記数式のデータフローグラフへの展開
が完了する。
〔実施例〕
次に、本発明の一実施例について図面を参照して詳細に
説明する。
第5図は、本発明の一実施例を示すデータフローグラフ
展開方式で使用するノードスタック11とリンクスタッ
ク12の二つのスタックを示す図である。第6図は、第
11図の数式の構文木の図による表現であり、それに対
し第7図は、第6図を表で表現した構文表であり、構文
木の各ノードが、構文表での1項目に相当する。第3図
の構文表では、構文木の各ノードがノード番号の領域3
1と、演算子の領域32と、方杖の領域33と、右枝の
領域34との計4つのフィールドで表現されており、大
技と右枝における番号はそれぞれノード番号を示してい
る。
第1図は、本実施例のデータフローグラフ展開方式を表
すフローチャート図である。このフローチャート図につ
いて説明すると、ステップ411では、構文表の最後の
ノードをノードスタックにプッシュする。つまり、第7
図の場合ではノード番号7のノードがそれに相当する。
ステップ412では、ノードスタックよりノードを一つ
ホップし、それに対しステップ413以降の処理を施す
。ステップ413以降ではホップされたノードの演算子
の種類によって実行内容が異なる。ステップ414では
、ステップ415かステップ417か、またはステップ
419のいずれかを実行した結果、ノードスタックが空
になったかどうかを検出し、空であれば実行を終了し、
空でなければ再びステップ412に戻り、ステップ41
2以降の実行を繰り返す。
ここで、ステップ413では、ノードが代入演算子かど
うかを判断し、代入演算子の場合(YES)では第2図
のフローチャートに進み、代入演算子でない場合(NO
)ではステップ416に進む。ステップ416では、ノ
ードが単項演算ノードか否かを判断し、単項演算ノード
であるとき(YES)では第3図のフローチャートに進
み、単項演算ノードでない場合(NO)ではステップ4
18に進む。また、ステップ418では、ノードが第2
項か否かを判断し、第2項である場合は第4図のフロー
チャートに進み、第2項でない場合はエラーとなる。
第2図、第3図、第7図では、それぞれステップ415
、ステップ417、ステップ419の内容の詳細を示し
ている。ノードは、それが代入演算子ノードか、単項演
算子ノードかあるいは2項演算子ノードかによってステ
ップ413、ステップ416、ステップ418でそれぞ
れ処理が分岐する。
第2図は代入演算子ノードの場合の処理を示すフローチ
ャートである。第4図のステップ413から進み、ステ
ップ511においてノードの方杖が識別子であればステ
ップ512に進み(YES)、そうでなければ(NO)
エラーとなる。ステップ512では識別子の識別子番号
をリンク塩として生成し、それを、生成されるべきデー
タフローグラフを格納するためのメモリ領域であるグラ
フメモリに出力する。すなわちグラフメモリの内容は、
そのまま本発明で生成するデータフローグラフに相当す
る。
第8図に、グラフメモリのフォーマットの一例を示す。
すなわち、出力リンク数80と、出力リンク塩81と、
演算コード82と、入力リンク数83と、入力リンク塩
84とから成る。続いてステップ513において代入演
算子自身を示すコードを生成しグラフメモリに出力する
次に、ステップ514において、ノードの右枝が識別子
であればステップ515へ進み(YES)、その識別子
番号をリンク塩として入力リンクを生成しグラフメモリ
に出力した後、ステップ516において、リンクをリン
クスタックにプッシュ後、実行を終了させる。
ステップ514においてノードの右技が識別子ではなく
ノードであれば、ステップ517へ進む。
一方、ステップ517では、ノードをノードスタックに
プッシュした後にステップ518に進み、ステップ51
8ではシステム番号をリンク塩として入力リンクを生成
しグラフメモリに出力した後、ステップ519において
システム番号を1だけインクリメントした後、ステップ
516においてリンクをリンクスタックにプッシュし実
行を終了する。
なお、システム番号とは、識別子番号より必ず大きくな
るような番号(例えば100など)から始まる番号であ
り、本実施例ではその番号をデータフローグラフにおけ
る識別子リンク以外のリンクのリンク塩に使用する。
第3図は単項演算子ノード、第4図は2項演算子ノード
の場合の処理を示すフローチャートである。なお、第2
図、第3図及び第4図において実線及び点線で囲まれた
部分は、その処理内容がほとんど同様であることを示し
ている。
第3図について説明すると、第1図のステップ416か
らステップ611に進み、ステップ611においてリン
クスタックよりリンクを1本だけホップし、ステップ6
12において出力リンクとしてグラフメモリに出力する
次に、ステップ613ではノードの演算子に対応した演
算子コードをグラフメモリに出力する。ステップ614
において、次にノードの方杖が識別子かどうかにより処
理が分岐する。ノードの方杖が識別子の場合(YES)
、処理はステップ615に進み、ステップ615では、
識別子の識別子番号をリンク塩として入力リンクを生成
しグラフメモリに出力した後、ステップ616において
リンクをリンクスタックにプッシュした後、実行を終了
させる。
ステップ615においてノードの方杖が識別子ではなく
ノードを指している場合、処理はステップ617に進む
一方、ステップ617ではノードをノードスタックにプ
ッシュした後にステップ618に進み、ステップ618
ではシステム番号をリンク塩として入力リンクを生成し
、グラフメモリに出力した後ステップ619においてシ
ステム番号を1だけインクリメントした後、ステップ6
16においてリンクをリンクスタックにプッシュした後
、実行を終了する。
第7図では、ステップ621〜629までは、第6図の
ステップ611〜619と同様の処理である。ステップ
634〜639までの処理は、ステップ634での処理
が、第6図におけるステップ614での処理を、ノード
の大技の代わりに右枝に対し行うように変更したのを除
けば、第3図でのステップ614〜619と同様の処理
である。
次に、本実施例の上述の(1)式で示した数式に対する
例を説明する。第7図の構文表のノード番号7が、第1
図に従いノードスタックにプッシュされた後(ステップ
411)、ホップされる(ステップ412)。演算子が
代入演算子「=」であるため、処理が分岐する(ステッ
プ413.415)。
その後、第2図に示した処理に移るが、ノードの方杖が
識別子であるため、識別子番号を元に作られた出力リン
クがグラフメモリに出力され、また、演算子に対応する
コードもグラフメモリに出力される(ステップ511〜
513)。そしてノードの右技が、ノード6を指してい
るため処理の分岐が起こり(ステップ514)、ノード
番号6自体を第7図の構文表から読み出し、ノードスタ
ックにプッシュした後(ステップ517)、システム番
号を参照し入力リンクをグラフメモリに出力しくステッ
プ518)、かつシステム番号をインクリメントする(
ステップ519)、さらにそれをリンクスタックにプッ
シュする(ステップ516)。
その後、処理は、第1図に戻り、ノードスタックが空に
なったかどうかがチェックされ(ステップ414)、ノ
ード番号6がノードスタック上に存在しているので、再
び、ノードスタックよりホップしくステップ412)、
処理を繰り返す。
今度は、ノード6番号が2項演算ノードなので、第3図
の処理に移る(ステップ416)。第3図では、リンク
スタックより先に(ステップ517で)プッシュされた
リンクをホップし、それを今回の出力リンクとして使用
しくステップ621〜622)、そして演算子コードを
生成(ステップ623)する。その後、ステップ624
〜639.636まで処理が進み、最終的にはリンクス
タックにリンクを2本残す。
また、ノードスタックにノードを2つ(ノード番号5と
ノード番号3)残したまま、再び、第1図のステップ4
12に戻り、そしてノードスタックのトップにあるノー
ド番号3をホップしくステップ412)、処理を繰り返
す。
結果的にはこの実施例の対象である上述の(1)式の数
式内に存在する演算子の個数だけ第1図でのステップ4
12〜414が繰り返される。この実施例によって最終
的にグラフメモリ内に得られるデータフローグラフを第
8図に示す。
このように本発明のデータフローグラフ展開方式では、
展開の対象である数式から得られた構文木に対し、二つ
のスタックを利用することで構文木を辿りながらデータ
フローグラフを生成していくため、1バスの処理でデー
タフローグラフを生成できる。
また、本発明によるデータフローグラフ展開方式で必要
となる2つのスタックの大きさは、構文木が2本の枝を
持つことから、最悪の場合構文木の一段に対し、ノード
スタック(11)及びリンクスタック(12)にそれぞ
れ一つのノード及び一つのリンクがプッシュされていく
ので、数式内に含まれる演算子の数をnとすれば、本発
明で使用される2つのスタックによるメモリ使用量は、
リンク塩及びノードがそれぞれ1ワードで表現されてい
るとすると、最悪でもそれぞれlogz(n)ワードで
充分である。これにより、従来法と比べれば本実施例の
メモリの使用量はかなり少ないことがわかる。
さらに、第2図、第3図、第4図に示した本実施例にお
ける処理のフローチャートでは、それぞれ実線及び点線
で囲まれた部分が共通しているので、処理のアルゴリズ
ムが簡単であることがわかる。
〔発明の効果〕
以上詳細に説明したように本発明は、かなり長い数式の
場合であっても、それをデータフローグラフに展開する
際に必要となるメモリ量は数ワード程度となり、従来法
と比べるとメモリの使用量がかなり減少される効果があ
る。また、本発明により1パスの処理で数式をデータフ
ローグラフに展開でき、従来法が2バスの処理を必要と
したのに比べ処理が高速化される効果もある。
【図面の簡単な説明】
第1図〜第4図は、本発明の一実施例を示すフローチャ
ート図、 第5図は、本実施例で使用される2つのスタックの図、 第6図は、本実施例における数式に対する構文木を図で
示したもの、 第7図は、第6図の構文木を表で示したもの、第8図は
、グラフメモリのフォーマット図、第9図は、本実施例
によるデータフローグラフ図、 第10図(a)、 (b)は、従来法において使用され
る二つの作業用テーブルのフォーマット図と従来法及び
本実施例の対象として使用した数式例、第11図は、従
来の技術を数式について実施した場合に得られるデータ
フローグラフ、 第12図は、従来の技術の一例を示すフローチャート図
、 第13図は、従来の技術を既述の数式に実施した場合の
、実施前と実施後それぞれの2つの作業テーブルの内容
をそれぞれ示している。 11・・・・・ノードスタック 12・・・・・リンクスタック

Claims (1)

    【特許請求の範囲】
  1. (1)数式を含むプログラムを、データフローグラフに
    変換するデータフローグラフ展開方式であって、 第1及び第2のスタックを用い、プログラム内に存在す
    る数式の構文木の根を前記第1のスタックにプッシュす
    ることにより処理をスタートし、前記構文木を辿りなが
    ら、前記第1のスタックより構文木の演算節をホップす
    る処理と、 ホップされた前記演算節が代入演算子の節かまたは単項
    演算子の節か、さらには2項演算子の節かにより分岐を
    行う処理と、 分岐後では前記演算節の枝に出現した他の演算節を前記
    第1のスタックにプッシュする処理と、前記データフロ
    ーグラフ内のノードに対する入力リンクを生成すると同
    時に、前記第2のスタックに入力リンクをプッシュする
    処理と、 前記データフローグラフ内のノードに対する出力リンク
    を生成するために、前記第2のスタックから前記出力リ
    ンクをホップする処理と、 前記第1のスタックが空となったかどうかをチェックし
    、処理を繰り返すかまたは終了させるかを判断する処理
    とを含み、 処理の終了と同時に、前記数式のデータフローグラフへ
    の展開が完了することを特徴とするデータフローグラフ
    展開方式。
JP27818590A 1990-10-17 1990-10-17 データフローグラフ展開方式 Pending JPH04152486A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP27818590A JPH04152486A (ja) 1990-10-17 1990-10-17 データフローグラフ展開方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP27818590A JPH04152486A (ja) 1990-10-17 1990-10-17 データフローグラフ展開方式

Publications (1)

Publication Number Publication Date
JPH04152486A true JPH04152486A (ja) 1992-05-26

Family

ID=17593774

Family Applications (1)

Application Number Title Priority Date Filing Date
JP27818590A Pending JPH04152486A (ja) 1990-10-17 1990-10-17 データフローグラフ展開方式

Country Status (1)

Country Link
JP (1) JPH04152486A (ja)

Similar Documents

Publication Publication Date Title
Page et al. A practical implementation of the factoring theorem for network reliability
US5671416A (en) Apparatus and a method for searching and modifying source code of a computer program
US5812851A (en) Compiler with generic front end and dynamically loadable back ends
US5355494A (en) Compiler for performing incremental live variable analysis for data-parallel programs
EP0118829A2 (en) Compilation of perform statements
Johnson et al. A meta-language and system for nonlocal incremental attribute evaluation in language-based editors
Fauth et al. Automated generation of DSP program development tools using a machine description formalism
JP2007511834A (ja) リバーシブルなデザイン・ツリーの変換のための方法とシステム
JPH09204297A (ja) 複数のヒープにおいて順序を維持してメモリ割り当てを行うための装置および方法
GB2188760A (en) Converting a source program into an object program
Hanus Efficient implementation of narrowing and rewriting
JPH04152486A (ja) データフローグラフ展開方式
Mossin Partial evaluation of general parsers
Beetem et al. Incremental scanning and parsing with Galaxy
Jourdan et al. Techniques for improving grammar flow analysis
Barnard et al. Hierarchic syntax error repair for LR grammars
Naumann et al. Control flow reversal for adjoint code generation
Changjing et al. Nonlinear program construction and verification method based on partition recursion and Morgan's refinement rules
Al-Sharif Functional Level Simulator for Universal AHPL.
Vivekanandan Code generation for higher inductive types
JPS63163635A (ja) ブロツク単位ハツシユテ−ブルスタツク方式
Davis et al. A Verilog preprocessor for representing datapath components
JP3240647B2 (ja) コンピュータ言語の構造化処理方式
CN113326048A (zh) 浮点数计算精度处理方法、系统、介质及设备
JPH04330526A (ja) リローケタブル・アセンブラ