JPH0784795A - インタプリタ実行方法 - Google Patents

インタプリタ実行方法

Info

Publication number
JPH0784795A
JPH0784795A JP18355693A JP18355693A JPH0784795A JP H0784795 A JPH0784795 A JP H0784795A JP 18355693 A JP18355693 A JP 18355693A JP 18355693 A JP18355693 A JP 18355693A JP H0784795 A JPH0784795 A JP H0784795A
Authority
JP
Japan
Prior art keywords
line
source
line number
source program
file
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
JP18355693A
Other languages
English (en)
Inventor
Satoru Otsuka
哲 大塚
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 Software Engineering Co Ltd
Original Assignee
Hitachi Software Engineering Co 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 Software Engineering Co Ltd filed Critical Hitachi Software Engineering Co Ltd
Priority to JP18355693A priority Critical patent/JPH0784795A/ja
Publication of JPH0784795A publication Critical patent/JPH0784795A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 ソースプログラムの各行に付与した行番号を
用いて、ソースプログラムの実行順序を把握して、ソー
スプログラムの各行の命令の処理を行い、データ値を実
行順序に従って更新して行くインタプリタ実行方法を提
供する。 【構成】 プログラム処理の実行の際に、ソースプログ
ラムの各行に対して、次に実行するソース番号を割り当
てて飛び先ファイルを作成し、ソースプログラムの各行
の命令文を解釈し、飛び先ファイルのソース番号を用い
て、各命令文の実行順序を制御し、プログラム処理を実
行する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ソースプログラムの各
命令文を解釈して処理を実行し、データ値を実行順序に
従って更新して行くインタプリタ実行方法に関する。
【0002】
【従来の技術】従来、パーソナルコンピュータなど比較
的に簡易で小型のデータ処理装置においては、そのプロ
グラム処理方式として、事前にソースプログラムのコン
パイル処理を行うことなく、ソースプログラムの個々の
命令を順次に解釈して実行していくインタプリタ方式が
用いられている。
【0003】このようなインタプリタ方式によるプログ
ラムの実行において、プログラムを構成する各々の命令
が、その命令が記述されている行である命令行の行番号
と共に記憶されている場合、分岐先命令の実行は、分岐
命令で行番号により指定されている分岐先の命令をソー
スプログラムが格納されている記憶装置の格納位置から
検索して読み出して実行する。この場合、一般的には命
令行の行番号と記憶装置におけるその命令の格納アドレ
スとには機械的(固定的)な対応付けがないので、分岐
命令実行のたびに行番号で指定されている分岐先命令の
格納位置をソースプログラムの先頭から検索して読み出
さなければならず、この検索に時間がかかり、プログラ
ムの実行が遅くなるという問題がある。
【0004】なお、この種のインタプリタ方式のプログ
ラム実行の例として、例えば、特開昭62−25423
7号公報に記載の「インタプリタ方式の分岐命令実行方
式」の例があるが、このプログラム実行の技術は、分岐
命令の実行に際し、初回の場合には、当該分岐命令を実
行すると共に、分岐先命令の行番号を記憶装置の格納ア
ドレスに置き換えておき、次回の当該分岐命令の実行の
際には、置き換えられた記憶装置の格納アドレスを用い
ることにより、直ちに分岐先命令を読み出せるようにす
る分岐命令実行方式の提案である。
【0005】
【発明が解決しようとする課題】ところで、この種のソ
ースプログラムにおいて、各々の命令に付与する行番号
は、命令の配列順に連続的に付与される場合もあるが、
命令の挿入,追加などによるソースプログラムの後の修
正を行う場合の便宜を図るため、最初は跳び番号が付与
される。例えば、行番号として10番跳びの番号が付与
される。実際的には、このような場合が多い。また、ソ
ースプログラムの命令群の各行ごとには、行番号は付与
せず、命令実行順序制御のために必要とされる分岐先命
令にのみラベル記号を付与する場合もある。
【0006】このため、従来のインタプリタ実行方式で
は、ソースプログラムの各行に付与された行番号、また
分岐先命令に付与されたラベル記号では、ソースプログ
ラム全体を通して、ソースプログラムの各々の命令の実
行順序を十分に把握することができないという問題があ
った。また、ソースプログラムの最終端に分岐先の命令
が配置されている場合には、当該分岐命令を実行するた
びに、ソースプログラムの最終端まで検索を行なわなけ
ればならず、プログラム処理の実行速度が非常に遅くな
るという問題があった。
【0007】本発明は上記のような問題点を解決するた
めになされたものであり、本発明の目的は、ソースプロ
グラムの各行に付与した行番号を用いて、ソースプログ
ラムの各命令の実行順序を把握して、把握した実行順序
の通りにソースプログラムの各行の命令を実行し、変数
のデータ値を実行順序に従って更新して行くインタプリ
タ実行方法を提供することにある。
【0008】
【課題を解決するための手段】上述のような目的を達成
するため、本発明の第1の特徴とするインタプリタ実行
方法は、ソースプログラム実行の際に、ソースプログラ
ムの各行に対して、行番号を割り当て、割り当てた行番
号を用いて各命令文の実行順序を制御し、ソースプログ
ラムを実行することを特徴とする。
【0009】また、本発明の第2の特徴とするインタプ
リタ実行方法は、第1の特徴に加えて、更に、ソースプ
ログラムの各行に対して実行順序制御のために割り当て
る行番号は、ソースプログラムを分析し、ソースプログ
ラムの各行に対する次に実行する行の行番号を得て、飛
び先情報として飛び先ファイルに格納し、前記飛び先フ
ァイルに格納された飛び先情報に従って、ソースプログ
ラムを実行することを特徴とする。
【0010】また、本発明の第3の特徴とするインタプ
リタ実行方法は、第2の特徴に加えて、更に、ソースプ
ログラムを分析する場合、更に、ソースプログラム中の
変数名を抽出し、前記抽出した変数名をデータファイル
に格納し、ソースプログラム中の命令文の実行の結果に
より、変数に値が代入された場合は前記データファイル
に格納された該変数のデータ値を更新することを特徴と
する。
【0011】
【作用】本発明の第1の特徴とするインタプリタ実行方
法においては、ソースプログラム実行の際に、ソースプ
ログラムの各行に対して、例えば内部的な行番号を割り
当る。そして、ソースプログラムの各行の命令が解釈さ
れて、割り当てた行番号を用いて各命令文の実行順序を
把握し、把握した実行順序通りに、命令の実行順序を制
御して、プログラムの各行の命令を実行する。これによ
り、ソースプログラムを実行し、データ値を実行順序に
従って更新する。
【0012】本発明の第2の特徴とするインタプリタ実
行方法においては、ソースプログラムの各行に対して、
実行順序制御のために割り当てる行番号を得る場合、こ
の行番号は、ソースプログラムを分析し、ソースプログ
ラムの各行に対する次に実行する行の行番号を得て、飛
び先情報として飛び先ファイルに格納する。そして、こ
の飛び先ファイルに格納された飛び先情報(行番号)に
従って、ソースプログラムを実行する。これにより、ソ
ースプログラムを実行し、データ値を実行順序に従って
更新する。
【0013】また、本発明の第3の特徴とするインタプ
リタ実行方法においては、第2の特徴に加えて、更に、
ソースプログラムを分析する場合、更に、ソースプログ
ラム中の変数名を抽出する。ここで、抽出した変数名は
データファイルに格納し、ソースプログラム中の命令文
の実行の結果により、変数に値が代入された場合は、前
記データファイルに格納された該変数のデータ値を更新
する。これにより、ソースプログラムを実行し、データ
値を実行順序に従って更新することになる。
【0014】このようにして、プログラム実行の際に、
ソースプログラムの各行に対して、次に実行する行の行
番号を付与し、行番号によりソースプログラムの各命令
文の実行順序を制御して、ソースプログラムの処理を実
行する。即ち、具体的には、例えば、ソースプログラム
の先頭行を1行目、すなわち行番号を1として先頭行の
命令から順に行ごとに読み込む都度、読み込んだ命令a
が分岐命令か否かを確認する。ここで、行番号n、すな
わちソースプログラムのn行目に記述されている命令a
が非分岐命令であれば、命令aの実行後に実行する命令
は、次の行番号(n+1)の命令すなわち(n+1)行
目に記述されている命令であるとして、この命令aの実
行後の分岐先命令の記述行を次の行番号(n+1)の行
とする。また、例えば、命令aが分岐命令であれば、そ
のi個の分岐条件に対応して、i個の分岐先が指定され
ているので、この分岐条件に対応してi個の分岐先の行
番号m1〜mi(i≧1)を命令aの飛び先情報として飛
び先ファイルに格納する。
【0015】このようにして、ソースプログラムの全行
の各々の命令について、ユニークな行番号を付与し、付
与した行番号と、その命令の実行後に実行する次の命令
の行番号とを、ここでの当該命令の飛び先情報として飛
び先ファイルを作成する。また、ソースプログラムにお
ける命令文の各行の変数名を抽出し、各々の変数名に割
り当てたデータ領域に、その変数名の初期値を設定した
データファイルを作成する。ソースプログラムの命令文
の実行の際には、ここで作成した飛び先ファイルとデー
タファイルとを用いて、次に実行する命令の行番号と、
変数のデータとを受け取り、順次にソースプログラムを
実行していく。
【0016】
【実施例】以下、本発明の一実施例を図面を用いて具体
的に説明する。図1は、本発明の一実施例にかかるイン
タプリタ実行方法を一態様で実施する処理装置の要部の
構成を処理の流れで示すブロック図である。ここで説明
する実施例において、プログラミング言語としてPL/
I言語を用いた場合を例として説明する。図1におい
て、11はプログラムソースファイル、12はソース分
析処理部、22は飛び先ファイル、14はデータファイ
ル作成処理部、23はデータファイル、16は初期デー
タ手入力部、17はソース実行処理部である。
【0017】プログラムソースファイル11にはソース
プログラムが格納されており、ソース分析処理部12が
プログラムソースファイル11に格納されたソースプロ
グラムの各行を順次に読み込み、ソースプログラムの各
行に行番号を付与し、ソースプログラムの各行の命令に
対して、該命令の次に実行する命令の行番号を求めて飛
び先ファイル22を作成する(飛び先ファイル22のデ
ータ構造は図2より後述する)。
【0018】次に、データファイル作成処理部14は、
タグ名(ソースプログラムでの変数名:例えば、図2に
示すA、B、C、Dなど)の抽出を行い、抽出したタグ
名に対応して、そのタグ名でデータを格納するデータフ
ァイル23を作成する(データファイル23のデータ構
造は図2より後述する)。
【0019】初期データ手入力部16は、作成されたデ
ータファイル23において初期値フィールド(232:
図2)に各タグ名に対応して、その初期値を設定する。
このデータファイル23には、各タグ名に対応して、命
令実行後の値を格納する更新値フィールド(233:図
2)が設けられている。
【0020】ソース実行処理部17は、飛び先ファイル
22とデータファイル23を参照しながら、飛び先ファ
イル22によって規定されている実行順序の通りに各命
令を実行し、その実行によりタグ名の持つデータが更新
されたらその更新後のデータでデータファイル23の該
タグ名に対応する更新値フィールド(233:図2)の
データを更新する。
【0021】図2は、IF文を含むソースプログラム2
1に対して飛び先ファイル22およびデータファイル2
3が作成され、ソースプログラム21が実行される様子
を説明する図である。図2において、17はソース実行
処理部を示しており、21はソースプログラム、22は
飛び先ファイル、23はデータファイル、24はIFテ
ーブルをそれぞれ示している。ソースプログラム21に
はIF文が含まれており、このソースプログラム21の
各命令が記述されている行(以下、ソース行と略称す
る)毎にソース分析処理部12により行番号25が付与
されて飛び先ファイル22が作成され、飛び先ファイル
22の行番号として設定される。
【0022】飛び先ファイル22には、図2に示すよう
に、ソース行の行番号を格納する行番号フィールド22
1と、ソース行命令を格納するソース行命令フィールド
222と、そのソース行命令の次に実行するソース行命
令の行番号を格納する第1の飛び先フィールド223お
よび第2の飛び先フィールド224とが設けられる。第
1の飛び先フィールド223には該ソース行命令が非分
岐命令である場合は該ソース行の次行の命令の行番号が
格納され、分岐命令である場合には分岐節が真の条件時
に実行するソース行命令の行番号が格納される。第2の
飛び先フィールド224には該ソース行命令が分岐命令
である場合の分岐節が偽の条件時に実行するソース行命
令の行番号が格納される。
【0023】このようにして、作成された飛び先ファイ
ル22を参照すれば、次に実行するソース行の行番号が
把握できる。ここで例示しているソースプログラム21
において、行番号2の命令が実行されてIF文が真とな
ったときには、第1の飛び先フィールド223で示され
る行番号3の命令を実行し、また、IF文が偽となった
ときには、第2の飛び先フィールド224で示される行
番号7の命令を実行することが分かる。また、IF文が
真となり、それに応じて実行する行番号の処理が行なわ
れ、更にTHEN節の処理の終了の行番号6の命令が実
行された後は、その次には行番号8の命令を実行するこ
とが第1の飛び先フィールド223の行番号により分か
る。
【0024】データファイル23は、ソースプログラム
21から切り出したタグ名で持つデータを格納するファ
イルである。ここではタグ名として変数名A、B、C、
Dが設定される。図2に示すように、データファイル2
3において、タグ名フィールド231には、ここでの例
では、変数名A、B、C、Dを格納し、初期値フィール
ド232には、前述のように、初期データ手入力部16
から初期値データを入力して格納する。また、データフ
ァイル23の更新値フィールド233には、初期値フィ
ールド232に初期値データを入力した場合、その初期
値フィールド232のデータをコピーしておく。更新値
フィールド233には、各命令の実行により、タグ名の
持つデータが更新された場合の更新後のデータを格納す
る。図2に示す例では、初期値データとしてタグ名Aに
は「1(文字型)」、タグ名Bには「2(数値型)」、
タグ名Cには「1(数値型)」、タグ名Dには「3(数
値型)」が格納されている。
【0025】データファイル23の各々のタグ名の初期
値データが前述の値である場合、ソースプログラム21
の行番号1の命令を実行した結果は真であり、行番号2
の命令を実行した結果は偽であるため、行番号1と行番
号2とからなるIF文の実行結果は偽となる。この実行
結果の偽の条件により、THEN節における処理(行番
号3〜行番号6)は実行されず、したがって、タグ名C
の値は更新されず、ELSE節における処理(行番号7
〜行番号8)が実行される。これにより、タグ名Dの値
「3(数値型)」が「2(数値型)」に更新され、「2
(数値型)」がタグ名Dの更新値フィールド233に格
納される。
【0026】IFテーブル24は、ソース分析処理部1
2において飛び先ファイル22を作成するときに作成さ
れ、参照される一時的なワークテーブルであり、スタッ
ク的に使用される。
【0027】IFテーブル24には、エントリ番号フィ
ールド241、IF文終了カウントフィールド242、
THEN節行番号フィールド243、およびELSE節
行番号244フィールドが設けられ、1エントリがソー
スプログラム中の1つのIF文に対応する。
【0028】エントリ番号フィールド241には、ソー
スプログラム中の複数のIF文を識別するためのスタッ
クポインタが格納される。IF文終了カウントフィール
ド242には、IF文の終了の指標となる情報が格納さ
れる。IF文を検出した時点で、IF文終了カウントフ
ィールド242には「2」を設定する。この理由は、I
F文がTHEN節とELSE節との2部分で構成されて
いるためである。
【0029】IF文終了カウントフィールド242は、
後続する行のソース分析処理において、各々のソース行
を読み進んでいく段階で、文字列「THEN;」(処理
のないTHEN節)、「ELSE;」(処理のないEL
SE節)、THEN節の終了を示す「END;」、また
はELSE節の終了を示す「END;」が検出されるご
とに、そのIF文終了カウントの値を1減算し、その値
が0になった時の行番号をそのIF文の終了行と判定す
る。また、THEN節行番号フィールド243には、エ
ントリ番号フィールド241に対応するIF文のTHE
N節が開始される行の行番号がセットされる。ELSE
節行番号フィールド244には、同様にELSE節が開
始される行の行番号がセットされる。
【0030】図2のIFテーブル24は、ソースプログ
ラム21の行番号6の「END;」の分析処理を終了し
た時点での数値例を示している。ソースプログラム21
の行番号6は、THEN節の分析処理終了時点であるの
で、IF文終了カウントフィールド242のIF文終了
カウントが「2から1」に更新され、THEN節行番号
フィールド243には行番号の「3」がセットされ、E
LSE節行番号フィールド244には何もセットされて
いない。なお、後述するが、このELSE節行番号フィ
ールド244には、行番号7の「ELSE;」の分析処
理時点で、行番号7がセットされ、同時に、ELSE節
の分析処理終了のため、IF文終了カウントフィールド
242のIF文終了カウントが「1から0」に更新され
る。
【0031】次に、このようにして、ソースプログラム
21から飛び先ファイル22が作成され、更にデータフ
ァイル23が作成されて、ソースプログラムの各行の処
理が実行される手順をフローチャートを参照して説明す
る。図3および図4は、ソースプログラムを分析して、
飛び先ファイル22を作成するソース分析処理の一例を
示すフローチャートである。図3および図4を参照し
て、ソースプログラム分析処理を説明する。
【0032】まず、図3を参照する。処理が開始される
と、ステップ100において行番号カウントに初期値1
を設定する。また、他のIF文と区別するための識別子
であるIFカウントに初期値0を設定する。
【0033】なお、行番号カウントはソースプログラム
21から次に読み込む行をポイントするポインタ値を兼
ねている。すなわち「行番号カウントが1である行を読
み込む」とはソースプログラムの先頭行を読み込むこと
であり、「行番号カウントがnである行を読み込む」と
はソースプログラムのn行目を読み込むことである。ま
た、以降の処理で、IFテーブル24中の各フィールド
をアクセスする処理において、対象とするエントリは、
アクセス時点でのIFカウントと等しい値を持つエント
リとなる。
【0034】次にステップ101において、行番号カウ
ントの示す行を1行読み込み、ステップ102において
今読み込んだ行がソースプログラムの最終行であるか否
かを判定する。ここで読み込んだ行がソースプログラム
の最終行でないと判定されると、ステップ103に進
み、ステップ103において、飛び先ファイル22の行
番号カウントの示す行の第1の飛び先フィールド223
に次のソース行の行番号として(行番号カウント+1)
をセットする。これにより、今読み込んだソース行の次
に実行する行番号は(行番号カウント+1)行目と仮に
設定される。
【0035】次に、ステップ104において、今読み込
んだソース行がIF文であるか否かを判定する。ソース
行がIF文であれば、次のステップ105において、I
Fカウントを1加算し、次のステップ106において、
IFテーブルのIF文終了カウント(IF文終了カウン
トフィールド242:図2)に「2」を設定する。次
に、ステップ123に進み、次の行番号のソース行の分
析処理を行うため、行番号カウントを1加算して、ステ
ップ101に戻る。そして、ステップ101からの処理
を繰り返す。
【0036】一方、ステップ104の判定処理におい
て、今読み込んだソース行がIF文でないと判定される
と、次に、ステップ107に進み、今読み込んだソース
行の文字列が「END;」であるか否かを判定する。こ
のステップ107の判定処理で文字列が「END;」で
ないと判定されると、次に、ステップ112(図4)に
進む。
【0037】ステップ112においては、今読み込んだ
ソース行の文字列が「THEN」であるか否かを判定す
る。「THEN」である場合には、次のステップ113
において、更にソース行の文字列が「THEN;」であ
るか否かを判定する。ソース行の文字列が「THE
N;」であれば、THEN節の処理に係るソース行は存
在せず、THEN節は終了と判定できる。このため、次
のステップ114の処理において、IFテーブルのIF
文終了カウント(IF文終了カウントフィールド24
2:図2)を1減算する。そして、ステップ115に進
む。
【0038】また、ステップ113の判定において、ソ
ース行の文字列が「THEN;」でないと判定される
と、そのまま、ステップ115に進む。ステップ115
においては、(行番号カウント)をIFテーブルのTH
EN節行番号にセットする。すなわち、IFテーブル2
4のTHEN節行番号フィールド243に、THEN節
行番号として(行番号カウント)の値をセットする。そ
して、ステップ123に進み、次の行番号のソース行の
分析処理を行うため、行番号カウントを1加算して、ス
テップ101に戻り、ステップ101からの処理を繰り
返す。
【0039】一方、ステップ112の判定処理におい
て、今読み込んだソース行の文字列が「THEN」でな
いと判定されると、ステップ116に進み、ステップ1
16においてソース行の文字列が「ELSE」であるか
否かを判定する。「ELSE」である場合には、次のス
テップ117において、飛び先ファイル22の(THE
N節行番号−1)行の第2の飛び先フィールド224に
(行番号カウント)をセットする。
【0040】なお、ここで(THEN節行番号−1)行
の行番号は、IFテーブル24のTHEN節行番号フィ
ールド243に(THEN節行番号)としてセットされ
ている行番号から1減算した行番号である。以
降、(...節行番号+1)行の行番号または(...
節行番号−1)行の行番号とは、IFテーブル24のT
HEN節行番号フィールド243またはELSE節行番
号フィールド244にセットされている行番号の値に
「−1」または「+1」を加算した行番号のことを言
う。
【0041】次に、ステップ118において、(行番号
カウント)をELSE節行番号(ELSE節行番号フィ
ールド244:図2)にセットし、続いて、ステップ1
19において、ソース行の文字列が「ELSE;」であ
るか否かを判定する。ここで文字列が「ELSE;」と
判定できれば、次のステップ120において、IFテー
ブルのIF文終了カウントフィールド242におけるI
F文終了カウントを1減算し、次のステップ121にお
いて、飛び先ファイル22の行番号が(ELSE節行番
号−1)行の第1の飛び先フィールド223に(行番号
カウント+1)を設定する。これにより、IF文の分析
は終了するので、次のステップ122において、IFカ
ウントを1減算し、次に、ステップ123に進む。
【0042】また、ステップ116の判定処理におい
て、今読み込んだソース行の文字列が「ELSE」でな
いと判定される場合、および、ステップ119の判定処
理において、ソース行の文字列が「ELSE;」でない
と判定される場合は、そのままステップ123に進む。
【0043】一方、ステップ107においてソース行の
文字列が「END;」であれば、ステップ108に進
み、IFテーブルのIF文終了カウント(IF文終了カ
ウントフィールド242:図2)を1減算し、次のステ
ップ109において、IF文終了カウントが0であるか
否かを判定する。この判定において、IF文終了カウン
トの値が0であれば、IF文の終了とみなされるので、
次のステップ110において、飛び先ファイル22の行
番号が(ELSE節行番号−1)行の第1の飛び先フィ
ールド223に(行番号カウント+1)をセットする。
【0044】この処理の意味するところは、飛び先ファ
イル22において、THEN節の終了行における第1の
飛び先フィールド223の行番号として(IF文の終了
行+1)行の行番号をセットすることである。したがっ
て、この例の場合には、飛び先ファイル22において、
行番号6の第1の飛び先フィールド223の行番号とし
て、行番号8がセットされる。
【0045】これにより、1つのIF文の分析処理が終
了するので、次に、ステップ111において、IFカウ
ントを1減算して、ステップ123に進む。なお、ステ
ップ109の判定処理において、IF文終了カウント
(IF文終了カウントフィールド242:図2)の値が
0でない場合は、IF文の分析処理が終了しておらず、
分析処理を続行するため、ステップ123に進む。
【0046】このようにして、1行分についての分析処
理が終了すると、行番号カウントを1加算して、次の行
番号の1行を読み込み(ステップ101)、読み込んだ
行がプログラムの最終行か否かを判定して(ステップ1
02)、最終行でなければ、同様の処理を継続して行
う。全てのソース行に対して一連の処理が終了して、次
の行番号の1行分が読み込めなくなった場合、この場合
が、最終行として判定できるので(ステップ102)、
最終行であれば、飛び先ファイル22の(行番号カウン
ト−1)の行番号の第1の飛び先フィールド223に、
終了マークを設定して(ステップ124)、一連の処理
を終了とする。
【0047】このような図3および図4により詳述した
処理によって、図2に示すようなIF文を含むソースプ
ログラム21から、飛び先ファイル22が作成される。
【0048】図5および図6は、ソースプログラムを分
析してデータファイルを作成するデータファイル作成処
理の一例を示すフローチャートである。図5および図6
を参照して、データファイル作成(タグ名抽出)の処理
を説明する。
【0049】まず、図5を参照する。処理が開始される
と、ステップ200において、読み込むソース行の行番
号を示す行番号カウントに初期値1をセットする。次
に、ステップ201において、行番号カウントが示すソ
ース行の1行分を読み込み、次のステップ202におい
て、読み込んだソース行がソースプログラムの最終行で
あるか否かを判定する。この判定で、読み込んだソース
行が最終行でなければ、次のステップ203において、
分析するソース行の文字の位置を示す列番号を文字列の
先頭まで進める。次に、ステップ205において、スペ
ースまたは括弧を区切り記号として区分した1単位の文
字列を抽出し、タグ名候補とする。
【0050】次にステップ206において、タグ名候補
がデータであるか否かを判定する。すなわち、タグ名候
補が数値またはアポストロフィーで始まる文字列である
か否かを判定する。このステップ206の判定処理にお
いて、タグ名候補がデータでなければ、ステップ209
に進む。ステップ209においては、タグ名候補が予約
語であるか否かを判定する。
【0051】この場合の「タグ名候補が予約語であるか
否か」の判定は、タグ名候補と予約語ファイル(予じめ
IF、SELECT、THEN、END等の命令語と演
算子が予約語としてその予約語を1レコードにそれぞれ
登録しているファイル)中に格納されている各々の予約
語とを順に比較することによって行う。タグ名候補が予
約語でなければ、ステップ213(図6)において、抽
出した文字列のタグ名候補が既にデータファイル23に
タグ名として登録済みか否かを判定する。判定の結果、
既に登録済みである場合は、次の文字列に対する処理を
行うため、そのまま、ステップ207に戻る。一方、こ
のステップ213の判定の結果、未登録と判定される場
合には、ステップ214において、抽出した文字列のタ
グ名候補を新たなタグ名としてデータファイルに登録す
る。そして、ステップ207の処理に戻る。
【0052】また、ステップ206において、タグ名候
補とした文字列がデータであると判定された場合、およ
び、ステップ209において、タグ名候補とした文字列
が予約語であると判定された場合は、そのタグ名候補と
した文字列をタグ名として抽出しないので、そのままス
テップ207に進む。ステップ207においては、現在
処理を行っているソース行における列番号が最終列を示
しているか否かを判定する。最終列であれば、現在のソ
ース行における処理が終了していると判断できるので、
次にステップ208に進み、行番号カウントを1加算し
て、次のソース行の処理を行うため、ステップ201の
処理に戻る。また、最終列でなければ、当該ソース行に
おける各文字列の処理は終了していないので、列番号を
進め、後続する次の文字列に対する処理を行うため、ス
テップ203の処理に戻る。
【0053】このような処理を行い、次に読み込んだソ
ース行が、ステップ202の判定処理でソースプログラ
ムの最終行と判定された場合に、タグ名の抽出処理を完
了とし、ステップ218に進む。そして、次に、ステッ
プ218において、データファイル23に登録した各タ
グ名に対応してその初期値フィールド232に、初期デ
ータを手入力にて設定し、このデータファイル23の作
成処理を終了する。
【0054】次に、ソース実行処理部17によるソース
プログラム実行処理を説明する。このソースプログラム
実行処理は、ソース実行処理部17が、先に作成した飛
び先ファイル22を参照し、ソースプログラムを実行し
て、データファイル23のタグ名のデータを更新する処
理である。図7、図8および図9は、ソース実行処理部
によるソースプログラム実行処理の例の示すフローチャ
ートである。ここで説明するソースプログラム実行処理
の例は、IF文を含むソースプログラムの実行処理例で
ある。
【0055】まず、図7を参照する。処理を開始する
と、ステップ301において、飛び先ファイル22の行
番号1のエントリ(ソース行命令,第1の飛び先,第2
の飛び先)を読み込む。次にステップ302において、
読み込んだエントリが最終行であるか否かを判定する。
これは、読み込んだエントリの第1の飛び先フィールド
223のデータ(第1の飛び先)に終了マークが付され
ている否かにより、最終行であるか否かを判定する。最
終行であれば、処理を終了する。また、ステップ302
において、最終行でない場合には、ステップ303に進
み、読み込んだエントリのソース行命令がIF文である
か否かを判定する。IF文であれば、次のステップ30
4において、読み込んだソース行命令の中のタグ名に対
応するデータをデータファイル23から読み込む。すな
わち、読み込んだソース行命令の中から抽出したタグ名
と、データファイル23のタグ名フィールド231に登
録された各々のタグ名との比較を順次に行い、同一と判
定されたタグ名に対応する更新値フィールド233に格
納されているデータを読み込む。
【0056】次に、ステップ305において、IF文中
の条件式を1つずつ判定してその判定結果により、次の
ステップ306またはステップ307において、後部判
定フラグを「YES」または「NO」に設定する。すな
わち、ステップ305において列番号が示している列を
先頭とする条件式を1つ判定し、この判定結果が偽なら
ば、ステップ306において、後述する後部判定フラグ
にNOをセットし、その判定結果が真ならば、ステップ
307において、後部判定フラグにYESをセットす
る。
【0057】なお、この後部判定フラグは、IF文の条
件式がANDまたはOR(ここでは連結記号という)で
連結されている場合において、連結記号の後部の条件式
の判定結果(真か偽)を示す判定フラグであり、前部判
定フラグとは、同じく連結記号の前部の条件式の判定結
果を示す判定フラグである。
【0058】次に、処理中の条件式が、他の条件式の後
ろに連結記号で連結されていたか否か判定する。このた
め、ステップ308(図8)に進み、ステップ308に
おいて、記号フラグがあるか否かを判定する。これは、
処理中の条件式が他の条件式の後ろに連結記号によって
連結されるので、連結記号の記号フラグの有無を判定す
ることによって、連結の状態を判定する。なお、ここで
の記号フラグは、処理中の条件式が他の条件式の後ろに
連結記号によって連結されているか否かを示すフラグで
あり、ANDまたはORの連結記号の有無に応じて、そ
の値をとる。ANDまたはORがセットされていない状
態では「無し」の値をとり、初期値は、「無し」であ
る。
【0059】このステップ308の判定結果において、
記号フラグが「無し」の場合は、次に、ステップ314
(図9)に進む。このステップ314においては、処理
中の条件式の後ろに連結記号があるか(AND,ORが
続くか)否かを判定する。
【0060】この判定の結果、連結記号が無い場合は、
ステップ321に進み、この時点において、分析中のI
F文の条件式全体の判定結果を示している後部判定フラ
グの値を判定する。このステップ321の判定におい
て、後部判定フラグ=YESと判定できれば、次のステ
ップ322において、飛び先ファイル22から現在読み
込んでいるエントリの第1の飛び先フィールド223に
格納されている行番号のエントリを飛び先ファイル22
から読み込む。
【0061】また、ステップ321の判定において、後
部判定フラグ=NOと判定される場合には、ステップ3
23において、前述と同様にして、飛び先ファイル22
から現在読み込んでいるエントリの第2の飛び先フィー
ルド224に格納されている行番号のエントリを飛び先
ファイル22から読み込む。そして、ステップ324に
進み、記号フラグを「無し」表示にして、ステップ30
2に戻る。そして、ステップ302からの処理を繰り返
し行う。
【0062】また、ステップ314の判定の結果、連結
記号がある(AND,ORが続く)と判定できると、次
のステップ315において、前部判定フラグに後部判定
フラグの値をセットする。続いて、ステップ316にお
いて、連結記号の内容を判定する。この判定で連結記号
がANDであれば、ステップ317において、記号フラ
グにANDをセットし、連結記号がORであれば、ステ
ップ318において、記号フラグにORをセットする。
【0063】次に、ステップ319に進み、読み込んだ
ソース行の最終列かを判定する。この判定で、最終列で
あることが判定できると、ステップ320において、飛
び先ファイル22から現在読み込んでいるエントリの第
1の飛び先フィールド223に格納されている行番号の
エントリを飛び先ファイル22から読み込み、ステップ
304(図7)に戻る。また、ステップ319の判定で
最終列でなければ、次の条件式の判定を行うため、ステ
ップ304(図7)に戻る。
【0064】ところで、ここでの記号フラグにANDま
たはORがセットされていると、ステップ308(図
8)において、記号フラグが有ると判定されるので、次
のステップ309に進み、ステップ309において、記
号フラグの値を判定する。記号フラグがANDである場
合、次のステップ310において、前部判定フラグの値
と後部判定フラグの値とが共に「YES」であることを
判定する。このステップ310の判定において、双方の
フラグが共に「YES」であると判定できると、次のス
テップ312において、後部判定フラグにYESをセッ
トする。一方、ステップ310の判定で、双方のフラグ
が共に「YES」であると判定できない場合には、ステ
ップ313に進み、後部判定フラグにNOをセットす
る。
【0065】また、ステップ309の記号フラグの値の
判定において、記号フラグの値がORと判定できると、
更に、ステップ311において、前部判定フラグの値と
後部判定フラグの値とのいずれが「YES」であること
を判定する。これが判定できると、ステップ312に進
み、ステップ312において、後部判定フラグにYES
をセットする。また、ステップ311の判定において、
前部判定フラグの値と後部判定フラグの値とのいずれが
「YES」であることが判定できないと、ステップ31
3に進み、ステップ313において、後部判定フラグに
NOをセットする。そして、ステップ314(図9)に
進む。
【0066】このようなステップ310〜ステップ31
3の処理により、IF文中で、条件式が連結記号で連結
されている場合には、最初の条件式から処理中の条件式
までの全ての条件式を1つの条件式のように扱って、そ
の判定結果を後部判定フラグにセットすることになる。
【0067】再び、図7を参照して説明を続けると、前
述のステップ303の判定処理において、飛び先ファイ
ル22から読み込んだソース行がIF文でないことが判
定されると、次に、ステップ325において、代入文で
あるか否かを判定する。代入文であれば、ステップ32
6において、データファイル23のタグ名フィールド2
31を検索して、ソース行命令の中のタグ名と同一のタ
グ名に対して、その更新値フィールド233に代入値を
格納し、ステップ328に進む。
【0068】また、ステップ325の判定処理で、読み
込んだソース行命令が代入文でなければ、そのままステ
ップ328に進む。そして、ステップ328において、
飛び先の1行分を読み込む。これは、飛び先ファイル2
2から現在読み込んでいるエントリ(行番号)の第1の
飛び先フィールド223に格納されている(第1の飛び
先の)行番号のエントリを飛び先ファイル22から読み
込む。そして、ステップ302に戻り,ステップ302
からの処理を繰り返し行う。
【0069】以上、説明したように、ここでのソース実
行処理では、飛び先ファイル22から1エントリ読み込
み、読み込んだエントリのソース行の命令を実行して、
必要ならデータファイル23のタグ名のデータ値の更新
処理を行った後、読み込んだエントリ(行番号)の第1
の飛び先(第1の飛び先フィールド223)または第2
の飛び先(第2の飛び先フィールド224)に格納され
ている行番号のエントリを、次のソース行の命令とし
て、飛び先ファイル22から読み込んで上記処理を繰り
返すことにより、インタプリタと同様な処理を行える。
【0070】ここで実施例として説明した図3および図
4の飛び先ファイルの作成処理のフローチャート、図5
および図6のデータファイル作成処理のフローチャー
ト、また、図7,図8および図9のソース実行処理のフ
ローチャートは、IF文のみの処理フローであるが、S
ELECT文やCALL文の処理を行う場合でも、同様
な方法により、飛び先ファイルおよびデータファイルを
作成して、ソース実行処理を行うことができる。
【0071】例えば、SELECT文を含むソースプロ
グラムの実行処理を行う場合には、図10に示すよう
に、SELECT文を含むソースプログラム31に対し
て飛び先ファイル32が作成され、ソースプログラム3
1のインタプリタ実行の処理が進められる。また、同様
に、CALL文を含むソースプログラムの処理を行う場
合には、図11に示すように、CALL文を含むソース
プログラム41に対して飛び先ファイル42が作成さ
れ、ソースプログラム41のインタプリタ実行の処理が
進められる。どちらの場合にも、飛び先ファイル32お
よび飛び先ファイル42における行番号を用いることに
よりソースプログラムのソース行を実行順序どおりに実
行できる。
【0072】その他、「DO WHILE文」、「GO
TO文」においても、同様に、飛び先ファイルを作成で
き、ソースプログラムのソース行を実行順序どおりに実
行できる。このように、ソースプログラムの各行に「次
に実行する命令の行番号」を付与することにより、分岐
先命令の検索が簡単に実行できる。なお、この実施例で
は、PL/I言語によるソースプログラムの例で説明し
たが、他の言語でも同様に適用可能である。また、本実
施例では内部的に付与する行番号を1から順に1つずつ
増加した数値としているが、例えば行番号は10から1
0ずつ増加した数値としてもよい。このように付与する
行番号は予め定めた演算式により、その行がユニークに
特定できる数値であればよいことは明らかである。
【0073】
【発明の効果】以上に説明したように、本発明のインタ
プリタ実行方法によれば、一般的な分岐命令文(IF
文,SELECT文等)をソースプログラムの行番号を
用いて実行順序通りに実行でき、飛び先ファイルとデー
タファイルを作成しておけば、高速にプログラムを実行
することができる。また、大規模なコンパイルプログラ
ムが不要となるのでパーソナルコンピュータや、ホスト
マシンに接続されていない個々のワークステーション上
でのプログラムテストが可能となる。
【図面の簡単な説明】
【図1】図1は本発明の一実施例にかかるインタプリタ
実行方法を一態様で実施する処理装置の要部の構成を処
理の流れで示す示すブロック図、
【図2】図2はIF文を含むソースフログラムに対して
飛び先ファイルおよびデータファイルが作成され、プロ
グラム処理が実行される様子を説明する図、
【図3】図3はソースプログラムのIF文を分析して飛
び先ファイルを作成するソース分析処理の一例を示す第
1のフローチャート、
【図4】図4はソースプログラムのIF文を分析して飛
び先ファイルを作成するソース分析処理の一例を示す第
1のフローチャートに続く第2のフローチャート、
【図5】図5はソースプログラムのIF文を分析してデ
ータファイルを作成するデータファイル作成処理の一例
を示す第1のフローチャート、
【図6】図6はソースプログラムのIF文を分析して、
データファイルを作成するデータファイル作成処理の一
例を示す第1のフローチャートに続く第2のフローチャ
ート、
【図7】図7はソース実行処理部によるソースプログラ
ム実行処理の例の示す第1のフローチャート、
【図8】図8は同じくソース実行処理部によるソースプ
ログラム実行処理の例の示す第1のフローチャートに続
く第2のフローチャート、
【図9】図9は同じくソース実行処理部によるソースプ
ログラム実行処理の例の示す第2のフローチャートに続
く第3のフローチャート、
【図10】図10はSELECT文を含むソースプログ
ラムに対して作成された飛び先ファイルの例を示す図、
【図11】図11はCALLT文を含むソースプログラ
ムに対して作成された飛び先ファイルの例を示す図であ
る。
【符号の説明】
11…プログラムソースファイル、 12…ソース分析処理部、 22…飛び先ファイル、 14…データファイル作成処理部、 23…データファイル、 16…初期データ手入力部、 17…ソース実行処理部、 21…IF文を含むソースプログラム、 221…行番号フィールド 222…ソース命令フィールド、 223…第1の飛び先フィールド、 224…第2の飛び先フィールド、 231…タグ名フィールド、 232…初期値フィールド、 233…更新値フィールド、 24…IFテーブル、 241…エントリ番号フィールド、 242…IF文終了カウントフィールド、 243…THEN節行番号フィールド、 244…ELSE節行番号フィールド、 25…行番号、 31…SELECT文を含むソースプログラム、 32…飛び先ファイル、 41…CALL文を含むソースプログラム、 42…飛び先ファイル。

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラム実行の際に、ソースプ
    ログラムの各行に対して、行番号を割り当て、割り当て
    た行番号を用いて各命令文の実行順序を制御し、ソース
    プログラムを実行することを特徴とするインタプリタ実
    行方法。
  2. 【請求項2】 請求項1に記載のインタプリタ実行方法
    において、ソースプログラムの各行に対して実行順序制
    御のために割り当てる行番号は、ソースプログラムを分
    析し、ソースプログラムの各行に対する次に実行する行
    の行番号を得て、飛び先情報として飛び先ファイルに格
    納し、前記飛び先ファイルに格納された飛び先情報に従
    って、ソースプログラムを実行することを特徴とするイ
    ンタプリタ実行方法。
  3. 【請求項3】 請求項2に記載のインタプリタ実行方法
    において、ソースプログラムを分析する場合、更に、ソ
    ースプログラム中の変数名を抽出し、前記抽出した変数
    名をデータファイルに格納し、ソースプログラム中の命
    令文の実行の結果により、変数に値が代入された場合は
    前記データファイルに格納された該変数のデータ値を更
    新することを特徴とするインタプリタ実行方法。
