JPH08161179A - 一文実行方法 - Google Patents

一文実行方法

Info

Publication number
JPH08161179A
JPH08161179A JP6305970A JP30597094A JPH08161179A JP H08161179 A JPH08161179 A JP H08161179A JP 6305970 A JP6305970 A JP 6305970A JP 30597094 A JP30597094 A JP 30597094A JP H08161179 A JPH08161179 A JP H08161179A
Authority
JP
Japan
Prior art keywords
sentence
variable
viw
source code
virtual intermediate
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
JP6305970A
Other languages
English (en)
Inventor
Shigeki Yamamoto
重樹 山本
Eiji Yamamoto
栄次 山本
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 JP6305970A priority Critical patent/JPH08161179A/ja
Publication of JPH08161179A publication Critical patent/JPH08161179A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【目的】 コンパイラの構文・意味解析部を複雑にする
ことなく、一文実行を短時間で行うことができるように
する。 【構成】 記述された一文に対して参照が解決されてい
ない変数等の宣言文のソースコードを挿入し、それを一
括翻訳して参照が解決されていない仮想中間語を生成し
た後、この仮想中間語が参照する変数に対して、中断し
ているプログラム中の変数の中から中断点の文脈に合致
する変数を割り当てることによって参照の解決された仮
想中間語に変換し、この参照の解決された仮想中間語に
よって一文の実行を行う。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、手続き型言語等の非対
話型プログラム言語を逐次解釈・実行するインタプリタ
における一文実行方法に関するものである。
【0002】
【従来の技術】手続き型言語等の非対話型プログラム言
語のソースコードの一文を実行する一文実行方法は、例
えば実行中のプログラムを外部から一時中断させ、対話
的にその実行プログラムに影響を与えるために使用され
る。
【0003】一般に、手続き型言語等のソースコードを
インタプリタで逐次解釈・実行させる場合、対象となる
ソースコードをインタプリタが解釈可能な中間語を生成
し、この中間語をインタプリタに実行させる。
【0004】従って、一文実行に際しては、コンパイラ
によってインタプリタが解釈可能な中間語を生成してお
く必要がある。
【0005】従来において、インタプリタが解釈可能な
中間語を生成する方法として、例えば特開平3−241
430号公報に開示されているように、既存のコンパイ
ラのコンパイル言語によって呼出し可能で中間語言語コ
ードの各文が出力される関数ライブラリを用意してお
き、既存のコンパイラが出力するオブジェクトモジュー
ルと関数ライブラリとを結合したロードモジュールを実
行することによって中間語を生成する方法がある。
【0006】一方、ソースコード全体を解釈・実行する
方法として、例えば「コンパイラの理論と実現」(疋田
輝雄、石畑清著 pp−91〜95)に見られるよう
に、あらかじめソースコードを一括翻訳して仮想中間語
(または中間語)の形にしておき、それを解釈・実行す
る方法がある。
【0007】
【発明が解決しようとする課題】しかしながら、上記従
来技術はいずれもソースコード全体を解釈・実行する方
法であり、一文を実行する点について配慮されていな
い。
【0008】従って、例えば前者の方法を利用してイン
タプリタによる一文実行を実現するためには、プログラ
ムの実行を中断する度に、すなわち一文実行毎にコンパ
イル・リンクという処理が必要になり、一文実行を開始
するまでの処理時間が長くなり、しかもインタプリタが
実行可能な一文はライブラリ関数に限定されてしまうと
いう問題がある。
【0009】一方、後者の方法において一括コンパイル
を行わず、一文実行単位にソースコードを分割コンパイ
ルし、一文実行単位の中間語を生成するようにした場
合、その一文中で参照が解決されていない変数が存在す
ると、コンパイラの構文・意味解析部における意味解析
において意味エラーが生じる。このため、一文実行単位
にソースコードを分割コンパイルしたとしても、コンパ
イラの構文・意味解析部における意味解析処理の中に意
味エラーを無視する、あるいは意味エラーとならないよ
うにする手続きを組み込んでおくことが必要となり、コ
ンパイラの構文・意味解析部が複雑になるという問題が
ある。
【0010】本発明の目的は、コンパイラの構文・意味
解析部を複雑にすることなく、一文実行を短時間で行う
ことができる一文実行方法を提供することにある。
【0011】
【課題を解決するための手段】上記目的を達成するため
に、本発明は、入力されたプログラムの中断時点で新た
に入力された一文に対し、その一文中で参照が解決され
ていない変数等の型、名称を実行中断時点において既知
の変数等の型、名称の中から取得し、この取得した変数
等の型、名称を前記参照が解決されていない変数等の
型、名称に代えてソースコード形式で新たに入力された
一文の前後に挿入し、それを一括翻訳して参照アドレス
が解決されていない仮想中間語を生成した後、この仮想
中間語が参照する変数に対して、中断しているプログラ
ムの既知の変数の中から中断点の文脈に合致する変数の
アドレスを割り当てることによって参照アドレスの解決
された仮想中間語に変換し、この参照アドレスの解決さ
れた仮想中間語によって一文の実行を行うことを主要な
特徴とする。
【0012】
【作用】手続き型言語のような非対話的なプログラム言
語においては、通常その一文だけを翻訳すると、参照が
解決されていない変数等の存在によって構文エラーや意
味エラーとなり、仮想中間語を生成できない。
【0013】そこで、本発明においては、参照可能な変
数の宣言文のソースコードなどをプログラム中断時点で
新たに入力された一文の前後に挿入し、構文エラーや意
味エラーとならないソースコードを生成し、これを一括
翻訳して仮想中間語を生成する。
【0014】このとき、コンパイラの構文・意味解析部
では一文中で参照する変数に関して、その参照アドレス
の解決が行われていない仮想中間語を生成しておく。そ
して、実行前にこの仮想中間語が参照する変数に対し
て、中断しているプログラム中の変数の中から中断点の
文脈に最も合致する変数のアドレスを割り当てることに
よって、その参照アドレスを解決して実行可能な仮想中
間語に変換する。
【0015】次に、目的とする一文の仮想中間語から逐
次解釈・実行を行うことによって一文実行を実現する。
【0016】
【実施例】以下、本発明を図示する実施例に基づき詳細
に説明する。
【0017】図1は、本発明の一文実行方法を実現する
ためのCまたはC++インタプリタの一実施例を示す構
成図であり、プログラム中断時点で新たに入力された一
文1に対して現在位置情報2とシンボル情報3とを参照
して構文エラーあるいは意味エラーを防ぐためのソース
コードを挿入し、一文用ソースコードファイル4に出力
するソースコード挿入部5を備えている。
【0018】さらに、一文用ソースコードファイル4か
ら一文用ソースコードを入力し、該ソースコードを一括
翻訳して仮想中間語レコード6を生成する構文・意味解
析部7を備えている。
【0019】図2は図1のインタプリタが使用するデー
タの流れを示す説明図である。
【0020】図2において、プログラムの中断時に既知
であり、かつ参照可能な現在位置情報2は、現在中断し
ている関数名22、その関数が定義されているファイル
名21および行番号23などで構成されている。
【0021】また、プログラムの中断時に既知であり、
かつ参照可能なシンボル情報3は、変数や関数の型31
1、名称312、アドレス313などの情報から成り、
検索キーを必要としないグローバルスコープ表31、フ
ァイル名21を検索キーとするファイルスコープー表3
2、ファイル名21と関数名22および行番号23を検
索キーとするローカルスコープ表33から構成されてい
る。
【0022】なお、これらの現在位置情報2およびシン
ボル情報3は、プログラム中断時点で既知であるが、具
体的には、メモリに格納され、容易に参照することがで
きるものである。
【0023】図3は、一文実行処理の流れを示すフロー
チャートである。
【0024】まず、利用者によって図2に示すように、
変数v1,v2,v3を使用した「v1=v2+v
3;」という一文1が入力されたものと仮定する。
【0025】この仮定において、まず、ステップ101
では、ソースコード挿入部5が一文1を読み込み、現在
位置情報2のファイル名21=fn1、関数名22=f
c1、行番号23=ln1を検索キーとしてローカルス
コープ表33を検索し、この表33に登録されている変
数の宣言文「int v3;」,「int v4;」を
ソースコード形式511でソースコードファイル4に出
力する。
【0026】次に、ソースコード挿入部5が現在位置情
報2のファイル名21=fn1を検索キーとしてファイ
ルスコープ表32を検索し、ここに登録されている変数
の宣言文「char v2;」をソースコードの形式5
12でソースコードファイル4に出力する。
【0027】この場合、ファイルスコープ表32には、
図2の例では「char v3;」という宣言が存在す
るが、変数v3については既にローカルスコープ表33
から取得しているため、「char v3;」は採用し
ない。
【0028】すなわち、ローカルスコープ表33の存在
する変数がプログラム中断時点の文脈を最も反映してい
るので、ローカルスコープ表33で変数の型、名称が解
決した変数については、ローカルスコープ表33のもの
を優先採用する。
【0029】最後に、ソースコード挿入部5がグローバ
ルスコープ表31に登録されている変数の宣言文「in
t v1;」をソースコード形式513でソースコード
ファイル4に出力する。
【0030】次に、ステップ102では、ソースコード
挿入部5は入力された一文1をダミーの関数ブロック5
14で囲んだソースコード51をソースコードファイル
4に出力する。
【0031】このダミー関数ブロック514は、構文エ
ラーを防止するためのものであり、意味エラーを防止す
るために挿入したソースコード511,512,513
とは直接の関係はない。
【0032】次に、ステップ103では、前述した方法
で出力された一文ソースコードファイル4からソースコ
ード51を構文・意味解析部7が読み込み、これを一括
翻訳し、命令コード611,アドレス612,名前61
3から成る仮想中間語レコード6として出力する。
【0033】このとき、仮想中間語レコード6中の変数
v3,v2,v1にはアドレス612を割り当てない。
【0034】次に、ステップ104では、仮想中間語変
換部9が仮想中間語レコード6を読み込み、インタプリ
タが逐次解釈・実行可能な仮想中間語8を生成する。
【0035】このとき、仮想中間語8は命令コード81
1,アドレス812,名前813で構成されるが、仮想
中間語変換部9はアドレス812が割当てられていない
変数v3,v2,v1に対して現在位置情報2のファイ
ル名fn1,関数名fc1,行番号ln1を検索キーと
して最初にローカルスコープ表33を検索し、その中に
同じ名称の変数があれば、その変数のアドレスを割り当
てる。
【0036】これによって、図2の例では、変数v3に
対してアドレスa4が割り当てられる。
【0037】次に、現在位置情報2のファイル名fn1
からファイルスコープ表32を検索し、その中に同じ名
称の変数があれば、その変数のアドレスを割り当てる。
【0038】これによって、図2の例では、変数v2に
対してアドレスa2が割り当てられる。
【0039】最後に、グローバルスコープ表31を検索
し、残りの変数v1のアドレスa1を同様にして割り当
てる。
【0040】この変数のアドレスの割当て方法も、変数
の型や名称の割当て方法と同様、プログラム中断時点の
文脈を最も反映しているローカルスコープ表33の中の
変数のアドレスを優先採用する。
【0041】仮想中間語変換部9は、このようにして
「C」や「C++」言語仕様にしたがって変数の参照関
係(型、名称、アドレス)が解決された仮想中間語8を
出力する。
【0042】ステップ105では、逐次解釈・実行部6
において仮想中間語3の一文の先頭から解釈・実行する
ことによって一文実行を実現する。
【0043】なお、ダミーの関数ブロックは、一文実行
後は消去される。
【0044】ところで、上記実施例においては、一文を
「;」(セミコロン)で終わる単位とし、「v1=v2
+v3;」という一文を新たに挿入した例を示したが、
本発明はこれに限らず、プログラム中断時点で例えば、
「v1=v2+v3; v4=v3+100;」とい
う2つの文を挿入することが可能である。このような場
合も同様にして変数の参照関係が解決される。
【0045】
【発明の効果】以上のように本発明によれば、プログラ
ム中断時点で新たに入力された一文に対して参照が解決
されていない変数等の宣言文のソースコードを挿入し、
それを一括翻訳して参照が解決されていない仮想中間語
を生成した後、この仮想中間語が参照する変数に対し
て、中断しているプログラム中の変数の中から中断点の
文脈に合致する変数を割り当てることによって参照の解
決された仮想中間語に変換し、この参照の解決された仮
想中間語によって一文の実行を行うようにしたので、一
文実行を行う際に、既存のコンパイラによって一括翻訳
しても構文エラーあるいは意味エラーが生じなくなる。
このため、コンパイラの構文・意味解析部を複雑にする
ことなく、一文実行を短時間で行うことができる。ま
た、インタプリタが実行する一文は、ライブラリ関数に
限定されず、汎用性が拡大する。
【0046】特に、構文・意味解析部に構文エラー対策
用の特別の処理を組み込む必要がなくなったことによ
り、構文・意味解析部をコンパイラとインタプリタとで
共用できる。この結果、インタプリタによる対話的な一
文実行をコンパイラと同じ言語仕様で容易に実現できる
という効果がある。
【図面の簡単な説明】
【図1】本発明を実現するインタプリタの一実施例を示
す機能構成図である。
【図2】実施例におけるデータの流れを示す説明図であ
る。
【図3】実施例における一文実行手順を示すフローチャ
ートである。
【符号の説明】
1……一文、2…現在位置情報、3…シンボル情報、4
…一文用ソースコードファイル、5…ソースコード挿入
部、6…仮想中間語レコード、7…構文・意味解析部、
8…仮想中間語、9…仮想中間語変換部、10…逐次解
釈・実行部。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 入力されたプログラムをコンパイラによ
    って一括翻訳し、生成された仮想中間語を逐次解釈・実
    行する一文実行方法であって、 入力されたプログラムの実行中断時点で新たに入力され
    た一文に対し、その一文中で参照が解決されていない変
    数等の型、名称を実行中断時点において既知の変数等の
    型、名称の中から取得し、この取得した変数等の型、名
    称を前記参照が解決されていない変数等の型、名称に代
    えてソースコード形式で新たに入力された一文の前後に
    挿入し、それを一括翻訳して参照アドレスが解決されて
    いない仮想中間語を生成した後、この仮想中間語が参照
    する変数に対して、中断しているプログラムの既知の変
    数の中から中断点の文脈に合致する変数のアドレスを割
    り当てることによって参照アドレスの解決された仮想中
    間語に変換し、この参照アドレスの解決された仮想中間
    語によって一文の実行を行うことを特徴とする一文実行
    方法。
