JPH1185531A - 言語処理装置およびその言語処理装置を実現するプログラムが記録された記憶媒体 - Google Patents

言語処理装置およびその言語処理装置を実現するプログラムが記録された記憶媒体

Info

Publication number
JPH1185531A
JPH1185531A JP23857997A JP23857997A JPH1185531A JP H1185531 A JPH1185531 A JP H1185531A JP 23857997 A JP23857997 A JP 23857997A JP 23857997 A JP23857997 A JP 23857997A JP H1185531 A JPH1185531 A JP H1185531A
Authority
JP
Japan
Prior art keywords
area
code
argument
stack
program
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.)
Withdrawn
Application number
JP23857997A
Other languages
English (en)
Inventor
Hidehiko Komiyama
英彦 小宮山
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 JP23857997A priority Critical patent/JPH1185531A/ja
Publication of JPH1185531A publication Critical patent/JPH1185531A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 本発明は、言語処理装置とその言語処理装置
を実現するプログラムが記録された記憶媒体とに関し、
演算所要時間の短縮をはかることを目的とする。 【解決手段】 プログラムの解析処理を行う解析処理手
段と、その結果に基づいて、プログラムを目的プログラ
ムに変換するコード生成手段と、引数を伴ってサブルー
チンを呼び出す個々の文を検出する検出手段と、検出さ
れた個々の文について、主記憶に配置された2つの領域
を割り付け、これらの領域のポインタを復帰アドレスと
共にスタック領域に待避するコードを生成するスタック
制御手段と、個々の文の引数の値を求め、これらの値を
2つの領域の内、一方の領域に待避するコードを生成す
る引き渡し手段と、待避される各引数について、待避先
の領域のポインタをサブルーチンの局所変数に対応付け
て第二の領域に待避するコードを生成する局所変数イン
ターフェース手段とを備えて構成される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、所定の言語で記述
されたプログラムを機械語またはその機械語に近い水準
の言語に翻訳し、あるいは実行する言語処理装置と、そ
の言語処理装置を実現するプログラムが記録された記憶
媒体とに関する。
【0002】
【従来の技術】近年、パーソナルコンピュータ等の情報
処理装置が低廉化されて広く普及し、これらの情報処理
装置によって実行されるべきワードプロセッサ、表計
算、データベース、CADその他の多様なソフトウエア
パッケージが流通しつつある。また、このようなソフト
ウエアパッケージの内、特に、ビジネスに供される多く
のものについては、定型のルーチンワークの自動化や煩
雑な作業の省力化を実現するアプリケーションの開発に
最適な簡易言語が組み込まれ、あるいはオプションのパ
ッケージとして別途提供されるために、その簡易言語が
適用された所望のアプリケーションシステムの開発を請
け負う付加価値再販の市場も拡大されつつある。
【0003】図4は、簡易言語に適応した言語処理系の
構成例を示す図である。図において、ソースファイルが
格納された第一の外部記憶装置51は情報処理装置52
に所定のインターフェースを介して接続され、その情報
処理装置52には、同様に所定のインターフェースを介
してプリンタ53と第二の外部記憶装置54とが接続さ
れる。
【0004】このような構成の言語処理系では、第一の
外部記憶装置51には、例えば、図5に示すように、既
述のソフトウエアパッケージに組み込まれたインタープ
リータ型の言語で記述されたソースプログラムが予め格
納される。なお、図5に示すソースプログラムを構成す
る個々のステートメントについては、以下では、同図の
最左桁に「:」に先行して示されるステートメント番号
を併記することによって、例えば、ステートメント番号
「1」のステートメントを「ステートメント1」と標記
することとする。
【0005】また、情報処理装置52は、操作者が与え
る指示に応じて第一の外部記憶装置51からソースプロ
グラムを読み出し、そのソースプログラムについて、上
述したインタプリータの構文規則に基づいて字句解析、
構文解析および意味解析を行うと共に、これらの解析の
結果として順次生成されたコードを実行する。ところ
で、上述した簡易言語で記述されたプログラムについて
は、プログラミングは必ずしもソフトウエアを専門とす
る技術者によっては行われず、かつデバッグに適用可能
なツールに制約がある。
【0006】したがって、このような簡易言語について
は、(a) 所定のプログラム定義が揃っている限りプログ
ラムの全体が完成していない状態であっても実行が可能
であり、(b) その実行の結果に基づいて部分的にプログ
ラムの修正や試験が可能であることに併せて、(c) 実行
中にプログラムの定義を適宜変更できること、が要求さ
れる。
【0007】さらに、その簡易言語では、プログラムの
冗長性が許容されることによってプログラミングを容易
とし、かつ上述した修正、試験、変更等の効率的な実現
を可能とするために、変数(配列を含む。)、サブルー
チン等のポインタ、定数を示す識別子の属性(語長その
他の形式)、有効範囲、初期値その他を定義する宣言文
の省略が許容される。
【0008】したがって、情報処理装置52は、例え
ば、ステートメント4の字句解析および構文解析の処理
の過程では、CALL命令によってサブルーチンSUB
が呼び出されるべきことを認識すると、『そのサブルー
チンSUBの引数#a1、#a2、#a3 の個々(以下で
は、簡単のため、添え番号k(=1〜3)に対応付けて
「#ak」と標記する。)について、<1> 図6(a) に網掛
けを付して示すように、実行時におけるスタックポイン
タのカレント値Pk で示される第一のスタックの領域に
プッシュダウンする(図7(1))処理と、<2> 図6(b) に
示すように、その第一のスタック領域に対応した第二の
スタックの領域(アドレス##kで示される。)にポイ
ンタ値Pk をプッシュダウンする(図7(2))処理と、を
順次行う』コードを生成する。
【0009】なお、第二のスタックの領域については、
ここでは、簡単のため、所定の領域管理の下で割り付け
られると仮定する。情報処理装置52は、『全ての引数
#a1、#a2、#a3 について、上述した処理(1)、(2)を
行う(図7(3))』コードを生成すると、(A) 『図6(a)
に示すように、実行時におけるスタックポインタのカレ
ント値(=Pk+3=P4)で示される第一のスタック
領域に、後続するステートメント5のアドレスを示すリ
ターンアドレス(復帰アドレス)と、先頭の引数#a1
の値が書き込まれた第一のスタックの領域のポインタ値
P1とを順次プッシュダウンし(図7(4))、(B) さら
に、第一のスタック領域に、図6(c)に網掛けを付して
示すように、第二のスタック領域に先行してプッシュダ
ウンされたポインタ値P1、P1+1、P1+2(P1〜P3)
を順次プッシュダウンする(図7(5))と共に、(C) ステ
ートメント100に配置されたサブルーチンSUBに分
岐する(図7(6)) 』コードを生成すると共に、このよう
にしてステートメント4について生成された一連のコー
ドを一括して実行する。
【0010】なお、情報処理装置52は、図8に示すよ
うに、個々の定数や変数を示すユニークな識別子に対応
して実際の値とその値が格納された領域のポインタ値と
を示す変数テーブル61を有する。さらに、情報処理装
置52は、ソースプログラム中に登場した変数について
は、その変数に割り付けられた領域のポインタ値を対応
する識別子と共に変数テーブル61に登録する。また、
情報処理装置52は、全ての変数について、実行時に値
とポインタ値との何れか一方または双方が設定され、あ
るいは更新されると変数テーブル61に登録されたこれ
らの値を逐次更新することによって、後続して実行され
るべきステートメントの実行時環境を整える。
【0011】一方、サブルーチンSUBを構成するステ
ートメントの内、ステートメント101、103の字句
解析および構文解析の過程では、情報処理装置52は、
文字列「##」を先頭に含む変数を上位ルーチンから引
き渡された引数の参照に適用されるべきポインタ型の変
数であると認識し、例えば、「##1」については、
『識別子「##1」に対応付けられて変数テーブル61
に登録されたポインタ値P6を求め、そのポインタ値P
6で示される主記憶の領域(第一のスタック領域)を参
照することによってポインタP1を取得すると共に、そ
のポインタP1で示される第一のスタック領域を参照す
ることによって引数#a1 の値を参照する』コードを生
成する。
【0012】すなわち、上位ルーチンMAINで何ら宣
言されることなく適用された局所変数#a1、#a2、#a
3 は、スタック領域を介して確実に引数として引き渡さ
れ、かつその上位ルーチンMAINおよびサブルーチン
SUBにおいて確実に参照される。したがって、サブル
ーチンSUBが実行される過程では、そのサブルーチン
SUBが再入可能であり、あるいは再帰的に呼び出され
る場合であっても、上述した引数の引き渡しに適用され
るスタック領域が確実に確保される限り、上位ルーチン
によって指定された引数に適応した処理が行われる。
【0013】また、上述したように生成されたコードに
ついては、情報処理装置52は、操作者が与える指示に
応じて適宜第二の外部記憶装置54にファイルとして保
存し、あるいはプリンタ53を介してリストとして出力
する。
【0014】
【発明が解決しようとする課題】しかし、上述した従来
例では、例えば、ステートメント4に示される引数#a
3 やステートメント6に示される引数#a5 のように、
先行して何ら宣言されていない変数がサブルーチンSU
Bの引数として適用された場合には、これらのステート
メントの字句解析や構文解析の処理の過程では、情報処
理装置52は、先ず該当する変数について、『領域を割
り付け、かつ変数テーブル61にポインタ値および値
(デフォルト値として与えられる。)を登録した後に、
第二のスタック領域から第一のスタック領域に対する変
数(ポインタ値)##1〜##3の再配置を行う』コー
ドを生成し、さらに、そのコードを実行する。
【0015】したがって、先行して何ら定義されていな
い引数が適用されたサブルーチンの呼び出しが反復して
行われる場合には、実行所要時間が大幅に増加して実用
的な処理速度が確保できない可能性があった。本発明
は、字句解析や構文解析の処理の手順が大幅に変更され
ることなく、確実に演算所要時間の短縮がはかられる言
語処理装置および記憶媒体を提供することを目的とす
る。
【0016】
【課題を解決するための手段】図1は、請求項1〜4に
記載の発明の原理ブロック図である。請求項1に記載の
発明は、所定の言語で記述されたプログラムの解析処理
を行う解析処理手段11と、解析処理の結果に基づい
て、プログラムを目的プログラムに変換するコード生成
手段12とを備え、解析処理手段11は、プログラムを
なす文の内、引数を伴ってサブルーチンを呼び出す個々
の文を解析処理の手順に基づいて検出する検出手段13
を有し、コード生成手段12は、検出手段13によって
検出された個々の文について、主記憶に配置され、かつ
空いている2つの領域を予め決められた領域管理の下で
割り付け、これらの2つ領域の位置を個別に示すポイン
タを復帰アドレスと共にスタック領域に退避するコード
を生成するスタック制御手段14と、検出手段13によ
って検出された個々の文に順に示される引数の値を解析
処理の結果に基づいて求め、これらの値をスタック制御
手段14によって割り付けられた2つの領域の内、一方
の領域に退避するコードを生成する引き渡し手段15
と、引き渡し手段15によって生成されたコードに応じ
て一方の領域に順次退避される個々の引数について、そ
の一方の領域の内、退避先となった領域のポインタをサ
ブルーチンで参照される局所変数に対応付け、かつ他方
の領域に退避するコードを生成する局所変数インターフ
ェース手段16とを有することを特徴とする。
【0017】請求項2に記載の発明は、請求項1に記載
の言語処理装置において、スタック制御手段14は、検
出手段13によって検出された個々の文がプログラムを
構成する最上位のルーチンであるか否かを判別し、その
判別の結果が真であるときに、2つの領域の内、一方の
領域の位置を示すポインタをスタック領域に退避し、か
つ他方の領域の位置を示すポインタと復帰アドレスとの
組み合わせを一定の順序でそのスタック領域に退避する
ことを特徴とする。
【0018】請求項3に記載の発明は、請求項1または
請求項2に記載の言語処理装置において、引き渡し手段
15と局所変数インタフェース手段16との双方または
何れか一方は、退避先となる領域の余剰のサイズを監視
し、そのサイズが退避の対象となる情報の情報量を下回
るときに、その領域をさらに大きな代替の領域に置換す
る手段を含むことを特徴とする。
【0019】請求項4に記載の発明は、所定の言語で既
述されたプログラムをなす文の内、引数を伴ってサブル
ーチンを呼び出す個々の文を解析処理の手順に基づいて
検出する検出手段13を含み、かつそのプログラムの解
析処理を行う解析処理手段11と、検出手段13によっ
て検出された個々の文について、主記憶に配置され、か
つ空いている2つの領域を予め決められた領域管理の下
で割り付け、これらの2つ領域の位置を個別に示すポイ
ンタを復帰アドレスと共にスタック領域に退避するコー
ドを生成するスタック制御手段14、検出手段13によ
って検出された個々の文に順に示される引数の値を解析
処理の結果に基づいて求め、これらの値をスタック制御
手段14によって割り付けられた2つの領域の内、一方
の領域に退避するコードを生成する引き渡し手段15、
引き渡し手段15によって生成されたコードに応じて一
方の領域に順次退避される個々の引数について、その一
方の領域の内、退避先となった領域のポインタをサブル
ーチンで参照される局所変数に対応付け、かつ他方の領
域に退避するコードを生成する局所変数インターフェー
ス手段16を有し、解析処理の結果に基づいて、プログ
ラムを目的プログラムに変換するコード生成手段12と
からなる言語処理装置を構成する情報処理装置としてコ
ンピュータを機能させるプログラムが格納され、かつコ
ンピュータ読み取りが可能である。
【0020】請求項1に記載の発明にかかわる言語処理
装置では、解析処理手段11は、所定の言語で記述され
たプログラムの解析処理を行う。コード生成手段12
は、その解析処理の結果に基づいて、上述したプログラ
ムを目的プログラムに変換する。また、上述した解析処
理の過程では、検出手段13は、プログラムを構成する
文の内、引数を伴ってサブルーチンを呼び出す個々の文
をその解析処理の手順に基づいて検出する。
【0021】スタック制御手段14は、このようにして
検出された個々の文について、主記憶に配置されて空い
ている2つの領域を予め決められた領域管理の下で割り
付け、これらの2つ領域の位置を個別に示すポインタを
復帰アドレスと共にスタック領域に退避するコードを生
成する。さらに、引き渡し手段15は、検出手段13に
よって検出された個々の文に順に示される引数の値を上
述した解析処理の結果に基づいて求め、これらの値をス
タック制御手段14によって割り付けられた2つの領域
の内、一方の領域に退避するコードを生成する。
【0022】また、局所変数インタフェース手段16
は、引き渡し手段15によって生成されたコードに応じ
て一方の領域に順次退避される個々の引数について、そ
の一方の領域の内、退避先となった領域のポインタをサ
ブルーチンで参照される局所変数に対応付け、かつ他方
の領域に退避するコードを生成する。すなわち、引数と
その引数が格納された領域のポインタとが主記憶に割り
付けられた2つの領域に個別に対応付けられて格納さ
れ、かつスタック領域に複写されることなく確実にサブ
ルーチンに引き渡されるので、このような複写が行われ
ていた従来例に比べて実行所要時間が短縮される。
【0023】請求項2に記載の発明にかかわる言語処理
装置では、請求項1に記載の言語処理装置において、ス
タック制御手段14は、検出手段13によって検出され
た個々の文がプログラムを構成する最上位のルーチンで
あるか否かを判別し、その判別の結果が真であるとき
に、2つの領域の内、一方の領域の位置を示すポインタ
をスタック領域に退避し、かつ他方の領域の位置を示す
ポインタと復帰アドレスとの組み合わせを一定の順序で
そのスタック領域に退避する。
【0024】すなわち、スタック領域には、最上位のル
ーチンについては、上述した一方の領域の位置を示すポ
インタが格納され、かつ必要に応じて疑似的な復帰アド
レスが格納されるべき領域が確保されるが、その最上位
のルーチンによって順次呼び出されるサブルーチンにつ
いては、上位ルーチンに対する復帰アドレスと第二の領
域との組み合わせが一定の順序で退避される。さらに、
何らかの下位のサブルーチンを呼び出すサブルーチンに
ついては、先行してスタック領域に退避された第二の領
域がその下位のサブルーチンに対する引数の引き渡しに
供される第一の領域として共用される。
【0025】したがって、スタック領域に退避される情
報の順列が統一されることによって、コードの標準化と
処理の効率化とがはかられる。請求項3に記載の発明に
かかわる言語処理装置では、請求項1または請求項2に
記載の言語処理装置において、引き渡し手段15と局所
変数インタフェース手段16との双方または何れか一方
は、退避先となる領域の余剰のサイズを監視し、そのサ
イズが退避の対象となる情報の情報量を下回るときに、
その領域をさらに大きな代替の領域に置換する。
【0026】すなわち、サブルーチンに引き渡されるべ
き変数の数や情報量を確実に予測することが困難である
場合であっても、これらの変数の引き渡しに供される2
つの領域のサイズが適宜拡大されるので、コンパイルが
確度高く行われる。
【0027】請求項4に記載の発明にかかわる記憶媒体
は、請求項1に記載の言語処理装置と構成が同じである
情報処理装置としてコンピュータを機能させるプログラ
ムが格納され、かつコンピュータ読み取りが可能であ
る。このようなプログラムは、上述した情報処理装置に
よって実行されるべきソフトウエアまたはその情報処理
装置に組み込まれたマイクロプログラムとして構成可能
であり、このような情報処理装置とは別体の着脱可能な
記憶媒体に記録されることによって流通し得る。
【0028】したがって、本発明にかかわる記憶媒体か
らこのようなプログラムを読み取って実行するコンピュ
ータは、上述した情報処理装置の構成要素となる。
【0029】
【発明の実施の形態】以下、図面に基づいて本発明の実
施形態について詳細に説明する。
【0030】以下に示す各実施形態のハードウエアの構
成については、図4に示す従来例の構成と同じであるか
ら、ここではその説明を省略する。なお、本実施形態と
図1に示すブロック図との対応関係については、解析処
理手段11、コード生成手段12、検出手段13、スタ
ック制御手段14、引き渡し手段15および局所変数イ
ンタフェース手段16は情報処理装置52に対応する。
【0031】図2は、本実施形態においてサブルーチン
に引数を引き渡すために行われる処理の手順を示す図で
ある。以下、図2、図4、図5および図8を参照して、
請求項1、2に記載の発明に対応した本実施形態の動作
を説明する。第一の外部記憶装置51には、図5に示す
ソースプログラムがファイルとして格納され、そのソー
スプログラムを実行するためにステートメント単位に行
われる字句解析および意味解析の処理の過程では、情報
処理装置52は、引数を伴うCALL命令を識別する
と、『例えば、オペレーティングシステムに対してシス
テムコールを発することによって、主記憶に割り付けら
れたスタック領域の内、引数の引き渡しに供されるべき
所望のサイズの2つの領域(以下、それぞれ「第一の領
域」、「第二の領域」という。)を確保し(図2(1))、
かつこれらの領域の先頭を示すポインタP11、P12を取
得する(図2(2))と共に、これらのポインタP11、P12
をスタックポインタのカレント値で示されるスタック領
域に順次退避する(図2(3)、図3(1),(2))』コードを
生成する。
【0032】さらに、情報処理装置52は、『個々の引
数(例えば、ステートメント4に示される引数#a1、#
a2、#a3)について、(1) その引数の識別子を検索キー
として変数テーブル61に対して検索処理を施し(図3
(4))、(2) 該当する識別子で示される引数が既に変数テ
ーブル61に登録されている場合には、その値を変数テ
ーブル61から取得して第一の領域にプッシュダウンす
る(図2(5)、図3(3))が、(3) 反対に、登録されてい
ない場合には、従来例と同様にして該当する引数の識別
子および値を変数テーブル61に登録し(図2(6))、か
つその変数のデフォルト値(ここでは、簡単のため
「0」であると仮定する。)を第一の領域にプッシュダ
ウンする(図2(7)、図3(3))と共に、(4) 何れの場合
にもその第一の領域のポインタ値P-k1 を変数テーブル
61に併せて登録した(図2(8))後に、(5) そのポイン
タ値P-k1 を第二の領域にプッシュダウンする(図2
(9)、図3(4))し、(6) CALL命令に適用された引数
の順位k(=1、2、…)に対して「##k」で示され
る識別子を有し、さらに、上述した第一の領域のポイン
タ値P-k1を値として有すると共に、そのポインタ値P-
k1 がプッシュされた第二の領域のポインタ値P-k2 を
ポインタ値として有するポインタ属性の変数##kを変
数テーブル61に登録する(図2(10)) ことを反復す
る』、コードを生成する。
【0033】また、情報処理装置52は、上述した一連
のコードを生成した後には、『後続するステートメント
5を示すポインタ値をスタックポインタのカレント値で
示されるスタック領域にリターンアドレスとして退避す
る(図2(1)、図3(5))』コードを生成し、かつこのよう
にして生成された一連のコードを一括して実行する。な
お、サブルーチンSUBを構成するステートメント10
1、103の字句解析および意味解析の過程について
は、情報処理装置52は、『変数テーブル61を参照す
ることによって変数##1、##2を参照する』コード
を従来例と同様にして生成する。
【0034】また、更新される個々の変数にかかわる変
数テーブル61については、個々のステートメントの字
句解析、意味解析過程では、『従来例と同様にして更新
する』コードが生成されるので、ここではその詳細な説
明を省略する。さらに、ステートメント104に示すR
ETURN命令の字句解析および意味解析の過程では、
情報処理装置52は、『スタックポインタのカレント値
で示されるスタック領域からリターンアドレスおよびポ
インタP12、P11を順次ポップアップする(図2(12))
ことによって取得し、そのポインタP12で示される第二
の領域を開放する(図2(13))(例えば、オペレーティン
グシステムにシステムコールを発することによって行
う。)と共に、変数テーブル61に登録された変数の
内、ポインタ値がその第二の領域の何れかに該当する全
ての変数(識別子「##1」〜「##3」で示され
る。)を削除した(図2(14)) 後に、リターンアドレス
に分岐する(図2(15)) 』コードを生成する。
【0035】このように本実施形態によれば、従来例で
行われていた「スタック領域に対するポインタ型の変数
##1〜##3の再配置」が伴われることなく、第一の
領域および第二の領域のサイズを超えない限りにおいて
多くの引数がサブルーチンに対して上位ルーチンから確
実に引き渡される。以下、図2、図4、図5および図8
を参照して、請求項3、4に記載の発明に対応した本実
施形態の動作を説明する。
【0036】本実施形態と請求項1、2に記載の発明に
対応した実施形態との相違点は、情報処理装置52が字
句解析および意味解析の過程において行う下記の処理に
ある。情報処理装置52は、引数を伴うCALL命令を
識別すると、請求項1、2に記載の発明に対応した実施
形態と同様にして『第一の領域および第二の領域を確保
してこれらの領域の先頭を示すポインタP11、P12を取
得し、かつこれらのポインタP11、P12をスタックポイ
ンタのカレント値で示されるスタック領域に順次退避す
る(図2(1)〜(3)) 』コードを生成する。
【0037】さらに、情報処理装置52は、個々の引数
(例えば、ステートメント4に示される引数#a1、#a
2、#a3)については、原則として『請求項1、2に記載
の発明に対応した実施形態と同様にして既述の処理(1)
〜(5)(図2(4)〜(10))を反復する』コードを生成す
る。しかし、これらの処理(1)〜(5)の内、処理(2)、(3)
(図2(5)〜(7)) については、情報処理装置52は、
『第一の領域について、[1] 余剰の領域のサイズを監視
しつつそのサイズとプッシュダウンされるべき引数の値
を示す語の語長とを比較し、[2] 前者が後者を上回る場
合には、請求項1、2に記載の発明に対応した実施形態
と同様の処理(図2(5)、(7))を行うが、反対に下回る場
合には、予め決められた定数に亘って大きなサイズを指
定することによって第一の領域に代わる第一の代替領域
を確保し(例えば、請求項1、2に記載の発明に対応し
た実施形態と同様にしてシステムコールを発することに
よって)、[3] 第一の領域の内容(先行して認識された
引数の全ての値)を第一の代替領域に一括して複写する
と共に、[4] 変数テーブル61に既に登録されたポイン
タ値の内、第一の領域に該当するものの全てに「第一の
領域に対する第一の代替領域のポインタ値のオフセット
値」を一括して加算する』、コードを付加する。
【0038】さらに、処理(5)(図2(9))については、情
報処理装置52は、『第二の領域について、 余剰の領域のサイズを監視しつつそのサイズとプッ
シュされるべきポインタ値P-k1 を示す語の語長とを比
較し、 前者が後者を上回る場合には、請求項1、2に記載
の発明に対応した実施形態と同様の処理を行うが、反対
に下回る場合には、予め決められた定数に亘って大きな
サイズを指定することによって第二の領域に代わる第二
の代替領域を確保し(例えば、請求項1、2に記載の発
明に対応した実施形態と同様にしてシステムコールを発
することによって)、 かつ第二の領域の内容(先行してプッシュされたポ
インタ型の変数の全ての値)を第二の代替領域に一括し
て複写すると共に、 変数テーブル61に既に登録されたポインタ値の
内、第二の領域に該当するものの全てに「第二の領域に
対する第二の代替領域のポインタ値のオフセット値」を
一括して加算する』、 コードを付加する。
【0039】このように本実施形態によれば、配列等の
ように語長が大きい引数や多くの引数が確実に所望のサ
ブルーチンに引き渡されるので、プログラミングの自由
度が大幅に高められる。なお、上述した各実施形態で
は、ソースプログラムをステートメント単位に中間言語
で記述されたコードに変換しつつ実行するインタプリー
タ型の言語処理系に請求項1〜3に記載の発明が適用さ
れているが、これらの発明は、例えば、意味解析の結果
に応じて仮想計算機の機械語、その他の中間言語に適応
したコード生成を行うトランスレータ、あるいはそのコ
ード生成の過程で得られるコードに等価な演算をステー
トメント単位に直接行うインタープリータにも同様にし
て適用可能である。
【0040】また、上述した各実施形態では、生成され
たコードが情報処理装置52によってソフトウエアとし
て実行されているが、これらのコードは、その情報処理
装置52のマイクロプログラムによって順次実行されて
もよい。
【0041】さらに、上述した各実施形態では、ポイン
タP11、P12がスタック領域の隣接する領域に順次プッ
シュダウンされているが、例えば、図3に網掛けを付し
て示すように、最上位のルーチンMAINによってサブ
ルーチンSUBが呼び出される場合には、さらに上位の
ルーチンに対するリターンポイントが存在しないので、
『そのリターンポイントが格納されるべきスタック領域
に何ら書き込みを行わない』コードが生成されることに
よって、「サブルーチンの呼び出しのネスティングに応
じてスタック領域のアクセスされるアルゴリズム」が標
準化されてもよい。
【0042】また、上述した各実施形態では、第一の領
域、第二の領域、第一の代替領域、第二の代替領域の全
てがスタック領域の空いている空間に配置されている
が、アドレッシングが確実に行われるならば、これらの
第一の領域、第二の領域、第一の代替領域、第二の代替
領域は、主記憶領域の他の領域に配置されてもよい。さ
らに、上述した各実施形態では、オペレーティングシス
テムが資源として管理するメモリープールの内、空いて
いる領域を割り付けるべきことを要求するシステムコー
ルに応じて第一の領域および第二の領域が確保されてい
るが、これらの第一の領域および第二の領域について
は、請求項1〜3にかかわるインタプリータやコンパイ
ラがオペレーティングシステムを介することなく行う領
域管理の下で適宜割り付けられてもよい。
【0043】また、上述した各実施形態では、ソフトウ
エアパッケージに搭載されたインタプリータ型の簡易言
語が示されているが、本発明は、このような簡易言語に
限定されず、汎用の言語処理系にも同様にして適用可能
である。さらに、上述した各実施形態では、『ポインタ
型の変数##1、##2、…の引き渡しに供される第二
の領域がサブルーチンからリターンする度に開放され、
かつ変数テーブル61に登録されたこれらの変数##
1、##2、…が削除されてる』コードが生成されてい
るが、例えば、後続して何らかのサブルーチンに対して
引数が引き渡されることが明らかである場合には、この
ようなコードの生成が省略され、かつ『初期設定とし
て、変数テーブル61に予め決められた数のポインタ型
の変数を定義し、これらの変数に対応した第二の領域を
予め登録する』コードが生成されてもよい。
【0044】
【発明の効果】上述したように請求項1に記載の発明で
は、従来例に比べて実行所要時間が短縮される。また、
請求項2に記載の発明では、スタック領域に退避される
情報の順列が統一されることによって、コードの標準化
と処理の効率化とがはかられる。
【0045】さらに、請求項3に記載の発明では、サブ
ルーチンに引き渡されるべき変数の数や情報量を確実に
予測することが困難である場合であっても、これらの変
数の引き渡しに供される2つの領域のサイズが適宜拡大
されるので、コンパイルや実行が確度高く行われる。ま
た、請求項4に記載の発明では、請求項1に記載の言語
処理装置と構成が同じである言語処理装置がコンピュー
タによって確実に実現される。
【0046】したがって、これらの発明が適用された情
報処理システムでは、言語処理の信頼性が損なわれるこ
となくプログラミングの冗長性が許容され、かつ適用さ
れたアプリケーションシステムの開発が迅速化されると
共に、そのアプリケーションに基づく業務の応答性が高
められる。
【図面の簡単な説明】
【図1】請求項1〜4に記載の発明の原理ブロック図で
ある。
【図2】本実施形態においてサブルーチンに引数を引き
渡すために行われる処理の手順を示す図である。
【図3】本実施形態において局所変数に割り付けられる
記憶領域を示す図である。
【図4】簡易言語に適応した言語処理系の構成例を示す
図である。
【図5】ソースプログラムの一例を示す図である。
【図6】従来例においてサブルーチンに引数が引き渡さ
れる過程を示す図(1) である。
【図7】従来例においてサブルーチンに引数が引き渡さ
れる過程を示す図(2) である。
【図8】変数テーブルの構成を示す図である。
【符号の説明】 11 解析処理手段 12 コード生成手段 13 検出手段 14 スタック制御手段 15 引き渡し手段 16 局所変数インタフェース手段 51 第一の外部記憶装置 52 情報処理装置 53 プリンタ 54 第二の外部記憶装置 61 変数テーブル

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 所定の言語で記述されたプログラムの解
    析処理を行う解析処理手段と、 前記解析処理の結果に基づいて、前記プログラムを目的
    プログラムに変換するコード生成手段とを備え、 前記解析処理手段は、 前記プログラムをなす文の内、引数を伴ってサブルーチ
    ンを呼び出す個々の文を前記解析処理の手順に基づいて
    検出する検出手段を有し、 前記コード生成手段は、 前記検出手段によって検出された個々の文について、主
    記憶に配置され、かつ空いている2つの領域を予め決め
    られた領域管理の下で割り付け、これらの2つ領域の位
    置を個別に示すポインタを復帰アドレスと共にスタック
    領域に退避するコードを生成するスタック制御手段と、 前記検出手段によって検出された個々の文に順に示され
    る引数の値を前記解析処理の結果に基づいて求め、これ
    らの値を前記スタック制御手段によって割り付けられた
    2つの領域の内、一方の領域に退避するコードを生成す
    る引き渡し手段と、 前記引き渡し手段によって生成されたコードに応じて前
    記一方の領域に順次退避される個々の引数について、そ
    の一方の領域の内、退避先となった領域のポインタを前
    記サブルーチンで参照される局所変数に対応付け、かつ
    他方の領域に退避するコードを生成する局所変数インタ
    ーフェース手段とを有することを特徴とする言語処理装
    置。
  2. 【請求項2】 請求項1に記載の言語処理装置におい
    て、 スタック制御手段は、 検出手段によって検出された個々の文がプログラムを構
    成する最上位のルーチンであるか否かを判別し、その判
    別の結果が真であるときに、2つの領域の内、一方の領
    域の位置を示すポインタをスタック領域に退避し、かつ
    他方の領域の位置を示すポインタと復帰アドレスとの組
    み合わせを一定の順序でそのスタック領域に退避するこ
    とを特徴とする言語処理装置。
  3. 【請求項3】 請求項1または請求項2に記載の言語処
    理装置において、 引き渡し手段と局所変数インタフェース手段との双方ま
    たは何れか一方は、 退避先となる領域の余剰のサイズを監視し、そのサイズ
    が退避の対象となる情報の情報量を下回るときに、その
    領域をさらに大きな代替の領域に置換する手段を含むこ
    とを特徴とする言語処理装置。
  4. 【請求項4】 所定の言語で既述されたプログラムをな
    す文の内、引数を伴ってサブルーチンを呼び出す個々の
    文を解析処理の手順に基づいて検出する検出手段を含
    み、かつそのプログラムの解析処理を行う解析処理手段
    と、 前記検出手段によって検出された個々の文について、主
    記憶に配置され、かつ空いている2つの領域を予め決め
    られた領域管理の下で割り付け、これらの2つ領域の位
    置を個別に示すポインタを復帰アドレスと共にスタック
    領域に退避するコードを生成するスタック制御手段、 前記検出手段によって検出された個々の文に順に示され
    る引数の値を前記解析処理の結果に基づいて求め、これ
    らの値を前記スタック制御手段によって割り付けられた
    2つの領域の内、一方の領域に退避するコードを生成す
    る引き渡し手段、 前記引き渡し手段によって生成されたコードに応じて一
    方の領域に順次退避される個々の引数について、その一
    方の領域の内、退避先となった領域のポインタを前記サ
    ブルーチンで参照される局所変数に対応付け、かつ他方
    の領域に退避するコードを生成する局所変数インターフ
    ェース手段を有し、前記解析処理の結果に基づいて、前
    記プログラムを目的プログラムに変換するコード生成手
    段とからなる言語処理装置を構成する情報処理装置とし
    てコンピュータを機能させるプログラムが格納され、か
    つコンピュータ読み取りが可能である記憶媒体。
JP23857997A 1997-09-03 1997-09-03 言語処理装置およびその言語処理装置を実現するプログラムが記録された記憶媒体 Withdrawn JPH1185531A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP23857997A JPH1185531A (ja) 1997-09-03 1997-09-03 言語処理装置およびその言語処理装置を実現するプログラムが記録された記憶媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP23857997A JPH1185531A (ja) 1997-09-03 1997-09-03 言語処理装置およびその言語処理装置を実現するプログラムが記録された記憶媒体

Publications (1)

Publication Number Publication Date
JPH1185531A true JPH1185531A (ja) 1999-03-30

Family

ID=17032314

Family Applications (1)

Application Number Title Priority Date Filing Date
JP23857997A Withdrawn JPH1185531A (ja) 1997-09-03 1997-09-03 言語処理装置およびその言語処理装置を実現するプログラムが記録された記憶媒体

Country Status (1)

Country Link
JP (1) JPH1185531A (ja)

Similar Documents

Publication Publication Date Title
US6237044B1 (en) Method for object-oriented programming using dynamic interfaces
JP4571710B2 (ja) ディスパッチテーブル構造のための方法と装置
US7725883B1 (en) Program interpreter
EP2340481B1 (en) Caching runtime generated code
US6760905B1 (en) Lazy compilation of template-generated classes in dynamic compilation execution environments
US6363522B1 (en) Method and apparatus for handling exceptions as normal control flow
US8997040B2 (en) Variable closure
US7036118B1 (en) System for executing computer programs on a limited-memory computing machine
US11036513B2 (en) Executing short pointer mode applications loaded in a memory address space having one portion addressable by short pointers and a shadow copy of the one portion
US10235144B2 (en) Reconfiguration of address space based on loading short pointer mode application
US10585790B2 (en) Short pointer mode applications in long pointer mode environments
US7086044B2 (en) Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
US5062039A (en) Sharing of workspaces in interactive processing using workspace name tables for linking of workspaces
JPH09212369A (ja) 記憶域割り付け装置
WO2022180594A1 (en) Hybrid just in time load module compiler with performance optimizations
JP3241214B2 (ja) 分散処理装置及びプロセス実行方法
JPH1185531A (ja) 言語処理装置およびその言語処理装置を実現するプログラムが記録された記憶媒体
JP3807860B2 (ja) コンパイル方法および装置、並びにメソッド活動度計算方法および装置
KR100649799B1 (ko) 고속 서브-클레스 검사 및 서브-타입 검사를 컴퓨터에 의해 구현하는 방법 그 시스템
JP3085309B2 (ja) デバッグシステム
JPH10240581A (ja) Cpu時間測定装置
Diwan Understanding and improving the performance of modern programming languages
Wilcox et al. Mainsail implementation overview
JP2002108628A (ja) プログラム変換装置
Fan et al. Advanced Memory Checking for MPI Parallel Applications Using MemPin

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20041207