JPH02133826A - コンパイラ構成方式 - Google Patents
コンパイラ構成方式Info
- Publication number
- JPH02133826A JPH02133826A JP63287972A JP28797288A JPH02133826A JP H02133826 A JPH02133826 A JP H02133826A JP 63287972 A JP63287972 A JP 63287972A JP 28797288 A JP28797288 A JP 28797288A JP H02133826 A JPH02133826 A JP H02133826A
- Authority
- JP
- Japan
- Prior art keywords
- language
- assembler
- address
- compiler
- register
- 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
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
産業上の利用分野
本発明は、高級プログラミング言語で記述された原始プ
ログラムを、特定の計算機向き目的プログラムに翻訳す
るコンパイラを、複数の計算機向き言語に対して効率よ
(構成するためのフンバイラ構成方式に関する。
ログラムを、特定の計算機向き目的プログラムに翻訳す
るコンパイラを、複数の計算機向き言語に対して効率よ
(構成するためのフンバイラ構成方式に関する。
従来の技術
従来、コンパイラは、原始プログラムを入力とし、翻訳
されるもとのプログラミング言語に依存する構文解析処
理と対象計算機における資源の利用方法を規定する処理
とを行って木構造あるいは3番地コードと呼ばれる中間
的なコードを生成するフロントエンドと、その中間的な
コードを対象の計算機向きの目的プログラム言語に変換
するコート°生成部とを作成することによって構成され
ていた。
されるもとのプログラミング言語に依存する構文解析処
理と対象計算機における資源の利用方法を規定する処理
とを行って木構造あるいは3番地コードと呼ばれる中間
的なコードを生成するフロントエンドと、その中間的な
コードを対象の計算機向きの目的プログラム言語に変換
するコート°生成部とを作成することによって構成され
ていた。
第14図、第15図は、それぞれ、典型的なコンパイラ
の構成と、そのフロントエンド°を構成する工程の一例
で、38は高級プログラム言語でかかれたソース・プロ
グラム、38は構文解析処理と対象計算機における資源
利用方法を規定する処理を行な うコンハ゛イラフロン
トIント°、 40 はコンパイラフロントIント°
から出力される中間フード、41は中間コードを読み込
み目的計算機向き言語に変換するコンパイラのコート°
生成部、42はコード生成部が出力した目的計算機向き
言語、43は原始プログラムがかかれる高級プログラミ
ング言語の仕様、44は計算機向き言語の仕様、45は
それらのデータから設計されるフロントエンドの内部仕
様を示す。
の構成と、そのフロントエンド°を構成する工程の一例
で、38は高級プログラム言語でかかれたソース・プロ
グラム、38は構文解析処理と対象計算機における資源
利用方法を規定する処理を行な うコンハ゛イラフロン
トIント°、 40 はコンパイラフロントIント°
から出力される中間フード、41は中間コードを読み込
み目的計算機向き言語に変換するコンパイラのコート°
生成部、42はコード生成部が出力した目的計算機向き
言語、43は原始プログラムがかかれる高級プログラミ
ング言語の仕様、44は計算機向き言語の仕様、45は
それらのデータから設計されるフロントエンドの内部仕
様を示す。
フロントエンド°の開発において、まず、ソースプログ
ラムがかかれるプログラミング言語の仕様43と、対象
とする計算機向き言語の仕様44が与えられる。
ラムがかかれるプログラミング言語の仕様43と、対象
とする計算機向き言語の仕様44が与えられる。
それらをもとに、 コンパイラフロントエンド°の内部
仕様45が設計され、 コンi“イラフロントエント°
33が構成される。 そして、もし、ある特定の計算機
向き言語のためのコンパイラフロントエンド のためのフロントエンド°を得ようとするときも第15
図のような工程を経る必要があった。
仕様45が設計され、 コンi“イラフロントエント°
33が構成される。 そして、もし、ある特定の計算機
向き言語のためのコンパイラフロントエンド のためのフロントエンド°を得ようとするときも第15
図のような工程を経る必要があった。
発明が解決しようとする課題
しかしながら、上記のような方法で複数の計算機向き言
語に対応するためのコンパイラを構成する場合には、対
象となる計算機向き言語ごとにフロントエンド°をつく
り直し、設計・開発・品質保証をやり直さなければなら
ないなどの生産性の低下をまねいていた。
語に対応するためのコンパイラを構成する場合には、対
象となる計算機向き言語ごとにフロントエンド°をつく
り直し、設計・開発・品質保証をやり直さなければなら
ないなどの生産性の低下をまねいていた。
本発明は、かかる点にかんがみ、特定の計算機向き言語
へのコンバイラフ0ントエントを速やかに構成する方式
を提供するものである。
へのコンバイラフ0ントエントを速やかに構成する方式
を提供するものである。
課題を解決するための手段
本発明は、対象の計算機向き言語のための処理をする部
品と、特定の計算機向き言語に依存しない構文解析部と
を別個に準備し、対象の計算機向き言語のための処理を
する部品のみを対象の計算機の種類に合わせて準備する
ことによって、複数の計算機向き言語へのコンパイラの
開発を容易にするコンパイラ構成方式である。
品と、特定の計算機向き言語に依存しない構文解析部と
を別個に準備し、対象の計算機向き言語のための処理を
する部品のみを対象の計算機の種類に合わせて準備する
ことによって、複数の計算機向き言語へのコンパイラの
開発を容易にするコンパイラ構成方式である。
作 用
特定の計算機向き言語に依存しない構文解析部分は、−
度作成すれば、コンパイラが対象とする計算機向き言語
が複数あっても、再開発の必要がない。また、計算機は
、その特徴(たとえば、レジスタ構成など)や、計算機
向き言語の定型句(たとえば、1つの号)゛ルーチン・
干ジュールの入口と出口を書き表すための計算機向き言
語の列)に従って、少数のグループにわけられるので、
その基準ごとに、計算機向き言語のための処理をする部
品のライブラリを用意し、対象となる計算機の仕様をそ
の基準に照らして、そのライブラリのうちから適切な部
品を選びだし、前記構文解析部に結合する〜ことにより
、コンバイラフ0ントエントを容易に構成することがで
きる。
度作成すれば、コンパイラが対象とする計算機向き言語
が複数あっても、再開発の必要がない。また、計算機は
、その特徴(たとえば、レジスタ構成など)や、計算機
向き言語の定型句(たとえば、1つの号)゛ルーチン・
干ジュールの入口と出口を書き表すための計算機向き言
語の列)に従って、少数のグループにわけられるので、
その基準ごとに、計算機向き言語のための処理をする部
品のライブラリを用意し、対象となる計算機の仕様をそ
の基準に照らして、そのライブラリのうちから適切な部
品を選びだし、前記構文解析部に結合する〜ことにより
、コンバイラフ0ントエントを容易に構成することがで
きる。
実施例
第1図は、ブロク゛ラミンク°言語をCとし、計算機向
き言語を、 モトローラ社6800Ocpu用アtン
ブラ、 及び、 インテル社8038Bcpu用ア七ン
フ”うとしたときの、本発明の実施例を示すものである
。
き言語を、 モトローラ社6800Ocpu用アtン
ブラ、 及び、 インテル社8038Bcpu用ア七ン
フ”うとしたときの、本発明の実施例を示すものである
。
この図において、1はプログラミング言語Cの言語仕様
、2は対象とする7をンブラ言語の仕様、3はゴンバイ
ラフロントエント°のう ちア七ンフ゛う言語に依存し
ないytンフ゛う言語非依存部の内部仕様、4は各種の
ytンフ゛う言語の処理をするためのア七ンブラ言語依
存部品の内部仕様、5はコンバイラフ0ントエントの中
でプログラムの構文解析を行なう、アtンフ゛う言語に
依存しない部分であるアtンブラ言語非依存部、51、
52、53、5 4はコンバイラフ0ントエント°の処
理におけるアtンブラ依存部分である、アドレス処理(
プログラムの中で使用する変数を計算機の実際の主記憶
に割り当てる処理)、レジスタ処理(プログラムの中で
明示的にレジスタに割り付けるようにかかれた変数に対
して計算機のレジスタ構成をもとに実際にレジスタを割
り当てる)、局所変数処理(関数内で一時的に使用され
る変数の主記憶への割付や、そのための主記憶領域の確
保)、及び、定型句処理(関数の入口・出口を実現する
ためのアtンフ“う言語の列や、 アtンブラソースの
へ)ダ・フッタを生成する) をそれぞれ表し、6は7
tンブラ言語の処理をする各部品をあつめた部品ライブ
ラリ、81は部品ライブラリ6のうちモトローラ680
00cpuのために用意したモトローラ88000用部
品、62は部品ライブラリのうちインテル80388c
puのために用意したインテル8038G用部品、7は
ア七ンブラ非依存部5に部品ライブラリ6から適当な部
品を選択して結合することによって得られるコンバイラ
フ0ントエント°である。
、2は対象とする7をンブラ言語の仕様、3はゴンバイ
ラフロントエント°のう ちア七ンフ゛う言語に依存し
ないytンフ゛う言語非依存部の内部仕様、4は各種の
ytンフ゛う言語の処理をするためのア七ンブラ言語依
存部品の内部仕様、5はコンバイラフ0ントエントの中
でプログラムの構文解析を行なう、アtンフ゛う言語に
依存しない部分であるアtンブラ言語非依存部、51、
52、53、5 4はコンバイラフ0ントエント°の処
理におけるアtンブラ依存部分である、アドレス処理(
プログラムの中で使用する変数を計算機の実際の主記憶
に割り当てる処理)、レジスタ処理(プログラムの中で
明示的にレジスタに割り付けるようにかかれた変数に対
して計算機のレジスタ構成をもとに実際にレジスタを割
り当てる)、局所変数処理(関数内で一時的に使用され
る変数の主記憶への割付や、そのための主記憶領域の確
保)、及び、定型句処理(関数の入口・出口を実現する
ためのアtンフ“う言語の列や、 アtンブラソースの
へ)ダ・フッタを生成する) をそれぞれ表し、6は7
tンブラ言語の処理をする各部品をあつめた部品ライブ
ラリ、81は部品ライブラリ6のうちモトローラ680
00cpuのために用意したモトローラ88000用部
品、62は部品ライブラリのうちインテル80388c
puのために用意したインテル8038G用部品、7は
ア七ンブラ非依存部5に部品ライブラリ6から適当な部
品を選択して結合することによって得られるコンバイラ
フ0ントエント°である。
以上のように構成された本実施例におけるコンハ゛イラ
フロントI訃′の構成工程について説明する。
フロントI訃′の構成工程について説明する。
モトトラ88000のためのコンパイラを開発した際、
まず、プログラミング言語Cの仕様lからア七ンブラ非
依存部の内部仕様3が設計され、それをもとに、構文解
析だけを行ないアセンフ゛う言語のための処理を行なわ
ないアtンブラ言語非依存部5が開発されている。
一方、 モトローラ[18000のアtンフ゛う言語
の仕様2から、Ytンブラ言語に依存した処理を行なう
ための内部仕様4が設計され、モトローラG3000用
のア七ンブラ言語の処理を行なうための部品G1が開発
される。
まず、プログラミング言語Cの仕様lからア七ンブラ非
依存部の内部仕様3が設計され、それをもとに、構文解
析だけを行ないアセンフ゛う言語のための処理を行なわ
ないアtンブラ言語非依存部5が開発されている。
一方、 モトローラ[18000のアtンフ゛う言語
の仕様2から、Ytンブラ言語に依存した処理を行なう
ための内部仕様4が設計され、モトローラG3000用
のア七ンブラ言語の処理を行なうための部品G1が開発
される。
そして、アtンブラ言語非依存部5で欠けている、アt
ンフ゛う言語に依存する処理を行なう、アドレス処理5
1、 Vt’ス9処理52、局所変数処理53、定型句
処理54に、モトローラ88000用部品61を結合す
ることによりモトローラ68000用のコンパイラフロ
ントエンドこの時点で、ア七ンフ゛う言語によらない構
文解析部5の開発が終わっている。 ここで、インテ
ル8038Gのためのコンパイラが必要になったとする
。このとき、 8038B用アtンフ゛う言語の仕様2
から、 110386アセンブラ依存部品の内部仕様4
を設計し、8038B用の部品を開発し、それらの部品
をア七ンフ゛う非依存部5に結合することにより、 8
0386用のコンパイラフロントエンド°7を得ること
ができる。
ンフ゛う言語に依存する処理を行なう、アドレス処理5
1、 Vt’ス9処理52、局所変数処理53、定型句
処理54に、モトローラ88000用部品61を結合す
ることによりモトローラ68000用のコンパイラフロ
ントエンドこの時点で、ア七ンフ゛う言語によらない構
文解析部5の開発が終わっている。 ここで、インテ
ル8038Gのためのコンパイラが必要になったとする
。このとき、 8038B用アtンフ゛う言語の仕様2
から、 110386アセンブラ依存部品の内部仕様4
を設計し、8038B用の部品を開発し、それらの部品
をア七ンフ゛う非依存部5に結合することにより、 8
0386用のコンパイラフロントエンド°7を得ること
ができる。
68000用Cコンハ゛イラフロントエント°が得られ
ている と きの80386用Cコンパイラフロントエ
ンド”の構成過程の概要は以上であるが、以下、その詳
細について、第2図から第13図までの図を用いて説明
する。
ている と きの80386用Cコンパイラフロントエ
ンド”の構成過程の概要は以上であるが、以下、その詳
細について、第2図から第13図までの図を用いて説明
する。
第2図において、8は、)゛ロク゛ラミンク゛言語Cで
かかれたソースフ゛ロク゛ラムの例を示す。
かかれたソースフ゛ロク゛ラムの例を示す。
第3図において、9、工0は、それぞれ、ソースブロク
゛ラム8から、 モトローラ68000用コンハ゛イ
ラ、 インテル803B[J11コンハ゛イラによ
って生成されたアtンブラソースである。
゛ラム8から、 モトローラ68000用コンハ゛イ
ラ、 インテル803B[J11コンハ゛イラによ
って生成されたアtンブラソースである。
まず、 Ili8000用Cコンパイラフロントエン
ド′における、 アtンフ゛う言語非依存部と680
00用ア七ンブラ部品61の働きを、Cソースブロク゛
ラム8を入力と し、 スタックフレーム構造12を
実現するようなesooo用アtンブラソース9を得る
過程を例として説明し、それから、それぞれのアtンフ
゛う依存部品を取り替えることによって、Cソースブロ
ク°ラム8を入力とし、スタックフレーム構造13を実
現するような80386用アtンフ゛ラソースを得る
ための80386用Cフンバイラフロントエン1ごが得
られることを示す。
ド′における、 アtンフ゛う言語非依存部と680
00用ア七ンブラ部品61の働きを、Cソースブロク゛
ラム8を入力と し、 スタックフレーム構造12を
実現するようなesooo用アtンブラソース9を得る
過程を例として説明し、それから、それぞれのアtンフ
゛う依存部品を取り替えることによって、Cソースブロ
ク°ラム8を入力とし、スタックフレーム構造13を実
現するような80386用アtンフ゛ラソースを得る
ための80386用Cフンバイラフロントエン1ごが得
られることを示す。
CコンパイラフロントエンドがCソースブロク′ラム8
を処理した際に解決すべき内容について、アドレス処
理51については第5図と第6図と第10図、レジ゛ス
タ処理52については第7図と第11図、局所変数処理
53については第8図と第12図、定型句処理54につ
いては第4図と第9図と第13図を用いてそれぞれ説明
する。
を処理した際に解決すべき内容について、アドレス処
理51については第5図と第6図と第10図、レジ゛ス
タ処理52については第7図と第11図、局所変数処理
53については第8図と第12図、定型句処理54につ
いては第4図と第9図と第13図を用いてそれぞれ説明
する。
第5図において、12、1.3はそれぞれ、Hローラ6
8000とインテル8038Gにおいて、 ソースツ
ブ■り゛ラム8で宣言された局所変数と関数の実引数の
主記憶への割当て方(スタックフレームの構造という)
の違いを示すものである。同図で、A6がG8000c
puにおけるフレームネ。
8000とインテル8038Gにおいて、 ソースツ
ブ■り゛ラム8で宣言された局所変数と関数の実引数の
主記憶への割当て方(スタックフレームの構造という)
の違いを示すものである。同図で、A6がG8000c
puにおけるフレームネ。
インタを保持するレジ゛スタ、 ebl)が、8038
Gcpuにおけるフレームネ゛インタを保持するレジ゛
スクである。
Gcpuにおけるフレームネ゛インタを保持するレジ゛
スクである。
第6図は、 68000用Cコンハ イラフロントエ
ンドにおけるアドレス処理部の・きを示したものである
。同図において、 14は関数subの仮引数のリスト
をアセンブラ言語非依存部5内のテ゛−夕として表現し
た関数subの引数り訃、 15はアトルスが決定され
ていない引数のシン木゛ルCをアセンフ゛う言語非依存
部5内のテ゛−夕として表現したCのシンネ゛ルテーフ
゛ル、 16は68000に合せて設計したスタックフ
レームI2に合うような引数アト°レスを求めるための
、G8000用アドレス処理部、 1 6 1 は6
8000月]アドレス処理部の号フ゛システムであ リ
、 Ili8000cpuのイ士様とブロク゛ラミン
ク゛言語の実現ネ°り汁をも とに、 アドレス (
フレームボインヶからのオフセツト)を算出するアドレ
ズ算出部、162は主記憶・レジ゛スタ間のテ゛−夕並
びの対応(エンテ゛イアンという)などのHOOOcp
uの仕様と、引数の大きさに関わりな く使用されるス
タックの量 (ハ゛イアスという)、 スタックを使用
するときの単位(スクフクハ゛ウンタ゛りという)など
のブロク゛ラミンク゛言語の実現ネ゛り汁を格納したテ
ーフ゛ルである88000用引数アト“レス決定情報、
17はG80QO用アト。
ンドにおけるアドレス処理部の・きを示したものである
。同図において、 14は関数subの仮引数のリスト
をアセンブラ言語非依存部5内のテ゛−夕として表現し
た関数subの引数り訃、 15はアトルスが決定され
ていない引数のシン木゛ルCをアセンフ゛う言語非依存
部5内のテ゛−夕として表現したCのシンネ゛ルテーフ
゛ル、 16は68000に合せて設計したスタックフ
レームI2に合うような引数アト°レスを求めるための
、G8000用アドレス処理部、 1 6 1 は6
8000月]アドレス処理部の号フ゛システムであ リ
、 Ili8000cpuのイ士様とブロク゛ラミン
ク゛言語の実現ネ°り汁をも とに、 アドレス (
フレームボインヶからのオフセツト)を算出するアドレ
ズ算出部、162は主記憶・レジ゛スタ間のテ゛−夕並
びの対応(エンテ゛イアンという)などのHOOOcp
uの仕様と、引数の大きさに関わりな く使用されるス
タックの量 (ハ゛イアスという)、 スタックを使用
するときの単位(スクフクハ゛ウンタ゛りという)など
のブロク゛ラミンク゛言語の実現ネ゛り汁を格納したテ
ーフ゛ルである88000用引数アト“レス決定情報、
17はG80QO用アト。
シス処理部1Gによってアドνズが算出され、完成した
Cのシンネ゛ルテーブルである。
Cのシンネ゛ルテーブルである。
第6図において、7tンブラ言語非依存部5は、Cソー
スブロケ゛ラムを読み込んだ時点で、関数subの引数
リスト14と7)パレスが計算されていない未完成のC
のンンボルテーフ゛ルI5を内部 テ°−夕として作成している。ここまでは、アtンフ゛
う言語に依存しない処理である。68000用アドレズ
処理部16のアト″レス算出部IG+は、68000用
アト°レス決定情報182を参照して、88000に合
ったスタックフレーム構造12を実現するように7ト°
レスを算出する。G3000cpuはリトルエンテ°イ
アンである(しジスタ内のテ゛−夕を主記憶に転送した
際にその下位バイトのテ°−夕はど高位アドレスの主記
憶上におかれる)ので、Cのアドレスは次のように求め
られる。
スブロケ゛ラムを読み込んだ時点で、関数subの引数
リスト14と7)パレスが計算されていない未完成のC
のンンボルテーフ゛ルI5を内部 テ°−夕として作成している。ここまでは、アtンフ゛
う言語に依存しない処理である。68000用アドレズ
処理部16のアト″レス算出部IG+は、68000用
アト°レス決定情報182を参照して、88000に合
ったスタックフレーム構造12を実現するように7ト°
レスを算出する。G3000cpuはリトルエンテ°イ
アンである(しジスタ内のテ゛−夕を主記憶に転送した
際にその下位バイトのテ°−夕はど高位アドレスの主記
憶上におかれる)ので、Cのアドレスは次のように求め
られる。
(アト°レス)=(バイアス)+(スタックバウンク゛
す)+(先にスタックに積まれている引数の大きさ) −(アト°レスを求める引数のテ°−り長)−8千4 十〇 =ll このアドレスのテ°−夕を用いて、アtンブラ言語非依
存部5は、 完成したCのシンネ”ルテーフ゛ル17を
つくる。 アト°レスのテ°−りからCのシン本°
ルテーブルを完成する処理はyttンブラ語に依存しな
い。
す)+(先にスタックに積まれている引数の大きさ) −(アト°レスを求める引数のテ°−り長)−8千4 十〇 =ll このアドレスのテ°−夕を用いて、アtンブラ言語非依
存部5は、 完成したCのシンネ”ルテーフ゛ル17を
つくる。 アト°レスのテ°−りからCのシン本°
ルテーブルを完成する処理はyttンブラ語に依存しな
い。
以上のCのシンネ°ルテーブル構成過程において、アト
°レス (フレームネ°インタからのオフセット) 計
算以外は、 アtンブラ言語に依存しない。 そこ
で、8038Bcpu用アト°レス計算の部分だけを開
発しytンフ゛う言語非依存部5に結合することで、7
ドレス処理をおこなうことができる。
°レス (フレームネ°インタからのオフセット) 計
算以外は、 アtンブラ言語に依存しない。 そこ
で、8038Bcpu用アト°レス計算の部分だけを開
発しytンフ゛う言語非依存部5に結合することで、7
ドレス処理をおこなうことができる。
第10図においてこれを示す。
第 10図は、 8038B用CコンパイラフロントI
ント°におけるアト°レス処理部の働きを示したもので
ある。同図において、26は関数subの仮引数のリス
トをアをンブラ言語非依存部5内のテ°−りとして表現
した関数subの引数す訃、27はアト°レスが決定さ
れていない引数のシンネ゛ルCをアセンブラ言語非依存
部5内のテ°−夕として表現したCのシンネ°ルテーブ
ル、28は8038Bに合せて設計したスタックフレー
ム13に合うような引数アドレスを求めるための、80
38e用アト°レス処理部、 281 は8038[
i用アト°レス処理部の9ブシステムであ リ、 8
038Gcpuの仕様とブロク°ラミンク゛言語の実現
ネ°リシーをもとに、アト°シスを算出する訃゛レス算
出部、282は主記憶・レジ゛スタ間のテ°−夕並びの
対応(エンテ°イアンという)などの5oasecpu
の仕様と、引数の大きさに関わりなく使用されるスタッ
クの量(ハ゛イアスという)、スタックを使用するとき
の単位(スタフクバインタ゛りという) などのブ0り
°ラミンク゛言語の実現ネ。
ント°におけるアト°レス処理部の働きを示したもので
ある。同図において、26は関数subの仮引数のリス
トをアをンブラ言語非依存部5内のテ°−りとして表現
した関数subの引数す訃、27はアト°レスが決定さ
れていない引数のシンネ゛ルCをアセンブラ言語非依存
部5内のテ°−夕として表現したCのシンネ°ルテーブ
ル、28は8038Bに合せて設計したスタックフレー
ム13に合うような引数アドレスを求めるための、80
38e用アト°レス処理部、 281 は8038[
i用アト°レス処理部の9ブシステムであ リ、 8
038Gcpuの仕様とブロク°ラミンク゛言語の実現
ネ°リシーをもとに、アト°シスを算出する訃゛レス算
出部、282は主記憶・レジ゛スタ間のテ°−夕並びの
対応(エンテ°イアンという)などの5oasecpu
の仕様と、引数の大きさに関わりなく使用されるスタッ
クの量(ハ゛イアスという)、スタックを使用するとき
の単位(スタフクバインタ゛りという) などのブ0り
°ラミンク゛言語の実現ネ。
リシーを格納したテーフ゛ルである803811i用引
数アドレス決定情報、 29は8038B用アト°レス
処理部28によってTドしスが算出され、完成したCの
シン本°ルテーブルである。
数アドレス決定情報、 29は8038B用アト°レス
処理部28によってTドしスが算出され、完成したCの
シン本°ルテーブルである。
第10図において、7tンブラ言語非依存部6は、C1
−スブUケ゛ラムを読み込んだ時点で、関数subの引
数リスト26とアドレスが計算されていない未完成のC
のシンネ°ルテーフール27を内部テ°−夕として作成
している。ここまでは、 esooo用Cコンパイラフ
ロントエンド°同様、 ア七ンブラ言語に依存しない処
理である。
−スブUケ゛ラムを読み込んだ時点で、関数subの引
数リスト26とアドレスが計算されていない未完成のC
のシンネ°ルテーフール27を内部テ°−夕として作成
している。ここまでは、 esooo用Cコンパイラフ
ロントエンド°同様、 ア七ンブラ言語に依存しない処
理である。
8038G用アト°レス処理部28のアドレス算出部2
81は、80386用アドレス決定情報282を参照し
て、803811iに合ったスタックフレーム構造13
を実現するように7ト°レスを算出する。 80
38Gcpuはビフク°エンテ°イアンである (しジ
スク内のテ°−夕を主記憶に転送した際にその下位ハ゛
イトのテ°−タはど低位アト°レスの主記憶上におかれ
る)ので、Cのアドレスは次のように求められる。
81は、80386用アドレス決定情報282を参照し
て、803811iに合ったスタックフレーム構造13
を実現するように7ト°レスを算出する。 80
38Gcpuはビフク°エンテ°イアンである (しジ
スク内のテ°−夕を主記憶に転送した際にその下位ハ゛
イトのテ°−タはど低位アト°レスの主記憶上におかれ
る)ので、Cのアドレスは次のように求められる。
(アト°シス)=(ハ゛イアス)+(先にスタックに積
まれている引数の大きさ) −8+0 = 8 このアドレスのテ°−りを用いて、ア七ンブラ言語非依
存部5は、完成したCのシンネ°ルテーフ゛に29をつ
くる。68000用CコンパイラフロントIント°同様
、 アト°レスのテ°−シから Cのシンネ°ルテーブ
ルを完成する処理はアtンフ“う言語に依存しない。
まれている引数の大きさ) −8+0 = 8 このアドレスのテ°−りを用いて、ア七ンブラ言語非依
存部5は、完成したCのシンネ°ルテーフ゛に29をつ
くる。68000用CコンパイラフロントIント°同様
、 アト°レスのテ°−シから Cのシンネ°ルテーブ
ルを完成する処理はアtンフ“う言語に依存しない。
第7図は、 G3000用Cコンハ゛イラフロントエ
ンド“におけるしジスク処理部の働きを示したものであ
る。同図において、18は実際にレジ゛スクが割り当て
られていないしジスタ変数rsをytンブラ言言語非依
存部内内テ°−夕として表現したrsのシンネ゛ルテー
ブル、 19はG8000cpuのしジスタ構成をもと
にしジスクの割当を行なうesooo用しジスタ処理部
、 1 θ 1 はesoooレジ゛スタ処理部の号
ブシステムであり、HOOOcpuの仕様、関数内にお
けるしジスタの使用方法、及び、レジ“スタの使用状態
のテ゛−夕をもとに、しジスタ変数に対して実際のレジ
゛スタを割り当てるしジス9割当部、 192はfi
8000cpuのしジスタ構成、関数内におけるしジス
クの使用方法、及び、しジスタの使用状態をまとめたe
sooo用しジスタテ−プル800G用しジスク処理部
によってしジスクを決定され、完成した r s のシ
ンネ°ルテーフ゛ルである。
ンド“におけるしジスク処理部の働きを示したものであ
る。同図において、18は実際にレジ゛スクが割り当て
られていないしジスタ変数rsをytンブラ言言語非依
存部内内テ°−夕として表現したrsのシンネ゛ルテー
ブル、 19はG8000cpuのしジスタ構成をもと
にしジスクの割当を行なうesooo用しジスタ処理部
、 1 θ 1 はesoooレジ゛スタ処理部の号
ブシステムであり、HOOOcpuの仕様、関数内にお
けるしジスタの使用方法、及び、レジ“スタの使用状態
のテ゛−夕をもとに、しジスタ変数に対して実際のレジ
゛スタを割り当てるしジス9割当部、 192はfi
8000cpuのしジスタ構成、関数内におけるしジス
クの使用方法、及び、しジスタの使用状態をまとめたe
sooo用しジスタテ−プル800G用しジスク処理部
によってしジスクを決定され、完成した r s のシ
ンネ°ルテーフ゛ルである。
第7図において、アtンブラ言語非依存部5は、Cソー
スを読み込んだ時点で、まだ実際にレジ゛スタが割り当
てられていないレジ゛スタ変数rsの未完成のシンネ゛
ルテーブル18を作成している。この処理は、アtンフ
゛う言語に依存しない。G3000用レジ゛スタ処理部
19内のレジ′スタ割当部l旧は、esooo用レジ゛
スしテーフ゛ル192を参照してrsに対して実際のし
レジスタを割り当てる。この場合、68000用レジ゛
スタテーブル192をみると、 2ハ゛イトの大きさの
レジ゛スタD3が空いているのが判定できるので、レジ
゛スタ割当部191は、D3をrsに割り当てる。アt
ンフ。
スを読み込んだ時点で、まだ実際にレジ゛スタが割り当
てられていないレジ゛スタ変数rsの未完成のシンネ゛
ルテーブル18を作成している。この処理は、アtンフ
゛う言語に依存しない。G3000用レジ゛スタ処理部
19内のレジ′スタ割当部l旧は、esooo用レジ゛
スしテーフ゛ル192を参照してrsに対して実際のし
レジスタを割り当てる。この場合、68000用レジ゛
スタテーブル192をみると、 2ハ゛イトの大きさの
レジ゛スタD3が空いているのが判定できるので、レジ
゛スタ割当部191は、D3をrsに割り当てる。アt
ンフ。
う言語非依存部5は、その結果を用いて、完成したrs
のシンホ ルテ・−フ゛ル20をつ く る。 レ
ジ゛スタ名から r s のシンネ°ルテーフ゛ルを完
成させる処理は、 アtンフ゛う言語に依存しない。
のシンホ ルテ・−フ゛ル20をつ く る。 レ
ジ゛スタ名から r s のシンネ°ルテーフ゛ルを完
成させる処理は、 アtンフ゛う言語に依存しない。
以上のrsのシンネ°ルテーブル構成過程において、レ
ジスタ割当以外は、アtンフ゛う言語に依存しない。そ
こで、8038Gcpu用レジ゛スタ割当の部分だけを
開発しアtンブラ言語非依存部5に結合することで、レ
ジ゛スク処理をおこなうことができる。第11図におい
てこれを示す。
ジスタ割当以外は、アtンフ゛う言語に依存しない。そ
こで、8038Gcpu用レジ゛スタ割当の部分だけを
開発しアtンブラ言語非依存部5に結合することで、レ
ジ゛スク処理をおこなうことができる。第11図におい
てこれを示す。
第11図は、 8038e用Cコンハ゛イラフロントエ
ント°におけるレジ゛スタ処理部の働きを示したもので
ある。同図において、30は実際にレジ゛スタが割り当
てられていないしジスク変数rsをアをンブラ言語非依
存部5内のテ′−夕として表現したrsのシンネ°ルテ
ーフ′ル、31は8038Gcpuのレジ′スタ構成を
もとにレジ゛スタの割当を行なう8038G用レジ゛ス
タ処理部、 311は803811iレジ゛スタ処理
部の号ブシステムであり、 8038Gcpuの仕様
、関数内におけるレジ゛スタの使用方法、及び、レジ゛
スタの使用状態のテ°−夕をもとに、しレジスタ変数に
対して実際のレジ゛スタを割り当てるレジ゛スタ割当部
、 312は8038Gcpuのレジ゛スタ構成、関数
内におけるしレジスタの使用方法、及び、レジ゛スタの
使用状態をまとめた803811i用レジ゛スタテーフ
゛ル、 32は8038G用レジ゛スタ処理部によって
レジ゛スタを決定され、完成したr s のシンネ゛ル
テーフ゛ルである。
ント°におけるレジ゛スタ処理部の働きを示したもので
ある。同図において、30は実際にレジ゛スタが割り当
てられていないしジスク変数rsをアをンブラ言語非依
存部5内のテ′−夕として表現したrsのシンネ°ルテ
ーフ′ル、31は8038Gcpuのレジ′スタ構成を
もとにレジ゛スタの割当を行なう8038G用レジ゛ス
タ処理部、 311は803811iレジ゛スタ処理
部の号ブシステムであり、 8038Gcpuの仕様
、関数内におけるレジ゛スタの使用方法、及び、レジ゛
スタの使用状態のテ°−夕をもとに、しレジスタ変数に
対して実際のレジ゛スタを割り当てるレジ゛スタ割当部
、 312は8038Gcpuのレジ゛スタ構成、関数
内におけるしレジスタの使用方法、及び、レジ゛スタの
使用状態をまとめた803811i用レジ゛スタテーフ
゛ル、 32は8038G用レジ゛スタ処理部によって
レジ゛スタを決定され、完成したr s のシンネ゛ル
テーフ゛ルである。
第11図において、アtンフ゛う言語非依存部5は、C
i−スを読み込んだ時点で、まだ実際にレジ゛スタが割
り当てられていないしジスク変数rsの未完成のシンネ
゛ルテーフ゛ル30を作成している。この処理は、68
000用Cコンパイラフロントエンド い。803811i用レジ゛スタ処理部31内のレジ゛
スタ割当部311は、8038G用レジ゛スタテーブル
312を参照してrsに対して実際のνジスタを割り当
てる。この場合、tイス゛が2ハ゛イトのレジ゛スタs
iが空いているので、rsにはsiが割り当てられる。
i−スを読み込んだ時点で、まだ実際にレジ゛スタが割
り当てられていないしジスク変数rsの未完成のシンネ
゛ルテーフ゛ル30を作成している。この処理は、68
000用Cコンパイラフロントエンド い。803811i用レジ゛スタ処理部31内のレジ゛
スタ割当部311は、8038G用レジ゛スタテーブル
312を参照してrsに対して実際のνジスタを割り当
てる。この場合、tイス゛が2ハ゛イトのレジ゛スタs
iが空いているので、rsにはsiが割り当てられる。
アセンフ゛う言語非依存部5は、その結果を用いて、完
成したrsのシンネ°ルテーブルをっ(る。
成したrsのシンネ°ルテーブルをっ(る。
第8図は、 Ei8000用Cコンハ゛イラフロント
エンドにおける局所変数処理部の働きを示したものであ
る。 同図において、21は1ドレズが決定されてい
ない局所変数iをア七ンフ゛う言語非依存部5内のテ゛
−シとして表現し た i のシンネ゛ルテーブル、
2 2 は68000cpuの仕様と)。
エンドにおける局所変数処理部の働きを示したものであ
る。 同図において、21は1ドレズが決定されてい
ない局所変数iをア七ンフ゛う言語非依存部5内のテ゛
−シとして表現し た i のシンネ゛ルテーブル、
2 2 は68000cpuの仕様と)。
ロク°ラミンク゛言語実現ホ゛I乃−をもとに局所変数
のアトルスを求め必要なスタックの量を求めるG800
0用局所変数処理部、221はIli8000用局所変
数処理部の号ブシステムであり、局所変数の型、G80
00cpuの仕様、及び、関数の実現ポリシーをもとに
必要なスタックの量を算出するスタック使用量算出部、
222はEi8000cpuの仕様と局所変数に必要な
スタック量とから、局所変数のアドレスを算出する局所
変;にアドレス算出部、223はGIIlooOcpu
の主記憶−レシ′スタ間のテ゛−夕並びの仕様(エンテ
“イアンという)とスタックを使用するときの単位(ハ
゛ウンタ′す)をまとめたssooo用局所変数決定情
報、23は[i8000用局所変数処理部によって7)
’ l/スが計算され、完成したi のシンホ゛ルテー
ブルである。
のアトルスを求め必要なスタックの量を求めるG800
0用局所変数処理部、221はIli8000用局所変
数処理部の号ブシステムであり、局所変数の型、G80
00cpuの仕様、及び、関数の実現ポリシーをもとに
必要なスタックの量を算出するスタック使用量算出部、
222はEi8000cpuの仕様と局所変数に必要な
スタック量とから、局所変数のアドレスを算出する局所
変;にアドレス算出部、223はGIIlooOcpu
の主記憶−レシ′スタ間のテ゛−夕並びの仕様(エンテ
“イアンという)とスタックを使用するときの単位(ハ
゛ウンタ′す)をまとめたssooo用局所変数決定情
報、23は[i8000用局所変数処理部によって7)
’ l/スが計算され、完成したi のシンホ゛ルテー
ブルである。
第8図において、ア七ンブラ言語非依存部5は、Cソー
スを読み込んだ時点で、アドレスが定まっていない変数
iの未完成のシンホ゛ルテーフ゛ル21を作成している
。
スを読み込んだ時点で、アドレスが定まっていない変数
iの未完成のシンホ゛ルテーフ゛ル21を作成している
。
この処理は、アtンブラ言語に依存しない。88000
用局所変数処理部22内のスタック使用量算出部22+
は、68000用局所変数アドレス決定情報223のう
ち、スタックのハ゛ウンダリと、局所変数のテ°ータ長
から、関数subにおけるスタック使用量を計算する。
用局所変数処理部22内のスタック使用量算出部22+
は、68000用局所変数アドレス決定情報223のう
ち、スタックのハ゛ウンダリと、局所変数のテ°ータ長
から、関数subにおけるスタック使用量を計算する。
これは、次のように計算できる。
(関数内で使用するスタック■)
=[新たに宣言された局所変数のテ゛ータ長]+(以前
に宣言された局所変数のためのスタックJil )(但
し、ここで、[コは、スタフクハ゛ウンタ゛り単位の切
上げを意味する6) 第8図の場合は、次のようになる。
に宣言された局所変数のためのスタックJil )(但
し、ここで、[コは、スタフクハ゛ウンタ゛り単位の切
上げを意味する6) 第8図の場合は、次のようになる。
(関数内で使用するスフツク量):Q+4=48800
0用局所変数アドレス算出部222は、スタック使用量
と、G3000cpuのエンテ°イアンの情報とから局
所変数iのアト。
0用局所変数アドレス算出部222は、スタック使用量
と、G3000cpuのエンテ°イアンの情報とから局
所変数iのアト。
レス (フレームポインタから のオフセット) を算
出する。 88000cpuがリトルエンテ°イアンで
あるという情報から、これは、次のようにして求められ
る。
出する。 88000cpuがリトルエンテ°イアンで
あるという情報から、これは、次のようにして求められ
る。
(局所変数のアドレス)
=−(新たに宣言された局所変数のテ゛−タ長)+[以
前に宣言された局所変数のためのスタック量)第8図の
場合は、次のようになる。
前に宣言された局所変数のためのスタック量)第8図の
場合は、次のようになる。
(局所変数のアト“レス)
ニー1+0
ニーl
アtンブラ言語非依存部5は、その結果を用いて、完成
した iのシンネ°ルテーフ゛ル23をつくる。 iの
アト°シスからiのシンネ°ルテーフ゛ルを完成させる
処理も、 アtンフ゛う言語に依存しない。
した iのシンネ°ルテーフ゛ル23をつくる。 iの
アト°シスからiのシンネ°ルテーフ゛ルを完成させる
処理も、 アtンフ゛う言語に依存しない。
以上のiのシンネ°ルテーブル構成過程において、 ス
タック使用量算出と局所変数アト°シス算出以外は、ア
tンフ゛う言語に依存しない。 そこで、803gB
cpu用局所変数処理の部分だけを開発しytンブラ言
語非依存部5に結合することで、局所変数処理をおこな
うことができる。
タック使用量算出と局所変数アト°シス算出以外は、ア
tンフ゛う言語に依存しない。 そこで、803gB
cpu用局所変数処理の部分だけを開発しytンブラ言
語非依存部5に結合することで、局所変数処理をおこな
うことができる。
第12図においてこれを示す。
第 12図は、 8038G用Cコンハ゛イラフロント
エンドにおける局所変数処理部の働きを示したものであ
る。同図において、33はアト°レスが決定されていな
い局所変数iをアセンブラ言語非依存部5内のテ゛−夕
として表現した i のシンネ°ルテーブル、 34
は80388cpuの仕様とフ。
エンドにおける局所変数処理部の働きを示したものであ
る。同図において、33はアト°レスが決定されていな
い局所変数iをアセンブラ言語非依存部5内のテ゛−夕
として表現した i のシンネ°ルテーブル、 34
は80388cpuの仕様とフ。
Uり°ラミンク゛言語の実現ネ°リシーをもとに局所変
数のアト。
数のアト。
レスを求め必要なスタックの量を求める8038G用局
所変数処理部、341は8038G用局所変数処理部の
号ブシステムであり、局所変数の型、803811cp
uの仕様、及び、関数の実現ネ°リシーをもとに必要な
スタックの量を算出するスタック使用量算出部、342
は80388cpuの仕様と局所変数に必要なスタック
量とから、局所変数のアドレスを算出する局所変数アト
°レス算出部、343は80386cpuの主記憶・し
ジスタ間のテ°−り並びの仕様(Iンテ°イアンという
)とスタックを使用するときの単位(バウンタ。
所変数処理部、341は8038G用局所変数処理部の
号ブシステムであり、局所変数の型、803811cp
uの仕様、及び、関数の実現ネ°リシーをもとに必要な
スタックの量を算出するスタック使用量算出部、342
は80388cpuの仕様と局所変数に必要なスタック
量とから、局所変数のアドレスを算出する局所変数アト
°レス算出部、343は80386cpuの主記憶・し
ジスタ間のテ°−り並びの仕様(Iンテ°イアンという
)とスタックを使用するときの単位(バウンタ。
す)をまとめた80381i用局所変数決定情報、35
は8038[i用局所変数処理部によってアト°レスが
計算され、完成したi のシンネ゛ルテーフ゛ルである
。
は8038[i用局所変数処理部によってアト°レスが
計算され、完成したi のシンネ゛ルテーフ゛ルである
。
第12図において、アtンブラ言語非依存部5は、Ci
−スを読み込んだ時点で、アト°レスが定まっていない
変数iの未完成のシンボルテーフ゛ル33を作成してい
る。
−スを読み込んだ時点で、アト°レスが定まっていない
変数iの未完成のシンボルテーフ゛ル33を作成してい
る。
11i8000 CコンパイラフロントIント°同様、
こ の処理は、 アtンフ゛う言語に依存しない。
こ の処理は、 アtンフ゛う言語に依存しない。
8038G用局所変数処理部34内のスタック使用量算
出部341は、8038fi用局所変数アト°レス決定
情報343のうち、 スタックのバウンダりと、 局所
変数のテ°−タ長から、関数subにおけるスタック使
用量を計算する。 これは、次のように計算できる。
出部341は、8038fi用局所変数アト°レス決定
情報343のうち、 スタックのバウンダりと、 局所
変数のテ°−タ長から、関数subにおけるスタック使
用量を計算する。 これは、次のように計算できる。
(関数内で使用するスタック量)
=[新たに宣言された局所変数のテ°−タ長]+(以前
に宣言された局所変数のためのスタック量)(但し、
ここで、 [コ は、 スタフクバウンダリ単位の切
上げを意味する。) 第12図の場合は、次のようになる。
に宣言された局所変数のためのスタック量)(但し、
ここで、 [コ は、 スタフクバウンダリ単位の切
上げを意味する。) 第12図の場合は、次のようになる。
(関数内で使用するスタック量)
=0+4
=4
8038H用局所変数アドレス算出部342は、 スタ
ック使用量と、80386cpuのIンテ°イアンの情
報とから局所変数lのアト。
ック使用量と、80386cpuのIンテ°イアンの情
報とから局所変数lのアト。
レス (フレームポインタからのオフセット) を算出
する。 80388cpuがヒ゛フク°Iンテ°
イ7ンであるという情報から、 これは、次のようにし
て求められる。
する。 80388cpuがヒ゛フク°Iンテ°
イ7ンであるという情報から、 これは、次のようにし
て求められる。
(局所変数のアト°レス)
ニー[新たに宣言された局所変数のテ゛−タ長]+(以
前に宣言された局所変数のためのスタック量)(但し、
ここで、 [コ は、 スタフクバウンダリ単位の
切上げを意味する。) 第8図の場合は、次のようになる。
前に宣言された局所変数のためのスタック量)(但し、
ここで、 [コ は、 スタフクバウンダリ単位の
切上げを意味する。) 第8図の場合は、次のようになる。
(局所変数の7ト°レス)
ニー4+9
ニー4
アセンブラ言語非依存部5は、その結果を用いて、完成
したiのシンネ°ルテーブル35をつくる。
したiのシンネ°ルテーブル35をつくる。
第4図において、 11は、(トa−ラ88000用ア
tンブラソース9と、 インテル803811i用アt
ンフ“ラソース10との共通の構造を示したものである
。
tンブラソース9と、 インテル803811i用アt
ンフ“ラソース10との共通の構造を示したものである
。
第9図は、 esooo用Cコンハ゛イラフロントエン
ト°における定型切処理部の働きを示したものである。
ト°における定型切処理部の働きを示したものである。
同図において、24はfi8000用アtンフ゛う
の特徴と関数の実現ネ゛リシーをも と に、 アt
ンフ゛ラソースのファイルへフタ゛、 ファイルフッ
タ、関数へフダ、及び、関数フックを生成するl1i8
000用定型句処理部、24Iはesooo用定型句処
理部の号ブシステムであ リ、 Cソースツブ0り°
ラムのファイル名から[18000アtンフ゛うのファ
イルへフタ゛ Oファイルフッタを生成するG3000
用フアイルへフタ゛ ・ フック生成フィルタ、 2
42は関数名からesoooアtンフ゛うの関数へフタ
゛ ・ フックを生成する88000用関数へ)ダ ・
フック生成フィルタ、25はesooo用定型句処理
部によって、生成されたeeooo用定型句、251.
252.253.254はそれぞれ、68000用定型
句25のうちのファイルへフタ゛、 関数へフタ゛、
関数フッタ、 及び、 ファイルフッタである
。
の特徴と関数の実現ネ゛リシーをも と に、 アt
ンフ゛ラソースのファイルへフタ゛、 ファイルフッ
タ、関数へフダ、及び、関数フックを生成するl1i8
000用定型句処理部、24Iはesooo用定型句処
理部の号ブシステムであ リ、 Cソースツブ0り°
ラムのファイル名から[18000アtンフ゛うのファ
イルへフタ゛ Oファイルフッタを生成するG3000
用フアイルへフタ゛ ・ フック生成フィルタ、 2
42は関数名からesoooアtンフ゛うの関数へフタ
゛ ・ フックを生成する88000用関数へ)ダ ・
フック生成フィルタ、25はesooo用定型句処理
部によって、生成されたeeooo用定型句、251.
252.253.254はそれぞれ、68000用定型
句25のうちのファイルへフタ゛、 関数へフタ゛、
関数フッタ、 及び、 ファイルフッタである
。
第9図において、アtンブラ言語非依存部5は、Cソー
スを読み込んだ時点で、ソースファイル名と、関数名と
を内部テ゛−夕として保持している。 この処理はア
tンフ゛う言語に依存しない。 l1i8000用
フアイルへフタ゛ ・ フッタ生成フィルタは、 フ
ァイル名から68000用定型句25のファイルへフタ
゛251・フック254を生成する。 一方、680
00用関数へフタ゛ ・ フック生成フィルタは、 関
数名から適当な関数ヘッダ゛252・フック253を生
成する。
スを読み込んだ時点で、ソースファイル名と、関数名と
を内部テ゛−夕として保持している。 この処理はア
tンフ゛う言語に依存しない。 l1i8000用
フアイルへフタ゛ ・ フッタ生成フィルタは、 フ
ァイル名から68000用定型句25のファイルへフタ
゛251・フック254を生成する。 一方、680
00用関数へフタ゛ ・ フック生成フィルタは、 関
数名から適当な関数ヘッダ゛252・フック253を生
成する。
以上のファイルへフタ゛ ・ フック生成、 関数へ
フタ“ ・ フック生成において、アtンフ゛う言語に
依存する処理は、各フィルタ部に局在させることができ
、フy(ル名、関数名を読み込む処理は、アtンフ゛う
言語に依存しない処理として分離できる。 そして、
68000用アtンフ゛ラソース9と80381i用ア
をンフ゛ラソースIOとは、共通の構造IIをもつ。
フタ“ ・ フック生成において、アtンフ゛う言語に
依存する処理は、各フィルタ部に局在させることができ
、フy(ル名、関数名を読み込む処理は、アtンフ゛う
言語に依存しない処理として分離できる。 そして、
68000用アtンフ゛ラソース9と80381i用ア
をンフ゛ラソースIOとは、共通の構造IIをもつ。
そこで、803BGcpu用定型句の処理の部分だけを
開発してアtンフ゛う言語非依存部5に結合することで
、定型句処理をおこなうことができる。
開発してアtンフ゛う言語非依存部5に結合することで
、定型句処理をおこなうことができる。
第13図においてこれを示す。
第 13図は、 8038G用Cコンパイラフロント
エンド”における定型句処理部の働きを示したものであ
る。 同図において、36は803H用アtンフ゛う
の特徴と関数の実現ネ°リシーをも とに、 アtン
フ゛ラソースのファイルへフタ′、 ファイルフッタ
、関数へ)ダ、及び、関数フッタを生成する8038G
用定型句処理部、361は803BEi用定型句処理部
の号フ。
エンド”における定型句処理部の働きを示したものであ
る。 同図において、36は803H用アtンフ゛う
の特徴と関数の実現ネ°リシーをも とに、 アtン
フ゛ラソースのファイルへフタ′、 ファイルフッタ
、関数へ)ダ、及び、関数フッタを生成する8038G
用定型句処理部、361は803BEi用定型句処理部
の号フ。
システムであり、 Cソースフ′ロク゛ラムのファイ
ル名から803887tンブラのファイルへフダ ・
ファイルフッタを生成する8038G用フアイルへフタ
゛ ・ フック生成フィル7、 3B2 は関数名か
ら8038Gアtンブラの関数へフタ゛拳フフタを生成
する8038fi用関数へフダ・フック生成フィルタ、
37は8038fi用定型句処理部によって生成される
8038G用定型句、371.372.373.374
はそれぞれ、803811i用定型句のうちのファイル
へフダ、 関数へフタ′、 関数フック、 及び
、 ファイルフッタである。
ル名から803887tンブラのファイルへフダ ・
ファイルフッタを生成する8038G用フアイルへフタ
゛ ・ フック生成フィル7、 3B2 は関数名か
ら8038Gアtンブラの関数へフタ゛拳フフタを生成
する8038fi用関数へフダ・フック生成フィルタ、
37は8038fi用定型句処理部によって生成される
8038G用定型句、371.372.373.374
はそれぞれ、803811i用定型句のうちのファイル
へフダ、 関数へフタ′、 関数フック、 及び
、 ファイルフッタである。
第13図において、アtンフ゛う言語非依存部5は、C
ソースを読み込んだ時点で、 コンパイルすべきファイ
ル名と、関数名とを内部テ゛−夕として保持している。
ソースを読み込んだ時点で、 コンパイルすべきファイ
ル名と、関数名とを内部テ゛−夕として保持している。
esooo用Cコンハ“イラフロントエンド同様、
こ の処理は、 アをンフ゛う言語に依存しない。
8038G用フアイルへフダ −フッタ生成フィルタ3
61は、 ファイル名から80386用アtンフ゛ラ
ソース37のファイルへフタ“37Iψ1フタ374を
生成する。一方、803811i用関数へフタ。
こ の処理は、 アをンフ゛う言語に依存しない。
8038G用フアイルへフダ −フッタ生成フィルタ3
61は、 ファイル名から80386用アtンフ゛ラ
ソース37のファイルへフタ“37Iψ1フタ374を
生成する。一方、803811i用関数へフタ。
フッタ生成フィルタ362は、関数名から適当な関数へ
フダ372・フック373を生成する。
フダ372・フック373を生成する。
以上述べたよ うに、 803811i用のコンパイ
ラフロントエンド開発においては、過去に開発の完了し
ていたアtンフ゛う言語非依存部5をそのまま使うこと
によって、新しく開発する部分を80386用部品62
のみにとどめることができ、大幅に開発工数を削減する
ことができる。
ラフロントエンド開発においては、過去に開発の完了し
ていたアtンフ゛う言語非依存部5をそのまま使うこと
によって、新しく開発する部分を80386用部品62
のみにとどめることができ、大幅に開発工数を削減する
ことができる。
発明の詳細
な説明したように、本発明によれば、対象となる計算機
向き言語が与えられたとき、速やかに、原始プログラム
から対象の計算機向き言語へのコンパイラのフロントエ
ンド°が得られ、その実用的効果は大きい。
向き言語が与えられたとき、速やかに、原始プログラム
から対象の計算機向き言語へのコンパイラのフロントエ
ンド°が得られ、その実用的効果は大きい。
第1図は本発明の一実施例のコンパイラ構成方式におい
てコンパイラフロントエンド 2図はフ゛ロク゛ラミンク”言語Cで書かれたソースブ
ロク゛ラムの例を示すプログラム図、第3図は第2図の
Cソースブロク゛ラムから得られるア七ンブラソースを
示すプログラム図、第4図はモトローラ68000用ア
tンフ′ラソースとインテル8038[i用ア七ンブラ
ソースとの共通の構造を示す構造図、第5図は干トロー
ラ68000cpuとインテル8038Gcpuにおけ
るスタックフレームの構造を示す構造図、第6図はee
ooo用CコンバイラフロントIント°におけるアト°
レス処理部の働きを示すブロック図、 第7図はeao
oo用Cコン八°イラへロントエンドにおけるしジスタ
処理部の働きを示すブロック図、第8図は68O00用
C:I刀\゛イラフロントエント°における局所変数処
理部の働きを示すブロック図、第9図は88000用C
コンハ“イラフロントエンドにおける定型句処理部の働
きを示すブロッ り図、 第 10図は8038fi用
Cコンパイラフロントエンド°におけるアドレス処理部
の働きを示すブロック図、第11図は8Q3811i用
Cコンパイラフロントエンド°におけるしジスタ処理部
の働きを示すブロック図、第12図は803811i用
Cコンパイラフロントエンド°における局所変数処理部
の働きを示すブロック図、第13図は8038G用Cコ
ンパイラフロントエンド°における定型句処理部の曇き
を示すブロック図、第14図は典型的なコンパイラの構
成を示すブロック図、第15図は従来の方式におけるコ
ンパイラフロントエンド°の構成過程を示す構造図であ
る。 1・・・C言語の仕様、2・・・ytンフ゛う言語の仕
様、3・・・コンパイラフロントエンドのアtンブラ言
語に依存しない部分の内部仕様、4・・・アtンブラ言
語の処理をする各部品の内部仕様、 5・・・Cコン
パイラフロントエント°のアtンブラ言語に依存しない
部分、51・・・アドレス処理、52・・・レジスタ処
理、53・・・局所変数処理、54・・・定型句処理、
6・・・7tンブラ言語の処理をする各部品、61・・
・モトローラesooo用部品、 62・・・インテ
ル8038G用部品、7・・・Cコンパイラのフロント
エンド、 8 ・・・Cソースフ゛ロケ°ラム、9・
・・干トローラG3000用アtンフ゛ラソース、
10 ・・・インテル8038B用アをンブラソース、
11 ・・・アをンブラソース共通の構造、 1
2・・・Hooocpuにおけるスフフケフレームの構
造、 13・・・8038ficpuにおけるスタッ
クフレームの構造、 14・・・e8ooo用Cコン
パイラフロントエンド 8000用Cコンハ゛イラフロントエント°における未
完成のC のシン参°ルテーフ゛ル、 1 6・・・
esooo用アト°レス処理部、 1 6 1 ・・
・G8Q00用アドレス算出部、 1 6 2・・・
lli800G用引数アドレス決定情報、 1 7・
・・6800G用Cコンパイラフロントエンド°におけ
る完成した C のシンネ°ルテーブル、 1 8・
・・68000用Cコンハ゛イラフロントIンドにおけ
る未完成の r S のシンネ°ルテーブル、1 9
・・・li8000用レジ゛スタ処理部、 1 9
1 ・・・esooo用レジ。 スタ割当部、 1 9 2・・・88000用レジ゛
スタテーブル、 2 0・・・68000用Cコンパ
イラフロントエンド°における完成した r S のシ
ンネ゛ルテーフ゛ル、 2 1 ・・・esooo用
cコンパイラフロントエンド°における未完成のiのシ
ンネ°ルテーフ゛ル、22・・・88000用局所変数
処理部、221・・・esooo用ス”tフケ使用量算
出部、222・・・88000用局所変数アト°レス算
出部、 223・・・eeooo用局所変数アドレス決
定情報、23・・・Ei8000用Cコンハ゛イラフロ
ントエンドにおける完成された i のシンホ゛ルテー
フ゛ル、24・・・88000用定型句処理部、241
・・・G8000用ファイルへフタ゛ ・フッタ生成フ
ィルタ、 2 4 2・・・fi800G用関数へフ
タ゛・フック生成フィルタ、 2 5・・・G8OQ
O用定型句、 2 5 1・・・G8000用アをン
ブラソースのファイルへフタ°、 2 5 2・・・
6800θ用アtンフ゛ラソースの関数へフタ゛、
2 5 3・・・G8000用ア七ン7゛ラソースの関
数フック、 2 5 4・・・esooo用アtンブ
ラソースのファイルフッタ、 2 6・・・8038e
用Cコンパイラフロントエンド°における関数subの
引数リスト、 2 7・・・8038G用Cコンパイ
ラフロントエンド°における未完成のCのシンネ゛ルテ
ーブル、 28・・・8038e用アト°レス処理部、
2 8 1・・・8038[i用アト°レス算出部
、 2 82・・・8038fi用引数アトルス決定
情報、 29・・・110386用Cコン八゛イラフロ
ントエンドにおける完成した C のシンネ゛ルテーフ
゛ル、3 0・・・8038Ei用Cコンハ“イラフロ
ントエント°における未完成のr s のシンネ”ルテ
ーフ゛ル、 3 1 ・・・803811i用レジ゛
スク処理部、3 1 1・・・803811i用しジス
ク割当部、 312・・・803811i用しジスタテ
−プル ける完成したrSのシンネ゛ルテーブル、 33・・・
803811i用Cコンパイラフロントエンド°におけ
る未完成の i のシンホ゛ルテーブル。 34・・・8038G用局所変数処理部、341・・・
8038G用スタフ’)使用量算出部、342・・・8
038B用局所変数アト。 レス算出部、 343・・・8038G用局所変数7)
’ l/ス決定情報、 3 5・・・8038G用C
コンパイラフロントエンド°における完成されたiのシ
ンネ°ルテーブル、36・・・8038[を用定型句処
理部、 3 6 1 ・・・8038B用フアイルへ
)ダ・フッタ生成フィルタ、 3 62・・・803
811f用関数へフダ・フッタ生成フィルタ、 3
7・・・8038G用定型句、 3 7 1 ・・・
803817用アtンフ゛ラソースのファイルへフタ゛
、3 7 2・・・8038B用アtンブラソースの関
数へフタ゛、 3 7 3・・・8038G用アtン
フ゛ラソースの関数フック、 3 7 4・・・80
38Ei用アセンブラソースのファイルフッタ、 3
8・・・高級ブロク°ラミンク°言語で書かれたソー
スブロケ°ラム、 3 9 ・・・コンパイラのフロ
ントエンド°、4 0・・・コンパイラフロントエンド
41・・・コンパイラのコート°生成部、 42・・・
目的計算機言語フ゛ロケ゛ラム、 4 3・・・高級
フ“ロク゛ラミンク゛言語の仕様、44・・・計算機向
き言語の仕様、 45・・・コンパイラフロントエンド 代理人の氏名 弁理士 粟野重孝 はか1名第 図 第 図 インテルδ感〜屑アセンヅラゾース 第 図 セす a 図 第 図 第 図 第 図 第 図 68θOθ湖定型匂 =2 図 第10図 第12図 !14図 第15図
てコンパイラフロントエンド 2図はフ゛ロク゛ラミンク”言語Cで書かれたソースブ
ロク゛ラムの例を示すプログラム図、第3図は第2図の
Cソースブロク゛ラムから得られるア七ンブラソースを
示すプログラム図、第4図はモトローラ68000用ア
tンフ′ラソースとインテル8038[i用ア七ンブラ
ソースとの共通の構造を示す構造図、第5図は干トロー
ラ68000cpuとインテル8038Gcpuにおけ
るスタックフレームの構造を示す構造図、第6図はee
ooo用CコンバイラフロントIント°におけるアト°
レス処理部の働きを示すブロック図、 第7図はeao
oo用Cコン八°イラへロントエンドにおけるしジスタ
処理部の働きを示すブロック図、第8図は68O00用
C:I刀\゛イラフロントエント°における局所変数処
理部の働きを示すブロック図、第9図は88000用C
コンハ“イラフロントエンドにおける定型句処理部の働
きを示すブロッ り図、 第 10図は8038fi用
Cコンパイラフロントエンド°におけるアドレス処理部
の働きを示すブロック図、第11図は8Q3811i用
Cコンパイラフロントエンド°におけるしジスタ処理部
の働きを示すブロック図、第12図は803811i用
Cコンパイラフロントエンド°における局所変数処理部
の働きを示すブロック図、第13図は8038G用Cコ
ンパイラフロントエンド°における定型句処理部の曇き
を示すブロック図、第14図は典型的なコンパイラの構
成を示すブロック図、第15図は従来の方式におけるコ
ンパイラフロントエンド°の構成過程を示す構造図であ
る。 1・・・C言語の仕様、2・・・ytンフ゛う言語の仕
様、3・・・コンパイラフロントエンドのアtンブラ言
語に依存しない部分の内部仕様、4・・・アtンブラ言
語の処理をする各部品の内部仕様、 5・・・Cコン
パイラフロントエント°のアtンブラ言語に依存しない
部分、51・・・アドレス処理、52・・・レジスタ処
理、53・・・局所変数処理、54・・・定型句処理、
6・・・7tンブラ言語の処理をする各部品、61・・
・モトローラesooo用部品、 62・・・インテ
ル8038G用部品、7・・・Cコンパイラのフロント
エンド、 8 ・・・Cソースフ゛ロケ°ラム、9・
・・干トローラG3000用アtンフ゛ラソース、
10 ・・・インテル8038B用アをンブラソース、
11 ・・・アをンブラソース共通の構造、 1
2・・・Hooocpuにおけるスフフケフレームの構
造、 13・・・8038ficpuにおけるスタッ
クフレームの構造、 14・・・e8ooo用Cコン
パイラフロントエンド 8000用Cコンハ゛イラフロントエント°における未
完成のC のシン参°ルテーフ゛ル、 1 6・・・
esooo用アト°レス処理部、 1 6 1 ・・
・G8Q00用アドレス算出部、 1 6 2・・・
lli800G用引数アドレス決定情報、 1 7・
・・6800G用Cコンパイラフロントエンド°におけ
る完成した C のシンネ°ルテーブル、 1 8・
・・68000用Cコンハ゛イラフロントIンドにおけ
る未完成の r S のシンネ°ルテーブル、1 9
・・・li8000用レジ゛スタ処理部、 1 9
1 ・・・esooo用レジ。 スタ割当部、 1 9 2・・・88000用レジ゛
スタテーブル、 2 0・・・68000用Cコンパ
イラフロントエンド°における完成した r S のシ
ンネ゛ルテーフ゛ル、 2 1 ・・・esooo用
cコンパイラフロントエンド°における未完成のiのシ
ンネ°ルテーフ゛ル、22・・・88000用局所変数
処理部、221・・・esooo用ス”tフケ使用量算
出部、222・・・88000用局所変数アト°レス算
出部、 223・・・eeooo用局所変数アドレス決
定情報、23・・・Ei8000用Cコンハ゛イラフロ
ントエンドにおける完成された i のシンホ゛ルテー
フ゛ル、24・・・88000用定型句処理部、241
・・・G8000用ファイルへフタ゛ ・フッタ生成フ
ィルタ、 2 4 2・・・fi800G用関数へフ
タ゛・フック生成フィルタ、 2 5・・・G8OQ
O用定型句、 2 5 1・・・G8000用アをン
ブラソースのファイルへフタ°、 2 5 2・・・
6800θ用アtンフ゛ラソースの関数へフタ゛、
2 5 3・・・G8000用ア七ン7゛ラソースの関
数フック、 2 5 4・・・esooo用アtンブ
ラソースのファイルフッタ、 2 6・・・8038e
用Cコンパイラフロントエンド°における関数subの
引数リスト、 2 7・・・8038G用Cコンパイ
ラフロントエンド°における未完成のCのシンネ゛ルテ
ーブル、 28・・・8038e用アト°レス処理部、
2 8 1・・・8038[i用アト°レス算出部
、 2 82・・・8038fi用引数アトルス決定
情報、 29・・・110386用Cコン八゛イラフロ
ントエンドにおける完成した C のシンネ゛ルテーフ
゛ル、3 0・・・8038Ei用Cコンハ“イラフロ
ントエント°における未完成のr s のシンネ”ルテ
ーフ゛ル、 3 1 ・・・803811i用レジ゛
スク処理部、3 1 1・・・803811i用しジス
ク割当部、 312・・・803811i用しジスタテ
−プル ける完成したrSのシンネ゛ルテーブル、 33・・・
803811i用Cコンパイラフロントエンド°におけ
る未完成の i のシンホ゛ルテーブル。 34・・・8038G用局所変数処理部、341・・・
8038G用スタフ’)使用量算出部、342・・・8
038B用局所変数アト。 レス算出部、 343・・・8038G用局所変数7)
’ l/ス決定情報、 3 5・・・8038G用C
コンパイラフロントエンド°における完成されたiのシ
ンネ°ルテーブル、36・・・8038[を用定型句処
理部、 3 6 1 ・・・8038B用フアイルへ
)ダ・フッタ生成フィルタ、 3 62・・・803
811f用関数へフダ・フッタ生成フィルタ、 3
7・・・8038G用定型句、 3 7 1 ・・・
803817用アtンフ゛ラソースのファイルへフタ゛
、3 7 2・・・8038B用アtンブラソースの関
数へフタ゛、 3 7 3・・・8038G用アtン
フ゛ラソースの関数フック、 3 7 4・・・80
38Ei用アセンブラソースのファイルフッタ、 3
8・・・高級ブロク°ラミンク°言語で書かれたソー
スブロケ°ラム、 3 9 ・・・コンパイラのフロ
ントエンド°、4 0・・・コンパイラフロントエンド
41・・・コンパイラのコート°生成部、 42・・・
目的計算機言語フ゛ロケ゛ラム、 4 3・・・高級
フ“ロク゛ラミンク゛言語の仕様、44・・・計算機向
き言語の仕様、 45・・・コンパイラフロントエンド 代理人の氏名 弁理士 粟野重孝 はか1名第 図 第 図 インテルδ感〜屑アセンヅラゾース 第 図 セす a 図 第 図 第 図 第 図 第 図 68θOθ湖定型匂 =2 図 第10図 第12図 !14図 第15図
Claims (1)
- 高級プログラミング言語でかかれた原始プログラムから
特定の計算機向き目的プログラムへのコンパイラを開発
する工程において、対象の計算機向き言語のための処理
をする部品群と、特定の計算機向き言語に依存しない構
文解析部とを別個に準備し、前記部品の中より、対象と
なる計算機向き言語の処理をするのに適当な部品を選択
し、それらを前記構文解析部に結合することによって、
複数の計算機向き言語のコンパイラの開発をすることを
特徴とするコンパイラ構成方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP63287972A JPH02133826A (ja) | 1988-11-15 | 1988-11-15 | コンパイラ構成方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP63287972A JPH02133826A (ja) | 1988-11-15 | 1988-11-15 | コンパイラ構成方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH02133826A true JPH02133826A (ja) | 1990-05-23 |
Family
ID=17724136
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP63287972A Pending JPH02133826A (ja) | 1988-11-15 | 1988-11-15 | コンパイラ構成方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH02133826A (ja) |
Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS6184740A (ja) * | 1984-10-03 | 1986-04-30 | Hitachi Ltd | 汎用オブジエクトコ−ド生成方式 |
-
1988
- 1988-11-15 JP JP63287972A patent/JPH02133826A/ja active Pending
Patent Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS6184740A (ja) * | 1984-10-03 | 1986-04-30 | Hitachi Ltd | 汎用オブジエクトコ−ド生成方式 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Krall | Efficient JavaVM just-in-time compilation | |
| Goossens et al. | Loop optimization in register-transfer scheduling for DSP-systems | |
| US7409680B2 (en) | Program code conversion for a register-based program code | |
| JPH02201652A (ja) | プログラム・ソース・コードを変換するシステム | |
| Abrahams et al. | The LISP 2 programming language and system | |
| US7356812B2 (en) | Passing parameters by implicit reference | |
| Reid | The new features of Fortran 2008 | |
| Dewitt | A Machine Independent Approach To The Production Of Optimized Horizontal Microcode. | |
| Gorin et al. | LLVM-based and scalable MPEG-RVC decoder | |
| EP1049007A2 (en) | Method and apparatus for producing a sparse interference graph | |
| JP3049814B2 (ja) | マイクロコンピュータの言語処理装置 | |
| Wansbrough et al. | Simple usage polymorphism | |
| JP4755371B2 (ja) | 計算機システム | |
| Schwans | Tailoring software for multiple processor systems | |
| US6029003A (en) | Method of assigning external variables to memories when compiling source program | |
| JPS6234240A (ja) | デ−タ割付け方式 | |
| Stauber et al. | Resyclator: Transforming CUDA C++ source code into SYCL | |
| Rajan | Automatic synthesis of microprocessors | |
| JPH07129408A (ja) | 言語処理プログラムの実行方式 | |
| Ravindran | Extracting parallelism at compile-time through dependence analysis & cloning techniques in an object-based paradigm | |
| JP3212099B2 (ja) | プリコンパイル処理方式 | |
| JP3192177B2 (ja) | オブジェクト処理装置 | |
| WO2025117071A1 (en) | Efficient utilization of synchronization primitives in a multiprocessor computing system | |
| JP3018783B2 (ja) | コンパイル方式 | |
| Cejtlin et al. | Mathematical theory of multiprocessor control systems and its applications |