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