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
Application number
JP63287972A
Other languages
English (en)
Inventor
Seiichi Urushibara
漆原 誠一
Yu Uno
宇野 結
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co 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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP63287972A priority Critical patent/JPH02133826A/ja
Publication of JPH02133826A publication Critical patent/JPH02133826A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 産業上の利用分野 本発明は、高級プログラミング言語で記述された原始プ
ログラムを、特定の計算機向き目的プログラムに翻訳す
るコンパイラを、複数の計算機向き言語に対して効率よ
(構成するためのフンバイラ構成方式に関する。
従来の技術 従来、コンパイラは、原始プログラムを入力とし、翻訳
されるもとのプログラミング言語に依存する構文解析処
理と対象計算機における資源の利用方法を規定する処理
とを行って木構造あるいは3番地コードと呼ばれる中間
的なコードを生成するフロントエンドと、その中間的な
コードを対象の計算機向きの目的プログラム言語に変換
するコート°生成部とを作成することによって構成され
ていた。
第14図、第15図は、それぞれ、典型的なコンパイラ
の構成と、そのフロントエンド°を構成する工程の一例
で、38は高級プログラム言語でかかれたソース・プロ
グラム、38は構文解析処理と対象計算機における資源
利用方法を規定する処理を行な うコンハ゛イラフロン
トIント°、  40 はコンパイラフロントIント°
から出力される中間フード、41は中間コードを読み込
み目的計算機向き言語に変換するコンパイラのコート°
生成部、42はコード生成部が出力した目的計算機向き
言語、43は原始プログラムがかかれる高級プログラミ
ング言語の仕様、44は計算機向き言語の仕様、45は
それらのデータから設計されるフロントエンドの内部仕
様を示す。
フロントエンド°の開発において、まず、ソースプログ
ラムがかかれるプログラミング言語の仕様43と、対象
とする計算機向き言語の仕様44が与えられる。
それらをもとに、 コンパイラフロントエンド°の内部
仕様45が設計され、 コンi“イラフロントエント°
33が構成される。 そして、もし、ある特定の計算機
向き言語のためのコンパイラフロントエンド のためのフロントエンド°を得ようとするときも第15
図のような工程を経る必要があった。
発明が解決しようとする課題 しかしながら、上記のような方法で複数の計算機向き言
語に対応するためのコンパイラを構成する場合には、対
象となる計算機向き言語ごとにフロントエンド°をつく
り直し、設計・開発・品質保証をやり直さなければなら
ないなどの生産性の低下をまねいていた。
本発明は、かかる点にかんがみ、特定の計算機向き言語
へのコンバイラフ0ントエントを速やかに構成する方式
を提供するものである。
課題を解決するための手段 本発明は、対象の計算機向き言語のための処理をする部
品と、特定の計算機向き言語に依存しない構文解析部と
を別個に準備し、対象の計算機向き言語のための処理を
する部品のみを対象の計算機の種類に合わせて準備する
ことによって、複数の計算機向き言語へのコンパイラの
開発を容易にするコンパイラ構成方式である。
作   用 特定の計算機向き言語に依存しない構文解析部分は、−
度作成すれば、コンパイラが対象とする計算機向き言語
が複数あっても、再開発の必要がない。また、計算機は
、その特徴(たとえば、レジスタ構成など)や、計算機
向き言語の定型句(たとえば、1つの号)゛ルーチン・
干ジュールの入口と出口を書き表すための計算機向き言
語の列)に従って、少数のグループにわけられるので、
その基準ごとに、計算機向き言語のための処理をする部
品のライブラリを用意し、対象となる計算機の仕様をそ
の基準に照らして、そのライブラリのうちから適切な部
品を選びだし、前記構文解析部に結合する〜ことにより
、コンバイラフ0ントエントを容易に構成することがで
きる。
実施例 第1図は、ブロク゛ラミンク°言語をCとし、計算機向
き言語を、  モトローラ社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ントエント°である。
以上のように構成された本実施例におけるコンハ゛イラ
フロントI訃′の構成工程について説明する。
モトトラ88000のためのコンパイラを開発した際、
まず、プログラミング言語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を得ること
ができる。
68000用Cコンハ゛イラフロントエント°が得られ
ている と きの80386用Cコンパイラフロントエ
ンド”の構成過程の概要は以上であるが、以下、その詳
細について、第2図から第13図までの図を用いて説明
する。
第2図において、8は、)゛ロク゛ラミンク゛言語Cで
かかれたソースフ゛ロク゛ラムの例を示す。
第3図において、9、工0は、それぞれ、ソースブロク
゛ラム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ごが得
られることを示す。
CコンパイラフロントエンドがCソースブロク′ラム8
 を処理した際に解決すべき内容について、アドレス処
