Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP2807162B2 - プログラム翻訳装置 - Google Patents
[go: Go Back, main page]

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
Application number
JP5337141A
Other languages
English (en)
Other versions
JPH07200309A (ja
Inventor
浩 有田
正彦 藤本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Ten Ltd
Original Assignee
Denso Ten Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Denso Ten Ltd filed Critical Denso Ten Ltd
Priority to JP5337141A priority Critical patent/JP2807162B2/ja
Publication of JPH07200309A publication Critical patent/JPH07200309A/ja
Application granted granted Critical
Publication of JP2807162B2 publication Critical patent/JP2807162B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ソースプログラムを複
数に分割して作成し、作成されたソースプログラムの翻
訳を行うプログラム翻訳装置に関する。
【0002】
【従来の技術】従来から、コンピュータプログラム作成
の際には、作成すべきプログラムを複数のモジュールに
分割して作成することが多い。複数のプログラム作成者
が分担して作業したり、プログラムの修正や点検を容易
にするためである。近年、広く用いられているプログラ
ム言語の1つであるC言語では、プログラムを分割して
作成することを支援するために、1つの関数中で使用す
る変数などは一般に局所的な自動変数として解釈され、
他の関数中で同一名称の変数があても、それぞれ独立し
て取扱われる。これらの自動変数は、たとえばスタック
領域にいわば動的に割当てられ、その変数を定義してい
る関数が呼出されているときにしか変数のストア内容で
あるデータは確定していない。関数の呼出しにかかわり
なく、データを常に保持するための変数は静的変数とも
呼ばれ、特定のメモリアドレスに割当てられる。これら
の静的変数の中でも、他のファイルから使用される変数
は、外部参照可能な変数として取扱われる。
【0003】図6は、複数のファイル1,2,3,にソ
ースプログラムを分割し、それぞれのファイル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つのプログラムにま
とめる際に多重定義のエラーになる。
【0004】図7は、C言語に備えられている分割プロ
グラムを支援する機能であるヘッダファイルのインクル
ードのためのプリプロセッサ制御行を利用する例を示
す。ソースプログラムは、たとえば「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)」の宣言が必要となる。
【0005】
【発明が解決しようとする課題】前述のように、ヘッダ
ファイルのインクルード機能を用いて外部参照可能な変
数を定義する場合であっても、図7ので示すように、
ファイルによりインクルードするモジュールが異なる。
このため、図8に示すように、定義用のヘッダファイル
5と外部定義用の外部ヘッダファイル6との2つを作成
する必要がある。たとえば、「ram4」の型を「in
t」から文字型である「char」に変更するとき、外
部ヘッダファイル6についての修正を忘れるようなこと
が多い。このような修正のし忘れがあっても、分割コン
パイルにおいて各ソースファイルのコンパイルは成功す
る。リンクにおいても、見かけ上成功する場合もある。
しかしながら、変数「ram4」についての型が異なる
ので翻訳されたプログラムが誤動作しやすくなり、バグ
発生の要因となりやすい。また1つの変数についての修
正であっても複数のファイルを確実に修正しなければな
らないので、プログラム作成者にとっての負担が大き
い。
【0006】本発明の目的は、1つのファイルの修正だ
けで変数定義についての必要な修正が可能で、プログラ
ム作成者の負担が少なく、信頼性の高いプログラムを作
成することができるプログラム翻訳装置を提供すること
である。
【0007】
【課題を解決するための手段】本発明は、ソースプログ
ラムが記述される複数のプログラムファイル中で共通に
使用される変数を定義する定義用ファイル、または参照
する変数が他のプログラムファイル中で定義されること
を表す外部定義ファイルを、各プログラムファイルの翻
訳時に併せて読込むプログラム翻訳装置において、定義
用ファイルを読込み、変数を定義するための記述を、変
数を参照するための記述に変換して外部定義ファイルを
自動発生するファイル発生手段を含むことを特徴とする
プログラム翻訳装置である。
【0008】
【作用】本発明に従えば、ソースプログラムは複数のプ
ログラムファイルで記述される。複数のプログラムファ
イル中で共通に使用される変数は定義用ファイルで定義
される。参照する変数が他のプログラムファイル中で定
義されることは外部定義ファイルによって定義される。
外部定義ファイルは、ファイル発生手段が定義用ファイ
ルを読込み、変数を定義するための記述を、変数を参照
するための記述に変換して自動生成する。プログラム翻
訳装置は、各プログラムファイルの翻訳時に併せて、定
義用ファイルまたは外部定義ファイルを読込む。外部定
義ファイルは定義用ファイルから自動生成されているの
で、定義用ファイルの内容に変更があっても自動的に修
正される。このためプログラム作成者の負担が小さく、
作成されるプログラムにも多重定義や型の不一致などに
よるバグの発生要因がなくなり、信頼性の高いプログラ
ムを得ることができる。
【0009】
【実施例】図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つの全体的なプログラムとして
まとめられる。
【0010】リンカによってオブジェクトファイル40
を結合するリンクの際には、アセンブリ言語で記述され
たアセンブラのソースファイルをアセンブルしたオブジ
ェクトファイルも使用可能である。ファイル発生手段3
1は、ヘッダファイル10から外部ヘッダファイル11
を自動発生する際に、アセンブラのソースファイルにつ
いても外部参照用の記述を自動的に追加するようにする
こともできる。
【0011】図2は、図1の実施例のファイル発生手段
31の動作を示す。ステップc1で動作を開始し、ステ
ップc2ではヘッダファイル10をオープンし、1行ず
つの読込みが可能な状態とする。次にステップc3でヘ
ッダファイル10に記述されているプログラムを1行ず
つ読込む。ステップc4では、その読込まれた行が変数
定義をしているか否かを判断する。変数定義をしている
ときには、ステップc5で行の先頭に「extern」
を付加し、外部ヘッダファイル11として別のファイル
に書込む。ステップc5が終了した後、あるいはステッ
プc4で変数定義していないと判断されるときには、ス
テップc6に移る。ステップc6では、読込んだプログ
ラムの行が最終行であるか否かを判断する。最終行でな
いと判断されるときにはステップc3に戻る。最終行と
判断されるときはステップc7で処理を終了する。この
ようなファイル発生手段31やコンパイラ手段32は、
ワークステーションやパーソナルコンピュータなどのコ
ンピュータ装置上で動作するソフトウェアとして実現さ
れる。
【0012】図3は、本発明の他の実施例において達成
される翻訳の考え方を示す。本実施例では、変数定義用
のヘッダファイルをプログラムファイルと同等に取扱
う。この定義用ファイル「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」を取込むプリプロセッサ命令を記述すればよ
く、で示すようにインクルードするモジュールは同じ
となる。
【0013】図4および図5は、図3に示す「ram.
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とが含まれる。
【0014】変数定義部80には、符号なし文字型変数
を定義する変数定義81と、構造体を定義する構造体定
義82と、構造体宣言61で宣言された構造体を定義す
る構造体定義83と、プリプロセッサ用の定数定義84
と、符号なし文字型変数を定義する変数定義85,8
6,87と、プリプロセッサ用の定数定義88とが含ま
れる。
【0015】本実施例のファイル発生手段は、「ra
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」が付加される。
【0016】本実施例では、変数定義用のファイルを
「ram.c」として、プログラムファイルと同等に取
扱い、他のプログラムファイルでは外部定義ファイルの
みをインクルードするようにして、インクルードするモ
ジュールを同一にしている。しかしながら、たとえば
「main.c」で「ram.c」をインクルードする
ようにしてもよいことは勿論である。このときは、図1
の実施例と実質的に同一となる。インクルードするヘッ
ダファイルであることをより明確にするため、「ra
m.h」のようなファイル名に変更すれば、図1の実施
例になる。
【0017】また、そのような定義用ファイルを準備す
る段階も自動化することは可能である。複数のプログラ
ムファイルを作成したら、それぞれのプログラムファイ
ルから共通の外部変数を抽出して定義用ファイルを作成
し、自動的に外部ヘッダファイルも生成する。外部変数
を抜出した各プログラムファイルには、たとえば図2の
実施例と同様に外部ヘッダファイルをインクルードする
プリプロセッサ命令を付加する。このようにして一連の
ファイルを自動的に作成し、プログラム作成者の負担を
軽減し、バグの可能性を減少させて作成するプログラム
の信頼性を高めることができる。
【0018】また、C言語によってプログラムを作成す
る場合について説明しているけれども、インクルード機
能を利用することができるアセンブラや他の高級言語の
プログラム翻訳装置であっても同様の効果を奏すること
は勿論である。
【0019】
【発明の効果】以上のように本発明によれば、複数のプ
ログラムファイル中で共通に使用される変数の定義を変
更する際には、1つの定義用ファイル中の関連する記述
を変更するだけで、ファイル発生手段によって外部定義
ファイルも併せて変更されたものに修正される。したが
ってプログラム作成者の負担は小さくなり、変数の多重
定義や型の不一致などによるプログラム中のバグなどの
減少を図り、プログラムの信頼性を向上することができ
る。
【図面の簡単な説明】
【図1】本発明の一実施例の概略的な電気的構成を示す
ブロック図である。
【図2】図1の実施例の動作を示すフローチャートであ
る。
【図3】本発明の他の実施例によって実現される処理の
考え方を示すブロック図である。
【図4】図3に示す「ram.c」の内容の一例を示す
プログラムリストである。
【図5】図3の「ram_ext.h」の内容の一例を
示すプログラムリストである。
【図6】従来からの分割コンパイルにおける変数の定義
状態を示す簡略化したプログラムリストである。
【図7】従来のプログラム翻訳の考え方を示すブロック
図である。
【図8】従来の考え方の問題点を示す簡略化したプログ
ラムリストである。
【符号の説明】
10 ヘッダファイル 11 外部ヘッダファイル 20〜23 ファイル 30 翻訳装置 31 ファイル発生手段 32 コンパイラ手段 80 変数定義部 81,85〜87 変数定義 90 外部変数定義部 91,95〜97 変数外部定義
───────────────────────────────────────────────────── フロントページの続き (58)調査した分野(Int.Cl.6,DB名) G06F 9/45 G06F 9/06 JICSTファイル(JOIS)

Claims (1)

    (57)【特許請求の範囲】
  1. 【請求項1】 ソースプログラムが記述される複数のプ
    ログラムファイル中で共通に使用される変数を定義する
    定義用ファイル、または参照する変数が他のプログラム
    ファイル中で定義されることを表す外部定義ファイル
    を、各プログラムファイルの翻訳時に併せて読込むプロ
    グラム翻訳装置において、 定義用ファイルを読込み、変数を定義するための記述
    を、変数を参照するための記述に変換して外部定義ファ
    イルを自動発生するファイル発生手段を含むことを特徴
    とするプログラム翻訳装置。
JP5337141A 1993-12-28 1993-12-28 プログラム翻訳装置 Expired - Fee Related JP2807162B2 (ja)

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)

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