JPH1021087A - コンパイル方法 - Google Patents

コンパイル方法

Info

Publication number
JPH1021087A
JPH1021087A JP8188898A JP18889896A JPH1021087A JP H1021087 A JPH1021087 A JP H1021087A JP 8188898 A JP8188898 A JP 8188898A JP 18889896 A JP18889896 A JP 18889896A JP H1021087 A JPH1021087 A JP H1021087A
Authority
JP
Japan
Prior art keywords
function
names
language
compilation
variable
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
Application number
JP8188898A
Other languages
English (en)
Inventor
Shigeru Imura
滋 井村
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP8188898A priority Critical patent/JPH1021087A/ja
Publication of JPH1021087A publication Critical patent/JPH1021087A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 効率のよいコンパイルを実現したコンパイル
方法を提供する。 【解決手段】 いくつかの関数の定義、変数の定義及び
型の宣言とから構成されてなり、すべての名前(関数
名、変数名、型名)は使用前に宣言または定義されるこ
とを原則とする高級言語のコンパイル方法において、コ
ンパイル処理の途中結果を保持させ、他のコンパイルの
過程において未定義の関数を検出すると、上記のコンパ
イルにおいて保持された途中結果の中から対応する関数
を拾い出し、それを関数の宣言として利用する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、コンパイル方法
に関し、例えばC言語及びC++言語のコンパイル(機
械語への翻訳)方法に利用して有効な技術に関するもの
である。
【0002】
【従来の技術】高級言語は、その目的に応じて、科学技
術計算用と事務計算用又はこれを複合した言語等に広く
使われている。このような高級言語と実際にコンピュー
タでの情報処理に用いられる機械語とのギャップは大き
く、かかるギャップを埋めるための処理がコンパイル
(翻訳)である。このようなプログラム言語に関して
は、オーム社、昭和60年12月25日発行「マイクロ
コンピュータハンドブック」第497頁〜第532等が
ある。
【0003】高級言語の1つであるC言語は、上記文献
にも示されているように、1972年にアメリカのベル
研究所のリッチャー(D.Ritchie) により、BCP
L,Bなどの言語をもとに、PDP−11(ミニコンピ
ュータのアーキテクチャ)上のTSS(time sharing s
ystem)システムUNIX用の言語として設計されたもの
である。C言語は、システム記述用言語として、UNI
Xとともに発達した言語であり、その特徴としては次の
ことがあげられる。C++言語は、上記C言語の機能を
拡張したものである。
【0004】豊富な演算子やデータ型と構造的プログ
ラミングを容易にする制御構造を持つとともに、簡潔な
表現方法を採用しており、コンパクトなプログラムが書
ける。プログラムが小さいモジュール(=関数)の集
まりからなり、分割コンパイルが可能である。ビット
操作やアドレスポインタなどが扱え、機械語に近い形の
記述ができる。プリプロセッサがあり、マクロ機能が
使える。小さい言語なので処理も小さくすみ、また、
移植性も高い。
【0005】C言語の演算子とデータ型は、次の通りで
ある。C言語は、極めて豊富な演算子を持ち、通常の算
術・論理・関係演算子の他に、ビット処理用の各種演算
子、「if−then−else」を記述する条件演算
子、オブジェクトのアドレスを取り出す「&」などポイ
ンタ関係の演算子、オブジョクトのバイト数を取り出す
「sizeof」演算子、コンマ演算子、代入演算子な
どがあり、簡潔な表現を可能にしている。ある種の式
は、副作用を持ってもよく、例えば、変数に値を代入す
る操作は、代入式(代入値を値にとる)の副作用を引き
起こされる。例えば、a[i++]=(x+=2);な
る式は、 x=x+2;a[i]=x;i=i+1;と等しい効果
を持つ。
【0006】変数は、記述領域の管理方式の違いにより
4種類に分けられる。すべての関数の外側で宣言し、1
つのソースファイル内では大域的変数の役割を果たす変
数を外部変数(extern) という。動的変数(auto) は、
関数が起動されるごとに生起、消滅する。これに対し
て、静的変数(static) は、プログラムの実行中はずっ
と存在し続ける。レジスタ変数(register) は、高速の
演算レジスタが割り当てられる。
【0007】C言語のデータ型は、大きくわけると基本
型と複合型に分類される。複合型は、基本的データ型を
もとに再復帰的に構成される。配列名は、その第0要素
の番地と同義であり、ポインタ変数と配列名とはほとん
ど同様に扱われ、整数との加減や比較も行える。例え
ば、int a[10]と宣言された配列aの要素の総
和は、for(p=a,sum=0;p<=a+9;p
++)sum+= *p;によりsumに得られる。関数
を表す型を関数型といい、関数が返す結果の型を定め
る。いくつかの型の変数の集まりを構造体(structure)
といい、これはPASCALのレコードに当たる。単一
の領域内で型やサイズの異なる種々のデータを保持する
ための変数を共用体(union)という。
【0008】C言語の文には、単純文(式の後ろに;を
付けたもの)と、複合文(局所宣言の並びとその後に文
の並びを置き、これらを{}でくくったもの、ブロック
ともいう)、条件文(if−then−else)、選
択文(switch)、繰り返し文(while,fo
r,do)、補助制御文(break,goto,re
turnなど)などがある。
【0009】C言語によるプログラムは、いくつかの関
数の定義、変数の定義及び型の宣言とから構成される。
1つのプログラムには必ずmainという名の関数が定
義されていなければならず、プログラムの実行はmai
nから開始される。関数は、関数名と仮引数の後ろに複
合文を書いたものである。関数に対するパラメータ結合
法は、値による呼出しだけであり、副作用を引き起こす
ためにはポインタを用いる。
【0010】関数の定義や複合型のデータ型定義におい
ては再帰的定義が許されており、これにより簡潔明瞭な
関数の定義ができ、またリストや木などのように複雑な
構造を持つ動的データ構造を記述することができる。す
べての名前は使用前に宣言または定義されることが原則
で、その有効範囲はそれが定義されたブロック内(関数
も1つのブロックである)だけである。
【0011】
【発明が解決しようとする課題】上記のようにプログラ
ムには使用する関数が必ず宣言又は定義されていなけれ
ばないために、プログラムの変更等において煩わしいも
のとなっている。つまり、使用する関数の宣言又は定義
を行わないと、エラーとなってコンパイルの全過程がや
り直しとなってしまうという問題が生じる。
【0012】この発明の目的は、効率のよいコンパイル
を実現したコンパイル方法を提供することにある。この
発明の前記ならびにそのほかの目的と新規な特徴は、本
明細書の記述および添付図面から明らかになるであろ
う。
【0013】
【課題を解決するための手段】本願において開示される
発明のうち代表的なものの概要を簡単に説明すれば、下
記の通りである。すなわち、いくつかの関数の定義、変
数の定義及び型の宣言とから構成されて、すべての名前
(関数名、変数名、型名)は使用前に宣言または定義さ
れることを原則とする高級言語のコンパイル方法におい
て、コンパイル処理の途中結果を保持させ、他のコンパ
イルの過程において未定義の関数を検出すると、上記コ
ンパイルにおいて保持された途中結果の中から対応する
関数を拾い出し、それを関数の宣言として利用する。関
数の宣言は、これから使用するかもしれない関数の名前
と型のみを記述することをいう。関数の定義は、「関数
を宣言」し、さらにその関数で何を処理するかを記述す
ることをいう。
【0014】
【発明の実施の形態】図1には、この発明に係るコンパ
イル処理を行うための一実施例のシステム構成図が示さ
れている。特に制限されないが、コンパイラは、C言語
及びC++言語で書かれたソースプログラムを入力と
し、コンパイル処理により機械語からなるオブジェクト
プログラムに翻訳された出力を形成するものである。こ
のときのコンパイラは、例えばデータベースファイルを
使用し、各プログラムにおけるコンパイル途中結果であ
る上記関数の宣言に関する情報を保持させておくように
するものである。
【0015】図2には、上記データベースファイルに記
憶された関数の宣言に関する情報を利用したコンパイル
処理の一例を示すPAD(Problem Analysis Diagram)
図が示されている。関数のシンボルを読み込み、それを
関数xとし、シンボル宣言であるなら、xをデータベー
スファイルに登録する(1)、シンボル参照であると、
上記関数xがソースプログラム中に宣言されているかが
判定され、ソースプログラム中に宣言されてないとき
(no)の場合には従来のように直ちにエラーとして処
理するのではなく、上記関数xの宣言情報をデータベー
スファイル中に参照し、そこに他のプログラム等でのコ
ンパイルの途中結果の中に上記対応する関数xが存在す
るなら、上記関数xはかかるソースプログラム中に既に
宣言されたものと解釈して処理する(2)、同図では、
省略されているが、もしも上記データベースファイルの
中にも上記関数xが未定義なら従来のコンパイル方法と
同様に関数未定義エラーとする。
【0016】図3には、C言語によるソースプログラム
の例が示されている。C言語では、BASICのような
プログラム行の概念がないが、説明の便宜のために同図
4ないし7のような仮の行番号を付して説明する。明細
書では、上記数字に括弧を付して(4)〜(7)のよう
に表している。int f(void);では、シンボ
ル(関数)fを宣言し(4)、f()ではそれを参照し
ている(5)。他のシンボル(関数)a,bは例えばi
nt a(void);int b(void);のよ
うな宣言(定義)をしないままに、a();での参照
(6)及びb(1,2L);の参照を行っている
(7)。従来のコンパイル方法では、ソースプログラム
にかかる未宣言のシンボルaやbが存在した場合、エラ
ーとなり、ソースプログラムに上記int a(voi
d);やint b(void);のようにシンボル
a,bの宣言を必要とする。
【0017】しかしながら、この発明に係るコンパイル
方法では、未宣言のシンボルa,bを検出すると、デー
タベースファイルが参照される。つまり、図4(A)の
ようにデータベースファイルの中に、他のプログラムで
の定義によりシンボル名と属性(引数)が登録されてい
ると、かかる宣言情報をデータベースファイルから取得
し、aとbがソースプログラム中に既に宣言されたもの
と解釈して処理する。したがって、図3のようなソース
プログラムをコンパイルした後では、データベースファ
イルは図4(B)のように既に他のプログラムにおいて
宣言された上記シンボルaとbに加えてこのプログラム
にてシンボルfの宣言が追加登録される。
【0018】上記の実施例から得られる作用効果は、下
記の通りである。 (1) いくつかの関数の定義、変数の定義及び型の宣
言とから構成されてなり、すべての名前(関数名、変数
名、型名)は使用前に宣言または定義されることを原則
とする高級言語のコンパイル方法において、コンパイル
処理の途中結果を保持させ、他のコンパイルの過程にお
いて未定義の関数を検出すると、上記コンパイルにおい
て保持された途中結果の中から対応する関数を拾い出
し、それを関数の宣言として利用することにより、効率
のよいコンパイル処理が実現できるという効果が得られ
る。
【0019】(2) 上記(1)により、プログラムの
開発において、ソースプログラムの一部の修正や変更時
に、変更前の宣言が有効に利用でき全てのシンボルに付
いての見直しをすることなく、追加すべきシンボルだけ
を宣言すればよいから、効率のよいプログラムの修正や
変更が可能になるという効果が得られる。
【0020】以上本発明者よりなされた発明を実施例に
基づき具体的に説明したが、本願発明は前記実施例に限
定されるものではなく、その要旨を逸脱しない範囲で種
々変更可能であることはいうまでもない。例えば、高級
言語は、上記のようにいくつかの関数の定義、変数の定
義及び型の宣言とから構成されてなり、すべての名前
(関数名、変数名、型名)は使用前に宣言または定義さ
れることを原則とするものであれば何であってもよい。
【0021】
【発明の効果】本願において開示される発明のうち代表
的なものによって得られる効果を簡単に説明すれば、下
記の通りである。すなわち、いくつかの関数の定義、変
数の定義及び型の宣言とから構成されてなり、すべての
名前(関数名、変数名、型名)は使用前に宣言または定
義されることを原則とする高級言語のコンパイル方法に
おいて、コンパイル処理の途中結果を保持させ、他のコ
ンパイルの過程において未定義の関数を検出すると、上
記コンパイルにおいて保持された途中結果の中から対応
する関数を拾い出し、それを関数の宣言として利用する
ことにより、効率のよいコンパイル処理が実現できる。
【図面の簡単な説明】
【図1】この発明に係るコンパイル処理を行うための一
実施例を示すシステム構成図である。
【図2】図1に示されたデータベースファイルを使用し
たコンパイル処理の一例を示すPAD図である。
【図3】この発明を説明するためのC言語の一例を示す
ソースプログラム構成図である。
【図4】この発明の説明するためのデータベースファイ
ルの記録例を示すシンボル構成図である。
【符号の説明】
1…シンボル登録処理、2…シンボル取得処理、4…シ
ンボル宣言、5〜7…シンボル参照。

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 いくつかの関数の定義、変数の定義及び
    型の宣言とから構成され、すべての名前(関数名、変数
    名、型名)は使用前に宣言または定義されることを原則
    とする高級言語のコンパイル方法において、コンパイル
    処理の途中結果を保持させ、他のコンパイルの過程にお
    いて未定義の関数を検出すると、上記のコンパイルにお
    いて保持された途中結果の中から対応する関数を拾い出
    し、それを関数の宣言として利用することを特徴とする
    コンパイル方法。
  2. 【請求項2】 上記高級言語は、C言語及びC++言語
    であることを特徴とする請求項1コンパイル方法。