理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におけるフレームネ。
インタを保持するレジ゛スタ、 ebl)が、8038
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用アト。
シス処理部1Gによってアドνズが算出され、完成した
Cのシンネ゛ルテーブルである。
第6図において、7tンブラ言語非依存部5は、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ンブラ語に依存しな
い。
以上のCのシンネ°ルテーブル構成過程において、アト
°レス (フレームネ°インタからのオフセット) 計
算以外は、  ア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り
°ラミンク゛言語の実現ネ。
リシーを格納したテーフ゛ルである803811i用引
数アドレス決定情報、 29は8038B用アト°レス
処理部28によってTドしスが算出され、完成したCの
シン本°ルテーブルである。
第10図において、7tンブラ言語非依存部6は、C1
−スブUケ゛ラムを読み込んだ時点で、関数subの引
数リスト26とアドレスが計算されていない未完成のC
のシンネ°ルテーフール27を内部テ°−夕として作成
している。ここまでは、 esooo用Cコンパイラフ
ロントエンド°同様、 ア七ンブラ言語に依存しない処
理である。
8038G用アト°レス処理部28のアドレス算出部2
81は、80386用アドレス決定情報282を参照し
て、803811iに合ったスタックフレーム構造13
を実現するように7ト°レスを算出する。    80
38Gcpuはビフク°エンテ°イアンである (しジ
スク内のテ°−夕を主記憶に転送した際にその下位ハ゛
イトのテ°−タはど低位アト°レスの主記憶上におかれ
る)ので、Cのアドレスは次のように求められる。
(アト°シス)=(ハ゛イアス)+(先にスタックに積
まれている引数の大きさ) −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 のシ
ンネ°ルテーフ゛ルである。
第7図において、アtンブラ言語非依存部5は、Cソー
スを読み込んだ時点で、まだ実際にレジ゛スタが割り当
てられていないレジ゛スタ変数rsの未完成のシンネ゛
ルテーブル18を作成している。この処理は、アtンフ
゛う言語に依存しない。G3000用レジ゛スタ処理部
19内のレジ′スタ割当部l旧は、esooo用レジ゛
スしテーフ゛ル192を参照してrsに対して実際のし
レジスタを割り当てる。この場合、68000用レジ゛
スタテーブル192をみると、 2ハ゛イトの大きさの
レジ゛スタD3が空いているのが判定できるので、レジ
゛スタ割当部191は、D3をrsに割り当てる。アt
ンフ。
う言語非依存部5は、その結果を用いて、完成したrs
  のシンホ ルテ・−フ゛ル20をつ く る。 レ