JP18355693A 1993-06-30 1993-06-30 インタプリタ実行方法 Pending JPH0784795A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP18355693A JPH0784795A (ja) 1993-06-30 1993-06-30 インタプリタ実行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP18355693A JPH0784795A (ja) 1993-06-30 1993-06-30 インタプリタ実行方法

Publications (1)

Publication Number Publication Date
JPH0784795A true JPH0784795A (ja) 1995-03-31

Family

ID=16137878

Family Applications (1)

Application Number Title Priority Date Filing Date
JP18355693A Pending JPH0784795A (ja) 1993-06-30 1993-06-30 インタプリタ実行方法

Country Status (1)

Country Link
JP (1) JPH0784795A (ja)

Similar Documents

Publication Publication Date Title
US4860203A (en) Apparatus and method for extracting documentation text from a source code program
US6477641B2 (en) Method for translating between source and target code with heterogenous register sets
US20020194223A1 (en) Computer programming language, system and method for building text analyzers
US20050005239A1 (en) System and method for automatic insertion of cross references in a document
US5396419A (en) Pre-edit support method and apparatus
JP2009237762A (ja) プログラム解析装置、プログラム解析方法および解析プログラム
KR20080086456A (ko) 찾기 및 교체 입력의 파생어를 레버리징하는 찾기 및 교체기능을 갖춘 텍스트 편집 방법 및 시스템
JP2012063868A (ja) 言語処理パーサーを組み合わせて、組み合わせパーサーを生成する方法、並びにそのコンピュータ及びコンピュータ・プログラム
JPH0784795A (ja) インタプリタ実行方法
JP3085383B2 (ja) 文書処理方法
JPH11272503A (ja) プログラムのテストデータ自動生成装置
JPS5833775A (ja) コンパイル方法
CN118444924A (zh) 一种基于规则的Dockerfile指令行级依赖关系提取方法
JPH11237984A (ja) オブジェクト指向プログラム設計支援装置、方法および記録媒体
JPH03185526A (ja) 言語処理システムのシンボル処理方式
JP2607975B2 (ja) デバック方式
JPH04241672A (ja) 文字列検索方式
JPH08297579A (ja) テキストデータにおける区切り語処理方式
JPH09212520A (ja) 電子化辞書装置
JPH06222913A (ja) プログラム解析装置
JPH06175862A (ja) 電子計算機装置
JPH0546370A (ja) プログラム生成装置
JPS63132335A (ja) 計算機言語処理系の実行方式
JPH04342026A (ja) 構造体データのパターンマッチング方式
JPH08234995A (ja) プログラム変換装置