JP3114199B2 - 言語処理システムのリスト出力方式 - Google Patents
言語処理システムのリスト出力方式Info
- Publication number
- JP3114199B2 JP3114199B2 JP02307693A JP30769390A JP3114199B2 JP 3114199 B2 JP3114199 B2 JP 3114199B2 JP 02307693 A JP02307693 A JP 02307693A JP 30769390 A JP30769390 A JP 30769390A JP 3114199 B2 JP3114199 B2 JP 3114199B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- symbol
- program
- read
- sentence
- 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.)
- Expired - Fee Related
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Description
【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、コンピュータのプログラム言語で記述され
たソース・プログラムを機械語に変換する言語処理シス
テムに関し、特に変換後に生成されるリストの出力方式
に関する。
たソース・プログラムを機械語に変換する言語処理シス
テムに関し、特に変換後に生成されるリストの出力方式
に関する。
従来、言語処理システムでは、ソース・プログラムか
ら機械語へ変換(以下「コンパイル」という。)時、コ
ンパイル情報をリスト・ファイルに出力する機能を有し
ている。ここでいうコンパイル情報とは、ソース・プロ
グラムの各ステートメント自身やその行番号、また変換
された機械語やその機械語が格納されるコンピュータの
記憶装置上の番地(以後「ロケーション・アドレス」と
いう)等のステートメント情報やソース・プログラム内
で使用されたシンボル情報,エラー情報などを示す。
ら機械語へ変換(以下「コンパイル」という。)時、コ
ンパイル情報をリスト・ファイルに出力する機能を有し
ている。ここでいうコンパイル情報とは、ソース・プロ
グラムの各ステートメント自身やその行番号、また変換
された機械語やその機械語が格納されるコンピュータの
記憶装置上の番地(以後「ロケーション・アドレス」と
いう)等のステートメント情報やソース・プログラム内
で使用されたシンボル情報,エラー情報などを示す。
ソース・プログラムで使用される数値や変数は、数値
の持つ意味がわかるような名前として定義される。これ
を「シンボル」と呼ぶ。ソース・プログラムの命令の後
に続くオペランドにシンボルを使用すると、数値を直接
記述する場合に比べて、その命令の目的が容易に理解で
きる。また数値自身に変更があった場合、定義されてい
るステートメントのみ修正すれば良いので、プログラム
の信頼性も向上する。このシンボルだけをプログラムよ
り抽出して、それに定義された値と、定義されたステー
トメントのプログラム上の行番号、シンボルが参照され
ているステートメントの行番号を出力した一覧表ファイ
ルをクロス・リファレンス・リストという。また、ソー
ス・プログラムのステートメントや行番号,機械語,ロ
ケーション・アドレス等を出力したファイルをコンパイ
ルリストという。この二つのリストは、プログラムのデ
バッグ時に、プログラムの動作を確認したりプログラム
を修正する時に使用される。
の持つ意味がわかるような名前として定義される。これ
を「シンボル」と呼ぶ。ソース・プログラムの命令の後
に続くオペランドにシンボルを使用すると、数値を直接
記述する場合に比べて、その命令の目的が容易に理解で
きる。また数値自身に変更があった場合、定義されてい
るステートメントのみ修正すれば良いので、プログラム
の信頼性も向上する。このシンボルだけをプログラムよ
り抽出して、それに定義された値と、定義されたステー
トメントのプログラム上の行番号、シンボルが参照され
ているステートメントの行番号を出力した一覧表ファイ
ルをクロス・リファレンス・リストという。また、ソー
ス・プログラムのステートメントや行番号,機械語,ロ
ケーション・アドレス等を出力したファイルをコンパイ
ルリストという。この二つのリストは、プログラムのデ
バッグ時に、プログラムの動作を確認したりプログラム
を修正する時に使用される。
また、ソース・プログラム内に記述された、一連の処
理をするための命令のブロックのことを「サブルーチ
ン」と呼び、分岐命令やサブルーチン・コール命令によ
り参照するという手続きがある。ここでいう「参照す
る」とは、サブルーチンの先頭の命令が格納されるロケ
ーション・アドレスを上記の命令のオペランドに記述す
るということである。ソース・プログラムの手法として
は、ルーチンの先頭命令のロケーション・アドレスをシ
ンボル定義して分岐命令やサブ・ルーチン・コール命令
のオペランドに記述する方法が一般的である。例えば第
13図に示すコンパイル・リストのように、あるサブルー
チンの先頭に「START」と記述し、サブルーチン・コー
ル命令「CALL」や、分岐命令「BR」のオペランドに記述
するというような方法である。この例では、コンパイル
時に、サブ・ルーチンの先頭の命令のロケーションアド
レス0000Hが「START」に割り付けられ、「CALL」や「B
R」行の機械語でそのアドレス値が参照される。(サブ
ルーチン・コール命令,分岐命令の詳細な説明は、「80
80インストラクション・マニュアル」参照) 尚、第13図のコンパイルリストで13−1の「NUM.」は
各ステートメントの行番号、13−2の「ADD.」は命令が
記述されているステートメントであればその命令のロケ
ーション・アドレス、13−3「OBJ.」は命令の機械語コ
ードが出力される。更に13−4の「SOURCE STATEMENT」
はソース・プログラム自身が出力される。
理をするための命令のブロックのことを「サブルーチ
ン」と呼び、分岐命令やサブルーチン・コール命令によ
り参照するという手続きがある。ここでいう「参照す
る」とは、サブルーチンの先頭の命令が格納されるロケ
ーション・アドレスを上記の命令のオペランドに記述す
るということである。ソース・プログラムの手法として
は、ルーチンの先頭命令のロケーション・アドレスをシ
ンボル定義して分岐命令やサブ・ルーチン・コール命令
のオペランドに記述する方法が一般的である。例えば第
13図に示すコンパイル・リストのように、あるサブルー
チンの先頭に「START」と記述し、サブルーチン・コー
ル命令「CALL」や、分岐命令「BR」のオペランドに記述
するというような方法である。この例では、コンパイル
時に、サブ・ルーチンの先頭の命令のロケーションアド
レス0000Hが「START」に割り付けられ、「CALL」や「B
R」行の機械語でそのアドレス値が参照される。(サブ
ルーチン・コール命令,分岐命令の詳細な説明は、「80
80インストラクション・マニュアル」参照) 尚、第13図のコンパイルリストで13−1の「NUM.」は
各ステートメントの行番号、13−2の「ADD.」は命令が
記述されているステートメントであればその命令のロケ
ーション・アドレス、13−3「OBJ.」は命令の機械語コ
ードが出力される。更に13−4の「SOURCE STATEMENT」
はソース・プログラム自身が出力される。
次に、第13図のコンパイルリストに対応したクロスリ
ファレンス・リストを第14図に示す。14−1の「SYMBO
L」はシンボル名、14−2の「VALUE」はシンボルに割り
付けられた値、14−3の「DEFINE」はシンボルが定義さ
れている行番号、14−4の「REFERENCE」はシンボルが
参照されている行番号が出力される。
ファレンス・リストを第14図に示す。14−1の「SYMBO
L」はシンボル名、14−2の「VALUE」はシンボルに割り
付けられた値、14−3の「DEFINE」はシンボルが定義さ
れている行番号、14−4の「REFERENCE」はシンボルが
参照されている行番号が出力される。
ある一つのシステムのソフトを開発する場合、プログ
ラムのデバッグ中にその内容は何回も修正される。ま
た、あるシステムのプログラムの一部または全体を他の
システムに流用するような場合、その内容に変更が加え
られるといったような、ソース・プログラムの書き換え
は頻繁に行われる。これは、ソフトウェア開発時間を短
縮するためには大変有効である。しかし、1つのサブ・
ルーチンの処理内容が変更したために、そのサブ・ルー
チンの参照箇所にも影響があり、誤動作の原因になるよ
うな場合がよくある。従って、プログラムの障害を回避
するためには、一箇所を修正したらその修正した部分を
参照しているステートメントを確認する必要がある。例
えば、第13図の「START」で定義されるサブ・ルーチン
の内容に変更があったら、「START」を参照している行
番号150のCALL命令や、行番号200のBR命令の前に記述さ
れた命令にも影響がないかを確認する。この時、クロス
リファレンス・リストで「START」を調べ、参照してい
る行番号すべてをリスト上で調査すると確認漏れもない
し、デバッグの効率もあがる。
ラムのデバッグ中にその内容は何回も修正される。ま
た、あるシステムのプログラムの一部または全体を他の
システムに流用するような場合、その内容に変更が加え
られるといったような、ソース・プログラムの書き換え
は頻繁に行われる。これは、ソフトウェア開発時間を短
縮するためには大変有効である。しかし、1つのサブ・
ルーチンの処理内容が変更したために、そのサブ・ルー
チンの参照箇所にも影響があり、誤動作の原因になるよ
うな場合がよくある。従って、プログラムの障害を回避
するためには、一箇所を修正したらその修正した部分を
参照しているステートメントを確認する必要がある。例
えば、第13図の「START」で定義されるサブ・ルーチン
の内容に変更があったら、「START」を参照している行
番号150のCALL命令や、行番号200のBR命令の前に記述さ
れた命令にも影響がないかを確認する。この時、クロス
リファレンス・リストで「START」を調べ、参照してい
る行番号すべてをリスト上で調査すると確認漏れもない
し、デバッグの効率もあがる。
ソフトウェア開発時のデバッグには、言語処理システ
ムにより生成した機械語ファイルを実際のコンピュータ
上の記憶装置に格納し、命令を実行させることによりプ
ログラムの動作の正当性を確認する実機評価というもの
がある。
ムにより生成した機械語ファイルを実際のコンピュータ
上の記憶装置に格納し、命令を実行させることによりプ
ログラムの動作の正当性を確認する実機評価というもの
がある。
実機評価で機械語コードをコンピュータ上の機械装置
に格納することにより、動作を確認する。評価は、例え
ばある処理のためのサブ・ルーチンが実行された場合、
その動作理由を検証するために、どのアドレスから分岐
してきたかを確認するようなことも行う。この時、ソー
ス・プログラム修正時と同様にリストでサブルーチンの
先頭アドレスを見つけ、クロスリファレンス・リストに
より参照アドレスを確認して、参照アドレスの前にどん
な処理があるかを逆行するようなことを行う。この時も
リストとクロス・リファレンス・リストの二つのリスト
を使用する。
に格納することにより、動作を確認する。評価は、例え
ばある処理のためのサブ・ルーチンが実行された場合、
その動作理由を検証するために、どのアドレスから分岐
してきたかを確認するようなことも行う。この時、ソー
ス・プログラム修正時と同様にリストでサブルーチンの
先頭アドレスを見つけ、クロスリファレンス・リストに
より参照アドレスを確認して、参照アドレスの前にどん
な処理があるかを逆行するようなことを行う。この時も
リストとクロス・リファレンス・リストの二つのリスト
を使用する。
この従来のリスト出力方式では、ソース・プログラム
のデバッグ時にリストとクロスリファレンス・リストの
両方のリスト・ファイルをプリンタで用紙に出力し、そ
れらのリストを比較しながら進める必要があった。
のデバッグ時にリストとクロスリファレンス・リストの
両方のリスト・ファイルをプリンタで用紙に出力し、そ
れらのリストを比較しながら進める必要があった。
例えば、1つのサブルーチンを修正した場合、そのサ
ブルーチンの先頭に付けられたシンボルをクロスリファ
レンス・リストから捜し、クロスリファレンス・リスト
に出力されている参照行一覧を見て、リストの参照行を
捜す、という作業を繰り返さなければならない。これ
は、ソース・プログラムが小さい場合は簡単であるが、
ソース・プログラムが数線、数万行になると、2つのリ
ストを出力し、両方のリストを見較べるという作業は大
変困難である。またこのような場合、1つのソース・プ
ログラムで使用されるシンボルの数も増大するため、1
つのシンボルを捜す作業に時間がかかる。この問題は、
現在、クロスリファレンス・リストのシンボルをアルフ
ァベット順に出力するなど、シンボルをソートすること
で回避し、作業時間の短縮化を図っている。しかし、シ
ンボルをソートするという処理は、シンボルが増大すれ
ばするほど、その処理時間が二乗的に増大する。現在の
処理系では、言語処理のためのコンパイル時間と、クロ
スリファレンス・リストを出力する時間があまり変わら
ないような場合さえある。つまり、単純にコンパイルす
る場合だけに比べて、クロスリファレンス・リストを出
力すると、全体の処理時間は約2倍になってしまう。言
語処理時間が長いということは、ソフトウェア開発にお
いて重要な問題のひとつである。
ブルーチンの先頭に付けられたシンボルをクロスリファ
レンス・リストから捜し、クロスリファレンス・リスト
に出力されている参照行一覧を見て、リストの参照行を
捜す、という作業を繰り返さなければならない。これ
は、ソース・プログラムが小さい場合は簡単であるが、
ソース・プログラムが数線、数万行になると、2つのリ
ストを出力し、両方のリストを見較べるという作業は大
変困難である。またこのような場合、1つのソース・プ
ログラムで使用されるシンボルの数も増大するため、1
つのシンボルを捜す作業に時間がかかる。この問題は、
現在、クロスリファレンス・リストのシンボルをアルフ
ァベット順に出力するなど、シンボルをソートすること
で回避し、作業時間の短縮化を図っている。しかし、シ
ンボルをソートするという処理は、シンボルが増大すれ
ばするほど、その処理時間が二乗的に増大する。現在の
処理系では、言語処理のためのコンパイル時間と、クロ
スリファレンス・リストを出力する時間があまり変わら
ないような場合さえある。つまり、単純にコンパイルす
る場合だけに比べて、クロスリファレンス・リストを出
力すると、全体の処理時間は約2倍になってしまう。言
語処理時間が長いということは、ソフトウェア開発にお
いて重要な問題のひとつである。
上述した問題を解決するために、本発明の言語処理シ
ステムのリスト出力方式では、ソース・プログラムを記
憶する第1の記憶手段と、第1の記憶手段の内容を読み
出す第1の読み出し手段と、第1の読みだし手段によ
り、読み出されたソース・プログラムの文のプログラム
上の位置を指定する位置指定手段と、第1の読みだし手
段により読み出されたソース・プログラムの文がシンボ
ルにロケーション・アドレスを定義するための文かどう
かを識別する第1の識別手段と、第1の読みだし手段に
より読み出されたソース・プログラムの分に機械語に変
換すべき命令が含まれているかどうかを識別する命令識
別手段と、第1の読みだし手段により読み出されたソー
ス・プログラムの文中でシンボルが参照されているかど
うかを識別する第2の識別手段と、第1の識別手段によ
り識別された文中に定義されたシンボル名を記憶する第
2の記憶手段と、第2の記憶手段により識別された文が
前記位置指定手段により指定される位置情報を第2の記
憶手段に記憶されたシンボル名に対応付けて記憶する第
3の記憶手段と、機械語プログラムに変換された結果を
記憶する第4の記憶手段とを具備し、第1の読みだし手
段で読み出された文が第1の識別手段によりシンボルに
ロケーション・アドレスを定義するための文であると判
断した場合は、該シンボルと同一のシンボル名を第2の
記憶手段から捜し出した上で該シンボル名に対応する第
3の記憶手段の内容を第4の記憶手段に出力する。
ステムのリスト出力方式では、ソース・プログラムを記
憶する第1の記憶手段と、第1の記憶手段の内容を読み
出す第1の読み出し手段と、第1の読みだし手段によ
り、読み出されたソース・プログラムの文のプログラム
上の位置を指定する位置指定手段と、第1の読みだし手
段により読み出されたソース・プログラムの文がシンボ
ルにロケーション・アドレスを定義するための文かどう
かを識別する第1の識別手段と、第1の読みだし手段に
より読み出されたソース・プログラムの分に機械語に変
換すべき命令が含まれているかどうかを識別する命令識
別手段と、第1の読みだし手段により読み出されたソー
ス・プログラムの文中でシンボルが参照されているかど
うかを識別する第2の識別手段と、第1の識別手段によ
り識別された文中に定義されたシンボル名を記憶する第
2の記憶手段と、第2の記憶手段により識別された文が
前記位置指定手段により指定される位置情報を第2の記
憶手段に記憶されたシンボル名に対応付けて記憶する第
3の記憶手段と、機械語プログラムに変換された結果を
記憶する第4の記憶手段とを具備し、第1の読みだし手
段で読み出された文が第1の識別手段によりシンボルに
ロケーション・アドレスを定義するための文であると判
断した場合は、該シンボルと同一のシンボル名を第2の
記憶手段から捜し出した上で該シンボル名に対応する第
3の記憶手段の内容を第4の記憶手段に出力する。
次に、本発明について図面を参照して説明する。
第1図は本発明の第一実施例の構成図である。101は
ソース・プログラムを格納したファイルであり、102の
言語処理システムに入力される。言語処理システム102
はソース・プログラムのステートメントの行数をカウン
トするための行番号カウント部(以後「行番号カウン
タ」という)103,ステートメントにロケーション・アド
レスを定義するためのシンボルが定義されているかを識
別するための第一のシンボル識別部104,ステートメント
に機械語に変換すべき命令が記述されているかを識別す
るための命令識別部105,命令のオペランドにシンボルが
記述されているかを識別するための第二のシンボル識別
部106,命令を格納すべきロケーション・アドレスをカウ
ントするためのロケーションアドレス・カウント部(以
後「ロケーション・カウンタ」という)107,命令を機械
語に変換するための言語処理本体108である。また、110
はシンボル記憶部で1つのシンボルについてシンボル名
記憶部111と、定義行記憶部112,シンボル値記憶部113ま
たはシンボルに参照されたステートメントのロケーショ
ン・アドレスを記憶するための参照アドレス記憶部114
からなる。ファイル120は、ステートメントのコンパイ
ル結果を出力するための出力リストで行番号部121,ロケ
ーション・アドレス部122,機械語部123,ソース・ステー
トメント部124で構成される。言語処理システム102には
ソース・ステートメント情報を処理するための第一のリ
スト出力処理部130とシンボル情報を処理するための第
二のリスト出力処理131がありファイル120に出力する。
ソース・プログラムを格納したファイルであり、102の
言語処理システムに入力される。言語処理システム102
はソース・プログラムのステートメントの行数をカウン
トするための行番号カウント部(以後「行番号カウン
タ」という)103,ステートメントにロケーション・アド
レスを定義するためのシンボルが定義されているかを識
別するための第一のシンボル識別部104,ステートメント
に機械語に変換すべき命令が記述されているかを識別す
るための命令識別部105,命令のオペランドにシンボルが
記述されているかを識別するための第二のシンボル識別
部106,命令を格納すべきロケーション・アドレスをカウ
ントするためのロケーションアドレス・カウント部(以
後「ロケーション・カウンタ」という)107,命令を機械
語に変換するための言語処理本体108である。また、110
はシンボル記憶部で1つのシンボルについてシンボル名
記憶部111と、定義行記憶部112,シンボル値記憶部113ま
たはシンボルに参照されたステートメントのロケーショ
ン・アドレスを記憶するための参照アドレス記憶部114
からなる。ファイル120は、ステートメントのコンパイ
ル結果を出力するための出力リストで行番号部121,ロケ
ーション・アドレス部122,機械語部123,ソース・ステー
トメント部124で構成される。言語処理システム102には
ソース・ステートメント情報を処理するための第一のリ
スト出力処理部130とシンボル情報を処理するための第
二のリスト出力処理131がありファイル120に出力する。
次に第2図,第3図を用いて、構成図第1図の動作を
説明する。最初に201で言語処理対象の入力ファイル101
と、リストを出力するためのリスト・ファイル120を開
き、202で行番号カウンタ103とロケーション・カウンタ
107を0にする。203で入力ファイルが終了でなかった
ら、206でソース・ステートメントを一行読み込む。こ
こで、行番号カウンタに1を加算し(207)、出力ファ
イル120の行番号出力部121に行番号カウンタの値を出力
し、読み込んだ一行をソース・ステートメント部124に
出力する(208)。次に209で読み込んだ一行がその行に
おけるロケーション・アドレスをシンボル定義するため
のシンボル定義行であると判断したら、210でシンボル
記憶部110のシンボル名記憶部111にシンボル名を、また
定義行記憶部112に行番号カウンタ103の値を、シンボル
値記憶部113にロケーション・カウンタ107の値を格納す
る。また、211でその一行に命令が記述されていると判
断したら、212でロケーション・カウンタ107の値を格納
し、213で出力ファイル120のロケーション・アドレス出
力部122にロケーション・カウンタ107の値を出力する。
そして214でその命令行のオペランドにシンボル名が記
述されていると判断したら、シンボル記憶部110のシン
ボル名記憶部111に対応する参照アドレス記憶部114にロ
ケーション・カウンタ107の値を格納する。そして対応
するシンボル値記憶部113の値を言語処理部108に引き渡
し、命令を機械語に変換する(216,217)。218で変換さ
れた機械語を出力ファイル120の機械語出力部123に出力
する。以上のリスト出力処理208,213,218は第一のリス
ト出力処理部130により行われる。
説明する。最初に201で言語処理対象の入力ファイル101
と、リストを出力するためのリスト・ファイル120を開
き、202で行番号カウンタ103とロケーション・カウンタ
107を0にする。203で入力ファイルが終了でなかった
ら、206でソース・ステートメントを一行読み込む。こ
こで、行番号カウンタに1を加算し(207)、出力ファ
イル120の行番号出力部121に行番号カウンタの値を出力
し、読み込んだ一行をソース・ステートメント部124に
出力する(208)。次に209で読み込んだ一行がその行に
おけるロケーション・アドレスをシンボル定義するため
のシンボル定義行であると判断したら、210でシンボル
記憶部110のシンボル名記憶部111にシンボル名を、また
定義行記憶部112に行番号カウンタ103の値を、シンボル
値記憶部113にロケーション・カウンタ107の値を格納す
る。また、211でその一行に命令が記述されていると判
断したら、212でロケーション・カウンタ107の値を格納
し、213で出力ファイル120のロケーション・アドレス出
力部122にロケーション・カウンタ107の値を出力する。
そして214でその命令行のオペランドにシンボル名が記
述されていると判断したら、シンボル記憶部110のシン
ボル名記憶部111に対応する参照アドレス記憶部114にロ
ケーション・カウンタ107の値を格納する。そして対応
するシンボル値記憶部113の値を言語処理部108に引き渡
し、命令を機械語に変換する(216,217)。218で変換さ
れた機械語を出力ファイル120の機械語出力部123に出力
する。以上のリスト出力処理208,213,218は第一のリス
ト出力処理部130により行われる。
203で入力ファイル101が終了であると判断したら、20
4,205で入力ファイル101と出力ファイル120を閉じ、第
二のリスト出力処理部131の処理に移る。
4,205で入力ファイル101と出力ファイル120を閉じ、第
二のリスト出力処理部131の処理に移る。
第3図は、リスト出力処理部131の動作を示すブロッ
ク図である。301で出力ファイル120を開く。次に302で
シンボル記憶部120に処理すべきシンボルがあるかを判
断し、シンボルがあれば1つのシンボルに対応する定義
行記憶部112の値を読み込む(303)。304で出力ファイ
ル120が終了でないと判断したら、先頭から一行を読み
込む。その一行の行番号出力部121の値と定義行112の値
を306で比較する。それらの値が同一であれば出力ファ
イル120の現在読み込んでいる行の次に行を追加し、現
在読み込んでいるシンボルに対応する参照アドレス記憶
部114の値をその行のソース・ステートメント部124に出
力する(307)。同一でなければ、304で終了になるまで
305で次の行を読み込んで同様に比較する。シンボル記
憶部120に記憶されたすべてのシンボルに対して302〜30
7の処理を行い、終了したら出力ファイル120を閉じる
(308)。
ク図である。301で出力ファイル120を開く。次に302で
シンボル記憶部120に処理すべきシンボルがあるかを判
断し、シンボルがあれば1つのシンボルに対応する定義
行記憶部112の値を読み込む(303)。304で出力ファイ
ル120が終了でないと判断したら、先頭から一行を読み
込む。その一行の行番号出力部121の値と定義行112の値
を306で比較する。それらの値が同一であれば出力ファ
イル120の現在読み込んでいる行の次に行を追加し、現
在読み込んでいるシンボルに対応する参照アドレス記憶
部114の値をその行のソース・ステートメント部124に出
力する(307)。同一でなければ、304で終了になるまで
305で次の行を読み込んで同様に比較する。シンボル記
憶部120に記憶されたすべてのシンボルに対して302〜30
7の処理を行い、終了したら出力ファイル120を閉じる
(308)。
第4図に示すソース・プログラム例で、最初に第2図
に示した処理を説明する。第5図で501は行番号カウン
タ、502はロケーション・カウンタ、また第6図はシン
ボル記憶部で、601「symbol」はシンボル名記憶部、602
「def」は定義行記憶部、603「value」はシンボル値記
憶部、604「ref」は参照アドレス記憶部である。第7図
はリスト・ファイルで、701「num」は行番号部、702「a
dd」はロケーション・アドレス部、703「obj」は機械語
部、704「source statement」はソース・ステートメン
ト部である。第4図の第1行401を読み込むと、まず行
番号カウンタ501がインクリメントされ「1」になり、
リストの701に501の値が、704に読み込まれた一行が出
力される。401は文字列「start」の後に「:」(コロ
ン)があることでシンボルであると判断され、601に文
字列が、602に501の値が、また603に502の値が記憶され
る。第n行402を読み込んだ時の501の値が「n」、502
の値が「m」であったとする。402はシンボル定義行で
はなく、命令行であると判断され、まず、502の値がイ
ンクリメントされ「m+1」になる。この値は702に出
力される。次に命令のオペランドでシンボル「start」
が参照されているので、シンボル記憶部の604に「m+
1」が記憶される。そして言語処理が行われ、703に機
械語「××××」は出力される。
に示した処理を説明する。第5図で501は行番号カウン
タ、502はロケーション・カウンタ、また第6図はシン
ボル記憶部で、601「symbol」はシンボル名記憶部、602
「def」は定義行記憶部、603「value」はシンボル値記
憶部、604「ref」は参照アドレス記憶部である。第7図
はリスト・ファイルで、701「num」は行番号部、702「a
dd」はロケーション・アドレス部、703「obj」は機械語
部、704「source statement」はソース・ステートメン
ト部である。第4図の第1行401を読み込むと、まず行
番号カウンタ501がインクリメントされ「1」になり、
リストの701に501の値が、704に読み込まれた一行が出
力される。401は文字列「start」の後に「:」(コロ
ン)があることでシンボルであると判断され、601に文
字列が、602に501の値が、また603に502の値が記憶され
る。第n行402を読み込んだ時の501の値が「n」、502
の値が「m」であったとする。402はシンボル定義行で
はなく、命令行であると判断され、まず、502の値がイ
ンクリメントされ「m+1」になる。この値は702に出
力される。次に命令のオペランドでシンボル「start」
が参照されているので、シンボル記憶部の604に「m+
1」が記憶される。そして言語処理が行われ、703に機
械語「××××」は出力される。
次に第3図に示した処理を第6図,第7図で説明す
る。まず第6図でシンボル「start」の定義行「1」を
読み込み、第7図の701「num」欄で検索する。同一の番
号があったら、その次の行に604の「m+1」という値
が出力される。この値は、リスト上で702のアドレス部
が「m+1」の命令から参照されているということを示
す。
る。まず第6図でシンボル「start」の定義行「1」を
読み込み、第7図の701「num」欄で検索する。同一の番
号があったら、その次の行に604の「m+1」という値
が出力される。この値は、リスト上で702のアドレス部
が「m+1」の命令から参照されているということを示
す。
次に、本発明の実施例2を図面を用いて説明する。
第8図は、実施例2の構成図である。実施例2は、前
記の実施例の命令識別部105の後に、その命令が分岐命
令かサブ・ルーチン・コール命令であることを識別する
ための命令種類識別部801を、またシンボル記憶部110に
801で識別された命令の種類を記憶するための命令の種
類記憶部815を追加したものである。この構成図によ
り、実施例2では、リストに参照アドレス記憶部114の
値を出力する前記実施例において、更にそのシンボルが
参照されているところの命令の種類を出力する機能を持
つ。
記の実施例の命令識別部105の後に、その命令が分岐命
令かサブ・ルーチン・コール命令であることを識別する
ための命令種類識別部801を、またシンボル記憶部110に
801で識別された命令の種類を記憶するための命令の種
類記憶部815を追加したものである。この構成図によ
り、実施例2では、リストに参照アドレス記憶部114の
値を出力する前記実施例において、更にそのシンボルが
参照されているところの命令の種類を出力する機能を持
つ。
第9図により、本発明の実施例2の説明をする。処理
201〜214は前述の実施例と同一なので、省略する。214
において命令行でシンボルを参照していると判断したら
915でその命令がサブルーチン・コール命令が分岐命令
であるかを識別する。サブルーチン・コール命令が分岐
命令であれば、916でシンボル記憶部110の参照アドレス
記憶部114にロケーション・カウンタの値を命令種類記
憶部815に命令の種類を記憶する。そして216でシンボル
の値を読み込み、217,218の処理を行う。
201〜214は前述の実施例と同一なので、省略する。214
において命令行でシンボルを参照していると判断したら
915でその命令がサブルーチン・コール命令が分岐命令
であるかを識別する。サブルーチン・コール命令が分岐
命令であれば、916でシンボル記憶部110の参照アドレス
記憶部114にロケーション・カウンタの値を命令種類記
憶部815に命令の種類を記憶する。そして216でシンボル
の値を読み込み、217,218の処理を行う。
次に第10図における処理を説明する。第10図の301〜3
06の処理は、前記の実施例と同一なので省略する。306
で、定義行と行番号が同一であると判断したら、1007で
アドレス記憶部124の値と、命令記憶部916の命令を対応
づけて、リスト上に出力する。
06の処理は、前記の実施例と同一なので省略する。306
で、定義行と行番号が同一であると判断したら、1007で
アドレス記憶部124の値と、命令記憶部916の命令を対応
づけて、リスト上に出力する。
例えば第4図のソース・プログラムを入力した場合、
402のステートメント処理でシンボル「start」を参照し
ていて、かつ、それが分岐命令であると判断し、第11図
の604に「m+1」が、そして1101の命令記憶部に分岐
命令の意味の文字「B」を記憶する。また403のステー
トメント処理では、シンボル「start」を参照してい
て、かつ、サブルーチン・コール命令であると判断し、
604にロケーション・アドレス「m+5」が、1101にサ
ブルーチンコール命令の意味の文字「C」を記憶する。
そして第12図のリストのように記憶した604と1101の値
をリスト上に記録する。
402のステートメント処理でシンボル「start」を参照し
ていて、かつ、それが分岐命令であると判断し、第11図
の604に「m+1」が、そして1101の命令記憶部に分岐
命令の意味の文字「B」を記憶する。また403のステー
トメント処理では、シンボル「start」を参照してい
て、かつ、サブルーチン・コール命令であると判断し、
604にロケーション・アドレス「m+5」が、1101にサ
ブルーチンコール命令の意味の文字「C」を記憶する。
そして第12図のリストのように記憶した604と1101の値
をリスト上に記録する。
実施例2では、リストのシンボル定義箇所に、そのシ
ンボルを参照しているアドレスとその時の命令の種類が
わかるので、実機評価において、プログラムの動作を検
証する上で、大変有効である。これは、サブ・ルーチン
・コール命令と分岐命令の性質の違いに基づく動作処理
の違いを推測できるという意味であるが、詳細説明はこ
こでは省略する。
ンボルを参照しているアドレスとその時の命令の種類が
わかるので、実機評価において、プログラムの動作を検
証する上で、大変有効である。これは、サブ・ルーチン
・コール命令と分岐命令の性質の違いに基づく動作処理
の違いを推測できるという意味であるが、詳細説明はこ
こでは省略する。
以上説明したように本発明は、シンボルの参照位置を
示すクロスリファレンス・リストを、リストのソース・
プログラム上でシンボルの定義されている箇所に直接出
力するというリスト形式にしたため、リストを見ただけ
で、シンボルを定義している位置と、そのシンボルがプ
ログラムのどこから参照されているかがわかる。このリ
スト出力形式にすることにより、シンボルの定義と参照
関係がシンボル定義行を見るだけですむため、プログラ
ムの修正時及び実機評価時、効率の良いデバッグが可能
となる。
示すクロスリファレンス・リストを、リストのソース・
プログラム上でシンボルの定義されている箇所に直接出
力するというリスト形式にしたため、リストを見ただけ
で、シンボルを定義している位置と、そのシンボルがプ
ログラムのどこから参照されているかがわかる。このリ
スト出力形式にすることにより、シンボルの定義と参照
関係がシンボル定義行を見るだけですむため、プログラ
ムの修正時及び実機評価時、効率の良いデバッグが可能
となる。
また、シンボル数が増加した場合、シンボル・ソート
によるクロスリファレンス・リスト出力時間に比べ、リ
スト埋め込み形式の方が言語処理時間が短縮される、シ
ンボル・ソートによる作業領域が不要になる等の効果も
期待できる。
によるクロスリファレンス・リスト出力時間に比べ、リ
スト埋め込み形式の方が言語処理時間が短縮される、シ
ンボル・ソートによる作業領域が不要になる等の効果も
期待できる。
この効果は、言語処理システム自身の作業領域の縮小
にもつながり、安価なソフト開発環境も提供できるよう
になる。これは、例えばシングルチップ・マイコンのソ
フト開発環境等を考慮すると、言語処理システムの大き
な長所と結びつく。
にもつながり、安価なソフト開発環境も提供できるよう
になる。これは、例えばシングルチップ・マイコンのソ
フト開発環境等を考慮すると、言語処理システムの大き
な長所と結びつく。
第1図は本発明の実施例の構成図である。 101は入力ファイル、102は言語処理部本体、103は行番
号カウンタ、104は第一のシンボル識別部、105は命令識
別部、106は第二のシンボル識別部、107はロケーション
・カウンタ、108は第1のリスト出力制御部、109は第二
のリスト出力制御部、110はシンボル記憶部、111はシン
ボル名記憶部、112は定義行記憶部、113はシンボル値記
憶部、114は参照アドレス記憶部、120は出力ファイル、
121は行番号部、122はロケーション・アドレス部、123
は機械語部、124はソース・ステートメント部。 第2図,第3図は本発明の実施例の動作を示すフロー図
である。 第4図は、本発明の実施例を説明するためのソース・プ
ログラム例である。 第5図は、第1図の言語処理本体の中で、 501は行番号カウンタ、502はロケーション・カウンタ。 第6図は、第1図のシンボル記憶部の中で、 601はシンボル名記憶部、602はシンボル値記憶部、603
はシンボル定義行記憶部、604はシンボル参照アドレス
記憶部。 第7図は、リスト出力例である。 第8図は本発明の実施例2の構成図である。 101は入力ファイル、102は言語処理部本体、103は行番
号カウンタ、104は第一のシンボル識別部、105は命令識
別部、106は第二のシンボル識別部、107はロケーション
・カウンタ、801は命令種類識別部、108は第1のリスト
出力制御部、109は第二のリスト出力制御部、110はシン
ボル記憶部、111はシンボル名記憶部、112は定義行記憶
部、113はシンボル値記憶部、114は参照アドレス記憶
部、815は命令種類記憶部、120は出力ファイル、121は
行番号部、122はロケーション・アドレス部、123は機械
語部、124はソース・ステートメント部。 第9図,第10図は本発明の実施例の動作を示すフロー図
である。 第11図は、第1図のシンボル記憶部の中で、 601はシンボル名記憶部、602はシンボル値記憶部、 603はシンボル定義行記憶部、604はシンボル参照アドレ
ス記憶部、 1105は命令記憶部。 第12図は、リスト出力例である。 第13図は、従来のリスト、 第14図は、従来のクロスリファレンス・リストである。
号カウンタ、104は第一のシンボル識別部、105は命令識
別部、106は第二のシンボル識別部、107はロケーション
・カウンタ、108は第1のリスト出力制御部、109は第二
のリスト出力制御部、110はシンボル記憶部、111はシン
ボル名記憶部、112は定義行記憶部、113はシンボル値記
憶部、114は参照アドレス記憶部、120は出力ファイル、
121は行番号部、122はロケーション・アドレス部、123
は機械語部、124はソース・ステートメント部。 第2図,第3図は本発明の実施例の動作を示すフロー図
である。 第4図は、本発明の実施例を説明するためのソース・プ
ログラム例である。 第5図は、第1図の言語処理本体の中で、 501は行番号カウンタ、502はロケーション・カウンタ。 第6図は、第1図のシンボル記憶部の中で、 601はシンボル名記憶部、602はシンボル値記憶部、603
はシンボル定義行記憶部、604はシンボル参照アドレス
記憶部。 第7図は、リスト出力例である。 第8図は本発明の実施例2の構成図である。 101は入力ファイル、102は言語処理部本体、103は行番
号カウンタ、104は第一のシンボル識別部、105は命令識
別部、106は第二のシンボル識別部、107はロケーション
・カウンタ、801は命令種類識別部、108は第1のリスト
出力制御部、109は第二のリスト出力制御部、110はシン
ボル記憶部、111はシンボル名記憶部、112は定義行記憶
部、113はシンボル値記憶部、114は参照アドレス記憶
部、815は命令種類記憶部、120は出力ファイル、121は
行番号部、122はロケーション・アドレス部、123は機械
語部、124はソース・ステートメント部。 第9図,第10図は本発明の実施例の動作を示すフロー図
である。 第11図は、第1図のシンボル記憶部の中で、 601はシンボル名記憶部、602はシンボル値記憶部、 603はシンボル定義行記憶部、604はシンボル参照アドレ
ス記憶部、 1105は命令記憶部。 第12図は、リスト出力例である。 第13図は、従来のリスト、 第14図は、従来のクロスリファレンス・リストである。
Claims (3)
- 【請求項1】プログラム言語で記載されたソース・プロ
グラムが入力され機械語プログラムに変換して出力する
言語処理システムにおいて、 ソース・プログラムを記憶する第1の記憶手段と、 前記第1の記憶手段の内容を読み出す第1の読出し手段
と、 前記第1の読出し手段により読み出されたソース・プロ
グラムの文のプログラム上の位置を指定する位置指定手
段と、 前記第1の読出し手段により読み出されたソース・プロ
グラムの文がシンボルにロケーション・アドレスを定義
するための文かどうかを識別する第1の識別手段と、 前記第1の読出し手段により読み出されたソース・プロ
グラムの文に機械語に変換すべき命令が含まれているか
どうかを識別する第1の命令識別手段と、 前記第1の読出し手段により読み出されたソース・プロ
グラムの文の命令が分岐命令もしくはサブルーチンコー
ル命令であるかどうかを識別する第2の命令識別手段
と、 前記第1の読出し手段により読み出されたソース・プロ
グラムの文中でのシンボルが参照されているかどうかを
識別する第2の識別手段と、 前記第1の識別手段により識別された文中に定義された
シンボル名を記憶する第2の記憶手段と、 前記第2の記憶手段により識別された文が前記位置指定
手段により指定される位置情報を前記第2の記憶手段に
記憶されたシンボル名に対応付けて記憶する第3の記憶
手段と、 前記第2の命令識別手段により前記分岐命令もしくはサ
ブルーチンコール命令であると識別された場合に前記対
応する位置情報に対応付けて命令の種類を記憶する種類
記憶手段と、 機械語プログラムに変換された結果を記憶する第4の記
憶手段とを具備し、前記第1の読出し手段で読み出され
た文が前記第1の識別手段によりシンボルにロケーショ
ン・アドレスを定義するための文であると判断した場合
は、前記シンボルと同一のシンボル名を前記第2の記憶
手段から探し出し前記シンボル名に対応する前記第3の
記憶手段の内容及び、前記シンボル名が前記分岐命令も
しくはサブルーチンコール命令によって参照されている
場合には、前記種類記憶手段に記憶された命令の種類の
内容を前記第4の記憶手段に出力することを特徴とする
言語処理システムのリスト出力方式。 - 【請求項2】前記第1の読出し手段により読み出された
ソース・プログラムの文のプログラム上の位置を指定す
る位置指定手段は、前記第1の読出し手段により文が読
まれる度に内容が更新される行カウンタであることを特
徴とする請求項1記載の言語処理システムのリスト出力
方式。 - 【請求項3】前記第1の読出し手段により読み出された
ソース・プログラムの文のプログラム上の位置を指定す
る位置指定手段は、前記命令識別手段により機械語に変
換すべき命令であると判断された機械語命令が格納され
るべきメモリのロケーション・アドレスを指定すること
を特徴とする請求項1記載の言語処理システムのリスト
出力方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP02307693A JP3114199B2 (ja) | 1990-11-14 | 1990-11-14 | 言語処理システムのリスト出力方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP02307693A JP3114199B2 (ja) | 1990-11-14 | 1990-11-14 | 言語処理システムのリスト出力方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH04178838A JPH04178838A (ja) | 1992-06-25 |
JP3114199B2 true JP3114199B2 (ja) | 2000-12-04 |
Family
ID=17972090
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP02307693A Expired - Fee Related JP3114199B2 (ja) | 1990-11-14 | 1990-11-14 | 言語処理システムのリスト出力方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3114199B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR200477887Y1 (ko) | 2014-06-05 | 2015-07-31 | 손성호 | 펜꽂이 기구 |
-
1990
- 1990-11-14 JP JP02307693A patent/JP3114199B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR200477887Y1 (ko) | 2014-06-05 | 2015-07-31 | 손성호 | 펜꽂이 기구 |
Also Published As
Publication number | Publication date |
---|---|
JPH04178838A (ja) | 1992-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
USRE33706E (en) | Table driven translator | |
US4553205A (en) | Flexible macro expansion process | |
US5956510A (en) | Apparatus and method for revising computer program code | |
US5832273A (en) | System for deleting redundant instructions from high level language source code containing in-line assembly instructions | |
JP3114199B2 (ja) | 言語処理システムのリスト出力方式 | |
JP3461185B2 (ja) | ロードモジュールへのソースコード行番号登録方法および装置 | |
JPH1185536A (ja) | 原始プログラムのエラー自動修正装置及び方法 | |
US20050273775A1 (en) | Apparatus, system, and method for identifying semantic errors in assembly source code | |
JPH0981371A (ja) | ソースコード自動バージョンアップ方法及び装置 | |
JP3417960B2 (ja) | 文章校正支援方法および装置 | |
JPH03185526A (ja) | 言語処理システムのシンボル処理方式 | |
JPH0695890A (ja) | コンパイラにおける名前置換方式 | |
JPH06131232A (ja) | データ辞書の多重定義修正支援装置 | |
JPH03186933A (ja) | 言語処理システムのシンボル処理方式 | |
JP2827724B2 (ja) | プログラムデバッグ処理方法 | |
JPH07105014A (ja) | 言語処理システムのシンボル処理方式 | |
JPH05224944A (ja) | アラインメント整合方法 | |
JP3044953B2 (ja) | 言語処理システムのシンボル処理方式 | |
JP2795309B2 (ja) | プロファイラ用コード追加方式 | |
JPH04230523A (ja) | プログラム作成装置 | |
JPH04270422A (ja) | プリコンパイル処理方式 | |
JPH11296406A (ja) | プログラム修正支援方法 | |
JPH02178845A (ja) | データベース操作言語のプリコンパイル方式 | |
Grau et al. | Model translator. Description | |
JPH03100730A (ja) | 高級言語による緊急修正データ作成処理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |