JP2807162B2 - プログラム翻訳装置 - Google Patents
プログラム翻訳装置Info
- Publication number
- JP2807162B2 JP2807162B2 JP5337141A JP33714193A JP2807162B2 JP 2807162 B2 JP2807162 B2 JP 2807162B2 JP 5337141 A JP5337141 A JP 5337141A JP 33714193 A JP33714193 A JP 33714193A JP 2807162 B2 JP2807162 B2 JP 2807162B2
- Authority
- JP
- Japan
- Prior art keywords
- file
- program
- definition
- variable
- external
- 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
- 230000006870 function Effects 0.000 description 8
- 101100328887 Caenorhabditis elegans col-34 gene Proteins 0.000 description 3
- 101100311330 Schizosaccharomyces pombe (strain 972 / ATCC 24843) uap56 gene Proteins 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000000034 method Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 101150018444 sub2 gene Proteins 0.000 description 3
- 230000003068 static effect Effects 0.000 description 2
- RRLHMJHRFMHVNM-BQVXCWBNSA-N [(2s,3r,6r)-6-[5-[5-hydroxy-3-(4-hydroxyphenyl)-4-oxochromen-7-yl]oxypentoxy]-2-methyl-3,6-dihydro-2h-pyran-3-yl] acetate Chemical compound C1=C[C@@H](OC(C)=O)[C@H](C)O[C@H]1OCCCCCOC1=CC(O)=C2C(=O)C(C=3C=CC(O)=CC=3)=COC2=C1 RRLHMJHRFMHVNM-BQVXCWBNSA-N 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Description
数に分割して作成し、作成されたソースプログラムの翻
訳を行うプログラム翻訳装置に関する。
の際には、作成すべきプログラムを複数のモジュールに
分割して作成することが多い。複数のプログラム作成者
が分担して作業したり、プログラムの修正や点検を容易
にするためである。近年、広く用いられているプログラ
ム言語の1つであるC言語では、プログラムを分割して
作成することを支援するために、1つの関数中で使用す
る変数などは一般に局所的な自動変数として解釈され、
他の関数中で同一名称の変数があても、それぞれ独立し
て取扱われる。これらの自動変数は、たとえばスタック
領域にいわば動的に割当てられ、その変数を定義してい
る関数が呼出されているときにしか変数のストア内容で
あるデータは確定していない。関数の呼出しにかかわり
なく、データを常に保持するための変数は静的変数とも
呼ばれ、特定のメモリアドレスに割当てられる。これら
の静的変数の中でも、他のファイルから使用される変数
は、外部参照可能な変数として取扱われる。
ースプログラムを分割し、それぞれのファイル1,2,
3中で外部参照可能な変数「ram1」,「ram
2」,「ram3」,「ram4」の少なくとも一部を
定義している場合を示す。なお各変数の型は、たとえば
整数型を表す「int」であるとする。各ファイル1〜
3にはこのような外部参照可能な変数の定義ばかりでは
なく、1または複数の関数定義なども含み得る。各ファ
イル1〜3をそれぞれ別個にコンパイルすると、文法的
なエラーなどが他になければコンパイル自体は成功し、
オブジェクトプログラムがそれぞれ得らる。全体として
1つのプログラムを作成するためには、それぞれのファ
イル1〜3から得られたオブジェクトプログラムをリン
クする必要がある。オブジェクトプログラムには外部定
義変数を参照するための変数名や相対アドレスなどの情
報も含まれる。図6に示す場合、たとえば「ram1」
および「ram2」はファイル1およびファイル2で重
複して定義されている。「ram3」および「ram
4」についても重複して定義されている。このためオブ
ジェクトプログラムをリンクして1つのプログラムにま
とめる際に多重定義のエラーになる。
グラムを支援する機能であるヘッダファイルのインクル
ードのためのプリプロセッサ制御行を利用する例を示
す。ソースプログラムは、たとえば「main.c」、
「sub1.c」および「sub2.c」の3つのファ
イルに分割される場合を想定する。外部参照可能な変数
の多重定義を避けるために、変数は「ram.h」とい
うヘッダファイルにまとめられて宣言され定義される。
「main.c」ではこの「ram.h」を「#inc
lude」というプリプロセッサ制御行による命令で取
込む。他のファイルである「sub1.c」および「s
ub2.c」で同様に「ram.h」取込むと多重定義
となるので、外部定義ファイルである「ram_ex
t.h」を別に作成して取込むようにする。すなわち、
で示すようにRAM宣言が2箇所必要である。制御用
プログラムでは、直接機械語でプログラムを作成する部
分も必要となることがある。そのために、たとえば「i
nit.asm」などのアセンブラプログラムも必要と
なる。アセンブラプログラムは、アセンブラによって機
械語に翻訳される。C言語で作成されたプログラムと、
アセンブラ言語で作成されたプログラムとを結合するた
めには、C言語プログラム中で記述された変数をアセン
ブラプログラムからも参照可能とする必要がある。すな
わち、で示すようにアセンブラでも再宣言が必要であ
る。またで示すように、たとえば「init.as
m」中で使用される変数「a」について「パブリック
(public)」の宣言が必要となる。
ファイルのインクルード機能を用いて外部参照可能な変
数を定義する場合であっても、図7ので示すように、
ファイルによりインクルードするモジュールが異なる。
このため、図8に示すように、定義用のヘッダファイル
5と外部定義用の外部ヘッダファイル6との2つを作成
する必要がある。たとえば、「ram4」の型を「in
t」から文字型である「char」に変更するとき、外
部ヘッダファイル6についての修正を忘れるようなこと
が多い。このような修正のし忘れがあっても、分割コン
パイルにおいて各ソースファイルのコンパイルは成功す
る。リンクにおいても、見かけ上成功する場合もある。
しかしながら、変数「ram4」についての型が異なる
ので翻訳されたプログラムが誤動作しやすくなり、バグ
発生の要因となりやすい。また1つの変数についての修
正であっても複数のファイルを確実に修正しなければな
らないので、プログラム作成者にとっての負担が大き
い。
けで変数定義についての必要な修正が可能で、プログラ
ム作成者の負担が少なく、信頼性の高いプログラムを作
成することができるプログラム翻訳装置を提供すること
である。
ラムが記述される複数のプログラムファイル中で共通に
使用される変数を定義する定義用ファイル、または参照
する変数が他のプログラムファイル中で定義されること
を表す外部定義ファイルを、各プログラムファイルの翻
訳時に併せて読込むプログラム翻訳装置において、定義
用ファイルを読込み、変数を定義するための記述を、変
数を参照するための記述に変換して外部定義ファイルを
自動発生するファイル発生手段を含むことを特徴とする
プログラム翻訳装置である。
ログラムファイルで記述される。複数のプログラムファ
イル中で共通に使用される変数は定義用ファイルで定義
される。参照する変数が他のプログラムファイル中で定
義されることは外部定義ファイルによって定義される。
外部定義ファイルは、ファイル発生手段が定義用ファイ
ルを読込み、変数を定義するための記述を、変数を参照
するための記述に変換して自動生成する。プログラム翻
訳装置は、各プログラムファイルの翻訳時に併せて、定
義用ファイルまたは外部定義ファイルを読込む。外部定
義ファイルは定義用ファイルから自動生成されているの
で、定義用ファイルの内容に変更があっても自動的に修
正される。このためプログラム作成者の負担が小さく、
作成されるプログラムにも多重定義や型の不一致などに
よるバグの発生要因がなくなり、信頼性の高いプログラ
ムを得ることができる。
を示す。ヘッダファイル10は、たとえば5つの変数
「ram1」〜「ram5」を整数型である「int」
として定義するヘッダファイルである。このヘッダファ
イル10の各行の先頭に「extern」を付加して、
外部ヘッダファイル11が作成される。ヘッダファイル
10は、1つのファイル20のプリプロセッサ制御行に
よる命令「#include ”ヘッダファイル”」に
従ってファイル20中へ取込まれる。外部ヘッダファイ
ル11は、複数のファイル21,22,23中のプリプ
ロセッサ制御行による命令「#include ”外部
ヘッダファイル”」に従って取込まれる。翻訳装置30
は、ヘッダファイル10から外部ヘッダファイル11を
自動発生させるファイル発生手段31と、ファイル20
〜23をそれぞれ読込み、インクルードを表すプリプロ
セッサ命令を実行するときにヘッダファイル10または
外部ヘッダファイル11を取込むコンパイラ手段32を
含む。コンパイラ手段32は、各ファイル20〜23を
それぞれ個別的にコンパイルし、オブジェクトファイル
40を生成する。各オブジェクトファイル40は、リン
カによって結合され、1つの全体的なプログラムとして
まとめられる。
を結合するリンクの際には、アセンブリ言語で記述され
たアセンブラのソースファイルをアセンブルしたオブジ
ェクトファイルも使用可能である。ファイル発生手段3
1は、ヘッダファイル10から外部ヘッダファイル11
を自動発生する際に、アセンブラのソースファイルにつ
いても外部参照用の記述を自動的に追加するようにする
こともできる。
31の動作を示す。ステップc1で動作を開始し、ステ
ップc2ではヘッダファイル10をオープンし、1行ず
つの読込みが可能な状態とする。次にステップc3でヘ
ッダファイル10に記述されているプログラムを1行ず
つ読込む。ステップc4では、その読込まれた行が変数
定義をしているか否かを判断する。変数定義をしている
ときには、ステップc5で行の先頭に「extern」
を付加し、外部ヘッダファイル11として別のファイル
に書込む。ステップc5が終了した後、あるいはステッ
プc4で変数定義していないと判断されるときには、ス
テップc6に移る。ステップc6では、読込んだプログ
ラムの行が最終行であるか否かを判断する。最終行でな
いと判断されるときにはステップc3に戻る。最終行と
判断されるときはステップc7で処理を終了する。この
ようなファイル発生手段31やコンパイラ手段32は、
ワークステーションやパーソナルコンピュータなどのコ
ンピュータ装置上で動作するソフトウェアとして実現さ
れる。
される翻訳の考え方を示す。本実施例では、変数定義用
のヘッダファイルをプログラムファイルと同等に取扱
う。この定義用ファイル「ram.c」から、で示す
ように、ファイル発生手段31は外部ヘッダファイルで
ある「ram_ext.h」を自動発生させる。コンパ
イラ手段32は、「ram.c」、「main.c」、
「sub1.c」および「sub2.c」をコンパイル
する。この際に、に示すように、アセンブラ言語のソ
ースファイル「init.asm」があれば、「ra
m.c」のコンパイル時に変数の再宣言を自動的に付加
する。またその宣言が外部定義であることを表すパブリ
ック宣言もで示すように付加されるので、「ini
t.asm」自体に記述することは不要である。ソース
プログラムが記述されたプログラムファイル「mai
n.c」、「sub1.c」および「sub2.c」で
は、それぞれ同一の外部ヘッダファイル「ram_ex
t.h」を取込むプリプロセッサ命令を記述すればよ
く、で示すようにインクルードするモジュールは同じ
となる。
c」および「ram_ext.h」の例を示す。「ra
m.c」には、たとえばビット定義部50、構造体定義
部60、プリプロセッサ用定義部70および変数定義部
80が含まれる。ビット定義部50内には構造体の形式
でビットフィールドの定義内容51が記述される。構造
体定義部60には、構造体「struct」の1つの型
として「wordf」を宣言する構造体宣言61と、共
用体の1つの型「bytef」を宣言する共用体宣言6
2が含まれる。プリプロセッサ用定義部70には、他の
モジュールで定義される内容を参考用に表す参考用コメ
ント71と、実際に定数定義用のプリプロセッサ制御行
による命令「#define」で定義される定数「BY
TE」および「WORD」の定義内容を表す定数定義7
2とが含まれる。
を定義する変数定義81と、構造体を定義する構造体定
義82と、構造体宣言61で宣言された構造体を定義す
る構造体定義83と、プリプロセッサ用の定数定義84
と、符号なし文字型変数を定義する変数定義85,8
6,87と、プリプロセッサ用の定数定義88とが含ま
れる。
m.c」に基づいて、図5に示す「ram_ext.
h」を自動生成する。「ram_ext.h」において
は、ビット定義部50、構造体定義部60およびプリプ
ロセッサ用定義部70はそのままコピーされる。図4の
変数定義部80は、図5では外部変数定義部90のよう
に変換される。外部変数定義部90内には、変数外部定
義91、構造体変数外部定義92,93、定数定義9
4、変数外部定義95,96,97、定数定義98が含
まれる。このうち定数定義94,98は、図4の変数定
義84,88と同一である。他の部分の先頭には、「e
xtern」が付加される。
「ram.c」として、プログラムファイルと同等に取
扱い、他のプログラムファイルでは外部定義ファイルの
みをインクルードするようにして、インクルードするモ
ジュールを同一にしている。しかしながら、たとえば
「main.c」で「ram.c」をインクルードする
ようにしてもよいことは勿論である。このときは、図1
の実施例と実質的に同一となる。インクルードするヘッ
ダファイルであることをより明確にするため、「ra
m.h」のようなファイル名に変更すれば、図1の実施
例になる。
る段階も自動化することは可能である。複数のプログラ
ムファイルを作成したら、それぞれのプログラムファイ
ルから共通の外部変数を抽出して定義用ファイルを作成
し、自動的に外部ヘッダファイルも生成する。外部変数
を抜出した各プログラムファイルには、たとえば図2の
実施例と同様に外部ヘッダファイルをインクルードする
プリプロセッサ命令を付加する。このようにして一連の
ファイルを自動的に作成し、プログラム作成者の負担を
軽減し、バグの可能性を減少させて作成するプログラム
の信頼性を高めることができる。
る場合について説明しているけれども、インクルード機
能を利用することができるアセンブラや他の高級言語の
プログラム翻訳装置であっても同様の効果を奏すること
は勿論である。
ログラムファイル中で共通に使用される変数の定義を変
更する際には、1つの定義用ファイル中の関連する記述
を変更するだけで、ファイル発生手段によって外部定義
ファイルも併せて変更されたものに修正される。したが
ってプログラム作成者の負担は小さくなり、変数の多重
定義や型の不一致などによるプログラム中のバグなどの
減少を図り、プログラムの信頼性を向上することができ
る。
ブロック図である。
る。
考え方を示すブロック図である。
プログラムリストである。
示すプログラムリストである。
状態を示す簡略化したプログラムリストである。
図である。
ラムリストである。
Claims (1)
- 【請求項1】 ソースプログラムが記述される複数のプ
ログラムファイル中で共通に使用される変数を定義する
定義用ファイル、または参照する変数が他のプログラム
ファイル中で定義されることを表す外部定義ファイル
を、各プログラムファイルの翻訳時に併せて読込むプロ
グラム翻訳装置において、 定義用ファイルを読込み、変数を定義するための記述
を、変数を参照するための記述に変換して外部定義ファ
イルを自動発生するファイル発生手段を含むことを特徴
とするプログラム翻訳装置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP5337141A JP2807162B2 (ja) | 1993-12-28 | 1993-12-28 | プログラム翻訳装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP5337141A JP2807162B2 (ja) | 1993-12-28 | 1993-12-28 | プログラム翻訳装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH07200309A JPH07200309A (ja) | 1995-08-04 |
| JP2807162B2 true JP2807162B2 (ja) | 1998-10-08 |
Family
ID=18305835
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP5337141A Expired - Fee Related JP2807162B2 (ja) | 1993-12-28 | 1993-12-28 | プログラム翻訳装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2807162B2 (ja) |
-
1993
- 1993-12-28 JP JP5337141A patent/JP2807162B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| JPH07200309A (ja) | 1995-08-04 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5680622A (en) | System and methods for quickly detecting shareability of symbol and type information in header files | |
| US6434742B1 (en) | Symbol for automatically renaming symbols in files during the compiling of the files | |
| US5408665A (en) | System and methods for linking compiled code with extended dictionary support | |
| US7380242B2 (en) | Compiler and software product for compiling intermediate language bytecodes into Java bytecodes | |
| USRE38104E1 (en) | Method and apparatus for resolving data references in generated code | |
| US5848274A (en) | Incremental byte code compilation system | |
| US7823139B2 (en) | Method and system for translating programming languages | |
| US20030088860A1 (en) | Compiler annotation for binary translation tools | |
| US8177122B2 (en) | Providing diagnostic information on the processing of variables in source code | |
| US8869126B2 (en) | Method and apparatus enabling multi threaded program execution for a Cobol program including OpenMP directives by utilizing a two-stage compilation process | |
| US20110093837A1 (en) | Method and apparatus for enabling parallel processing during execution of a cobol source program using two-stage compilation | |
| WO1997032250A1 (en) | Interactive software development system | |
| US8881123B2 (en) | Enabling symbol resolution of private symbols in legacy programs and optimizing access to the private symbols | |
| US20140189664A1 (en) | METHOD FOR ENABLING COMPILATION OF A COBOL SOURCE PROGRAM UTILIZING A TWO-STAGE COMPILATION PROCESS, THE COBOL SOURCE PROGRAM INCLUDING A MIX OF COBOL, C++ or JAVA STATEMENTS, AND OPTIONAL OPENMP DIRECTIVES | |
| US7743368B2 (en) | Method and apparatus for providing class hierarchy information for function devirtualization | |
| US5446899A (en) | Hint generation in smart recompilation | |
| JP5506936B2 (ja) | 意味論的値を利用するオブジェクト・レベルの互換性及びクラスのサイズ変更 | |
| US5535392A (en) | Using hint generation to cause portions of object files to remain the same | |
| US6086622A (en) | Method and apparatus for converting an architecture of a program and method, and apparatus for debugging a program by using them | |
| US20050125783A1 (en) | Program optimization with intermediate code | |
| JP2807162B2 (ja) | プログラム翻訳装置 | |
| Fritzson et al. | Metamodelica–a symbolic-numeric modelica language and comparison to julia | |
| JP3266097B2 (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム | |
| CN117648090A (zh) | 一种使用TypeScript类加载器的模块化开发方法 | |
| JP3596570B2 (ja) | クラスの主記憶装置への配置方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 19980707 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090724 Year of fee payment: 11 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090724 Year of fee payment: 11 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100724 Year of fee payment: 12 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100724 Year of fee payment: 12 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110724 Year of fee payment: 13 |
|
| LAPS | Cancellation because of no payment of annual fees |