JP2011123719A - 言語処理システム、言語処理方法、及び言語処理用プログラム - Google Patents
言語処理システム、言語処理方法、及び言語処理用プログラム Download PDFInfo
- Publication number
- JP2011123719A JP2011123719A JP2009281554A JP2009281554A JP2011123719A JP 2011123719 A JP2011123719 A JP 2011123719A JP 2009281554 A JP2009281554 A JP 2009281554A JP 2009281554 A JP2009281554 A JP 2009281554A JP 2011123719 A JP2011123719 A JP 2011123719A
- Authority
- JP
- Japan
- Prior art keywords
- segment
- data
- information
- compiler
- object 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回目以降のコンパイル時にはセグメント情報から変数のセグメント番号が分かっているので、セグメントレジスタの書き換えが必要かどうか分かる。セグメントレジスタの書き換えが不要だと分かればセグメントレジスタの設定コードを削減することができる。
【選択図】図4
Description
図1で示す通り、従来のコンパイル方式は、コンパイラ(compiler)10と、リンカ(linker)20を備える。
図2を参照して、図1のコード生成部13内部の処理について説明する。
コード生成部13は、データアクセスの際に、アクセス対象のデータ(ソースプログラムファイル1の変数)がfarデータかどうか確認する。ここでは、farデータではない場合、nearデータであるものとする。従来方式において、変数がfarデータかどうかの判定方法については、ソースコード中の変数に対して「_near」や「_far」という修飾子をつけることで、コンパイラ10の構文解析部11が判定する。修飾子を省略した変数をnearデータとするかfarデータとするかは、コンパイラ10の最適化を指示することで、コンパイラ10の構文解析部11が、全てnearデータとして処理するか、全てfarデータとして処理する。なお、「_near」や「_far」という修飾子は、便宜上のものであり、実際には、この例に限定されない。
コード生成部13は、farデータではない(nearデータである)場合、セグメントレジスタ設定コードは不要とする。例えば、コード生成部13は、nearデータは従来の64キロバイトのアドレス空間に収まるため、セグメントレジスタにセグメント番号を設定することなくデータにアクセスし、オブジェクトコードを生成する。
コード生成部13は、farデータである場合、セグメントレジスタ設定コードを出力する。例えば、コード生成部13は、farデータは64キロバイトのアドレス空間に収まらないため、セグメント番号として16ビットよりも上位のビットを含む上位アドレスをセグメントレジスタに設定してからデータにアクセスし、オブジェクトコードを生成する。
以下に、本発明の実施形態について添付図面を参照して説明する。
図4で示す通り、本発明の言語処理システムは、コンパイラ(compiler)10と、リンカ(linker)20を備える。
図5を参照して、図4のコード生成部13内部の処理について説明する。
コード生成部13は、データアクセスの際に、アクセス対象のデータ(ソースプログラムファイル1の変数)がfarデータかどうか確認する。ここでは、farデータではない場合、nearデータであるものとする。本発明において、変数がfarデータかどうかの判定方法については、図4のセグメント情報3を基に、セグメント情報設定部12が判定する。この場合、ソースコード中の「_near」や「_far」という修飾子による変数の領域配置指定と、セグメント情報3とが競合することになる。セグメント情報設定部12は、セグメント情報3を優先しても良いし、「_near」や「_far」という修飾子を優先しても良い。セグメント情報3を優先すると、コードサイズが削減される。「_near」や「_far」という修飾子を優先すると、ユーザの意図が反映される。
コード生成部13は、farデータではない(nearデータである)場合、セグメントレジスタ設定コードは不要とする。例えば、コード生成部13は、セグメントレジスタにセグメント番号を設定することなくデータにアクセスし、オブジェクトコードを生成する。
コード生成部13は、farデータである場合、セグメントレジスタの値と変数のセグメント番号を比較する。
コード生成部13は、セグメントレジスタの値が変更されたか否か判定する。
コード生成部13は、セグメントレジスタの値が変更された場合、もしくは判定不能の場合、セグメントレジスタ設定コードを出力する。例えば、コード生成部13は、セグメント番号をセグメントレジスタに設定してからデータにアクセスし、オブジェクトコードを生成する。
コード生成部13は、セグメントレジスタの値が変更されていない場合、セグメントレジスタ設定コードは不要とする。例えば、コード生成部13は、セグメントレジスタにセグメント番号を設定することなくデータにアクセスし、オブジェクトコードを生成する。
[1回目のコンパイル]
コンパイラ10は、1回目のコンパイルでは、従来と同様に、オブジェクトコードを生成する。このとき、セグメント情報3はまだ作られていないため、セグメント情報設定部12は何も行わない。コード生成部13は、データアクセスの際にfarデータかどうかを判定し、farデータの場合は、直前のセグメントと変数のセグメントを比較するが、セグメント情報が設定されていないため、判定不能としてセグメントレジスタに値を設定する(ための)オブジェクトコードを生成する。ここでは、コード生成部13は、farデータの場合は、セグメント情報の参照を試みることでセグメント情報の有無を確認し、セグメント情報が存在していれば、直前のセグメントと変数のセグメントを比較し、セグメント情報が存在していなければ、判定不能としてセグメントレジスタに値を設定するオブジェクトコードを生成する。但し、実際には、この例に限定されない。
リンカ20は、コンパイラ10が生成したオブジェクトコードを基にメモリ配置を決定する。この際、各変数のアドレスが確定するので、リンカ20は、セグメント情報3を出力する。
コンパイラ10は、セグメント情報3を利用して、2回目以降のコンパイルを行う。セグメント情報設定部12は、セグメント情報を読み込み、コンパイラ10内部で変数のセグメント番号を情報として持つ。コード生成部13は、farデータにアクセスするコードを生成する際、セグメントレジスタの値と変数のセグメント番号を比較する。ここでは、1回目のコンパイルの際と同様に、コード生成部13は、farデータかどうかを判定し、farデータの場合は、セグメント情報の参照を試みることでセグメント情報の有無を確認し、セグメント情報が存在していれば、直前のセグメントと変数のセグメントを比較する。コード生成部13は、比較した両者(セグメントレジスタの値と変数のセグメント番号)が同じであれば、セグメントレジスタを設定するオブジェクトコードを生成しない。図6では、セグメント情報3において変数a,b,cのセグメント番号が同じであったために、コード生成部13は、変数bと変数cをアクセスする際に、セグメントレジスタに値を設定するオブジェクトコードを出力していない。
2… ロードモジュールファイル
3… セグメント情報
10… コンパイラ(compiler)
11… 構文解析部
12… セグメント情報設定部
13… コード生成部
14… オブジェクト出力部
20… リンカ(linker)
Claims (15)
- ソースプログラムファイルを読み込み、前記ソースプログラムファイルに基づいて、オブジェクトコードを生成するコンパイラと、
前記オブジェクトコードを読み込み、前記オブジェクトコードに基づいて、関数及び変数のメモリ配置が確定したロードモジュールファイルと、変数がどのセグメント番号に割り当たるかを示す情報の集合体であるセグメント情報とを生成するリンカと
を含み、
前記コンパイラは、
前記セグメント情報を読み込むセグメント情報設定部と、
前記セグメント情報が存在しない場合、セグメントレジスタに値を設定するオブジェクトコードを生成するコード生成部と
を具備する
言語処理システム。 - 請求項1に記載の言語処理システムであって、
前記セグメント情報は、
変数のシンボル情報と、
所定のサイズのアドレス空間に収まるnearデータか、前記所定のサイズのアドレス空間に収まらないfarデータかを示す情報と、
farデータであればセグメント番号と
を有する
言語処理システム。 - 請求項2に記載の言語処理システムであって、
前記コード生成部は、データアクセスの際にfarデータかどうかを判定し、farデータである場合、前記セグメントレジスタの値が変更されたか否か判定し、前記セグメントレジスタの値が変更された場合、もしくは前記セグメント情報が存在せず判定不能の場合、セグメント番号を前記セグメントレジスタに設定してからオブジェクトコードを生成する
言語処理システム。 - 請求項2に記載の言語処理システムであって、
前記コード生成部は、データアクセスの際にfarデータかどうかを判定し、farデータではない場合、もしくはfarデータであっても、前記セグメントレジスタの値が変更されたか否か判定した際に、前記セグメントレジスタの値が変更されていない場合、セグメント番号を前記セグメントレジスタに設定するオブジェクトコードを不要とする
言語処理システム。 - 請求項2乃至4のいずれか一項に記載の言語処理システムであって、
前記コンパイラによる1回目のコンパイルの際、前記コード生成部は、データアクセスの際にfarデータかどうかを判定し、farデータの場合、前記セグメント情報の参照を試み、前記セグメント情報が存在しない場合、判定不能として前記セグメントレジスタに値を設定するオブジェクトコードを生成し、
前記リンカは、前記コード生成部が生成したオブジェクトコードを基にメモリ配置を決定し、各変数のアドレスが確定した後、前記セグメント情報を生成し、
前記コンパイラによる2回目以降のコンパイルの際、前記セグメント情報設定部は、前記セグメント情報を読み込み、前記コンパイラ内部で変数のセグメント番号を情報として保持し、
前記コード生成部は、データアクセスの際にfarデータかどうかを判定し、farデータの場合、前記セグメント情報の参照を試み、前記セグメント情報が存在する場合、前記セグメントレジスタの値と変数のセグメント番号とを比較し、前記セグメントレジスタの値と変数のセグメント番号とが同じであれば、前記セグメントレジスタを設定するオブジェクトコードを生成せず、前記セグメントレジスタの値と変数のセグメント番号とが同じでなければ、前記セグメントレジスタを設定するオブジェクトコードを生成する
言語処理システム。 - コンパイラにより、ソースプログラムファイルを読み込み、前記ソースプログラムファイルに基づいて、オブジェクトコードを生成することと、
リンカにより、前記オブジェクトコードを読み込み、前記オブジェクトコードに基づいて、関数及び変数のメモリ配置が確定したロードモジュールファイルと、変数がどのセグメント番号に割り当たるかを示す情報の集合体であるセグメント情報とを生成することと、
前記コンパイラにより、前記セグメント情報を読み込むことと、
前記セグメント情報が存在しない場合、前記コンパイラにより、セグメントレジスタに値を設定するオブジェクトコードを生成することと
を含む
言語処理方法。 - 請求項6に記載の言語処理方法であって、
前記セグメント情報は、
変数のシンボル情報と、
所定のサイズのアドレス空間に収まるnearデータか、前記所定のサイズのアドレス空間に収まらないfarデータかを示す情報と、
farデータであればセグメント番号と
を有する
言語処理方法。 - 請求項7に記載の言語処理方法であって、
前記コンパイラにより、データアクセスの際にfarデータかどうかを判定することと、
farデータである場合、前記セグメントレジスタの値が変更されたか否か判定することと、
前記セグメントレジスタの値が変更された場合、もしくは前記セグメント情報が存在せず判定不能の場合、セグメント番号を前記セグメントレジスタに設定してからオブジェクトコードを生成することと
を更に含む
言語処理方法。 - 請求項7に記載の言語処理方法であって、
前記コンパイラにより、データアクセスの際にfarデータかどうかを判定することと、
farデータではない場合、もしくはfarデータであっても、前記セグメントレジスタの値が変更されたか否か判定した際に、前記セグメントレジスタの値が変更されていない場合、セグメント番号を前記セグメントレジスタに設定するオブジェクトコードを不要とすることと
を更に含む
言語処理方法。 - 請求項7乃至9のいずれか一項に記載の言語処理方法であって、
前記コンパイラによる1回目のコンパイルの際、データアクセスの際にfarデータかどうかを判定し、farデータの場合、前記セグメント情報の参照を試み、前記セグメント情報が存在しない場合、判定不能として前記セグメントレジスタに値を設定するオブジェクトコードを生成することと、
前記リンカにより、前記コンパイラが生成したオブジェクトコードを基にメモリ配置を決定し、各変数のアドレスが確定した後、前記セグメント情報を生成することと、
前記コンパイラによる2回目以降のコンパイルの際、前記セグメント情報を読み込み、前記コンパイラ内部で変数のセグメント番号を情報として保持することと、
前記コンパイラにより、データアクセスの際にfarデータかどうかを判定し、farデータの場合、前記セグメント情報の参照を試み、前記セグメント情報が存在する場合、前記セグメントレジスタの値と変数のセグメント番号とを比較し、前記セグメントレジスタの値と変数のセグメント番号とが同じであれば、前記セグメントレジスタを設定するオブジェクトコードを生成せず、前記セグメントレジスタの値と変数のセグメント番号とが同じでなければ、前記セグメントレジスタを設定するオブジェクトコードを生成することと
を更に含む
言語処理方法。 - コンパイラとして、ソースプログラムファイルを読み込み、前記ソースプログラムファイルに基づいて、オブジェクトコードを生成するステップと、
リンカとして、前記オブジェクトコードを読み込み、前記オブジェクトコードに基づいて、関数及び変数のメモリ配置が確定したロードモジュールファイルと、変数がどのセグメント番号に割り当たるかを示す情報の集合体であるセグメント情報とを生成するステップと、
前記コンパイラとして、前記セグメント情報を読み込むステップと、
前記セグメント情報が存在しない場合、前記コンパイラとして、セグメントレジスタに値を設定するオブジェクトコードを生成するステップと
を計算機に実行させるための
言語処理用プログラム。 - 請求項11に記載の言語処理用プログラムであって、
前記セグメント情報は、
変数のシンボル情報と、
所定のサイズのアドレス空間に収まるnearデータか、前記所定のサイズのアドレス空間に収まらないfarデータかを示す情報と、
farデータであればセグメント番号と
を有する
言語処理用プログラム。 - 請求項12に記載の言語処理用プログラムであって、
前記コンパイラとして、データアクセスの際にfarデータかどうかを判定するステップと、
farデータである場合、前記セグメントレジスタの値が変更されたか否か判定するステップと、
前記セグメントレジスタの値が変更された場合、もしくは前記セグメント情報が存在せず判定不能の場合、セグメント番号を前記セグメントレジスタに設定してからオブジェクトコードを生成するステップと
を更に計算機に実行させるための
言語処理用プログラム。 - 請求項12に記載の言語処理用プログラムであって、
前記コンパイラとして、データアクセスの際にfarデータかどうかを判定するステップと、
farデータではない場合、もしくはfarデータであっても、前記セグメントレジスタの値が変更されたか否か判定した際に、前記セグメントレジスタの値が変更されていない場合、セグメント番号を前記セグメントレジスタに設定するオブジェクトコードを不要とするステップと
を更に計算機に実行させるための
言語処理用プログラム。 - 請求項12乃至14のいずれか一項に記載の言語処理用プログラムであって、
前記コンパイラとして実施する1回目のコンパイルの際、データアクセスの際にfarデータかどうかを判定し、farデータの場合、前記セグメント情報の参照を試み、前記セグメント情報が存在しない場合、判定不能として前記セグメントレジスタに値を設定するオブジェクトコードを生成するステップと、
前記リンカとして、前記コンパイラが生成したオブジェクトコードを基にメモリ配置を決定し、各変数のアドレスが確定した後、前記セグメント情報を生成するステップと、
前記コンパイラとして実施する2回目以降のコンパイルの際、前記セグメント情報を読み込み、前記コンパイラ内部で変数のセグメント番号を情報として保持するステップと、
前記コンパイラとして、データアクセスの際にfarデータかどうかを判定し、farデータの場合、前記セグメント情報の参照を試み、前記セグメント情報が存在する場合、前記セグメントレジスタの値と変数のセグメント番号とを比較し、前記セグメントレジスタの値と変数のセグメント番号とが同じであれば、前記セグメントレジスタを設定するオブジェクトコードを生成せず、前記セグメントレジスタの値と変数のセグメント番号とが同じでなければ、前記セグメントレジスタを設定するオブジェクトコードを生成するステップと
を更に計算機に実行させるための
言語処理用プログラム。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2009281554A JP2011123719A (ja) | 2009-12-11 | 2009-12-11 | 言語処理システム、言語処理方法、及び言語処理用プログラム |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2009281554A JP2011123719A (ja) | 2009-12-11 | 2009-12-11 | 言語処理システム、言語処理方法、及び言語処理用プログラム |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2011123719A true JP2011123719A (ja) | 2011-06-23 |
Family
ID=44287540
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2009281554A Pending JP2011123719A (ja) | 2009-12-11 | 2009-12-11 | 言語処理システム、言語処理方法、及び言語処理用プログラム |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2011123719A (ja) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| DE102012203928A1 (de) | 2011-06-01 | 2012-12-06 | Mitsubishi Electric Corporation | Verfahren zur Herstellung einer Halbleitervorrichtung |
| CN113360142A (zh) * | 2021-06-24 | 2021-09-07 | 广东工贸职业技术学院 | 一种数控内嵌plc中间文件的设计与编译方法 |
| CN113656004A (zh) * | 2021-06-21 | 2021-11-16 | 广东赛昉科技有限公司 | 自动生成寄存器配置的代码生成方法及可读存储介质 |
Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH01310437A (ja) * | 1988-06-08 | 1989-12-14 | Nec Corp | ロードモジュール生成方式 |
| JPH07105014A (ja) * | 1993-10-04 | 1995-04-21 | Nec Corp | 言語処理システムのシンボル処理方式 |
| JPH07121380A (ja) * | 1993-10-28 | 1995-05-12 | Fujitsu Ltd | コンパイル装置 |
| JPH10124325A (ja) * | 1996-10-25 | 1998-05-15 | Toshiba Corp | 変数の最適配置方法、変数の最適配置装置及び変数の最適配置プログラムを格納したコンピュータ読み取り可能な記録媒体 |
| JPH10320211A (ja) * | 1997-05-15 | 1998-12-04 | Fujitsu Ltd | コンパイラ及びそのプログラムを記録した記録媒体 |
| JP2000010764A (ja) * | 1998-06-17 | 2000-01-14 | Nec Ic Microcomput Syst Ltd | 言語処理システム及びその言語処理方法 |
| JP2005301415A (ja) * | 2004-04-07 | 2005-10-27 | Ricoh Co Ltd | コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム |
-
2009
- 2009-12-11 JP JP2009281554A patent/JP2011123719A/ja active Pending
Patent Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH01310437A (ja) * | 1988-06-08 | 1989-12-14 | Nec Corp | ロードモジュール生成方式 |
| JPH07105014A (ja) * | 1993-10-04 | 1995-04-21 | Nec Corp | 言語処理システムのシンボル処理方式 |
| JPH07121380A (ja) * | 1993-10-28 | 1995-05-12 | Fujitsu Ltd | コンパイル装置 |
| JPH10124325A (ja) * | 1996-10-25 | 1998-05-15 | Toshiba Corp | 変数の最適配置方法、変数の最適配置装置及び変数の最適配置プログラムを格納したコンピュータ読み取り可能な記録媒体 |
| JPH10320211A (ja) * | 1997-05-15 | 1998-12-04 | Fujitsu Ltd | コンパイラ及びそのプログラムを記録した記録媒体 |
| JP2000010764A (ja) * | 1998-06-17 | 2000-01-14 | Nec Ic Microcomput Syst Ltd | 言語処理システム及びその言語処理方法 |
| JP2005301415A (ja) * | 2004-04-07 | 2005-10-27 | Ricoh Co Ltd | コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| DE102012203928A1 (de) | 2011-06-01 | 2012-12-06 | Mitsubishi Electric Corporation | Verfahren zur Herstellung einer Halbleitervorrichtung |
| CN113656004A (zh) * | 2021-06-21 | 2021-11-16 | 广东赛昉科技有限公司 | 自动生成寄存器配置的代码生成方法及可读存储介质 |
| CN113360142A (zh) * | 2021-06-24 | 2021-09-07 | 广东工贸职业技术学院 | 一种数控内嵌plc中间文件的设计与编译方法 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN110162296B (zh) | 应用程序编程接口文档的生成方法、装置及终端设备 | |
| CN102232216B (zh) | 用于管理装置的字节序模式的系统及方法 | |
| US11080029B2 (en) | Configuration management through information and code injection at compile time | |
| US20180136914A1 (en) | Programming Language with Extensions using a Strict Meta-Model | |
| US8997040B2 (en) | Variable closure | |
| CN112527316A (zh) | 代码编译方法、装置、电子设备及存储介质 | |
| JP5118745B2 (ja) | メモリアクセス命令のベクトル化 | |
| CN113391826B (zh) | 一种定制镜像中软件包依赖的解决方法 | |
| US9460306B1 (en) | System and method for controlling access of machine code to operating system resources | |
| CN103164249A (zh) | 用于脚本语言编译器的扩展机制 | |
| CN113204385B (zh) | 一种插件加载方法、装置、计算设备及可读存储介质 | |
| CN115328493B (zh) | 用于带掩码的向量指令的编译方法、电子设备和介质 | |
| CN112558984A (zh) | 代码编译的方法、装置、电子设备以及服务器 | |
| CN113703779A (zh) | 一种跨平台的多语言编译方法和超轻量物联网虚拟机 | |
| US20090106744A1 (en) | Compiling and translating method and apparatus | |
| CN114879978A (zh) | 软件包依赖关系的处理方法、计算设备及可读存储介质 | |
| US20130275688A1 (en) | Data processing device and method | |
| CN116360788A (zh) | 结构化文本编程语言的编译方法、编译器及电子设备 | |
| CN101311901A (zh) | 程序重写装置 | |
| JP2011123719A (ja) | 言語処理システム、言語処理方法、及び言語処理用プログラム | |
| CN117806607A (zh) | 基于数组映射内存地址的plc程序编译方法及装置 | |
| JP4768984B2 (ja) | コンパイル方法、コンパイルプログラムおよびコンパイル装置 | |
| US9229698B2 (en) | Method and apparatus for compiler processing for a function marked with multiple execution spaces | |
| CN101782860B (zh) | 一种程序链接方法及装置 | |
| WO2026056340A1 (zh) | 基于编译器进行代码自动升级的方法、装置以及存储介质 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20120726 |
|
| A977 | Report on retrieval |
Effective date: 20130416 Free format text: JAPANESE INTERMEDIATE CODE: A971007 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130513 |
|
| A02 | Decision of refusal |
Effective date: 20130917 Free format text: JAPANESE INTERMEDIATE CODE: A02 |
|
| A521 | Written amendment |
Effective date: 20131204 Free format text: JAPANESE INTERMEDIATE CODE: A523 |