首页 / 专利库 / 电脑编程 / 别名 / Language translation program and debugging device using its output result

Language translation program and debugging device using its output result

阅读:69发布:2022-01-12

专利汇可以提供Language translation program and debugging device using its output result专利检索,专利查询,专利分析的服务。并且PURPOSE:To debug a source program described in program language by which a definition text to supply an arbitrary variable name to a reserved word can be described by using the arbitrary variable name in a debugging device using a language translation program and its output result. CONSTITUTION:A preprocess part 230p generates an alias definition file 270a in which a PC identifier defined in each xsi define sentence is conformed to the variable name replaced by the PC identifier based on all the # define sentence in an input source program. A de-bugger 230d obtains the absolute address of the variable name by referring to the alias definition file 27Oa and a PC identifier/absolute address conversion table 270b by inputting a command for debug setting the variable name defined in the # define sentence as a parameter, and performs debug processing such as the display and rewrite of a variable provided with the variable name, etc., designated by the command for debug.,下面是Language translation program and debugging device using its output result专利的具体信息内容。

【特許請求の範囲】
  • 【請求項1】 予約語に対して任意の変数名を与える定義文を記述することが可能な言語で記述されたソースプログラムを、計算機が実行可能なコードから成る目的プログラムに翻訳する言語翻訳プログラムであって、 前記ソースプログラム内に記述されている全ての前記定義文に基づいて、それらの各定義文で定義されている予約語と変数名との対応関係を記憶する別名定義ファイルを作成するファイル作成手段(1)と、 前記ソースプログラム内の前記定義文によって定義されている変数名を、その定義文によって定義されている予約語に置き換える変数名置き換え手段(2)と、 前記ソースプログラム内の前記定義文によって定義されている変数名以外の各変数名に対して相対アドレスを割り付け、上記各変数名とその各変数名に割り付けられた相対アドレスとの対応関係を記憶する変数シンボルマップを作成するシンボルマップ作成手段(3)と、 を有することを特徴とする言語翻訳プログラム。
  • 【請求項2】 予約語に対して任意の変数名を与える定義文を記述することが可能な言語で記述されたソースプログラムを、計算機が実行可能なコードから成る目的プログラムに翻訳する言語翻訳プログラムであって、 前記ソースプログラム内に記述されている全ての前記定義文に基づいて、それらの各定義文で定義されている予約語に割り付けられているアドレスと変数名との対応関係を記憶する別名定義ファイルを作成するファイル作成手段(11)と、 前記ソースプログラム内の前記定義文によって定義されている変数名を、その定義文によって定義されている予約語に置き換える変数名置き換え手段(12)と、 前記ソースプログラム内の前記定義文によって定義されている変数名以外の各変数名に対して相対アドレスを割り付け、上記各変数名とその各変数名に割り付けられた相対アドレスとの対応関係を記憶する変数シンボルマップを作成するシンボルマップ作成手段(13)と、 を有することを特徴とする言語翻訳プログラム。
  • 【請求項3】 請求項1記載の言語翻訳プログラムにより翻訳された目的プログラムをデバッグするデバッグ装置であって、 ある変数名をパラメータとするデバッグ用コマンドが入力されたとき、その変数名が前記別名定義ファイルまたは前記変数シンボルマップのいずれに登録されているかを検索する変数名検索手段(21)と、 該変数名検索手段(21)の検索結果に基づいて、前記別名定義ファイルを参照して前記定義文によって前記変数名に置き換えられた予約語を見つけ、その予約語に割り付けられているアドレスを出力する第1のアドレス出力手段(22)と、 前記変数名検索手段(21)の検索結果に基づいて、前記変数シンボルマップから前記変数名の相対アドレスを取り出し、その相対アドレスまたはメモリ上の 絶対アドレスを出力する第2のアドレス出力手段(2
    3)と、前記第1のアドレス出力手段(22)または前記第2のアドレス出力手段(23)から入力されるアドレスの内容に対して、前記入力デバッグコマンドによって指定された処理を行うデバッグ処理手段(24)と、 を有することを特徴とするデバッグ装置。
  • 【請求項4】 請求項2記載の言語翻訳プログラムにより翻訳された目的プログラムをデバッグするデバッグ装置であって、 ある変数名をパラメータとするデバッグ用コマンドが入力されたとき、その変数名が前記別名定義ファイルまたは前記変数シンボルマップのいずれに登録されているかを検索する変数名検索手段(31)と、 該変数名検索手段(31)の検索結果に基づいて、前記別名定義ファイルを参照して前記定義文によって前記変数名に置き換えられた予約語に割り付けらているアドレスを出力する第1のアドレス出力手段(32)と、 前記変数名検出手段(31)の検索結果に基づいて、前記変数シンボルマップから前記変数名の相対アドレスを取り出し、その相対アドレスまたはメモリ上の絶対アドレスを出力する第2のアドレス出力手段(33)と、 前記第1のアドレス出力手段(32)または前記第2のアドレス出力手段(33)から入力されるアドレスの内容に対して、前記入力デバッグコマンドによって指定された処理を行うデバッグ処理手段(34)と、 を有することを特徴とするデバッグ装置。
  • 说明书全文

    【発明の詳細な説明】

    【0001】

    【産業上の利用分野】本発明は、ソースプログラムを計算機が実行可能な目的プログラムに翻訳する言語翻訳プログラム、及びその言語翻訳プログラムの出結果を基に上記ソースプログラムのデバッグを行うデバッグ装置に関する。

    【0002】

    【従来の技術】計算機の動作アルゴリズムを記述するプログラム言語は、プログラムの作成効率を向上するために、最近では、一部のハードウエアを制御する部分を除いては、人間の使っている言語の準に近い高水準言語が多く用いられるようになってきている。

    【0003】この傾向は、マイクロコンピュータを内蔵することにより、制御手順をプログラミングにより設定できるシーケンサであり、生産ラインの制御や産業ロボットなどの自動化機器の作業手順を決めるプログラムコントローラ(以下、PCと略称して述べる)においても同様であり、最近では、PC用のプログラムもC言語等の高級言語(高水準言語)で作成するようになってきている。

    【0004】図12は、C言語で記述されたソースプログラム(以下、Cソースファイルと表現する)を目的プログラム(Object Program) に翻訳する従来のCコンパイラ(C言語用の言語翻訳プログラム)の動作を説明するフローチャートである。

    【0005】コンパイラは、一般に、その機能に応じて、プリプロセス部、解析部、及びコード生成部の3つのフェーズに分かれており、各フェーズは上記の順序で実行される。 そして、上記各フェーズは、それぞれ中間ファイルを生成し、それら各中間ファイルが、次に実行されるフェーズの入力となっている方式のものが多い。

    【0006】次に、上記図12のフローチャートを参照しながら、従来のCコンパイラの動作を説明する。 まず、プリプロセス部は(Cプリプロセッサ)は、入力されるCソースファイル(入力Cソースファイル)に含まれる#include 命令により、その#include命令により指定されている別のCソースファイルを読み込み、それらのCソースファイルの内容全体を入力Cソースファイルの上記#include 文が記述された行に挿入するファイル結合処理を行う(S1)。

    【0007】すなわち、入力Cソースファイル内の#in
    clude 文が、その#include 文により指定されたCソースファイルに変換される。 次に、プリプロセス部は、入力Cソースファイルに含まれるif文等の条件コンパイル命令について、それら各条件コンパイル命令の指定する条件に基づき、入力ソースファイルの一部を無効にする(S2)。 そして、最後にプリプロセス部は、入力Cソースファイルに含まれる、#include 命令のマクロ定義に従って、入力Cソースファイル内のある字句を(マクロ・テンプレートもしくはマクロ名)を上記define命令により定義された字句(マクロ拡張もしくは置換文字列)に置き換える(S3)。

    【0008】以上のようにして、プリプロセス部が作成した中間ファイル(拡張ソースコードファイル)は、解析部に渡される。 解析部は、上記拡張ソースコードファイルについて、構文規則に基づいて構文解析を行い、次にその構文解析によって得られた結果についてさらに意味解析を行う(S4)。

    【0009】解析部は、上記意味解析部において、上記拡張ソースコードファイルから内部メモリに領域が割り当てられる変数各を全てリストアップし、図13に示すような形式の変数シンボルテーブル(変数シンボルマップ)100を作成する(S5)。 尚、このときまでの段階では、上記変数シンボルテーブル100は、変数名及びそのデータ長は登録されているが、相対アドレスはまだ未登録のままである。

    【0010】続いて、解析部は、上記構文解析処理により作成された構文を、さらに最適なコード生成ができるような構文に変更した後、上記Cソースファイル(ソースプログラム)をアセンブリ言語で記述されたプログラム(アセンブリ言語プログラム)に翻訳し、そのアセンブリ言語プログラムと上記変数シンボルテーブル100
    を含む中間ファイルをコード生成部へ渡す(S6)。

    【0011】コード生成部は、上記中間ファイルの内容を読み出し、まずその中間ファイル内に格納されている上記変数シンボルテーブル100に登録されている各変数に、CPUの主メモリロード用の相対アドレスを割り付け(S7)、次に上記アセンブリ言語プログラムを上記中間ファイルから読み出し、そのアセンブリ言語プログラムを計算機が実行可能なコードから成るリロケータブル(relocatable)な目的プログラム( オブジェクトプログラム)に翻訳する(S8)。

    【0012】次に、上述のような従来のCコンパイラにより作成されるリロケータブルな目的プログラムを、従来のデバッガ(Debugger) を用いてデバッグ(Debug)する場合の動作の一例を図14のフローチャートを参照しながら説明する。 尚、同図のフローチャートに示す処理を行うデバッガは、シンボリックデバッガ(SymbolicDe
    bugger)である。

    【0013】このシンボリックデバッガ(以下、デバッガと略称する)は、周知のように、上記目的プログラムを計算機上で実際に実行させながら、ソースプログラムで使用されている変数名の値を、プログラム実行中またはプログラム実行終了後に、メモリダンプ(memory dum
    p)できる機能を備えているデバッグ装置である。

    【0014】続いて、上記従来のデバッガにより行われる、ソースプログラムで使用されている変数名に対するデバッグ処理を、図14のフローチャートを参照しながら説明する。

    【0015】デバッガは、ユーザがキーボード等の入力装置を介して入力したある変数名に対するあるデバッグ処理を指定するデバッグコマンドを、取得すると(S1
    1)、上記Cコンパイラにより作成された変数シンボルテーブル100を検索し、上記変数名を捜し出す(S1
    2)。

    【0016】デバッガは、上記検索に成功すると(S1
    3,YES)、変数シンボルテーブル100から上記変数名の相対アドレスを読み出し、その相対アドレスを基に上記変数名の主メモリ上でのアドレス(絶対アドレス)を求め(S15)、上記デバッグコマンドにより指定された所定のデバッグ操作(例えば、メモリ参照、書き換え等)を行う(S16)。

    【0017】一方、デバッガは、変数名の検索に失敗すると(S13,NO)、CRTディスプレイ等の表示装置に該当するエラーメッセージを出力(表示)する(S
    14)。

    【0018】

    【発明が解決しようとする課題】上述したように、C言語等の高級言語においては、#define文等によりソースプログラムで使用しているキーワード(文字列)を、コンパイラにより別のキーワードや定数、あるいはよく使用する文字や式に置き換えることができる。

    【0019】しかし、一般には、ある変数名を#define
    文によって別の変数名に置き換えることはあまり意味をなさない為、行われない。 しかし、PC(プログラマブル・コントローラ)の分野においては、そのような#de
    fine文による変数名の書き換え操作は、しばしば行われる。 すなわち、入出力リレーやタイマ等に対し、予めP
    C内の主メモリ上での絶対アドレスを割り当て、それらの入出力リレーやタイマ等をソースプログラム上では変数名で参照するようにし、それらの変数名にある別の変数名の値や定数等を代入する等のメモリ操作を行う。

    【0020】これは、PCの分野では、入出力リレーやタイマ等のシーケンス制御に用いられる部品の絶対アドレスが、プラント完成時において初めて決定されるという特殊性があるからである。 このため、ソースプログラムを作成する際には、上記入出力リレーやタイマ等に対してはそれらの部品名に対応する変数名を用いて記述し、#define文によりそれらの変数名を絶対アドレスを容易に知れるようなキーワード(PC識別子)に置き換えて記述しておくようにしている。

    【0021】このような方法をとることにより、ソースプログラムの作成・保守が容易になると共に、プラント完成時において上記のような部品の絶対アドレスがソースプログラム中での記述と異なるようになった場合でも、ソースプログラムにおいて該当#define文のPC識別子を変更するだけで対処できる。 すなわち、プラントのシステム設計時において、予め複数のPC識別子にプラント完成時において割り当てられる可能性の高い絶対アドレスをテーブル等により割り当てておくことにより、ソースプログラム内の#define文において記述されたPC識別子を別のPC識別子に変更するだけで、予め仮に割り当てていた絶対アドレスを正しい絶対アドレスに変更させることが容易にできる。

    【0022】図15に、そのようなメモリ操作を行っているC言語で記述されたソースプログラムの一例を示す。 同図に示すソースプログラム110の例では、#de
    fine文によりPCの主メモリ上での絶対アドレスを示すキーワード(PC識別子)である「WB0000」に「InSw
    itch」という変数名を割り当てる処理を行っている。
    尚、上記PC識別子は、Cコンパイラでは予約語として取り扱われる。

    【0023】従来のCコンパイラでは、上述したようにプリプロセス部において、#define文により定義された変数名(同図(a)に示すソースプログラム100においては「InSwitch」)を絶対アドレスを示すPC識別子(上記ソースプログラム100においては「WB000
    0」)に置き換えてしまうため、#define文により定義された変数名は、デバッガのデバッグ情報となる変数シンボルテーブルに登録されない(その変数名とそのアドレス情報は変数シンボルテーブルに登録されない)。 また、PC識別子(ソースプログラム100においては、
    「WB0000」) は、Cコンパイラでは予約語として取り扱われるため、PC識別子についても変数シンボルテーブルにそのアドレス情報は登録されない。

    【0024】したがって、従来は、デバッグ時において、ソースプログラムで使用した変数名(上記ソースプログラム100においては「InSwitch」)を指定して、
    その変数名の内容を参照したり(メモリ参照)、書き換えたり(メモリ書き換え)する等のデバッグ処理を行うことはできなかった。

    【0025】このため、PCの分野においては、C言語でソースプログラムを作成した場合、そのソースプログラムをデバッグする際、入出力リレーやタイマ等の部品のようにPCの主メモリ上に予め絶対アドレスが割り当てられるものについてその値の参照・書き換え等のデバッグ操作を行うときには、その絶対アドレスで直接指定する必要があった。

    【0026】したがって、上記入出力リレーやタイマ等の値の部品の参照・書き換え等のデバッグ操作を行う場合、その絶対アドレスを知る必要があった。 このため、
    それらのデバッグ操作は、煩雑なものとなり、デバッグの作業効率を低下させる一因となっていた。

    【0027】本発明は、C言語における#define文等のような既に予約語として定義されているキーワードをある変数名に置き換える定義文の記述が可能なプログラミング言語で記述されたソースプログラムのデバッグにおいて、コンパイルの際、上記キーワードに置き換えられる上記定義文で定義された変数名を用いて、それらの変数名を有する変数の参照・書き換え等のデバッグ操作を行えるようにすることを目的とする。

    【0028】

    【課題を解決するための手段】図1は、請求項1記載の第1の発明の原理ブロック図である。 この第1の発明は、予約語に対して任意の変数名を与える定義文を記述することが可能な言語で記述されたソースプログラムを、計算機が実行可能なコードから成る目的プログラムに翻訳する言語翻訳プログラムを前提にし、以下に示す各手段1,2,3を有する。

    【0029】ファイル作成手段1は、前記ソースプログラム内に記述されている全ての前記定義文に基づいて、
    それらの各定義文で定義されている予約語と変数名との対応関係を記憶する別名定義ファイルを作成する。

    【0030】変数名置き換え手段2は、前記ソースプログラム内の前記定義文によって定義されている変数名を、その定義文によって定義されている予約語に置き換える。 シンボルマップ作成手段3は、前記ソースプログラム内の前記定義文によって定義されている変数名以外の各変数名に対して相対アドレスを割り付け、上記各変数名とその各変数名に割り付けられた相対アドレスとの対応関係を記憶する変数シンボルマップを作成する。

    【0031】上記ファイル作成手段1、上記変数名置き換え手段2、及び上記シンボルマップ作成手段3は、例えばマイクロプロセッサ及びそのマイクロプロセッサにより実行されるプログラムによって実現される。

    【0032】次に、図2は請求項2記載の第2の発明の原理ブロック図である。 この第2の発明も、上記第1の発明と同様に予約語に対して任意の変数名を与える定義文を記述することが可能な言語で記述されたソースプログラムを、計算機が実行可能なコードから成る目的プログラムに翻訳する言語翻訳プログラムを前提にする。 そして、以下の手段11,12,及び13を有する。

    【0033】ファイル作成手段11は、前記ソースプログラム内に記述されている全ての前記定義文に基づいて、それらの各定義文で定義されている予約語に割り付けられているアドレスと変数名との対応関係を記憶する別名定義ファイルを作成する。

    【0034】変数名置き換え手段12及びシンボルマップ作成手段13は、それぞれ前記第1の発明の変数置き換え手段2及びシンボルマップ作成手段3と同等の機能を有する。

    【0035】この第2の発明の各手段11,12,13
    も、上記第1の発明と同様に、例えばマイクロプロセッサ及びそのマイクロプロセッサによって実行されるプログラムにより実現される。

    【0036】続いて、図3は、請求項3記載の第3の発明の原理ブロック図である。 この第3の発明は、前記第1の発明である請求項1記載の言語翻訳プログラムにより翻訳された目的プログラムをデバッグするデバッグ装置を前提にし、以下の各手段21,22,23及び24
    を有する。

    【0037】変数検索手段21は、ある変数名をパラメータとするデバッグ用コマンドが入力されたとき、その変数名が前記別名定義ファイルまたは前記変数シンボルマップのいずれに登録されているかを検索する。

    【0038】第1のアドレス出力手段22は、変数名検索手段21の検索結果に基づいて、前記別名定義ファイルを参照して前記定義文によって前記変数名に置き換えられた予約語を見つけ、その予約語に割り付けられているアドレスを出力する。

    【0039】第2のアドレス出力手段23は、変数名検索手段21の検索結果に基づいて、前記シンボルマップから前記変数名の翻訳アドレス、その相対アドレスまたは、その変数名を有する変数の絶対アドレスを取り出して出力する。

    【0040】デバッグ処理出力24は、第1のアドレス出力手段22または前記第2のアドレス出力手段24から入力されるアドレスの内容に対して、前記入力デバッグコマンドによって指定された処理を行う。

    【0041】これらの各手段21,22,23,24
    は、例えばマイクロプロセッサ及びそのマイクロプロセッサにより実行されるプログラムによって実現される。
    そして、最後に図4は、請求項4記載の第4の発明の原理ブロック図である。

    【0042】この第4の発明は、請求項2記載の第3の発明の言語翻訳プログラムにより翻訳された目的プログラムをデバッグするデバッグ装置を前提にする。 そして、以下の各手段31,32,33,34を有する。

    【0043】変数名検索手段31は、ある変数名をパラメータとするデバッグ用コマンドが入力されたとき、その変数名が前記別名定義ファイルまたは前記変数シンボルマップのいずれに登録されているかを検索する。

    【0044】第1のアドレス出力手段32は、変数名検索出力31の検索結果に基づいて、前記別名定義ファイルを参照して前記定義文によって前記変数名に置き換えられた予約語に割り付けられているアドレスを出力する。

    【0045】第2のアドレス出力手段33及びデバッグ処理手段34は、それぞれ上記第3の発明のデバッグ装置が有する同一名称の手段33及び手段34と同等の機能を有する。

    【0046】この第4の発明のデバッグ装置の各手段3
    1,32,33及び34も、例えば、上記第3の発明のデバッグ装置と同様に、マイクロプロセッサ及びそのマイクロプロセッサにより実行されるプログラムによって実現される。

    【0047】

    【作用】第1の発明によれば、ファイル作成手段1は、
    入力されるソースプログラムから前記定義文を全て抜き出し、それらの各定義文毎に各定義文によって定義されている予約語とその予約語に与えられる変数名とを対応付けて別名定義ファイルに登録する。

    【0048】続いて、変数名置き換え手段2は、上記入力ソースプログラムのステートメントを先頭から順に読み出し、そのソースプログラム内の定義文によって定義されている変数名を、その定義文によって定義されている予約語に置き換えていく。

    【0049】次に、シンボルマップ作成手段3は、変数名置き換え手段2等によって一部変更されたソースプログラムを入力し、そのソースプログラムから上記定義文によって定義されている変数名以外の変数名を抽出し、
    それらの変数名に対してソースプログラム内での相対アドレスを割り付け、それらの変数名とそれらの変数名に割り付けられた上記相対アドレスとが対応付けられた変数シンボルマップを作成する。

    【0050】そして、この結果、入力ソースプログラム内の上記定義文によって予約語に置き換えられる変数名については、その変数名がソースプログラム内において置き換えられる予約語とが対応付けられた別名定義ファイルが自動的に作成されると共に、上記定義文によって定義されていない変数名については、従来の言語翻訳プログラムと同様に、変数シンボルマップが作成される。

    【0051】第2の発明の作用は、変数名置き換え手段12が、入力ソースプログラム内の上記定義文によって定義されている変数名を、その定義文によって定義されている予約語の代わりに、その予約語に予め割り付けられている絶対アドレスと対応付けて別名定義ファイル内に登録する動作のみが異なる。

    【0052】そして、この結果、入力ソースプログラム内の上記定義文によって定義されている変数名がその定義文によってソースプログラム内で置き換えられる予約語に割り付けられる絶対アドレスと対応付けられた別名定義ファイルと上記第1の発明と同様な構成の変数シンボルマップとが自動的に作成される。

    【0053】また、第3の発明によれば、利用者が前記第1の発明の言語翻訳プログラムによって作成された目的プログラムをデバッグするために、ある変数名に対するデバッグ操作を指示するデバッグコマンドを入力すると、変数名検索手段21は、そのデバッグコマンドにより指定されている変数名が、上記第1の発明の言語翻訳プログラムによって作成された別名定義ファイルまたは変数シンボルマップのいずれの方に登録されているか検索する。

    【0054】変数名検索手段21は、上記変数名が別名定義ファイルに登録されていることを見い出すと、第1
    のアドレス出力手段22を起動させる。 第1のアドレス出力手段22は、起動されると、上記デバッグコマンドにより指定された変数名に対応する予約語を別名定義ファイルから読み出し、その予約語に割り付けられている絶対アドレス(このアドレスは、その予約語の現在のメモリ上の配置アドレスに等しい)を、予め作成されている所定のテーブルを検索する等の処理を行って見つけ出し、その予約語の絶対アドレスを、デバッグ処理手段2
    4に出力する。

    【0055】一方、変数名検索手段21は、上記変数名が変数シンボルマップに登録されているのを見い出すと、第2のアドレス出力手段22を起動させる。 第2のアドレス出力手段22は、起動されると、上記変数名の相対アドレスを上記変数シンボルマップから読み出し、
    その相対アドレスまたは上記変数名の現在のメモリ上の配置アドレス(絶対アドレス)をデバッグ処理手段24
    に出力する。

    【0056】デバッグ処理手段24は、第1のアドレス出力手段22または第2のアドレス出力手段23からアドレスを入力すると、そのアドレスを基に上記予約語の値または通常の変数名(定義文で定義されていない変数名)の値の表示や書き換え等の上記デバッグコマンドにより指定されたデバッグ処理を行う。

    【0057】したがって、利用者はソースプログラム内において定義文によって定義され、言語翻訳プログラムのプリプロセス部によって上記定義文によって定義された予約語に置き換えられるソースプログラム内の変数名を有する変数に係わるデバッグ操作を、その変数名を直接指定して行うことができる。

    【0058】また、第4の発明は、上記第3の発明とほぼ同様の動作を行うが、第1のアドレス出力手段32の動作が、第3の発明の第1のアドレス出力手段22と少し異なる。

    【0059】すなわち、第1のアドレス出力手段32
    は、変数名検索手段31から起動されると、別名定義ファイルから、利用者が入力したデバッグ用コマンドに指定されている変数名に対応する絶対アドレスを読み出し、その絶対アドレス(このアドレスは、上記定義文によって定義されている予約語の現在のメモリ上のアドレスに等しい)をデバッグ処理手段34に出力する。

    【0060】このように、前記第2の発明の言語翻訳プログラムが作成する別名定義ファイルには、定義文で定義されている変数名がその変数名に対応する予約語の絶対アドレスと対応付けられているため、第1のアドレス出力手段32は、別名定義ファイルを参照するだけで、
    直ちに定義文で定義されている変数名に割り付けられているアドレスを得ることができる。

    【0061】したがって、第4の発明においても、利用者はソースプログラム内において定義文によって定義され、言語翻訳プログラムのプリプロセス部によって上記定義文によって定義された予約語に置き換えられるソースプログラム内の変数名を有する変数に係わるデバッグ操作を、その変数名を直接指定して行うことができる。

    【0062】

    【実施例】以下、図面を参照しながら本発明の実施例を説明する。 図5は、本発明の一実施例のシステム構成を示す図である。

    【0063】同図において、入力ソースファイル210
    は、ユーザの作成したC言語によって記述されたPC
    (プログラマブル・コントローラ)用の入力ソースプログラムを格納するファイルである。

    【0064】入力装置220は、キーボード等から成り、ユーザがスクリーンエディタを起動して上記ソースプログラムを作成したり、後述するデバッガ230dの起動及びそのデバッグ部230dに対するデバッグ用コマンドを入力するため等に用いられる。

    【0065】表示装置240は、例えばCRTディスプレイ等の各種表示装置から成り、上記スクリーンエディタの画面表示や、上記デバッガ230dの出力を表示する。 中間ファイル250pは、後述するプリプロセス部230pが上記入力ソースプログラムから生成する拡張ソースコード等から成るファイルである。

    【0066】中間ファイル250kは、後述するプリプロセス部230kが、上記中間ファイル250p内に格納されている拡張ソースコードを基に生成するアセンブリ言語によってに記述されたプログラム(アセンブリ語プログラム)等から成るファイルである。

    【0067】オブジェクトファイル250cは、後述するコード生成部250cが、上記中間ファイル250k
    に格納されている上記アセンブリ語プログラムを基に生成する計算機が実行可能なコードから成る目的プログラム(リロケータブルなオブジェクトプログラム)を格納するファイルである。

    【0068】別名定義ファイル270は、前記プリプロセス部230pが上記入力ソースプログラム内の#defi
    ne文に基づき作成する、PC識別子とそれに対応する変数名とが1対1に対応付けられたファイルである。 この別名定義ファイル270の詳細な内部構成は後述する。

    【0069】ソースファイル群280は、前記入力ソースプログラム内の#include 文によってその入力ソースプログラム内に組み込まれる複数のソースプログラムを格納しているファイルである。

    【0070】CPU230は、マイクロプロセッサ等から成り、プリプロセス部230p、解析部230k、コード生成部230c、及びデバッグ部230d等の複数の機能ブロックから成っている。 上記各機能ブロックの内、プリプロセス部230p、解析部230k、及びコード生成部230cは、Cコンパイラを構成している。
    また、デバッガ230dは、ユーザが上記入力ソースプログラムのデバッグを行うために用いるルーチン(rout
    ine)であり、ユーザが前記入力装置220から入力する起動コマンドにより起動され、ユーザが入力装置220
    から入力する各種デバッグコマンド(メモリ参照、メモリ書き換え、レジスタ表示、ブレークポイントの設定等)を入力して、それらのデバッグコマンドによって指定される処理を実行する。

    【0071】別名定義ファイル270aは、本実施例の特徴をなすファイルであり、プリプロセス部230pにより上記入力ソースプログラム内の#define文に基づき作成される、PC識別子とそれに対応する変数名とが1
    対1に対応付けられたファイルである。 この別名定義ファイル270aの内部構成の詳細は後述する。

    【0072】PC識別子/絶対アドレス変換テーブル2
    70bは、解析部230k及びコード生成部230cにより作成される、上記入力ソースプログラム内で用いられる各PC識別子の絶対アドレスを格納しているテーブルである。 このPC識別子/絶対アドレス変換テーブル270bの内部構成の詳細も後述する。

    【0073】変数シンボルテーブル270cは、前述した変数シンボルテーブル100と同様な構成のテーブルであり、入力ソースプログラム内で用いられている#de
    fine文で定義されている変数以外の全ての変数について、そのデータ長並びに相対アドレスを格納する。

    【0074】尚、上記PC識別子/絶対アドレス変換テーブル270bは、プリプロセス部230pによりいったん中間ファイル250pに格納された後、中間ファイル250kを経てコード生成部230cによりオブジェクトファイル250c内に格納される。 また、変数シンボルテーブル270cは、解析部230kによりその一部(変数名及びデータ長)が作成されていったん中間ファイル250kに格納された後、コード生成部230c
    により各変数に相対アドレスが割り付けられて完成し、
    オブジェクトファイル250c内に格納される。

    【0075】メモリ290は、ROM(リード・オンリ・メモリ)及びRAM(ランダム・アクセス・メモリ)
    等から成り、CPU230が上記プリプロセス部230
    p、解析部230k、及びコード生成部230cから成るCコンパイラを実行させるために必要なプログラム、
    CPU230がデバッガ230dを実行させるために必要なプログラム、CPU230が入力装置220や表示装置240を制御するためのプログラム等を格納している。 また、CPU230が、上記Cコンパイラやデバッガ230dを実行するときに使用する作業領域も有している。

    【0076】次に、前記プリプロセス部230pによって作成される上記別名定義ファイル270aの内部構成を図6に示す。 同図に示すように別名定義ファイル27
    0内には入力ソースプログラム内において#define文によって変数名が定義されている全てのPC識別子PID
    i (i=0,1,2,・・・)について、その定義された変数名VN i (i=0,1,2,・・・)が1対1に対応付けられて格納されている。 また、そのデータ長L
    i (i=0,1,2,・・・)も対応付けられて格納されている。

    【0077】続いて、予め設定されている上記PC識別子/絶対アドレス変換テーブル270bの内部構成を図7に示す。 同図に示すように、上記変換テーブル270
    b内には、上述した入力ソースプログラムにおいて使用可能な全てのPC識別子PID i (i=0,1,2,・
    ・・)について、その割り当てられた絶対アドレスAA
    i (i=0,1,2,・・・)が1対1に対応付けて格納されている。

    【0078】尚、変換シンボルテーブル290aは、前述した従来の変数シンボルテーブルと同様な内部構成となっているので、その内部構成についての説明は省略する。 ところで、上記入力ソースファイル210、中間ファイル250p、中間ファイル250K、オブジェクトファイル250c、及びソース群ファイル280は、同一の記憶媒体にまとめて、または複数の記憶媒体に分散されて格納される。 また、上記記憶媒体として、磁気ディスクや光磁気ディスクまたは磁気テープ等が用いられる。

    【0079】続いて、上記構成の実施例の動作を説明する。 まず、プリプロセス部230p、解析部230k、
    及びコード生成部230cから成るCコンパイラの動作を、図8のフローチャートを参照しながら説明する。 このCコンパイラは、利用者が入力装置220からCコンパイル命令のコマンドを入力することにより、CPU2
    30により起動される。

    【0080】CPU230は、まず、プリプロセス部2
    30pを起動する。 プリプロセス部230pは、入力ソースファイル210から入力ソースプログラムをメモリ290に読み出し、その入力ソースプログラム内の#in
    clude 文が記述された行を、その#include 文により指定されたソースファイルに置き換える(S22)。 プリプロセス部220pは、この処理を、ソースファイル群280から#include 文によって指定されたソースファイルを読み出すことにより行う。

    【0081】続いて、プリプロセス部230pは、上記入力ソースプログラム内の#if文等の条件コンパイル命令について、その条件コンパイル命令により指定されている条件に基づき、上記入力ソースプログラム内の一部を無効にする(S22)。

    【0082】次に、プリプロセス部230pは、入力ソースプログラム内の各#define文の指示に応じて、各#
    define文におけるPC識別子PID i (i=0,1,
    2,・・・)を定義された変数名VN i (i=0,1,
    2,・・・)に置き換えると共に(SC23)、その字句の置き換えが行われたPC識別子PID i (i=0,
    1,2,・・・)と変数名VN i (i=0,1,2,・
    ・・)とを、別名定義ファイル270a内に図6に示すような形式で対応付けて登録する。 また、このとき、変数名のデータ長L i (i=0,1,2,・・・)も登録する(SC24)。

    【0083】このように、本実施例では、#define文については単に、入力ソースプログラム内のPC識別子P
    ID i (i=0,1,2,・・・)を指定された変数名VN i (i=0,1,2,・・・)に置き換えるだけでなく、入力ソースプログラム内の置き換えられた全てのPC識別子PID i (i=0,1,2,・・・)を、その置き換わった変数名VN i (i=0,1,2,・・
    ・)に対応付けて別名定義ファイル270aに登録しておく。

    【0084】以上のようにして、プリプロセス部230
    pは、入力ソースファイル210に格納されている入力ソースプログラムから、拡張ソースコードと別名定義ファイル270aとから成る中間ファイル250pを生成する。

    【0085】続いて、CPU230は、解析部230k
    を起動させる。 解析部230kは、中間ファイル250
    pから拡張ソースコードをメモリ290に読み出し、所定の構文規則に基づいて構文解析を行い、次にその構文解析によって得られた結果についてさらに意味解析を行う(S25)。

    【0086】次に、解析部230kは、上記意味解析において、上記拡張ソースコードからメモリ290上に領域が割り当てられる変数名を全てリストアップし、それらの変数名について前記図13に示す変数シンボルテーブル100と同様な形式の変数シンボルテーブル270
    cを作成する(S26)。

    【0087】さらに、解析部230kは、上記構文解析処理により得られた構文を、より最適なコードが生成できるような構文に変更する。 そしてその構文からアセンブリ言語で記述されたアセンブリ言語プログラムを生成し、そのアセンブリ言語プログラムと上記変数シンボルテーブル270c、及び上記中間ファイルから読み出した別名定義ファイル270aとから成る中間ファイル2
    50kを作成する(S27)以上のようにして、解析部230kの処理が終了すると、CPU230は、次に、
    コード生成部230cを起動させる。

    【0088】コード生成部230cは中間ファイル25
    0kから上記アセンブリ言語プログラム、変数シンボルテーブル270C、及び別名定義ファイル270aを読み出してメモリ290上にロードし、まず上記アセンブリ言語プログラム内の変数について相対アドレスを設定するメモリ割り付けを行い、そのメモリ割り付けの結果を基に、変数シンボルテーブル270c内の全ての変数について対応する相対アドレスを登録し、変数シンボルテーブル270cを完成させる(S28)。

    【0089】続いて、コード生成部230cは上記アセンブリ言語プログラムをアセンブルし、CPU230が実行可能なコードから成るリロケータブルなオブジェクト・プログラム(Object Program )を生成する。 そして、コード生成部230cは、そのオブジェクト・プログラム、上記のようにして完成された変数シンボルテーブル270c、及びメモリ290上にロードしてある別名定義ファイル270aから成るオブジェクト・ファイル250cを生成する(S29)。

    【0090】このようにして、入力ソースプログラムがCコンパイラによりコンパイルされて、対応するオブジェクト・プログラムが生成され、また、さらにそのオブジェクト・プログラムをデバッガ230dによりデバッグする際の補助情報となる別名定義ファイル270a及び変数シンボルテーブル270cも生成される。

    【0091】次に、上述のようにしてCコンパイラにより作成されたオブジェクト・プログラムを、デバッガ2
    30dを用いてデバッグする動作の本発明に係わる要部を説明する。

    【0092】まず、利用者はデバッグをしようとするオブジェクト・プログラムをメモリ290上の所定領域にロードした値、入力装置220からデバッガ230dを起動させるためのコマンドを入力する。 このことにより、CPU230は、デバッガ230dを起動させ、デバッガ230dはデバッグ・コマンドの入力待ちとなる。

    【0093】この状態において、あるソースプログラムをデバッグするために、実際にそのソースプログラムのオブジェクト・プログラム(以後、単にプログラムと記述した場合、オブジェクト・プログラムを指す)を実行させて、プログラムの実行途中またはプログラムの実行終了後のある変数(上記ソースプログラムで用いられている変数)の値を表示装置240に表示させたい場合には、利用者は、ブレーク・ポイント設定用のデバッグ・
    コマンドを入力して、CPU230の主メモリ(メモリ290の一部または全部)上にロードされている上記オブジェクト・プログラムの上記ある変数のロードアドレスにブレークポイントを設定する(但し、プログラムの実行終了後の上記ある変数の値を見たいのであれば、ブレーク・ポイントを設定する必要は無い)。

    【0094】続いて、利用者は、上記プログラムを実行させるためのデバッグ・コマンドを入力装置220から入力する。 このことにより、デバッガ230dは、メモリ290上にロードされている上記プログラムを実行させる。

    【0095】そして、このデバッガ230dにより実行させられたプログラムは、所定のブレーク・ポイントで停止する(ブレーク・ポイントを予め設定していた場合のとき、ブレーク・ポイントを設定していなければ、プログラムは最後まで実行される)。

    【0096】次に、上記ブレーク・ポイントでの停止または上記プログラムの実行終了後、利用者が、ある変数の値を表示装置240に表示させてデバッグ処理する場合の動作を、図9のフローチャートを参照しながら説明する。

    【0097】利用者が、入力装置220から上記ソースプログラム内で用いられているある変数名(#define文によりPC識別子に置き換えられた変数名も含む)を有する変数の値を表示するようにを指示するデバッグ・コマンドを入力すると 、デバッガ230dは、そのデバッグ・コマンドをCPU230の特に図示していない入力インタフェースを介して入力する(S31)。

    【0098】そして、デバッガ230dは、上記デバッグ・コマンドを入力すると、まず、そのデバッグ・コマンドにより指定されている変数名が変数シンボルテーブル270c内に登録されているかどうか検索する(S3
    2)。

    【0099】そして、デバッガ230dは、上記検索に成功すると(S33,YES)、変数シンボルテーブル270cからその変数名に対応する相対アドレス及びデータ長を読み出し、上記プログラムのメモリ290上の格納先頭アドレスを基に、上記変数名を有する変数の相対アドレスをメモリ290上の絶対アドレスに変換する(S34)。 そして、デバッガ230dはメモリ290
    上の上記絶対アドレスから始まる所定データ長の変数の値を、CPU230の特に図示していない出力インタフェースを介して表示装置240に表示させる(S3
    8)。

    【0100】このように、利用者は、ソースプログラムで用いられている通常の変数名(#define文によりPC
    識別子を置き換えた変数名以外の通常の変数名)をパラメータとするデバッグコマンドを用いて、それらの変数名を有する変数の値の表示や書き換え等のデバッグ操作を従来のデバッガ(デバッグ装置)と同様に行うことができる。

    【0101】一方、デバッガ230dは、上記検索処理S32において変数名の検索に成功しなかった場合には(S33,NO)、次に別名定義ファイル270aに上記指定変数名が登録されているかどうかを検索する(S
    35)。 そして、そのデバッガ230dは、その検索に成功すれば(S36,YES)、別名定義ファイルから上記変数名VN i (i=0,1,2,・・・)に対応するPC識別子PID i (i=0,1,2,・・・)とそのデータ長L i (i=0,1,2,・・・)を読み出し、次にPC識別子/絶対アドレス変換テーブル270
    bを参照して、上記PC識別子PID i (i=0,1,
    2,・・・)を絶対アドレスに変換する(S37)。 そして、デバッガ230dは、その絶対アドレスを基に上記変数名VN i (i=0,1,2,・・・)を有する変数の値の表示(メモリ・ダンプ)や、その値の書き換え等の当該処理をおこなう(S38)。

    【0102】このように、本実施例では、ソースプログラムにある変数名で記述していた入出力リレーやタイマ等について、その変数名を#define文により所定の絶対アドレスが予め割り付けられているPC識別子に置き換ええるようにした場合でも、その変数名を用いてデバッグすることができる。 したがって、ソースプログラム作成者は、上記変数名を、プログラム完成後、だいぶ時間が経過しても対応する入出力リレーやタイマ等を直ちに思い出すことができるような名称にしておくことにより、ソースプログラム作成のみならず、ソースプログラムの保守も容易になる。 また、ソースプログラムの保守は、必ずしもソースプログラム作成者が行うとは限らないので、ソースプログラム作成者以外の人がソースプログラムのデバッグを行う場合にも、そのデバッグ作業が容易になる。

    【0103】一方、デバッガ230dは、上記検索処理S36において検索が不成功に終わった場合には、利用者が指定した変数名が、ソースプログラム内で用いられていない不正の変数名であるものと判断して、その旨を示すエラーメッセージをCPU230の表示インタフェースを介して表示装置240に出力する(S38)。 このことにより、表示装置240には上記エラーメッセージが表示され、利用者はその表示を見て自分が不正な変数名を用いてデバッグ・コマンドを入力したことを直ちに知ることができる。

    【0104】尚、上記実施例では、別名定義ファイル2
    70aの1レコードを〔変数名,データ長,PC識別子〕の構成としているが(図6参照)、図10に示すように1レコードの構成を〔変数名,データ長,絶対アドレス〕という形式にしてもよい(絶対アドレスは、PC
    識別子の絶対アドレスを示す)。 このようなレコード構成の別名定義ファイルは、プリプロセス部230pが、
    前記図8に示すフローチャートの処理S24で、PC識別子PID i (i=0,1,2,・・・)をPC識別子/絶対アドレス変換テーブル270bを参照して対応する絶対アドレスAAD i (i=0,1,2,・・・)に変換することにより容易に作成できる。

    【0105】別名定義ファイルをこのような構成とした場合、デバッガ230dは、#define文によりPC識別子に置き換えられた変数名を、その別名定義ファイルを参照するだけで、直ちにその変数名を有する変数のアドレスを取得できるため(上記実施例の場合には、別名定義ファイル270a以外にPC識別子/絶対アドレス変換テーブル270cの参照も必要)、上記実施例よりも当該絶対アドレスを高速に取得でき、デバッグの処理速度が向上するという利点が生じる。

    【0106】次に、図11は本発明の他の実施例のシステム構成図である。 この実施例は、上述した前記図5に示すシステムにさらに通信装置300を付加した構成となっている。

    【0107】この通信装置300は、RS−232C等の通信インタフェースを有し、この通信インタフェースを介して特に図示していないターゲットマシン(例えば、PC(プログラマブル・コントローラ)に接続され、CPU230とターゲットマシンとの間のデータ伝送を制御する。そして、入力装置220からオブジェクト・プログラムのロードを指示するロードコマンドが入力された場合、CPU230の制御によりオブジェクトファイル250Cに格納されているオブジェクト・プログラムをターゲットマシンの主メモリにロードする。また、ターゲットマシンのデバッグ時においては、入力装置220から入力されるデバッグコマンドのターゲットマシンとの間での送信、応答を制御する。

    【0108】このような構成とすることにより、この実施例では、ソフトプログラムのデバッグ時にそのオブジェクト・プログラムをメモリ290ではなく、ターゲットマシンの主メモリにロードして、直接ターゲットマシン上でそのオブジェクト・プログラムを実行させながらデバッグを行うことが可能になる。 したがって、図11
    に示すデバッグ装置側でターゲットマシン上でのオブジェクト・プログラムの動作をエシュレートする必要が無くなり、デバッグ装置側の負荷が軽減される。

    【0109】また、上記実施例ではC言語で記述されたソースプログラムをコンパイルするCコンパイラを取り上げたが、本発明は、Cコンパイラに限定されるものではなく、予約語に対して任意の変数名を与える定義文を記述可能なあらゆるプログラム言語をコンパイル対象とする全てのコンパイラ及びそのコンパイラの出力結果を用いてデバッグ処理を行う全てのデバッガ(デバッグ装置)に適用可能なものである。

    【0110】

    【発明の効果】第1の発明及び第2の発明によれば、予約語をある変数名に置き換える定義文が記述されたソースプログラムをコンパイルする際、従来は不可能であった変数名とその予約語(第1の発明が対応)、またはその変数名とその予約語に予め割り付けられているアドレス(第2の発明が対応)とが対応付けられたファイル(テーブル)を自動的に作成できる。

    【0111】また、第3または第4の発明によれば、上記定義文によってある予約語に置き換えられた変数名をパラメータとするデバッグ・コマンドが入力されたとき、その変数名を有する変数のアドレスを、上記第1または第2の発明によって作成された上記ファイル(テーブル)を参照して求め、その変数に対して上記デバッグ・コマンドによって指定された当該処理を行うので、従来は不可能であった上記定義文で定義される特殊な変数名を用いたデバッグ操作が可能になる。 したがって、上記のような特殊な変数名を有する変数に係わるデバッグ操作を、それらの変数に実際に割り付けられているアドレスを知らなくても行うことができるようになるため、
    デバッグ操作が容易になり、デバッグの作業効率が従来よりも著しく向上する。

    【図面の簡単な説明】

    【図1】本発明の原理ブロック図(その1)である。

    【図2】本発明の原理ブロック図(その2)である。

    【図3】本発明の原理ブロック図(その3)である。

    【図4】本発明の原理ブロック図(その4)である。

    【図5】本発明の一実施例のシステム構成図である。

    【図6】別名定義ファイルの内部構成図である。

    【図7】PC識別子/絶対アドレス変換テーブルの内部構成図である。

    【図8】本発明の一実施例のCコンパイラの動作を説明するフローチャートである。

    【図9】本発明の一実施例のデバッガの動作を説明するフローチャートである。

    【図10】別名定義ファイルの他の構成例を示す図である。

    【図11】本発明の他の実施例のシステム構成図である。

    【図12】従来のCコンパイラの動作を説明するフローチャートである。

    【図13】変数シンボルテーブルの一構成例を示す図である。

    【図14】従来のデバッガの動作を説明するフローチャートである。

    【図15】Cコンパイラのプリプロセス部により行われる#define文に対する処理を説明する図である。

    【符号の説明】

    1,11 ファイル作成手段 2,12 変数名置き換え手段 3,13 シンボルマップ作成手段 21,31 変数名検索手段 22,32 第1のアドレス出力手段 23,33 第2のアドレス出力手段 24,34 デバッグ処理手段

    高效检索全球专利

    专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

    我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

    申请试用

    分析报告

    专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

    申请试用

    QQ群二维码
    意见反馈