JP2007188366A - コンパイル装置 - Google Patents
コンパイル装置 Download PDFInfo
- Publication number
- JP2007188366A JP2007188366A JP2006006859A JP2006006859A JP2007188366A JP 2007188366 A JP2007188366 A JP 2007188366A JP 2006006859 A JP2006006859 A JP 2006006859A JP 2006006859 A JP2006006859 A JP 2006006859A JP 2007188366 A JP2007188366 A JP 2007188366A
- Authority
- JP
- Japan
- Prior art keywords
- machine language
- language object
- intermediate code
- correspondence table
- code
- 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
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【課題】プログラマブルコントローラのソフトウェア開発で、コーディング・コンパイル・転送・デバッグの一連の作業を繰り返す過程において、ソースコードの変更量に見合った機械語オブジェクトの転送を実施することにより作業者の待ち時間を短縮させ、デバッグ効率を向上させる。
【解決手段】
フロントエンドコンパイラはソースコードと中間コードの対応情報である第1の対応表を、バックエンドコンパイラは中間コードと機械語オブジェクトの対応情報である第2の対応表を作成し、ソースコードの部分的な変更が生じた場合は第1、第2の対応表に基づいて該当部分の機械語オブジェクトを生成する。
【選択図】図1
【解決手段】
フロントエンドコンパイラはソースコードと中間コードの対応情報である第1の対応表を、バックエンドコンパイラは中間コードと機械語オブジェクトの対応情報である第2の対応表を作成し、ソースコードの部分的な変更が生じた場合は第1、第2の対応表に基づいて該当部分の機械語オブジェクトを生成する。
【選択図】図1
Description
本発明は、プログラマブルコントローラのソフトウェア開発におけるソースコードのコンパイル方法に関り、ターゲットへの転送情報を制御することによりコンパイルや転送待ち時間を低減させて、デバッグ効率を向上させるコンパイル装置に関する。
プログラマブルコントローラのソフトウェア開発では、コーディング・コンパイル・転送・デバッグを繰り返し実施する。デバッグ作業中に、ソースコード上に不具合があった場合は、ソースコードを修正(コーディング)した後にコンパイル・転送・デバッグを実施する。大概の不具合は部分的な修正で対応可能であるが、部分的な変更であっても、ある程度纏まった単位(1つのソースファイル)で、コンパイル・転送する必要がある。そのためコンパイルや転送に時間が掛かる。また転送するためにはデバッグを途中で止める必要があるので、デバッグ作業を効率良く実施できない。
コンパイル装置としては、例えば特許文献1に記載されたものが知られている。特許文献1に記載されたコンパイル装置のコンパイラは、オブジェクトファイルの他に定数情報ファイルを生成する。この定数情報ファイルはリソース位置・配置先アドレス・データ型・定数データを保持する。ソースコード(ソースファイル)における定数変更の際には、定数情報ファイルの定数データを変更することによりオブジェクトファイルの該当箇所を更新可能とし、ソースコードを全てコンパイルしてからオブジェクトファイルを生成する必要がないのでコンパイルや転送時間の短縮を可能としている。
特開2003−330729号公報
上記特許文献1は、図10に示すようなコンパイラ装置のブロック構成図になっている。定義ファイル3Aはコンパイラ装置11A内の定義ファイルであり、オブジェクトファイル1A及びソースファイル2Aのそれぞれの構造および両者の関係を定義している。コンパイラ4Aは、ソースファイル2Aを変換してオブジェクトファイル1Aと定数情報ファイル6Aとを自動生成するようになっている。すなわち、コンパイラ4Aは、ソースファイル2Aを変換してオブジェクトファイル1Aを生成する際に、ソースファイル2Aから定数データを自動的に定数情報ファイル6Aとしてオブジェクトファイル1Aから分離して生成する。その後、通信手段5Aは、コンパイラ4Aにより生成されたオブジェクトファイル1Aおよび定数情報ファイル6Aをターゲットマシン12A上に転送する。定数情報ファイル6Aは、通信手段5Aによって、ターゲットマシン12A上に定数データ7として展開される。
このように従来の技術においては、ソースファイルをコンパイルする際に、定数情報を分離生成することにより、定数情報ファイルのみの変更を可能にしたが、定数変更の処理に限定されており、他の変更部分に言及した従来技術はない。
本発明は上記を鑑み、ユーザがソースコードを修正したときの対応を、定数データに限定せずに対応できるコンパイル装置を提供することを目的とする。
上記の課題を解決する手段として、本発明は以下のように構成する。
第1に、ソースコードの局部的な変更を処理することが大部分であるコンパイル装置は、ソースコードから中間コード、及びソースコードと該中間コードの対応情報である第1の対応表を生成するフロントエンドコンパイラと、該中間コードから実行形式である第1の機械語オブジェクト、及び該中間コードと該第1の機械語オブジェクトの対応情報である第2の対応表を生成するバックエンドコンパイラとを備え、前記フロントエンドコンパイラは前記ソースコードの部分的な変更を実施したときに前記第1の対応表に基づいて変更箇所、或は変更箇所を含む所定の範囲のみを更新した前記中間コードを生成し、前記バックエンドコンパイラは前記中間コードの部分的な変更が生成されたときに前記第2の対応表に基づいて変更箇所、或は変更箇所を含む所定の範囲のみを更新した第2の機械語オブジェクトを生成するように構成する。
第2に、コンパイル装置は、前記第1の機械語オブジェクトをオブジェクトの実行部であるターゲットに通信する手段と、前記第2の機械語オブジェクトをオブジェクトの実行部であるターゲットに通信する手段を備え、前記ソースコードの局部的な変更により生じた前記第1の機械語オブジェクトの変更部分を前記第2の機械語オブジェクトに置き換えるように構成する。
第3に、コンパイル装置は、前記バックエンドコンパイラは前記第1の機械語オブジェクトと前記第1の対応表と前記第2の機械語オブジェクトを前記ターゲット上に直接生成するように構成する。
第4に、コンパイル装置で、前記中間コードは演算子とオペランドを一組で構成する。
第5に、コンパイル装置で、前記機械語オブジェクトは演算子と等価の処理をする処理部と、オペランドとしてアドレス或は数字という情報を所有するデータ部と、該データ部の実行をとばし次の処理部を実行させるJUMP命令部で構成する。
本発明により、ソースコードの変更部分を対応表を用いることにより、定数データに限らず安易に分離可能とし、その結果、コンパイルや転送待ち時間を低減させて、デバッグ効率を向上が図られる。
以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。
まず図1、2及び図3〜5を用いて、動作の概略を説明する。その後、図6〜9を用いて具体的な変更動作を説明する。
始めにソースコードを完全コンパイルする場合を説明する。図1に示す通り、基本構成はソースコード1から機械語オブジェクト4を生成するコンパイル装置100と、コンパイルされた機械語オブジェクト4を実行するターゲット200からなる。
まずフロントエンドコンパイラ101がソースコード1から中間コード2と対応表(ソース−中間コード)3を生成する。対応表(ソース−中間コード)3とは、ソースコード1と中間コード2の対応情報である。続いてバックエンドコンパイラ102は、中間コード2から機械語オブジェクト4と対応表(中間コード−機械語オブジェクト)5を生成する。対応表(中間コード−機械語オブジェクト)5とは、中間コード2と機械語オブジェクト4の対応情報である。生成後、通信手段103は、機械語オブジェクト4をターゲット200に送り、ターゲット200は内臓するスイッチなどのトリガー、或いは図示しない外部から命令されると機械語オブジェクト4を実行する。外部とは、例えば、デバッグ開発環境であったり、ネットワークに接続されている端末であったりする。
図1の中間コード2の一例は、例えば、図3の中間コード400であり、演算子401とオペランド402を一組としたニーモニック言語で構成する。演算子401は演算の処理命令であり、オペランド402はアドレスや数値等の情報である。機械語オブジェクト4の一例は、図4の機械語オブジェクト500であり、処理部501とJUMP命令部502とデータ部503を一組としたデータの羅列で構成される。処理部501は演算子401、データ部503はオペランド402と対応する。機械語オブジェクト500は、内部処理の流れEXで示すように矢印方向に逐次実行されるが、データ部503は実行内容を保持しないのでJUMP命令部502により次の処理部の実行に遷移する。例えば、JUMP命令部502は遷移先の情報(L1バイト)を保持しており、JUMP命令部502が実行されるとL1バイト目の処理部511の処理の先頭に遷移する。このようにして、処理部501、JUMP命令部502、処理部511、JUMP命令部512、処理部521、JUMP命令部522の順に実行される。
対応表(中間コード−機械語オブジェクト)5の一例は、例えば、図5の対応表(中間コード−機械語オブジェクト)600であり、行レベルで構成する。「M L L1 ・・・」の行は、中間コード400のM行目が機械語オブジェクト500のLバイト目から始まり、JUMP命令部に至ったら次の処理はL1バイト目から実行するという情報を少なくとも含む対応表である。
次に上記の状態でソースコードを部分的に変更する場合を説明する。図2において、ソースコード(変更)1Nとはユーザにより部分変更されたソースコード1を指す。フロントエンドコンパイラ101がソースコード(変更)1Nと対応表(ソース−中間コード)3から中間コード(変更)2Nと対応表(変更)(ソース−中間コード)3Nを生成する。フロントエンドコンパイラ101は、対応表(ソース−中間コード)3とソースコード(変更)1Nを比較し対応部分の無い箇所が変更されたと判別する。続いてバックエンドコンパイラ102は、中間コード(変更)2Nと対応表(中間コード−機械語オブジェクト)5から機械語オブジェクト(差分)6と対応表(変更)(中間コード−機械語オブジェクト)5Nを生成する。バックエンドコンパイラ102は、対応表(中間コード−機械語オブジェクト)5と中間コード(変更)2Nを比較し対応部分の無い箇所が変更されたと判別する。ここで機械語オブジェクト(差分)6は、変更されたと判別された箇所だけの機械語オブジェクトであると共に、機械語オブジェクト4を変更する箇所の位置情報も具備する。生成後、通信手段103は、機械語オブジェクト(差分)6をターゲット200に送り、ターゲット管理部201は機械語オブジェクト4に対して機械語オブジェクト(差分)6の変更する箇所の位置情報に従って、対応する機械語オブジェクトを更新し、機械語オブジェクト(変更)4Nを生成する。ターゲット200は外部から命令されると機械語オブジェクト(変更)4Nを実行する。
次に上記の状態でソースコードを部分的に変更する場合を説明する。図2において、ソースコード(変更)1Nとはユーザにより部分変更されたソースコード1を指す。フロントエンドコンパイラ101がソースコード(変更)1Nと対応表(ソース−中間コード)3から中間コード(変更)2Nと対応表(変更)(ソース−中間コード)3Nを生成する。フロントエンドコンパイラ101は、対応表(ソース−中間コード)3とソースコード(変更)1Nを比較し対応部分の無い箇所が変更されたと判別する。続いてバックエンドコンパイラ102は、中間コード(変更)2Nと対応表(中間コード−機械語オブジェクト)5から機械語オブジェクト(差分)6と対応表(変更)(中間コード−機械語オブジェクト)5Nを生成する。バックエンドコンパイラ102は、対応表(中間コード−機械語オブジェクト)5と中間コード(変更)2Nを比較し対応部分の無い箇所が変更されたと判別する。ここで機械語オブジェクト(差分)6は、変更されたと判別された箇所だけの機械語オブジェクトであると共に、機械語オブジェクト4を変更する箇所の位置情報も具備する。生成後、通信手段103は、機械語オブジェクト(差分)6をターゲット200に送り、ターゲット管理部201は機械語オブジェクト4に対して機械語オブジェクト(差分)6の変更する箇所の位置情報に従って、対応する機械語オブジェクトを更新し、機械語オブジェクト(変更)4Nを生成する。ターゲット200は外部から命令されると機械語オブジェクト(変更)4Nを実行する。
便宜上Nを付けて区別した、対応表(変更)(ソース−中間コード)3N、対応表(変更)(中間コード−機械語オブジェクト)5N、機械語オブジェクト(変更)4Nは、次回の部分的な変更処理のフェーズでは、それぞれ対応表(ソース−中間コード)3、対応表(中間コード−機械語オブジェクト)5、機械語オブジェクト4となり、新たなソースコード(変更)1Nに対して処理を行う。
また、ここではバックエンドコンパイラ102は、機械語オブジェクト(差分)6と対応表(変更)(中間コード−機械語オブジェクト)5Nをコンパイル装置100内に生成しているが、これは発明を限定するものではなく、例えば、バックエンドコンパイラ102は通信手段103を具備しており、直接ターゲット200上にファイルを生成しても構わない。
以上において動作の概略を説明したが、更に具体的な変更動作を説明する。
以上において動作の概略を説明したが、更に具体的な変更動作を説明する。
図6は、バックエンドコンパイラ102が機械語オブジェクトと対応表(中間コード−機械語オブジェクト)を生成する手順を説明している。
ステップS1では、新規に機械語オブジェクトを生成するため、機械語オブジェクトを書き出すファイルの内容を消去する。対応表(中間コード−機械語オブジェクト)の作成に必要な機械語オブジェクトの書き出し先インデックスを初期化する。
ステップS2では、中間コードファイルを開く。また、対応表(中間コード−機械語オブジェクト)の作成に必要な中間コードの行インデックスを初期化する。
ステップS3では、開いた中間コードを一行単位で読み込む。行インデックスを任意の規則に従って更新する。例えば、行インデックスを1増加させる。
ステップS4では、読み込んだ中間コードから、演算子とオペランドを解釈する。演算子とオペランドからそれと等価な複数の機械語命令(処理部とデータ部)を生成する。生成したデータ部の機械語オブジェクトの大きさからJUMP先アドレスを算出し、機械語命令(JUMP命令部)を生成する。
ステップS5では、生成した機械語命令(処理部、JUMP命令部、データ部)を機械語オブジェクトファイルに書き出す。
ステップS6では、書き出し先インデックスと行インデックスとJUMP命令の位置を、対応表(中間コード−機械語オブジェクト)に記述する。
ステップS7は、機械語オブジェクトの大きさ分、書き出し先インデックスを増加し、更新する。
ステップS8は、中間コードがまだファイル内に存在するか判断し、まだ中間コードファイル内に中間コードが存在する場合は、ステップS3から処理を継続する。機械語オブジェクトに変換する中間コードが中間コードファイル内に存在しない場合は、処理を終了する。
次に部分的変更が行われた場合のステップ3〜ステップ4の処理をより詳細に説明する。動作の概略で説明した通り、中間コード(変更)2Nと対応表(中間コード−機械語オブジェクト)5から機械語オブジェクト(差分)6と対応表(変更)(中間コード−機械語オブジェクト)5Nを生成する。この際に中間コード2から中間コード(変更)2Nに変更されたコード内容によって以下の3つの処理に大別される。
処理1)オペランドだけの変更
処理2)演算子の変更
処理3)それ以外の変更
それぞれについて以下に説明する。
処理1)オペランドは、機械語オブジェクトのデータ部に対応する。オペランドだけの変更のときは、図7に示すように、対応するデータ部を変更することにより機械語オブジェクトの変更可能である。オペランド変更の一例は、中間コードで「ADD 10」を「ADD 100」に変更した場合等である。この変更はソースコード上では定数の変更に相当し、デバッグ作業中ではパラメータの調整等を含め変更の可能性が多い部分である。
処理2)演算子の変更
処理3)それ以外の変更
それぞれについて以下に説明する。
処理1)オペランドは、機械語オブジェクトのデータ部に対応する。オペランドだけの変更のときは、図7に示すように、対応するデータ部を変更することにより機械語オブジェクトの変更可能である。オペランド変更の一例は、中間コードで「ADD 10」を「ADD 100」に変更した場合等である。この変更はソースコード上では定数の変更に相当し、デバッグ作業中ではパラメータの調整等を含め変更の可能性が多い部分である。
ところで、機械語オブジェクト(差分)6の具備する変更する箇所の位置情報とは、これは機械語オブジェクト(差分)6の内容がそれぞれ機械語オブジェクト4の何処に対応するかの情報である。例えば、「ADD 10」を「ADD 100」に変更するときは、「10」の位置情報を始点のアドレスと終点のアドレス、或いは始点のアドレスとアドレス長さのように、変更箇所を特定できる情報を少なくとも保持しているものとする。
またターゲット200で機械語オブジェクト4を更新するタイミングは、書き換え対象の機械語オブジェクトが実行中で無ければ更新可とする。
処理2)演算子は、機械語オブジェクトの処理部に対応する。単純に演算子だけの変更のときは、図8に示すように、対応する処理部を変更することにより機械語オブジェクトの変更可能である。演算子の変更の一例は、中間コードで「ADD 10」を「SUB 10」に変更した場合等である。あとは処理1)と同様に、機械語オブジェクト(差分)6の変更する箇所の位置情報に従って更新する。更新のタイミングも同様である。
処理3)処理1と処理2で対応できない場合、処理3を実施する。処理3は、複数の中間コードにまたがって変更された場合の処理である。図9は、例えば、中間コードM行からM+n−1行までのn個の中間コードが、新しくk個の中間コードに変更された場合を示したものである。図9(a)は機械語オブジェクト4、図9(c)は機械語オブジェクト(差分)6、図9(b)及び(c)は機械語オブジェクト4Nで、図9(d)は図9(b)(c)を整理した機械語オブジェクト4Nに相当する。図9において、内部処理の流れEX1、EX2、EX3は、機械語オブジェクトにおける処理は、矢印方向に逐次実行されることを示している。
機械語オブジェクト(差分)6の変更する箇所の位置情報として、例えば始点アドレスにLバイト、終点アドレスにLnバイトが格納されているときに、以下の動作により機械語オブジェクト4から機械語オブジェクト4Nに更新される。
(1)機械語オブジェクト4Nを新規作成し、機械語オブジェクト4と機械語オブジェクト(差分)6を任意のメモリ上に取り込む。ここでは一例として、機械語オブジェクト4は図9(a)のアドレス通りであり、機械語オブジェクト(差分)6は図9(c)のアドレス通りである、始点アドレスがMバイト、終点アドレスがMkバイトで取り込んだものとする。
(2)機械語オブジェクト(差分)6の変更する箇所の位置情報の始点アドレスがLバイトなので、Lバイト目の直前のJUMP命令部、ここでは中間コードのM−1行目に相当する機械語オブジェクトのJUMP命令部の情報を更新する(図9(a)参照)。JUMP命令部の情報をLバイトからMバイトに更新する。
(3)機械語オブジェクト(差分)6の終点アドレスがMkバイトなので、Mkバイト目の直前のJUMP命令部、ここでは中間コード(変更)のA+k−1行目に相当する機械語オブジェクトのJUMP命令部の情報を更新する(図9(c)参照)。
JUMP命令部の情報をMkバイトからLnバイトに更新する。
(4)以上(1)〜(3)の動作で、機械語オブジェクト4Nが生成されるが(図9(b)、(c)参照)、必要に応じてバイト情報を更新する。例えば、Lバイト目からLnバイト目は未使用の領域となるので削除しても構わない。この場合は、JUMP命令部からのJUMP先が全て順方向になるように整理すると、図9(d)のようになる。
処理2)演算子は、機械語オブジェクトの処理部に対応する。単純に演算子だけの変更のときは、図8に示すように、対応する処理部を変更することにより機械語オブジェクトの変更可能である。演算子の変更の一例は、中間コードで「ADD 10」を「SUB 10」に変更した場合等である。あとは処理1)と同様に、機械語オブジェクト(差分)6の変更する箇所の位置情報に従って更新する。更新のタイミングも同様である。
処理3)処理1と処理2で対応できない場合、処理3を実施する。処理3は、複数の中間コードにまたがって変更された場合の処理である。図9は、例えば、中間コードM行からM+n−1行までのn個の中間コードが、新しくk個の中間コードに変更された場合を示したものである。図9(a)は機械語オブジェクト4、図9(c)は機械語オブジェクト(差分)6、図9(b)及び(c)は機械語オブジェクト4Nで、図9(d)は図9(b)(c)を整理した機械語オブジェクト4Nに相当する。図9において、内部処理の流れEX1、EX2、EX3は、機械語オブジェクトにおける処理は、矢印方向に逐次実行されることを示している。
機械語オブジェクト(差分)6の変更する箇所の位置情報として、例えば始点アドレスにLバイト、終点アドレスにLnバイトが格納されているときに、以下の動作により機械語オブジェクト4から機械語オブジェクト4Nに更新される。
(1)機械語オブジェクト4Nを新規作成し、機械語オブジェクト4と機械語オブジェクト(差分)6を任意のメモリ上に取り込む。ここでは一例として、機械語オブジェクト4は図9(a)のアドレス通りであり、機械語オブジェクト(差分)6は図9(c)のアドレス通りである、始点アドレスがMバイト、終点アドレスがMkバイトで取り込んだものとする。
(2)機械語オブジェクト(差分)6の変更する箇所の位置情報の始点アドレスがLバイトなので、Lバイト目の直前のJUMP命令部、ここでは中間コードのM−1行目に相当する機械語オブジェクトのJUMP命令部の情報を更新する(図9(a)参照)。JUMP命令部の情報をLバイトからMバイトに更新する。
(3)機械語オブジェクト(差分)6の終点アドレスがMkバイトなので、Mkバイト目の直前のJUMP命令部、ここでは中間コード(変更)のA+k−1行目に相当する機械語オブジェクトのJUMP命令部の情報を更新する(図9(c)参照)。
JUMP命令部の情報をMkバイトからLnバイトに更新する。
(4)以上(1)〜(3)の動作で、機械語オブジェクト4Nが生成されるが(図9(b)、(c)参照)、必要に応じてバイト情報を更新する。例えば、Lバイト目からLnバイト目は未使用の領域となるので削除しても構わない。この場合は、JUMP命令部からのJUMP先が全て順方向になるように整理すると、図9(d)のようになる。
なお上記図7〜9は命令実行のイメージであり、実際のメモリにおける機械語オブジェクトの配置状況を説明しているものではない。よって実際のメモリ上での配置を制限するものではなく、内部処理の流れ通りに実施されれば構わない。
以上、本発明により定数データに限らずソースコードの変更部分を対応表を用いることにより安易に分離可能とし、その結果、部分変更においては機械語オブジェクトの差分だけのコンパイルで済み、また通信時も機械語オブジェクトだけを送信すれば良いから待ち時間を低減させて、デバッグ効率を向上が図られる。
1…ソースコード
1N…ソースコード(変更)
2…中間コード
2N…中間コード(変更)
3…対応表(ソース−中間コード)
3N…対応表(変更)(ソース−中間コード)
4…機械語オブジェクト
4N…機械語オブジェクト(変更)
5…対応表(中間コード−機械語オブジェクト)
6…機械語オブジェクト(差分)
100…コンパイル装置
101…フロントエンドコンパイラ
102…バックエンドコンパイラ
103…通信手段
200…ターゲット
400…中間コード
401…演算子
402…オペランド
500…機械語オブジェクト
501、511、521…処理部
502、512、522…JUMP命令部
503、513、523…データ部
EX、EX1、EX2、EX3…内部処理の流れ
600…対応表(中間コード−機械語オブジェクト)
11A…コンパイラ装置
12A…ターゲットマシン
1A…オブジェクトファイル
2A…ソースファイル
3A…定義ファイル
4A…コンパイラ
5A…通信手段
6A…定数情報ファイル
7A…定数データ
1N…ソースコード(変更)
2…中間コード
2N…中間コード(変更)
3…対応表(ソース−中間コード)
3N…対応表(変更)(ソース−中間コード)
4…機械語オブジェクト
4N…機械語オブジェクト(変更)
5…対応表(中間コード−機械語オブジェクト)
6…機械語オブジェクト(差分)
100…コンパイル装置
101…フロントエンドコンパイラ
102…バックエンドコンパイラ
103…通信手段
200…ターゲット
400…中間コード
401…演算子
402…オペランド
500…機械語オブジェクト
501、511、521…処理部
502、512、522…JUMP命令部
503、513、523…データ部
EX、EX1、EX2、EX3…内部処理の流れ
600…対応表(中間コード−機械語オブジェクト)
11A…コンパイラ装置
12A…ターゲットマシン
1A…オブジェクトファイル
2A…ソースファイル
3A…定義ファイル
4A…コンパイラ
5A…通信手段
6A…定数情報ファイル
7A…定数データ
Claims (5)
- ソースコードの局部的な変更を処理することが大部分であるコンパイル装置おいて、
ソースコードから中間コード、及びソースコードと該中間コードの対応情報である第1の対応表を生成するフロントエンドコンパイラと、
該中間コードから実行形式である第1の機械語オブジェクト、及び該中間コードと該第1の機械語オブジェクトの対応情報である第2の対応表を生成するバックエンドコンパイラとを備え、
前記フロントエンドコンパイラは前記ソースコードの部分的な変更を実施したときに前記第1の対応表に基づいて変更箇所、或は変更箇所を含む所定の範囲のみを更新した前記中間コードを生成し、
前記バックエンドコンパイラは前記中間コードの部分的な変更が生成されたときに前記第2の対応表に基づいて変更箇所、或は変更箇所を含む所定の範囲のみを更新した第2の機械語オブジェクトを生成する、
ことを特徴とするコンパイル装置。 - 請求項1に記載のコンパイル装置おいて、
前記第1の機械語オブジェクトをオブジェクトの実行部であるターゲットに通信する手段と、
前記第2の機械語オブジェクトをオブジェクトの実行部であるターゲットに通信する手段を備え、
前記ソースコードの局部的な変更により生じた前記第1の機械語オブジェクトの変更部分を前記第2の機械語オブジェクトに置き換える、
ことを特徴とするコンパイル装置。 - 請求項1または請求項2に記載のコンパイル装置おいて、
前記バックエンドコンパイラは前記第1の機械語オブジェクトと前記第1の対応表と前記第2の機械語オブジェクトを前記ターゲット上に直接生成すること、
を特徴とするコンパイル装置。 - 請求項1乃至請求項3のいずれかに記載のコンパイル装置において、
前記中間コードは演算子とオペランドを一組で構成すること、
を特徴とするコンパイル装置。 - 請求項1乃至請求項4のいずれかに記載のコンパイル装置において、
前記機械語オブジェクトは演算子と等価の処理をする処理部と、オペランドとしてアドレス或は数字という情報を所有するデータ部と、該データ部の実行をとばし次の処理部を実行させるJUMP命令部で構成すること、
を特徴とするコンパイル装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006006859A JP2007188366A (ja) | 2006-01-16 | 2006-01-16 | コンパイル装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006006859A JP2007188366A (ja) | 2006-01-16 | 2006-01-16 | コンパイル装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007188366A true JP2007188366A (ja) | 2007-07-26 |
Family
ID=38343485
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006006859A Pending JP2007188366A (ja) | 2006-01-16 | 2006-01-16 | コンパイル装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007188366A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101548960B1 (ko) * | 2008-09-16 | 2015-09-01 | 삼성전자주식회사 | 가상 플랫폼을 이용한 프로그램 작성과 디버깅 방법 및 장치 |
CN108536443A (zh) * | 2018-03-29 | 2018-09-14 | 杭州众焱科技有限公司 | 基于声明式的.net对象和多种数据格式自动相互转化的方法 |
-
2006
- 2006-01-16 JP JP2006006859A patent/JP2007188366A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101548960B1 (ko) * | 2008-09-16 | 2015-09-01 | 삼성전자주식회사 | 가상 플랫폼을 이용한 프로그램 작성과 디버깅 방법 및 장치 |
CN108536443A (zh) * | 2018-03-29 | 2018-09-14 | 杭州众焱科技有限公司 | 基于声明式的.net对象和多种数据格式自动相互转化的方法 |
CN108536443B (zh) * | 2018-03-29 | 2021-03-05 | 杭州众焱科技有限公司 | 基于声明式的.net对象和多种数据格式自动相互转化的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5226328B2 (ja) | コード変換装置 | |
KR101558832B1 (ko) | 시퀀스 프로그램 디버그 지원 장치 | |
JP2765423B2 (ja) | プログラマブルコントローラ及びその制御方法 | |
JP5019578B2 (ja) | 記憶装置に記憶されたコンテンツのバージョンを更新する方法およびシステム | |
JP2008293138A (ja) | ソフトウェア開発支援プログラム、ソフトウェア開発支援方法 | |
JP2009146229A (ja) | プログラマブルコントローラシステム | |
JPH0926884A (ja) | バイナリ操作を必要とするタスク中に必要なフロー情報を使用可能とする方法および装置 | |
JP5849592B2 (ja) | プログラマブルコントローラシステム、そのプログラミング装置、プログラマブルコントローラ、プログラム、デバッグ方法 | |
JP2009157533A (ja) | プログラマブルコントローラシステム | |
JP6790869B2 (ja) | コンパイル方法、コンパイルプログラム及び情報処理装置 | |
JP2007188366A (ja) | コンパイル装置 | |
JP2007128378A (ja) | プログラマブルコントローラのプログラミング装置 | |
JP5906609B2 (ja) | デバッグ支援プログラム、デバッグ支援方法及びデバッグ支援システム | |
JP5141095B2 (ja) | プラントコントローラシステム | |
KR20190114510A (ko) | Plc의 브랜치 명령어 처리 방법 | |
JP2008204023A (ja) | プログラマブルコントローラシステム、プログラマブルコントローラのデバッグ方法 | |
JP5589670B2 (ja) | デバッグ方法 | |
JP5215349B2 (ja) | 制御プログラム開発支援装置 | |
JP2010020416A (ja) | データ転送方法およびデータ転送装置 | |
JPH08137684A (ja) | プログラム転送方法、プログラム開発システムならびにプログラム開発装置およびプログラム実行装置 | |
JP6295914B2 (ja) | プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ | |
JP2008299763A (ja) | 分散オブジェクト開発ツール | |
JP2009064207A (ja) | コンパイル装置 | |
JP2011216056A (ja) | プログラマブルコントローラ及びその周辺装置 | |
JP2006323609A (ja) | プログラマブルコントローラ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20080919 |