ジ゛スタ名から r s のシンネ°ルテーフ゛ルを完
成させる処理は、 アtンフ゛う言語に依存しない。
以上のrsのシンネ°ルテーブル構成過程において、レ
ジスタ割当以外は、ア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 のシンネ゛ル
テーフ゛ルである。
第11図において、アtンフ゛う言語非依存部5は、C
i−スを読み込んだ時点で、まだ実際にレジ゛スタが割
り当てられていないしジスク変数rsの未完成のシンネ
゛ルテーフ゛ル30を作成している。この処理は、68
000用Cコンパイラフロントエンド い。803811i用レジ゛スタ処理部31内のレジ゛
スタ割当部311は、8038G用レジ゛スタテーブル
312を参照してrsに対して実際のνジスタを割り当
てる。この場合、tイス゛が2ハ゛イトのレジ゛スタs
iが空いているので、rsにはsiが割り当てられる。
アセンフ゛う言語非依存部5は、その結果を用いて、完
成したrsのシンネ°ルテーブルをっ(る。
第8図は、  Ei8000用Cコンハ゛イラフロント
エンドにおける局所変数処理部の働きを示したものであ
る。  同図において、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 のシンホ゛ルテー
ブルである。
第8図において、ア七ンブラ言語非依存部5は、Cソー
スを読み込んだ時点で、アドレスが定まっていない変数
iの未完成のシンホ゛ルテーフ゛ル21を作成している
この処理は、アtンブラ言語に依存しない。88000
用局所変数処理部22内のスタック使用量算出部22+
は、68000用局所変数アドレス決定情報223のう
ち、スタックのハ゛ウンダリと、局所変数のテ°ータ長
から、関数subにおけるスタック使用量を計算する。
 これは、次のように計算できる。
(関数内で使用するスタック■) =[新たに宣言された局所変数のテ゛ータ長]+(以前
に宣言された局所変数のためのスタックJil )(但
し、ここで、[コは、スタフクハ゛ウンタ゛り単位の切
上げを意味する6) 第8図の場合は、次のようになる。
(関数内で使用するスフツク量):Q+4=48800
0用局所変数アドレス算出部222は、スタック使用量
と、G3000cpuのエンテ°イアンの情報とから局
所変数iのアト。
レス (フレームポインタから のオフセット) を算
出する。 88000cpuがリトルエンテ°イアンで
あるという情報から、これは、次のようにして求められ
る。
(局所変数のアドレス) =−(新たに宣言された局所変数のテ゛−タ長)+[以
前に宣言された局所変数のためのスタック量)第8図の
場合は、次のようになる。
(局所変数のアト“レス) ニー1+0 ニーl アtンブラ言語非依存部5は、その結果を用いて、完成
した iのシンネ°ルテーフ゛ル23をつくる。 iの
アト°シスからiのシンネ°ルテーフ゛ルを完成させる
処理も、 アtンフ゛う言語に依存しない。
以上のiのシンネ°ルテーブル構成過程において、 ス
タック使用量算出と局所変数アト°シス算出以外は、ア
tンフ゛う言語に依存しない。  そこで、803gB
cpu用局所変数処理の部分だけを開発しytンブラ言
語非依存部5に結合することで、局所変数処理をおこな
うことができる。
第12図においてこれを示す。
第 12図は、 8038G用Cコンハ゛イラフロント
エンドにおける局所変数処理部の働きを示したものであ
る。同図において、33はアト°レスが決定されていな
い局所変数iをアセンブラ言語非依存部5内のテ゛−夕
として表現した i のシンネ°ルテーブル、  34
は80388cpuの仕様とフ。
Uり°ラミンク゛言語の実現ネ°リシーをもとに局所変
数のアト。
レスを求め必要なスタックの量を求める8038G用局
所変数処理部、341は8038G用局所変数処理部の
号ブシステムであり、局所変数の型、803811cp
uの仕様、及び、関数の実現ネ°リシーをもとに必要な
スタックの量を算出するスタック使用量算出部、342
は80388cpuの仕様と局所変数に必要なスタック
量とから、局所変数のアドレスを算出する局所変数アト
°レス算出部、343は80386cpuの主記憶・し
ジスタ間のテ°−り並びの仕様(Iンテ°イアンという
)とスタックを使用するときの単位(バウンタ。
す)をまとめた80381i用局所変数決定情報、35
は8038[i用局所変数処理部によってアト°レスが
計算され、完成したi のシンネ゛ルテーフ゛ルである
第12図において、アtンブラ言語非依存部5は、Ci
−スを読み込んだ時点で、アト°レスが定まっていない
変数iの未完成のシンボルテーフ゛ル33を作成してい
る。
11i8000 CコンパイラフロントIント°同様、
  こ の処理は、 アtンフ゛う言語に依存しない。
8038G用局所変数処理部34内のスタック使用量算
出部341は、8038fi用局所変数アト°レス決定
情報343のうち、 スタックのバウンダりと、 局所
変数のテ°−タ長から、関数subにおけるスタック使
用量を計算する。 これは、次のように計算できる。
(関数内で使用するスタック量) =[新たに宣言された局所変数のテ°−タ長]+(以前
に宣言された局所変数のためのスタック量)(但し、 
ここで、  [コ は、 スタフクバウンダリ単位の切
上げを意味する。) 第12図の場合は、次のようになる。
(関数内で使用するスタック量) =0+4 =4 8038H用局所変数アドレス算出部342は、 スタ
ック使用量と、80386cpuのIンテ°イアンの情
報とから局所変数lのアト。
レス (フレームポインタからのオフセット) を算出
する。    80388cpuがヒ゛フク°Iンテ°
イ7ンであるという情報から、 これは、次のようにし
て求められる。
(局所変数のアト°レス) ニー[新たに宣言された局所変数のテ゛−タ長]+(以
前に宣言された局所変数のためのスタック量)(但し、
 ここで、  [コ は、 スタフクバウンダリ単位の
切上げを意味する。) 第8図の場合は、次のようになる。
(局所変数の7ト°レス) ニー4+9 ニー4 アセンブラ言語非依存部5は、その結果を用いて、完成
したiのシンネ°ルテーブル35をつくる。
第4図において、 11は、(トa−ラ88000用ア
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のうちのファイルへフタ゛、  関数へフタ゛、
  関数フッタ、  及び、  ファイルフッタである
第9図において、アtンブラ言語非依存部5は、Cソー
スを読み込んだ時点で、ソースファイル名と、関数名と
を内部テ゛−夕として保持している。  この処理はア
tンフ゛う言語に依存しない。   l1i8000用
フアイルへフタ゛ ・ フッタ生成フィルタは、  フ
ァイル名から68000用定型句25のファイルへフタ
゛251・フック254を生成する。  一方、680
00用関数へフタ゛ ・ フック生成フィルタは、 関
数名から適当な関数ヘッダ゛252・フック253を生
成する。
以上のファイルへフタ゛ ・ フック生成、  関数へ
フタ“ ・ フック生成において、アtンフ゛う言語に
依存する処理は、各フィルタ部に局在させることができ
、フy(ル名、関数名を読み込む処理は、アtンフ゛う
言語に依存しない処理として分離できる。 そして、 
68000用アtンフ゛ラソース9と80381i用ア
をンフ゛ラソースIOとは、共通の構造IIをもつ。
そこで、803BGcpu用定型句の処理の部分だけを
開発してアtンフ゛う言語非依存部5に結合することで
、定型句処理をおこなうことができる。
第13図においてこれを示す。
第 13図は、  8038G用Cコンパイラフロント
エンド”における定型句処理部の働きを示したものであ
る。  同図において、36は803H用アtンフ゛う
の特徴と関数の実現ネ°リシーをも とに、  アtン
フ゛ラソースのファイルへフタ′、  ファイルフッタ
、関数へ)ダ、及び、関数フッタを生成する8038G
用定型句処理部、361は803BEi用定型句処理部
の号フ。
システムであり、  Cソースフ′ロク゛ラムのファイ
ル名から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用関数へフタ。
フッタ生成フィルタ362は、関数名から適当な関数へ
フダ372・フック373を生成する。
以上述べたよ うに、  803811i用のコンパイ
ラフロントエンド開発においては、過去に開発の完了し
ていたア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図

Claims (1)

    【特許請求の範囲】
  1. 高級プログラミング言語でかかれた原始プログラムから
    特定の計算機向き目的プログラムへのコンパイラを開発
    する工程において、対象の計算機向き言語のための処理
    をする部品群と、特定の計算機向き言語に依存しない構
    文解析部とを別個に準備し、前記部品の中より、対象と
    なる計算機向き言語の処理をするのに適当な部品を選択
    し、それらを前記構文解析部に結合することによって、
    複数の計算機向き言語のコンパイラの開発をすることを
    特徴とするコンパイラ構成方式。
JP63287972A 1988-11-15 1988-11-15 コンパイラ構成方式 Pending JPH02133826A (ja)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6184740A (ja) * 1984-10-03 1986-04-30 Hitachi Ltd 汎用オブジエクトコ−ド生成方式

Patent Citations (1)

* Cited by examiner, † Cited by third party
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