JP6305970A 1994-12-09 1994-12-09 一文実行方法 Pending JPH08161179A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP6305970A JPH08161179A (ja) 1994-12-09 1994-12-09 一文実行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6305970A JPH08161179A (ja) 1994-12-09 1994-12-09 一文実行方法

Publications (1)

Publication Number Publication Date
JPH08161179A true JPH08161179A (ja) 1996-06-21

Family

ID=17951500

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6305970A Pending JPH08161179A (ja) 1994-12-09 1994-12-09 一文実行方法

Country Status (1)

Country Link
JP (1) JPH08161179A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4880121B2 (ja) * 1998-08-13 2012-02-22 オラクル・アメリカ・インコーポレイテッド バーチャル・マシン環境でネイティブ・コードを変換し、実行する方法および装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4880121B2 (ja) * 1998-08-13 2012-02-22 オラクル・アメリカ・インコーポレイテッド バーチャル・マシン環境でネイティブ・コードを変換し、実行する方法および装置

Similar Documents

Publication Publication Date Title
Chow A portable machine-independent global optimizer--Design and measurements
US5606697A (en) Compiler system for language processing program
US5701487A (en) Method and apparatus for displaying locations of errors detected inside software macro calls
US5586328A (en) Module dependency based incremental compiler and method
JP2666847B2 (ja) 異種言語間連絡方式
JPH08202545A (ja) ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法
JPH05197685A (ja) ウィンドウ化ユーザ・インタフェースの複数言語による翻訳を支援するシステム及び方法
US7080370B1 (en) Method and apparatus for compiling source programs using one or more libraries
JPH08161179A (ja) 一文実行方法
JP3327674B2 (ja) プログラム翻訳装置及び方法
JPH07182179A (ja) オブジェクト指向データベース管理装置
JPH10187461A (ja) 言語処理方式
GB2420638A (en) Method of substituting code fragments in Internal Representation
Pettersson et al. DML-a meta-language and system for the generation of practical and efficient compilers from denotational specifications.
JPS5922140A (ja) 対話型コンパイル方式
JP3003459B2 (ja) プログラム作成支援装置
JP2720643B2 (ja) プログラムジェネレータ生成装置
Amal et al. Software tool for translating pseudocode to a programming language
JP2977642B2 (ja) Fortranコンパイル処理装置
Lam Practical Performance Enhancements to the Evaluation Model of the Hazel Programming Environment
CN112579088A (zh) 面向异构混合编程的一站式程序编译方法
JPH07105014A (ja) 言語処理システムのシンボル処理方式
JPH05120025A (ja) ソースプログラムのインライン展開方法
JP2000132405A (ja) インライン展開処理装置及び方法
JPH05313909A (ja) 中間コードインライン展開機能を有するコンパイラシステム