JP8188898A 1996-06-28 1996-06-28 コンパイル方法 Pending JPH1021087A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8188898A JPH1021087A (ja) 1996-06-28 1996-06-28 コンパイル方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8188898A JPH1021087A (ja) 1996-06-28 1996-06-28 コンパイル方法

Publications (1)

Publication Number Publication Date
JPH1021087A true JPH1021087A (ja) 1998-01-23

Family

ID=16231819

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8188898A Pending JPH1021087A (ja) 1996-06-28 1996-06-28 コンパイル方法

Country Status (1)

Country Link
JP (1) JPH1021087A (ja)

Similar Documents

Publication Publication Date Title
US11036614B1 (en) Data control-oriented smart contract static analysis method and system
US5586328A (en) Module dependency based incremental compiler and method
US8156471B2 (en) Multi-language execution method
CN100385399C (zh) 用于多个异常处理模型的中间表示的方法和系统
JP2801931B2 (ja) 論理設計処理装置および回路変換ルール翻訳装置ならびに回路変換ルール翻訳方法
US5404531A (en) Method and apparatus for compiler processing on program related to data transfer and calculation, and method of managing memory
US6233732B1 (en) Compiling system using intermediate codes to store a plurality of values
JPH1021087A (ja) コンパイル方法
Hannan et al. Higher-order arity raising
CN120806190B (zh) 代码处理方法、装置、电子设备、存储介质及计算机程序产品
Johnsen et al. A dynamic binding strategy for multiple inheritance and asynchronously communicating objects
JPH09179738A (ja) オブジェクト指向言語処理方法及び処理装置
JP3531728B2 (ja) オブジェクト指向型プログラミング言語で記述されたプログラムの構成関係管理装置及び方法並びに記憶媒体
JP3018783B2 (ja) コンパイル方式
JPH0695890A (ja) コンパイラにおける名前置換方式
JP3424596B2 (ja) シンボル参照情報のキャッシュ方法ならびに装置
JPH1195995A (ja) データフロー解析装置、データフロー解析方法及びそのためのコンピュータプログラムを記録した記録媒体
Sastry Efficient array update analysis of strict functional languages
Barendsen et al. Uniqueness typing in natural deduction style
Bahler Steps toward a compiler for BLISS-360.
JPH07239789A (ja) データコード処理方式
JPS62137641A (ja) 高級言語のコンパイラ
JPH07129408A (ja) 言語処理プログラムの実行方式
Kiong Introduction to Language Implementation
Whitlock The BLOAT book

Legal Events

Date Code Title Description
FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080414

Year of fee payment: 8

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090414

Year of fee payment: 9

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100414

Year of fee payment: 10

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110414

Year of fee payment: 11

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110414

Year of fee payment: 11

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120414

Year of fee payment: 12

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120414

Year of fee payment: 12

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130414

Year of fee payment: 13

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140414

Year of fee payment: 14

LAPS Cancellation because of no payment of annual fees