JP2003050700A - プログラム変換方法 - Google Patents

プログラム変換方法

Info

Publication number
JP2003050700A
JP2003050700A JP2001238029A JP2001238029A JP2003050700A JP 2003050700 A JP2003050700 A JP 2003050700A JP 2001238029 A JP2001238029 A JP 2001238029A JP 2001238029 A JP2001238029 A JP 2001238029A JP 2003050700 A JP2003050700 A JP 2003050700A
Authority
JP
Japan
Prior art keywords
program
language
translation
subset
class
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
JP2001238029A
Other languages
English (en)
Inventor
Hirohisa Tanaka
裕久 田中
Jiyunko Sayama
旬子 佐山
Toshiyuki Sakata
俊幸 坂田
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 JP2001238029A priority Critical patent/JP2003050700A/ja
Publication of JP2003050700A publication Critical patent/JP2003050700A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】 オブジェクト指向言語で記述されたプログラ
ムに対して効率の良いコードを生成するプログラム変換
方法を実現する。 【解決手段】 仕様決定ステップS105によって入力
プログラムに含まれるクラス情報を解析し、クラスに関
する処理をフルセット仕様とするかサブセット仕様とす
るかを判定して仕様記憶部S106に格納する。中間コ
ード生成ステップS107では仕様記憶部S106を参
照してフルセット仕様のコードあるいはサブセット仕様
のコードを生成する。可能な限りサブセット仕様でコン
パイル可能な処理に変換することによって、生成コード
効率を向上することができる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、オブジェクト指向
言語により記述されたプログラムを目的プログラムに変
換するプログラム変換方法に関する。
【0002】
【従来の技術】組み込み分野でのソフトウェア開発にお
いては、プログラムの規模が大規模化してきており、そ
れに伴い、保守性、再利用性の高いオブジェクト指向言
語C++が組み込み分野でも注目されつつある。
【0003】更に近年、メモリ空間の制約された組み込
み分野向けに、C++に比べてサイズの小さいオブジェ
クトを生成することが出来る組み込み向けオブジェクト
指向言語EC++が提唱されている。EC++の言語仕
様はC++のサブセットとなっており、C++の言語仕
様から多重継承や例外処理などの組み込み分野には適さ
ない仕様を削除することによって、組み込み分野で重要
視されるコードサイズの削減とリアルタイム性を実現で
きるようになっている。
【0004】このように、EC++はC++のサブセッ
トの仕様となっているため、EC++で使用することの
出来ないキーワードや文法をC++コンパイラから削除
することによってEC++コンパイラを実現することが
出来る。また、EC++をコンパイルするのか、C++
をコンパイルするのかをオプション指定などで切替える
ことによって、単一のコンパイラでC++とEC++の
両方をコンパイルすることが出来る。
【0005】図17にC++およびEC++で記述され
たプログラムを、それぞれC++モード、EC++モー
ドでコンパイルした場合の図を示す。
【0006】図17(a)のように、C++で記述され
たプログラムをC++翻訳モードのコンパイラでコンパ
イルした場合、C++のオブジェクトファイルが生成さ
れる。一方、EC++翻訳モードのコンパイラでコンパ
イルした場合、EC++の言語仕様に適合しない箇所で
コンパイルエラーとなる。
【0007】また、図17(b)のように、EC++で
記述されたプログラムをC++翻訳モードのコンパイラ
でコンパイルした場合、C++のオブジェクトファイル
が生成される。一方、EC++翻訳モードのコンパイラ
でコンパイルした場合、EC++のオブジェクトファイ
ルが生成される。この時、EC++の言語仕様がコード
サイズを削減できるように策定されているため、C++
のオブジェクトのコードサイズよりEC++のオブジェ
クトのコードサイズの方が小さくすることが出来る。
【0008】C++のオブジェクトのコードサイズより
もEC++のオブジェクトのコードサイズの方が小さく
なるような例を図18に示す。
【0009】図18は仮想関数の呼び出しを行なった場
合の例である。図中のソースコードは仮想関数呼び出し
の記述を表す。データ構造はクラスオブジェクトobj
のデータ構造および仮想関数呼び出しを実現するための
仮想関数テーブルのデータ構造を表す。生成コードはソ
ースコードの記述に対して生成される機械語コードであ
る。
【0010】図18(a)は仮想関数呼び出しをC++
の言語仕様でコンパイルした場合、図18(b)はEC
++の言語仕様でコンパイルした場合である。図18
(a)の場合、C++の言語仕様では、クラスの多重継
承が許されているため、クラスオブジェクトの先頭を表
すthisポインタと呼ばれるポインタの値を再計算す
る必要がある。そのため、仮想関数テーブル内にthi
sポインタの再計算用のオフセット値を格納しておく必
要があり、更にthisポインタを再計算する処理が必
要となる。
【0011】一方、図18(b)の場合、EC++の言
語仕様では、クラスの多重継承は許さず、単一のクラス
の継承のみを許している。この場合はthisポインタ
の再計算は必要なく、従って、仮想関数テーブル内にt
hisポインタ再計算用のオフセット値を必要とせず、
thisポインタの再計算処理も実行する必要がない。
そのため、C++に比べて仮想関数テーブルのサイズを
小さくすることができ、また生成コードを小さくするこ
とが出来る。
【0012】
【発明が解決しようとする課題】従来のコンパイラで
は、ソースプログラムをフルセットの言語仕様(C+
+)で記述されている、あるいはサブセットの言語仕様
(EC++)で記述されているとしてコンパイルするこ
としか出来ず、プログラムの一部がサブセットの言語仕
様の範囲で記述されていたとしても、他にフルセットの
仕様が含まれている場合は、図17(a)に示すように
フルセットの翻訳モードでコンパイルしなければコンパ
イルエラーとなってしまう。従って、生成されるオブジ
ェクトはフルセットC++のオブジェクトであるため、
コードサイズが大きくなってしまう。
【0013】また、プログラムの全部がサブセットの言
語仕様の範囲で記述されていた場合に、そのプログラム
をフルセットの翻訳モードで翻訳した時、図17(b)
に示すようにプログラムがサブセットの翻訳モードで翻
訳可能であるにも関わらずフルセットC++のオブジェ
クトを生成してしまう。従って、サブセットの翻訳モー
ドで生成したオブジェクトに比べ、コードサイズが大き
くなってしまう。
【0014】本発明の目的は、オブジェクト指向言語で
記述されたプログラムに対して効率の良いコードを生成
することのできるプログラム変換方法を提供することで
ある。
【0015】
【課題を解決するための手段】上記の課題を解決するた
めに、本発明の第一のプログラム変換方法は、オブジェ
クト指向言語で記述された入力プログラムを目的プログ
ラムに変換するプログラム変換方法であって、入力プロ
グラムの各部分に対して記述されている言語仕様の範囲
を決定する仕様決定ステップと、仕様決定ステップによ
り決定された言語仕様の範囲に基づいて入力プログラム
に対応したコードを生成するコード生成ステップとを含
むことを特徴とするものである。
【0016】また、本発明の第二のプログラム変換方法
は、オブジェクト指向言語で記述された入力プログラム
を目的プログラムに変換するプログラム変換方法であっ
て、入力プログラムの各部分に対して記述されている言
語仕様の範囲を決定する仕様決定ステップと、仕様決定
ステップで決定された言語仕様の範囲に対応した付加情
報を入力プログラムに付加する情報付加ステップと、付
加情報が付加された入力プログラムの付加情報が示す言
語仕様の範囲に基づいて入力プログラムに対応したコー
ドを生成するコード生成ステップとを含むことを特徴と
するものである。
【0017】また、本発明の第三のプログラム変換方法
は、オブジェクト指向言語で記述された入力プログラム
を目的プログラムに変換するプログラム変換方法であっ
て、入力プログラムをフルセットの言語仕様で翻訳する
フルセット翻訳ステップと、入力プログラムをサブセッ
トの言語仕様で翻訳する少なくとも1つのサブセット翻
訳ステップと、入力プログラムの各ファイルに対して記
述されている言語仕様の範囲を決定し、この決定した言
語仕様の範囲およびこれより広い言語仕様の範囲である
フルセット翻訳ステップおよびサブセット翻訳ステップ
を起動する仕様決定ステップと、フルセット翻訳ステッ
プおよびサブセット翻訳ステップの翻訳結果をマージす
る翻訳結果マージステップとを備える翻訳ステップと、
翻訳結果マージステップの出力から適切な翻訳結果を選
択する選択ステップと、選択ステップにより選択された
翻訳結果をリンクするリンクステップとを備える結合ス
テップとを含むことを特徴とするものである。
【0018】
【発明の実施の形態】以下、本発明のプログラム変換方
法の実施形態の一例について図面を参照しながら説明す
る。
【0019】[第一の実施形態]図1は本発明の第一の
実施形態におけるプログラム変換ステップの構成図を表
している。
【0020】図1において、このプログラム変換ステッ
プは、入力ステップS102、構文解析ステップS10
3、記憶部S104、仕様決定ステップS105、仕様
記憶部S106、中間コード生成ステップS107、最
適化ステップS108、資源割付ステップS109およ
び出力ステップS110から構成されている。このプロ
グラム変換ステップ中の各ステップは、コンパイラの行
う処理であり、記憶部S104および仕様記憶部S10
6もコンパイラの内部のものである。
【0021】プログラム記憶部S101は、変換を行な
うプログラムを保持している。
【0022】入力ステップS102は、プログラム記憶
部S101に格納されている全てのプログラムを順次入
力し、構文解析ステップS103に渡す。
【0023】構文解析ステップS103は、入力ステッ
プS102から受けとったプログラムの構文を解析し、
シンボルテーブルの生成や構文木の生成などを行ない、
その解析結果を記憶部S104に格納する。
【0024】記憶部S104は、構文解析ステップS1
03から解析結果を受けとり、格納しておく。
【0025】仕様決定ステップS105は、記憶部S1
04に格納されているクラス情報を抽出し、各クラスを
どの言語仕様のもとで処理するかを解析して、解析結果
を仕様記憶部S106に格納する。
【0026】仕様記憶部S106は、仕様決定ステップ
S105から解析結果を受けとり、格納しておく。
【0027】中間コード生成ステップS107は、記憶
部S104から構文木を受けとり、中間コードを生成す
る。クラスに関する中間コードを生成する際には、仕様
記憶部S106に格納されている情報を参照して、対応
する言語仕様のクラスであるものとして中間コードを生
成する。
【0028】最適化ステップS108は、中間コード生
成ステップS107によって生成された中間コードに対
して各種最適化を実行する。
【0029】資源割付ステップS109は、最適化ステ
ップS108によって最適化された中間コードに含まれ
る全ての変数に対してレジスタやメモリなどのハードウ
ェア資源を割り付ける。
【0030】出力ステップS110は、資源割付ステッ
プS109によって資源割付された中間コードを目的コ
ードに変換して生成コード記憶部S111に出力する。
【0031】生成コード記憶部S111は、S102か
らS110までのプログラム変換ステップによって変換
された目的コードを格納しておく。
【0032】なお、入力ステップS102、構文解析ス
テップS103、最適化ステップS108、資源割付ス
テップS109、出力ステップS110については、本
発明の主眼ではないため、詳細な説明は省略する。
【0033】次に、仕様決定ステップS105の処理に
ついて、図10に示すプログラムに適用した場合を例に
して、図2を参照しながら説明する。
【0034】仕様決定ステップS105の処理は、a1
からa8までのステップによって行なわれる。以下記号
の順に説明していく。
【0035】ステップa1では、記憶部S104よりク
ラスの情報を抽出する。構文解析ステップS102によ
って、全ての入力ファイル中のクラスの情報が解析さ
れ、記憶部S104に格納されているので、記憶部S1
04の中からクラスに関する情報のみを抽出する。図1
0に示すプログラムでは、全ての入力ファイルclas
s.cc、file1.cc、file2.ccについ
て、各ファイル中で定義されているクラスは、clas
s.ccではクラスA、Bであり、file1.ccで
はクラスA、B、X、Yであり、file2.ccでは
クラスA、B、C、Dであるので、図11(a)のよう
な抽出結果が得られる。なお、図10の入力ファイルc
lass.cc、file1.cc、file2.cc
の1行目の「#include“class.h”」
は、その場所にclass.hというファイルの内容を
展開するという意味のプログラムである。したがって、
class.cc、file1.cc、file2.c
cの全てに、クラスAおよびクラスBの情報を含んでい
るclass.hが展開される。
【0036】ステップa2では、クラスの継承関係を解
析し、継承関係にあるクラス同士を同じグループに分類
して、クラスツリー集合CTSを生成する。図11
(a)の抽出結果から継承関係を解析すると、クラスB
はクラスAに継承されているため、クラスAとクラスB
を同一グループに分類する。同様に解析すると、クラス
A、B、C、Dが同一グループに分類され、クラスX、
Yが同一グループに分類され、図11(b)のようなク
ラスツリー集合が得られる。各グループには便宜上CT
1、CT2というクラスツリー名をつけている。
【0037】ステップa3ではクラスツリー集合CTS
の全ての要素CTについて、ループ1の処理を繰り返
す。図11(b)のCT1およびCT2についてループ
1の処理を繰り返す。
【0038】ステップa4では、クラスツリー集合の要
素CT内に多重継承しているクラスが存在するかどうか
を調べる。多重継承しているクラスが存在する場合はス
テップa5に処理を移行し、存在しない場合はステップ
a6に処理を移行する。図11(b)のCT1について
ステップa4の判定を行なうと、クラスDがクラスBお
よびクラスCを継承しており、多重継承しているクラス
であるので、ステップa4の判定はYesとなり、ステ
ップa5へと処理を移行する。一方、CT2についてス
テップa4の判定を行なうと、クラスX、Y共に多重継
承はしていないため、ステップa4の判定はNoとな
り、ステップa6へと処理を移行する。
【0039】ステップa5では、CT内の全てのクラス
にフルセットのフラグFSを付ける。図11(b)のC
T1内の全てのクラス、即ちクラスA、B、C、Dにフ
ルセットのフラグFSをつける。
【0040】ステップa6では、CT内の全てのクラス
にサブセットのフラグSSを付ける。図11(b)のC
T2内の全てのクラス、即ちクラスX、Yにサブセット
のフラグSSをつける。
【0041】ステップa7では、CT内のクラスのフラ
グを仕様記憶部S106に格納する。CT1の処理で
は、CT1内のクラスA、B、C、Dのフラグを仕様記
憶部に格納し、CT2の処理では、CT2内のクラス
X、Yのフラグを仕様記憶部に格納する。
【0042】ステップa8では、ステップa3に処理を
移行し、ループ1の処理を繰り返す。
【0043】仕様決定ステップS105の処理を図10
に示すプログラムに適用した場合、仕様記憶部S106
の内容は図11(c)に示すようになる。
【0044】次に、中間コード生成ステップS107の
処理について、図3を参照しながら説明する。
【0045】中間コード生成ステップS107の処理
は、b1からb11までのステップによって行なわれ
る。以下記号の順に説明していく。
【0046】ステップb1では、記憶部S104に格納
されている全ての構文解析データを読み込み、ループ1
を繰り返す。例えば、図10のclass.ccの2行
目の関数定義の構文木などを読み込んでくる。
【0047】ステップb2では、読み込んだ構文データ
が仮想関数呼び出しかどうかの判定を行なう。仮想関数
呼び出しである場合はYesと判定しステップb3へ処
理を移行し、そうでない場合はNoと判定しステップb
6へと処理を移行する。図10のfile1.ccの1
5行目、16行目は仮想関数呼び出しの式であるため、
これらを構文解析した結果はステップb2ではYesと
判定される。その他の構文解析結果はNoと判定され
る。
【0048】ステップb3では、仮想関数を呼び出して
いるオブジェクトのクラスに対して、仕様記憶部S10
6を参照して、そのクラスのフラグがサブセット仕様を
表すSSであるかどうかの判定を行なう。フラグがSS
である場合はYesと判定しステップb4へと処理を移
行し、そうでない場合はNoと判定しステップb5へと
処理を移行する。図10の15行目の仮想関数呼び出し
では、p1が指しているオブジェクトが仮想関数を呼び
出しているオブジェクトとなる。この時p1の型はクラ
スAであり、図11(c)に示す仕様記憶部S106に
格納されているフラグ情報を参照するとクラスAのフラ
グはフルセット仕様を表すFSであるため、ステップb
3の判定ではNoとなり、ステップb5へと処理を移行
する。一方、図10の16行目の仮想関数呼び出しで
は、p2が指しているオブジェクトが仮想関数を呼び出
しているオブジェクトとなり、p2の型はクラスXであ
る。図11(c)よりクラスXのフラグはサブセット仕
様を表すSSであるため、ステップb3の判定はYes
となり、ステップb4へと処理を移行する。
【0049】ステップb4では、仮想関数呼び出しの構
文木に対して、サブセットのクラスの仮想関数呼び出し
の中間コードを生成する。図10の16行目の仮想関数
呼び出しの式に対しては、サブセットのクラスの仮想関
数呼び出しの中間コードを生成する。
【0050】ステップb5では、仮想関数呼び出しの構
文木に対して、フルセットのクラスの仮想関数呼び出し
の中間コードを生成する。図10の15行目の仮想関数
呼び出しの式に対しては、フルセットのクラスの仮想関
数呼び出しの中間コードを生成する。
【0051】ステップb6では、読み込んだ構文データ
が仮想関数テーブルかどうかの判定を行なう。仮想関数
テーブルである場合はYesと判定しステップb7へ処
理を移行し、そうでない場合はNoと判定しステップb
10へと処理を移行する。図10のfile1.ccで
は、仮想関数を持つクラスA、B、X、およびYが定義
されているため、構文解析ステップS103によって各
クラスに対応する仮想関数テーブルが生成される。構文
解析結果がこれらの仮想関数テーブルである場合はYe
sと判定され、その他の構文解析結果の場合はNoと判
定される。
【0052】ステップb7では、仮想関数テーブルに対
応するクラスに対して、仕様記憶部S106を参照し
て、そのクラスのフラグがサブセット仕様を表すSSで
あるかどうかの判定を行なう。フラグがSSである場合
はYesと判定しステップb8へと処理を移行し、そう
でない場合はNoと判定しステップb9へと処理を移行
する。図10のfile1.ccで生成されるクラス
A、B、X、Yに対応する仮想関数テーブルに関して
は、図11(c)に示す仕様記憶部S106に格納され
ているフラグ情報を参照すると、クラスA、Bのフラグ
はフルセット仕様を表すFSであるため、ステップb7
の判定ではNoとなり、ステップb9へと処理を移行す
る。一方、クラスX、Yのフラグはサブセット仕様を表
すSSであるため、ステップb7の判定ではYesとな
り、ステップb8へと処理を移行する。
【0053】ステップb8では、サブセットのクラスの
仮想関数テーブルの中間コードを生成する。クラスX、
Yに対しては、サブセットのクラスの仮想関数テーブル
の中間コードを生成する。
【0054】ステップb9では、フルセットのクラスの
仮想関数テーブルの中間コードを生成する。クラスA、
Bに対しては、フルセットのクラスの仮想関数テーブル
の中間コードを生成する。
【0055】ステップb10では、その他の構文解析結
果について、通常の処理によりそれぞれ対応する中間コ
ードを生成する。
【0056】ステップb11では、ステップb1に処理
を移行し、ループ1の処理を繰り返す。
【0057】以上のような本発明のプログラム変換ステ
ップに、図10に示すプログラムを適用した結果、得ら
れる出力コードを図12に示す。図12中の(d)のコ
ードはサブセットのクラスの仮想関数呼び出しのコー
ド、(e)、(f)のコードはサブセットのクラスの仮
想関数テーブルのコードを表しており、(c)のコード
はフルセットの仮想関数呼び出しのコード、(a)、
(b)、(g)、(h)のコードはフルセットの仮想関
数テーブルのコードを表している。本発明のプログラム
変換ステップを用いることによって、フルセットの仕様
で記述されたクラスとサブセットの仕様で記述されたク
ラスが混在していても、サブセットの仕様として扱うこ
とが出来るクラスについてはコードサイズおよび実行ス
テップ数の少ない効率の良いコードを生成することが出
来る。
【0058】なお、上記実施形態において、仕様記憶部
S106に格納するフラグ情報をフルセットのフラグF
SとサブセットのフラグSSとしたが、サブセットのフ
ラグSSのみとし、フラグ情報の検索時にフラグ情報が
仕様記憶部S106に格納されていない場合はフルセッ
トのフラグFSが指定されたものとして処理するように
しても良い。
【0059】また、言語仕様の範囲をフルセットとサブ
セットの2通りに分類しているが、サブセットの言語仕
様が複数種類存在しても良い。
【0060】なお、請求項18、19の記録媒体は、図
1の生成コード記憶部S111のことであり、請求項2
0の記録媒体は、図1のプログラム変換ステップ自体の
機械語命令が記録されている記録媒体である。
【0061】[第二の実施形態]図4は本発明の第二の
実施形態における付加情報付加ステップおよびプログラ
ム変換ステップの構成図を表している。
【0062】図4において、付加情報付加ステップS2
10は、クラス解析ステップS211、仕様決定ステッ
プS212および情報付加ステップS213から構成さ
れており、プログラム変換ステップS220は、入力ス
テップS221、構文解析ステップS222、中間コー
ド生成ステップS223、最適化ステップS224、資
源割付ステップS225および出力ステップS226か
ら構成されている。これら付加情報付加ステップS21
0およびプログラム変換ステップS220は、コンパイ
ラの行う処理であり、プログラム記憶部2S202はコ
ンパイラの内部のものである。また、付加情報付加ステ
ップS210とプログラム変換ステップS220は別々
のプログラムでもよい。この場合、プログラム記憶部2
S202はファイル等の外部記憶でもよい。
【0063】プログラム記憶部1S201は、変換を行
なうプログラムを保持している。
【0064】クラス解析ステップS211は、プログラ
ム記憶部1S201に格納されている全てのプログラム
を読み込み、プログラム中で定義されている全てのクラ
スの情報を抽出し、仕様決定ステップS212にクラス
の情報を渡す。
【0065】仕様決定ステップS212は、クラス解析
ステップS211から受けとったクラス情報を解析し、
各クラスをどの言語仕様のもとで処理するかを解析し
て、情報付加ステップS213に解析結果を渡す。
【0066】情報付加ステップS213は、仕様決定ス
テップS212から解析結果を受けとり、入力プログラ
ムに付加情報として解析結果を挿入してプログラム記憶
部2S202に出力する。
【0067】プログラム記憶部2S202は、付加情報
付加ステップS210によって情報が付加されたプログ
ラムを格納しておく。
【0068】入力ステップS221は、プログラム記憶
部2S202に格納されているプログラムを順次入力
し、構文解析ステップS222に渡す。
【0069】構文解析ステップS222は、入力ステッ
プS221から受けとったプログラムの構文を解析し、
シンボルテーブルの生成、構文木の生成、付加情報の解
析などを行ない、その解析結果を中間コード生成ステッ
プS223へと渡す。
【0070】中間コード生成ステップS223は、構文
解析ステップS222から構文木を受けとり、中間コー
ドを生成する。クラスに関する中間コードを生成する際
には、構文解析ステップS222によって解析された付
加情報を参照して、対応する言語仕様のクラスであるも
のとして中間コードを生成する。
【0071】最適化ステップS224は、中間コード生
成ステップS223によって生成された中間コードに対
して各種最適化を実行する。
【0072】資源割付ステップS225は、最適化ステ
ップS224によって最適化された中間コードに含まれ
る全ての変数に対してレジスタやメモリなどのハードウ
ェア資源を割り付ける。
【0073】出力ステップS226は、資源割付ステッ
プS225によって資源割付された中間コードを目的コ
ードに変換して生成コード記憶部S203に出力する。
【0074】生成コード記憶部S203は、プログラム
変換ステップS220によって変換された目的コードを
格納しておく。
【0075】なお、入力ステップS221、最適化ステ
ップS224、資源割付ステップS225、出力ステッ
プS226については、本発明の主眼ではないため、詳
細な説明は省略する。
【0076】次に、付加情報付加ステップS210の処
理について、図10に示すプログラムに適用した場合を
例にして、図5を参照しながら説明する。
【0077】付加情報付加ステップS210の処理は、
c1からc9までのステップによって行なわれる。以下
記号の順に説明していく。
【0078】ステップc1では、プログラム記憶部1S
201に格納されている全ての入力ファイルを順次読み
込み、ステップc2に渡す。
【0079】ステップc2は、入力ファイル中のクラス
の定義を解析し、クラスの情報を抽出する。図10に示
すプログラムに対してステップc2を実行すると、抽出
されるクラス情報は、第一の実施形態の仕様決定ステッ
プS105のステップa1の処理結果と同じく、図11
(a)のようになる。ステップc1およびc2が図4の
クラス解析ステップS211に相当する。
【0080】ステップc3では、第一の実施形態の仕様
決定ステップS105のステップa2と同様であり、ク
ラスの継承関係を解析し、継承関係にあるクラス同士を
同じグループに分類して、クラスツリー集合CTSを生
成する。図11(a)の抽出結果に対して継承関係を解
析すると、図11(b)のようなクラスツリー集合が得
られる。
【0081】ステップc4では、クラスツリー集合CT
Sの全ての要素CTについて、ループ1の処理を繰り返
す。図11(b)のCT1およびCT2についてループ
1の処理を繰り返す。
【0082】ステップc5では、第一の実施形態の仕様
決定ステップS105のステップa4と同様であり、ク
ラスツリー集合の要素CT内に多重継承しているクラス
が存在するかどうかを調べる。多重継承しているクラス
が存在する場合はステップc6に処理を移行し、存在し
ない場合はステップc7に処理を移行する。図11
(b)の各クラスツリーについてステップc5の判定を
行なうと、CT1ではYesと判定され、CT2ではN
oと判定される。
【0083】ステップc6、ステップc7はそれぞれ、
第一の実施形態の仕様決定ステップS105のステップ
a5、ステップa6と同様であり、ステップc6ではC
T内の全てのクラスにフルセットのフラグFSを付け、
ステップc7ではCT内の全てのクラスにサブセットの
フラグSSを付ける。図11(b)のCT1、CT2に
ついてフラグを設定すると、クラスA、B、C、Dには
フルセットのフラグFSが設定され、クラスX、Yには
サブセットのフラグSSが設定される。
【0084】ステップc8では、ステップc4に処理を
移行し、ループ1の処理を繰り返す。
【0085】ステップc9では、全てのクラスについて
フラグを調べ、サブセットのフラグSSのついたクラス
に関して、そのクラスがサブセット仕様で処理できるこ
とを表す付加情報を生成し、プログラム記憶部2S20
2の出力ファイルに付加情報を出力し、それに続いて入
力ファイルを出力する。図11(c)より、クラスX、
Yについて付加情報を生成して挿入したファイルをプロ
グラム記憶部2S202に格納する。
【0086】付加情報付加ステップS210の処理を図
10に示すプログラムに適用して得られる出力ファイル
を図13(a)に示す。ファイルclass.cc、f
ile1.cc、file2.ccの各ファイルの先頭
に挿入されている”#pragma _ssflag
X”がクラスXに関する付加情報、”#pragma_
ssflag Y”がクラスYに関する付加情報を表し
ている。
【0087】次に、プログラム変換ステップS220の
処理について、図13(a)に示すプログラムに適用し
た場合を例にして、図6を参照しながら説明する。
【0088】プログラム変換ステップS220の処理
は、d1からd17までのステップによって行なわれ
る。以下記号の順に説明していく。
【0089】ステップd1では、プログラム記憶部2S
202に格納されている入力ファイルの各行についてル
ープ1を繰り返す。図13(a)のfile1.ccを
入力ファイルとした場合について説明する。clas
s.cc、file2.ccについても同様にプログラ
ム変換ステップS220で処理される。
【0090】ステップd2では、入力ファイルから入力
行を読み込む。
【0091】ステップd3では、入力行が付加情報かど
うかの判定を行なう。付加情報である場合はYesと判
定しステップd4へと処理を移行し、そうでない場合は
Noと判定しステップd5へと処理を移行する。fil
e1.ccの1行目、2行目は付加情報であるので、ス
テップd3の判定ではYesとなる。それ以外の行では
Noと判定される。
【0092】ステップd4では、付加情報のクラスを付
加情報クラス集合CSに追加する。file1.ccの
1行目ではCSにクラスXを追加し、2行目ではCSに
クラスYを追加する。2行目まで処理した後の付加情報
クラス集合CSの内容は図13(b)のようになる。
【0093】ステップd5では、入力行が仮想関数呼び
出しかどうかの判定を行なう。仮想関数呼び出しである
場合はYesと判定しステップd6へと処理を移行し、
そうでない場合はNoと判定しステップd9へと処理を
移行する。file1.ccの17行目、18行目は仮
想関数呼び出しであるので、ステップd5の判定ではY
esとなる。それ以外の行ではNoと判定される。
【0094】ステップd6では、仮想関数を呼び出して
いるオブジェクトのクラスが付加情報クラス集合CSに
含まれるかどうかの判定を行なう。CSに含まれる場合
はYesと判定しステップd8へと処理を移行し、そう
でない場合はNoと判定しステップd7へと処理を移行
する。17行目の仮想関数呼び出しでは、p1の指すオ
ブジェクトの型はクラスAであり、クラスAは付加情報
クラス集合CSに含まれないためNoと判定され、ステ
ップd8へと処理を移行する。18行目の仮想関数呼び
出しでは、p2が指しているオブジェクトの型がクラス
Xであり、クラスXは付加情報クラス集合CSに含まれ
るためYesと判定され、ステップd7へと処理を移行
する。
【0095】ステップd7では、サブセットのクラスの
仮想関数呼び出しの中間コードを生成する。18行目の
仮想関数呼び出しの式に対しては、サブセットのクラス
の仮想関数呼び出しの中間コードを生成する。
【0096】ステップd8では、フルセットのクラスの
仮想関数呼び出しの中間コードを生成する。17行目の
仮想関数呼び出しの式に対しては、フルセットのクラス
の仮想関数呼び出しの中間コードを生成する。
【0097】ステップd9では、入力ファイル中に定義
されている各クラスについて、仮想関数テーブルを生成
する必要があるかどうかの判定を行なう。仮想関数テー
ブルを生成する必要がある場合はYesと判定しステッ
プd10へと処理を移行する。そうでない場合はNoと
判定しステップd13へと処理を移行する。file
1.ccではクラスA、B、X、Yが仮想関数を持つク
ラスとして定義されているため、これらのクラスについ
て仮想関数テーブルを生成する。
【0098】ステップd10では、仮想関数テーブルの
クラスが付加情報クラス集合CSに含まれるかどうかの
判定を行なう。CSに含まれる場合はYesと判定しス
テップd11へと処理を移行し、そうでない場合はNo
と判定しステップd12へと処理を移行する。仮想関数
テーブルのクラスがクラスA、Bの場合は、CSには含
まれないためステップd10の判定ではNoとなりステ
ップd12へと処理を移行し、仮想関数テーブルのクラ
スがクラスX、Yの場合は、CSに含まれるためYes
と判定されステップd11へと処理を移行する。
【0099】ステップd11では、サブセットのクラス
の仮想関数テーブルの中間コードを生成する。クラス
X、Yに対しては、サブセットのクラスの仮想関数テー
ブルの中間コードを生成する。
【0100】ステップd12では、フルセットのクラス
の仮想関数テーブルの中間コードを生成する。クラス
A、Bに対しては、フルセットのクラスの仮想関数テー
ブルの中間コードを生成する。
【0101】ステップd13では、その他の入力行につ
いて、通常の処理によりそれぞれ対応する中間コードを
生成する。
【0102】ステップd14では、ステップd1に処理
を移行し、ループ1の処理を繰り返す。
【0103】ステップd15は、図4の最適化ステップ
S224に相当し、生成された中間コードに対して各種
最適化処理を実行する。
【0104】ステップd16は、図4の資源割付ステッ
プS225に相当し、中間コードに含まれる全ての変数
に対して、レジスタやメモリなどのハードウェア資源を
割り付ける。
【0105】ステップd17は、図4の出力ステップS
226に相当し、中間コードを目的コードに変換して生
成コード記憶部S203に出力する。
【0106】以上のような本発明のプログラム変換ステ
ップに、図13(a)に示すプログラムを適用した結
果、得られる出力コードは第一の実施形態と同じく図1
2のようになり、第一の実施形態と同様の効果が得られ
る。
【0107】なお、上記実施形態において、全ての入力
ファイルに付加情報を出力するようにしているが、クラ
ス定義の存在するファイルのいずれか一つのみに出力す
るようにしても良い。
【0108】また、言語仕様の範囲をフルセットとサブ
セットの2通りに分類しているが、サブセットの言語仕
様が複数種類存在しても良い。
【0109】なお、請求項21の記録媒体は、図4に示
した付加情報付加ステップS210とプログラム変換ス
テップS220自体の機械語命令が記録されている記録
媒体である。
【0110】[第三の実施形態]図7は本発明の第三の
実施形態における翻訳ステップおよび結合ステップの構
成図を表している。
【0111】図7において、翻訳ステップS310は、
仕様決定ステップS311、フルセット翻訳ステップS
312、サブセット翻訳ステップS313および翻訳結
果マージステップS314から構成されており、結合ス
テップS320は、選択ステップS321およびリンク
ステップS322から構成されている。翻訳ステップS
310はコンパイラの行う処理であり、結合ステップS
320はリンカの行う処理である。なお、リンカをも含
めてコンパイラと呼ぶこともある。
【0112】プログラム記憶部S301は、変換を行な
うプログラムを保持している。
【0113】仕様決定ステップS311は、プログラム
記憶部S301に格納されているプログラムを読み込
み、プログラム中の各ファイルがフルセットの言語仕様
で記述されているのかサブセットの言語仕様で記述され
ているのかを判定する。
【0114】フルセット翻訳ステップS312は、仕様
決定ステップS311の判定結果がフルセットの言語仕
様で記述されていると判定された場合、およびサブセッ
トの言語仕様で記述されていると判定された場合共に起
動され、入力プログラムをフルセットの言語仕様で記述
されているものとして翻訳する。
【0115】サブセット翻訳ステップS313は、仕様
決定ステップS311の判定結果がサブセットの言語仕
様で記述されていると判定された場合に起動され、入力
プログラムをサブセットの言語仕様で記述されているも
のとして翻訳する。
【0116】翻訳結果マージステップS314は、フル
セット翻訳ステップS312とサブセット翻訳ステップ
S313の翻訳結果をマージして目的コード記憶部S3
02に出力する。サブセット翻訳ステップS313が起
動されなかった場合は、フルセット翻訳ステップS31
2の翻訳結果のみを目的コード記憶部S302に出力す
る。
【0117】目的コード記憶部S302は翻訳ステップ
S310によって翻訳された目的コードを格納してお
く。
【0118】選択ステップS321は、目的コード記憶
部S302内の全ての目的コードを入力し、全ての目的
コード内にサブセット翻訳ステップS313による翻訳
結果が存在するかどうかを判定し、全ての目的プログラ
ム内にサブセット翻訳結果が存在する場合はリンクステ
ップS322にサブセット翻訳結果を渡し、そうでない
場合はフルセット翻訳結果を渡す。
【0119】リンクステップS322は、全ての目的コ
ードについて、選択ステップS321によって選択され
た翻訳結果を結合し、実行コード記憶部S303に出力
する。
【0120】実行コード記憶部S303は、結合ステッ
プS320によって結合された実行コードを格納してお
く。
【0121】なお、フルセット翻訳ステップS312、
サブセット翻訳ステップS313およびリンクステップ
S322については、本発明の主眼ではないため、詳細
な説明は省略する。
【0122】次に、翻訳ステップS310の処理につい
て、図14に示すプログラムに適用した場合を例にし
て、図8を参照しながら説明する。
【0123】翻訳ステップS310の処理は、e1から
e6までのステップによって行なわれる。以下記号の順
に説明していく。
【0124】ステップe1では、プログラム記憶部S3
01から入力ファイルを読み込む。図14のfile
1.ccを入力ファイルとした場合について説明する。
class.ccについても同様に翻訳ステップS31
0で処理される。
【0125】ステップe2は、図7の仕様決定ステップ
S311に相当し、入力ファイルがサブセットの言語仕
様のみを使用して記述されているかどうかを判定する。
サブセットの言語仕様のみを使用している場合はYes
と判定しステップe3へと処理を移行する。そうでない
場合はNoと判定しステップe4へと処理を移行する。
図14のfile1.ccはEC++の言語仕様、即ち
サブセットの言語仕様のみで記述されているため、ステ
ップe2の判定ではYesと判定され、ステップe3へ
と処理を移行する。
【0126】ステップe3は、図7のサブセット翻訳ス
テップS313に相当し、入力ファイルをサブセット翻
訳ステップによって翻訳する。図14のfile1.c
cはサブセット翻訳ステップによって翻訳される。
【0127】ステップe4は、図7のフルセット翻訳ス
テップS312に相当し、入力ファイルがサブセットの
言語仕様のみを使用している場合でもそうでない場合で
も共に起動される。ステップe4では、入力ファイルを
フルセット翻訳ステップによって翻訳する。図14のf
ile1.ccはフルセット翻訳ステップによって翻訳
される。
【0128】ステップe5は、図7の翻訳結果マージス
テップS314に相当し、サブセット翻訳ステップe3
の翻訳結果とフルセット翻訳ステップe4の翻訳結果を
マージする。図14のfile1.ccのサブセット翻
訳ステップの翻訳結果とフルセット翻訳ステップの翻訳
結果がマージされる。
【0129】ステップe6では、ステップe5でマージ
された結果を目的コード記憶部S302に出力する。
【0130】以上のような本発明の翻訳ステップに図1
4に示すプログラムを適用した結果、得られる出力コー
ドは、図15のようになる。class.ccおよびf
ile1.ccは共にサブセットの言語仕様のみを使用
して記述されているため、出力コードにはサブセット翻
訳ステップの翻訳結果とフルセット翻訳ステップの翻訳
結果の両方が含まれている。
【0131】次に、結合ステップS320の処理につい
て、図15に示す目的コードに適用した場合を例にし
て、図9を参照しながら説明する。
【0132】結合ステップS320の処理は、f1から
f6までのステップによって行なわれる。以下記号の順
に説明していく。
【0133】ステップf1では、目的コード記憶部S3
02内の全ての目的コードを入力ファイルとして読み込
む。図15では、class.o、file1.oを読
み込む。
【0134】ステップf2では、全ての入力ファイル中
にサブセット翻訳結果が存在するかどうかを判定する。
全ての入力ファイル中にサブセット翻訳結果が存在する
場合はYesと判定しステップf3へと処理を移行す
る。そうでない場合はNoと判定しステップf4へと処
理を移行する。図15のclass.o、file1.
oには共にサブセット翻訳結果が存在するため、ステッ
プf2ではYesと判定されステップf3へと処理を移
行する。
【0135】ステップf3では、全ての入力ファイルか
らサブセット翻訳結果を選択しステップf5へと渡す。
図15ではclass.o、file1.oからそれぞ
れサブセット翻訳結果が選択され、ステップf5へと渡
す。
【0136】ステップf4では、全ての入力ファイルか
らフルセット翻訳結果を選択しステップf5へと渡す。
【0137】ステップf5では、ステップf3あるいは
ステップf4によって選択された全ての翻訳結果を結合
し実行形式ファイルを生成する。class.o、fi
le1.oから選択されたサブセット翻訳結果がステッ
プf5で結合される。
【0138】ステップf6では、ステップf5で結合し
た実行形式ファイルを実行コード記憶部S303に出力
する。
【0139】以上のような本発明の結合ステップに図1
5に示す目的コードを適用した場合、得られる出力コー
ドは図16のようになる。class.ccおよびfi
le1.ccをそれぞれサブセット翻訳ステップで翻訳
可能であったため、共にサブセット翻訳結果が選択さ
れ、コードサイズおよび実行ステップ数の少ない効率の
良いコードを生成することが出来る。
【0140】なお、言語仕様の範囲をフルセットとサブ
セットの2通りに分類しているが、サブセットの言語仕
様が複数種類存在しても良い。
【0141】また、結合ステップS320は全てのオブ
ジェクトファイル中に複数のサブセット翻訳結果が存在
する場合に、全てのオブジェクトファイル中に存在し、
かつ最も言語仕様の範囲が狭い、あるいは最も最適化し
やすいような言語仕様のサブセット翻訳結果を選択する
ようにしても良い。
【0142】なお、請求項22の記録媒体は、図7に示
した翻訳ステップS310と結合ステップS320自体
の機械語命令が記録されている記録媒体である。
【0143】
【発明の効果】以上のように本発明の請求項1記載のプ
ログラム変換方法は、オブジェクト指向言語で記述され
た入力プログラムを目的プログラムに変換するプログラ
ム変換方法であって、入力プログラムの各部分に対して
記述されている言語仕様の範囲を決定する仕様決定ステ
ップと、仕様決定ステップにより決定された言語仕様の
範囲に基づいて入力プログラムに対応したコードを生成
するコード生成ステップとを含むことを特徴とするもの
である。この方法によれば、入力プログラムで使用され
ている言語仕様に応じて、効率の良いコードを生成する
ことが出来る。
【0144】また、本発明の請求項2記載のプログラム
変換方法は、請求項1記載のプログラム変換方法におい
て、仕様決定ステップは、言語仕様の範囲を、フルセッ
トの言語仕様もしくは、少なくとも一つのサブセットの
言語仕様に決定することを特徴とするものである。この
方法によれば、複数のサブセットの言語仕様に対して
も、効率の良いコードを生成することが出来る。
【0145】また、本発明の請求項3記載のプログラム
変換方法は、請求項1記載のプログラム変換方法におい
て、仕様決定ステップは、入力プログラムに含まれるク
ラス定義の継承関係を解析し、継承関係にあるクラスを
グループ化してクラスツリーを生成する解析ステップ
と、解析ステップで生成されたクラスツリーのうち単一
継承のみで構成されるクラスツリーを検索する検索ステ
ップと、検索ステップで検索されたクラスツリーを構成
する全てのクラスの言語仕様をサブセットの言語仕様で
あると決定する決定ステップとを含むことを特徴とする
ものである。この方法によれば、単一継承のみで構成さ
れるクラスツリーに含まれるクラスに関する処理をサブ
セットの言語仕様とすることができ、効率の良いコード
を生成することが出来る。
【0146】また、本発明の請求項4記載のプログラム
変換方法は、請求項1〜3のいずれかに記載のプログラ
ム変換方法において、コード生成ステップは、仕様決定
ステップにより決定された言語仕様により、仮想的関数
呼び出しをコード化することを特徴とするものである。
この方法によれば、仮想関数呼び出しのコードに関し
て、効率の良いコードを生成することが出来る。
【0147】また、本発明の請求項5記載のプログラム
変換方法は、請求項1〜3のいずれかに記載のプログラ
ム変換方法において、コード生成ステップは、仕様決定
ステップにより決定された言語仕様により、仮想的関数
呼び出しで参照するテーブルをコード化することを特徴
とする。この方法によれば、仮想関数テーブルのデータ
に関して、効率の良いコードを生成することが出来る。
【0148】また、本発明の請求項6記載のプログラム
変換方法は、オブジェクト指向言語で記述された入力プ
ログラムを目的プログラムに変換するプログラム変換方
法であって、入力プログラムの各部分に対して記述され
ている言語仕様の範囲を決定する仕様決定ステップと、
仕様決定ステップで決定された言語仕様の範囲に対応し
た付加情報を入力プログラムに付加する情報付加ステッ
プと、付加情報が付加された入力プログラムの付加情報
が示す言語仕様の範囲に基づいて入力プログラムに対応
したコードを生成するコード生成ステップとを含むこと
を特徴とするものである。この方法によれば、入力プロ
グラムで使用されている言語仕様に応じて、効率の良い
コードを生成することが出来る。
【0149】また、本発明の請求項7記載のプログラム
変換方法は、請求項6記載のプログラム変換方法におい
て、仕様決定ステップは、言語仕様の範囲を、フルセッ
トの言語仕様もしくは、少なくとも一つのサブセットの
言語仕様に決定することを特徴とするものである。この
方法によれば、複数のサブセットの言語仕様に対して
も、効率の良いコードを生成することが出来る。
【0150】また、本発明の請求項8記載のプログラム
変換方法は、請求項6記載のプログラム変換方法におい
て、仕様決定ステップは、入力プログラムに含まれるク
ラス定義の継承関係を解析し、継承関係にあるクラスを
グループ化してクラスツリーを生成する解析ステップ
と、解析ステップで生成されたクラスツリーのうち単一
継承のみで構成されるクラスツリーを検索する検索ステ
ップと、検索ステップで検索されたクラスツリーを構成
する全てのクラスの言語仕様をサブセットの言語仕様で
あると決定する決定ステップとを含むことを特徴とする
ものである。この方法によれば、単一継承のみで構成さ
れるクラスツリーに含まれるクラスに関する処理をサブ
セットの言語仕様とすることができ、効率の良いコード
を生成することが出来る。
【0151】また、本発明の請求項9記載のプログラム
変換方法は、請求項8記載のプログラム変換方法におい
て、情報付加ステップは、決定ステップによって決定さ
れたクラスに関する情報を、付加情報として付加するこ
とを特徴とする。この方法によれば、付加する情報を決
定ステップによって決定されたクラスのみに限定するこ
とができ、付加情報量を少なくすることが出来る。
【0152】また、本発明の請求項10記載のプログラ
ム変換方法は、請求項9記載のプログラム変換方法にお
いて、情報付加ステップは、決定ステップによって決定
されたクラス定義の存在するファイルに対して、付加情
報を付加することを特徴とする。この方法によれば、情
報を付加するファイルをクラス定義が存在するファイル
のみに限定することが出来、付加情報量を少なくするこ
とが出来る。
【0153】また、本発明の請求項11記載のプログラ
ム変換方法は、請求項6〜10のいずれかに記載のプロ
グラム変換方法において、付加情報は、オブジェクト指
向言語におけるキーワードであることを特徴とするもの
である。この方法によれば、プログラムの汎用性を失う
ことなく、かつこのキーワードを解釈する全てのコンパ
イラによって付加情報を認識することが出来る。
【0154】また、本発明の請求項12記載のプログラ
ム変換方法は、請求項6〜10のいずれかに記載のプロ
グラム変換方法において、付加情報は、コード生成ステ
ップで解釈可能な文字列であることを特徴とするもので
ある。この方法によれば、特定のコンパイラのみが付加
情報を認識し、その他のコンパイラは付加情報を無視す
ることができるため、特定のコンパイラに対する付加情
報を持ちながらもプログラムの正当性が維持される。
【0155】また、本発明の請求項13記載のプログラ
ム変換方法は、請求項6〜12のいずれかに記載のプロ
グラム変換方法において、コード生成ステップは、仕様
決定ステップにより決定された言語仕様により、仮想的
関数呼び出しをコード化することを特徴とするものであ
る。この方法によれば、仮想関数呼び出しのコードに関
して、効率の良いコードを生成することが出来る。
【0156】また、本発明の請求項14記載のプログラ
ム変換方法は、請求項6〜12のいずれかに記載のプロ
グラム変換方法において、コード生成ステップは、仕様
決定ステップにより決定された言語仕様により、仮想的
関数呼び出しで参照するテーブルをコード化することを
特徴とするものである。この方法によれば、仮想関数テ
ーブルのデータに関して、効率の良いコードを生成する
ことが出来る。
【0157】また、本発明の請求項15記載のプログラ
ム変換方法によれば、オブジェクト指向言語で記述され
た入力プログラムを目的プログラムに変換するプログラ
ム変換方法であって、入力プログラムをフルセットの言
語仕様で翻訳するフルセット翻訳ステップと、入力プロ
グラムをサブセットの言語仕様で翻訳する少なくとも1
つのサブセット翻訳ステップと、入力プログラムの各フ
ァイルに対して記述されている言語仕様の範囲を決定
し、この決定した言語仕様の範囲およびこれより広い言
語仕様の範囲であるフルセット翻訳ステップおよびサブ
セット翻訳ステップを起動する仕様決定ステップと、フ
ルセット翻訳ステップおよびサブセット翻訳ステップの
翻訳結果をマージする翻訳結果マージステップとを備え
る翻訳ステップと、翻訳結果マージステップの出力から
適切な翻訳結果を選択する選択ステップと、選択ステッ
プにより選択された翻訳結果をリンクするリンクステッ
プとを備える結合ステップとを含むことを特徴とするも
のである。この方法によれば、全てのファイルがサブセ
ットの言語仕様でコンパイル可能な場合はサブセットの
翻訳結果が得られ、効率の良いコードを生成することが
出来る。
【0158】また、本発明の請求項16記載のプログラ
ム変換方法によれば、請求項15記載のプログラム変換
方法において、選択ステップは、翻訳結果マージステッ
プの全ての出力中に含まれ、かつ最も言語仕様の範囲が
狭い言語仕様のサブセット翻訳結果を選択することを特
徴とするものである。この方法によれば、複数のサブセ
ット翻訳結果の中から最も言語仕様の範囲が狭いサブセ
ット翻訳結果が得られ、効率の良いコードを生成するこ
とが出来る。
【0159】また、本発明の請求項17記載のプログラ
ム変換方法によれば、請求項15記載のプログラム変換
方法において、選択ステップは、翻訳結果マージステッ
プの全ての出力中に含まれ、かつ最も最適化が可能な言
語仕様のサブセット翻訳結果を選択することを特徴とす
るものである。この方法によれば、複数のサブセット翻
訳結果の中から最も最適化が可能な言語仕様のサブセッ
ト翻訳結果が得られ、効率の良いコードを生成すること
が出来る。
【0160】また、本発明の請求項18記載の記録媒体
は、オブジェクト指向言語で記述されたプログラムを、
プロセッサによって実行される機械語命令に変換して記
録した記録媒体であって、オブジェクト指向言語で記述
されたプログラム中に記載された仮想的関数の呼び出し
を変換した機械語命令列のうち、呼び出し手順の異なる
機械語命令列が少なくとも一つ存在することを特徴とす
るものである。この構成によれば、フルセットの言語仕
様の仮想関数呼び出しの機械語命令列をサブセットの言
語仕様の仮想関数呼び出しの機械語命令列に可能な限り
置き換えられ、コード効率が向上される。
【0161】また、本発明の請求項19記載の記録媒体
は、オブジェクト指向言語で記述されたプログラムを、
プロセッサによって実行される機械語命令に変換して記
録した記録媒体であって、オブジェクト指向言語で記述
されたプログラム中に記載された仮想的関数の呼び出し
を変換した機械語命令が参照するテーブルのうち、デー
タ構造の異なるテーブルが少なくとも一つ存在すること
を特徴とするものである。この構成によれば、フルセッ
トの言語仕様の仮想関数テーブルをサブセットの言語仕
様の仮想関数テーブルに可能な限り置き換えられ、コー
ド効率が向上される。
【0162】また、本発明の請求項20記載の記録媒体
は、オブジェクト指向言語で記述されたプログラムを機
械語命令に変換するプログラムを記録した記録媒体であ
って、プログラムの変換方法は、プログラムの各部分に
対して記述されている言語仕様の範囲を決定する仕様決
定ステップと、仕様決定ステップにより決定された言語
仕様の範囲に基づいてプログラムに対応したコードを生
成するコード生成ステップとを含んだことを特徴とする
ものである。この構成によれば、入力プログラムで使用
されている言語仕様に応じて、効率の良いコードを生成
することができる。
【0163】また、本発明の請求項21記載の記録媒体
は、オブジェクト指向言語で記述されたプログラムを機
械語命令に変換するプログラムを記録した記録媒体であ
って、プログラムの変換方法は、プログラムの各部分に
対して記述されている言語仕様の範囲を決定する仕様決
定ステップと、仕様決定ステップで決定された言語仕様
の範囲に対応した付加情報をプログラムに付加する情報
付加ステップと、付加情報が付加されたプログラムの付
加情報が示す言語仕様の範囲に基づいてプログラムに対
応したコードを生成するコード生成ステップとを含んだ
ことを特徴するものである。この構成によれば、入力プ
ログラムで使用されている言語仕様に応じて、効率の良
いコードを生成することができる。
【0164】また、本発明の請求項22記載の記録媒体
は、オブジェクト指向言語で記述されたプログラムを機
械語命令に変換するプログラムを記録した記録媒体であ
って、プログラムの変換方法は、プログラムをフルセッ
トの言語仕様で翻訳するフルセット翻訳ステップと、プ
ログラムをサブセットの言語仕様で翻訳する少なくとも
1つのサブセット翻訳ステップと、プログラムの各ファ
イルに対して記述されている言語仕様の範囲を決定し、
この決定した言語仕様の範囲およびこれより広い言語仕
様の範囲であるフルセット翻訳ステップおよびサブセッ
ト翻訳ステップを起動する仕様決定ステップと、フルセ
ット翻訳ステップおよびサブセット翻訳ステップの翻訳
結果をマージする翻訳結果マージステップとを備える翻
訳ステップと、翻訳結果マージステップの出力から適切
な翻訳結果を選択する選択ステップと、選択ステップに
より選択された翻訳結果をリンクするリンクステップと
を備える結合ステップとを含んだことを特徴とするもの
である。この構成によれば、全てのファイルがサブセッ
トの言語仕様でコンパイル可能な場合はサブセットの翻
訳結果が得られ、効率の良いコードを生成することがで
きる。
【図面の簡単な説明】
【図1】本発明の第一の実施形態におけるプログラム変
換ステップの構成図
【図2】図1の仕様決定ステップS105の処理を示す
フローチャート
【図3】図1の中間コード生成ステップS107の処理
を示すフローチャート
【図4】本発明の第二の実施形態における付加情報付加
ステップおよびプログラム変換ステップの構成図
【図5】図4の付加情報付加ステップS210の処理を
示すフローチャート
【図6】図4のプログラム変換ステップS220の処理
を示すフローチャート
【図7】本発明の第三の実施形態における翻訳ステップ
および結合ステップの構成図
【図8】図7の翻訳ステップS310の処理を示すフロ
ーチャート
【図9】図7の結合ステップS320の処理を示すフロ
ーチャート
【図10】図1、図4のプログラム記憶部S101、S
201に格納されているプログラムを示す図
【図11】(a)は本発明の第一の実施形態の仕様決定
ステップ、および第二の実施形態の付加情報付加ステッ
プ内のクラス解析ステップにおいて抽出されるクラス情
報を示す図、(b)は本発明の第一の実施形態の仕様決
定ステップ、および第二の実施形態の付加情報付加ステ
ップ内の仕様決定ステップにおいて生成されるクラスツ
リー集合を示す図、(c)は本発明の第一の実施形態の
仕様決定ステップ、および第二の実施形態の付加情報付
加ステップ内の仕様決定ステップにおいて設定されるク
ラスのフラグ情報を示す図
【図12】本発明の第一の実施形態におけるプログラム
変換ステップを用いた場合の出力結果を示す図
【図13】(a)は本発明の第二の実施形態における付
加情報付加ステップを用いた場合の出力結果を示す図、
(b)本発明の第二の実施形態のプログラム変換ステッ
プ内の構文解析ステップにおいて生成される付加情報ク
ラス集合を示す図
【図14】図7のプログラム記憶部S301に格納され
ているプログラムを示す図
【図15】本発明の第三の実施形態における翻訳ステッ
プを用いた場合の出力結果を示す図
【図16】本発明の第三の実施形態における結合ステッ
プを用いた場合の出力結果を示す図
【図17】(a)は従来技術によってフルセット仕様の
C++言語をコンパイルした場合を示す図、(b)は従
来技術によってサブセット仕様のEC++言語をコンパ
イルした場合を示す図
【図18】フルセット仕様のC++言語とサブセット仕
様のEC++言語における仮想関数テーブルのデータ構
造および仮想関数呼び出しの生成コードを示す図
【符号の説明】
S101 プログラム記憶部 S102 入力ステップ S103 構文解析ステップ S104 記憶部 S105 仕様決定ステップ S106 仕様記憶部 S107 中間コード生成ステップ S108 最適化ステップ S109 資源割付ステップ S110 出力ステップ S111 生成コード記憶部 S201 プログラム記憶部1 S202 プログラム記憶部2 S203 生成コード記憶部 S210 付加情報付加ステップ S211 クラス解析ステップ S212 仕様決定ステップ S213 情報付加ステップ S220 プログラム変換ステップ S221 入力ステップ S222 構文解析ステップ S223 中間コード生成ステップ S224 最適化ステップ S225 資源割付ステップ S226 出力ステップ S301 プログラム記憶部 S302 目的コード記憶部 S303 実行コード記憶部 S310 翻訳ステップ S311 仕様決定ステップ S312 フルセット翻訳ステップ S313 サブセット翻訳ステップ S314 翻訳結果マージステップ S320 結合ステップ S321 選択ステップ S322 リンクステップ
フロントページの続き (72)発明者 坂田 俊幸 大阪府門真市大字門真1006番地 松下電器 産業株式会社内 Fターム(参考) 5B081 AA09 CC41

Claims (22)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクト指向言語で記述された入力
    プログラムを目的プログラムに変換するプログラム変換
    方法であって、 前記入力プログラムの各部分に対して記述されている言
    語仕様の範囲を決定する仕様決定ステップと、 前記仕様決定ステップにより決定された言語仕様の範囲
    に基づいて前記入力プログラムに対応したコードを生成
    するコード生成ステップとを含むことを特徴とするプロ
    グラム変換方法。
  2. 【請求項2】 前記仕様決定ステップは、言語仕様の範
    囲を、フルセットの言語仕様もしくは、少なくとも一つ
    のサブセットの言語仕様に決定することを特徴とする請
    求項1記載のプログラム変換方法。
  3. 【請求項3】 前記仕様決定ステップは、前記入力プロ
    グラムに含まれるクラス定義の継承関係を解析し、継承
    関係にあるクラスをグループ化してクラスツリーを生成
    する解析ステップと、 前記解析ステップで生成された前記クラスツリーのうち
    単一継承のみで構成されるクラスツリーを検索する検索
    ステップと、 前記検索ステップで検索された前記クラスツリーを構成
    する全てのクラスの言語仕様をサブセットの言語仕様で
    あると決定する決定ステップとを含むことを特徴とする
    請求項1記載のプログラム変換方法。
  4. 【請求項4】 前記コード生成ステップは、前記仕様決
    定ステップにより決定された言語仕様により、仮想的関
    数呼び出しをコード化することを特徴とする請求項1〜
    3のいずれかに記載のプログラム変換方法。
  5. 【請求項5】 前記コード生成ステップは、前記仕様決
    定ステップにより決定された言語仕様により、仮想的関
    数呼び出しで参照するテーブルをコード化することを特
    徴とする請求項1〜3のいずれかに記載のプログラム変
    換方法。
  6. 【請求項6】 オブジェクト指向言語で記述された入力
    プログラムを目的プログラムに変換するプログラム変換
    方法であって、 前記入力プログラムの各部分に対して記述されている言
    語仕様の範囲を決定する仕様決定ステップと、 前記仕様決定ステップで決定された言語仕様の範囲に対
    応した付加情報を前記入力プログラムに付加する情報付
    加ステップと、 前記付加情報が付加された入力プログラムの前記付加情
    報が示す言語仕様の範囲に基づいて前記入力プログラム
    に対応したコードを生成するコード生成ステップとを含
    むことを特徴とするプログラム変換方法。
  7. 【請求項7】 前記仕様決定ステップは、言語仕様の範
    囲を、フルセットの言語仕様もしくは、少なくとも一つ
    のサブセットの言語仕様に決定することを特徴とする請
    求項6記載のプログラム変換方法。
  8. 【請求項8】 前記仕様決定ステップは、前記入力プロ
    グラムに含まれるクラス定義の継承関係を解析し、継承
    関係にあるクラスをグループ化してクラスツリーを生成
    する解析ステップと、 前記解析ステップで生成された前記クラスツリーのうち
    単一継承のみで構成されるクラスツリーを検索する検索
    ステップと、 前記検索ステップで検索された前記クラスツリーを構成
    する全てのクラスの言語仕様をサブセットの言語仕様で
    あると決定する決定ステップとを含むことを特徴とする
    請求項6記載のプログラム変換方法。
  9. 【請求項9】 前記情報付加ステップは、前記決定ステ
    ップによって決定されたクラスに関する情報を、付加情
    報として付加することを特徴とする請求項8記載のプロ
    グラム変換方法。
  10. 【請求項10】 前記情報付加ステップは、前記決定ス
    テップによって決定されたクラス定義の存在するファイ
    ルに対して、付加情報を付加することを特徴とする請求
    項9記載のプログラム変換方法。
  11. 【請求項11】 前記付加情報は、オブジェクト指向言
    語におけるキーワードであることを特徴とする請求項6
    〜10のいずれかに記載のプログラム変換方法。
  12. 【請求項12】 前記付加情報は、前記コード生成ステ
    ップで解釈可能な文字列であることを特徴とする請求項
    6〜10のいずれかに記載のプログラム変換方法。
  13. 【請求項13】 前記コード生成ステップは、前記仕様
    決定ステップにより決定された言語仕様により、仮想的
    関数呼び出しをコード化することを特徴とする請求項6
    〜12のいずれかに記載のプログラム変換方法。
  14. 【請求項14】 前記コード生成ステップは、前記仕様
    決定ステップにより決定された言語仕様により、仮想的
    関数呼び出しで参照するテーブルをコード化することを
    特徴とする請求項6〜12のいずれかに記載のプログラ
    ム変換方法。
  15. 【請求項15】 オブジェクト指向言語で記述された入
    力プログラムを目的プログラムに変換するプログラム変
    換方法であって、 前記入力プログラムをフルセットの言語仕様で翻訳する
    フルセット翻訳ステップと、前記入力プログラムをサブ
    セットの言語仕様で翻訳する少なくとも1つのサブセッ
    ト翻訳ステップと、前記入力プログラムの各ファイルに
    対して記述されている言語仕様の範囲を決定し、この決
    定した言語仕様の範囲およびこれより広い言語仕様の範
    囲である前記フルセット翻訳ステップおよび前記サブセ
    ット翻訳ステップを起動する仕様決定ステップと、前記
    フルセット翻訳ステップおよび前記サブセット翻訳ステ
    ップの翻訳結果をマージする翻訳結果マージステップと
    を備える翻訳ステップと、 前記翻訳結果マージステップの出力から適切な翻訳結果
    を選択する選択ステップと、前記選択ステップにより選
    択された翻訳結果をリンクするリンクステップとを備え
    る結合ステップとを含むことを特徴とするプログラム変
    換方法。
  16. 【請求項16】 前記選択ステップは、前記翻訳結果マ
    ージステップの全ての出力中に含まれ、かつ最も言語仕
    様の範囲が狭い言語仕様のサブセット翻訳結果を選択す
    ることを特徴とする請求項15記載のプログラム変換方
    法。
  17. 【請求項17】 前記選択ステップは、前記翻訳結果マ
    ージステップの全ての出力中に含まれ、かつ最も最適化
    が可能な言語仕様のサブセット翻訳結果を選択すること
    を特徴とする請求項15記載のプログラム変換方法。
  18. 【請求項18】 オブジェクト指向言語で記述されたプ
    ログラムを、プロセッサによって実行される機械語命令
    に変換して記録した記録媒体であって、 前記オブジェクト指向言語で記述されたプログラム中に
    記載された仮想的関数の呼び出しを変換した機械語命令
    列のうち、呼び出し手順の異なる機械語命令列が少なく
    とも一つ存在することを特徴とする記録媒体。
  19. 【請求項19】 オブジェクト指向言語で記述されたプ
    ログラムを、プロセッサによって実行される機械語命令
    に変換して記録した記録媒体であって、 前記オブジェクト指向言語で記述されたプログラム中に
    記載された仮想的関数の呼び出しを変換した機械語命令
    が参照するテーブルのうち、データ構造の異なるテーブ
    ルが少なくとも一つ存在することを特徴とする記録媒
    体。
  20. 【請求項20】 オブジェクト指向言語で記述されたプ
    ログラムを機械語命令に変換するプログラムを記録した
    記録媒体であって、 前記プログラムの変換方法は、前記プログラムの各部分
    に対して記述されている言語仕様の範囲を決定する仕様
    決定ステップと、 前記仕様決定ステップにより決定された言語仕様の範囲
    に基づいて前記プログラムに対応したコードを生成する
    コード生成ステップとを含んだことを特徴とする記録媒
    体。
  21. 【請求項21】 オブジェクト指向言語で記述されたプ
    ログラムを機械語命令に変換するプログラムを記録した
    記録媒体であって、 前記プログラムの変換方法は、前記プログラムの各部分
    に対して記述されている言語仕様の範囲を決定する仕様
    決定ステップと、 前記仕様決定ステップで決定された言語仕様の範囲に対
    応した付加情報を前記プログラムに付加する情報付加ス
    テップと、 前記付加情報が付加されたプログラムの前記付加情報が
    示す言語仕様の範囲に基づいて前記プログラムに対応し
    たコードを生成するコード生成ステップとを含んだこと
    を特徴する記録媒体。
  22. 【請求項22】 オブジェクト指向言語で記述されたプ
    ログラムを機械語命令に変換するプログラムを記録した
    記録媒体であって、 前記プログラムの変換方法は、前記プログラムをフルセ
    ットの言語仕様で翻訳するフルセット翻訳ステップと、
    前記プログラムをサブセットの言語仕様で翻訳する少な
    くとも1つのサブセット翻訳ステップと、前記プログラ
    ムの各ファイルに対して記述されている言語仕様の範囲
    を決定し、この決定した言語仕様の範囲およびこれより
    広い言語仕様の範囲である前記フルセット翻訳ステップ
    および前記サブセット翻訳ステップを起動する仕様決定
    ステップと、前記フルセット翻訳ステップおよび前記サ
    ブセット翻訳ステップの翻訳結果をマージする翻訳結果
    マージステップとを備える翻訳ステップと、 前記翻訳結果マージステップの出力から適切な翻訳結果
    を選択する選択ステップと、前記選択ステップにより選
    択された翻訳結果をリンクするリンクステップとを備え
    る結合ステップとを含んだことを特徴とする記録媒体。
JP2001238029A 2001-08-06 2001-08-06 プログラム変換方法 Pending JP2003050700A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001238029A JP2003050700A (ja) 2001-08-06 2001-08-06 プログラム変換方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001238029A JP2003050700A (ja) 2001-08-06 2001-08-06 プログラム変換方法

Publications (1)

Publication Number Publication Date
JP2003050700A true JP2003050700A (ja) 2003-02-21

Family

ID=19069019

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001238029A Pending JP2003050700A (ja) 2001-08-06 2001-08-06 プログラム変換方法

Country Status (1)

Country Link
JP (1) JP2003050700A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005182562A (ja) * 2003-12-22 2005-07-07 Matsushita Electric Ind Co Ltd コンパイル方法および装置、ならびにコンパイラ
JP2007304840A (ja) * 2006-05-11 2007-11-22 Matsushita Electric Ind Co Ltd コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
CN101488095A (zh) * 2008-01-18 2009-07-22 松下电器产业株式会社 编译方法以及编译程序

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005182562A (ja) * 2003-12-22 2005-07-07 Matsushita Electric Ind Co Ltd コンパイル方法および装置、ならびにコンパイラ
JP4652680B2 (ja) * 2003-12-22 2011-03-16 パナソニック株式会社 コンパイル方法および装置、ならびにコンパイラ
JP2007304840A (ja) * 2006-05-11 2007-11-22 Matsushita Electric Ind Co Ltd コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
CN101488095A (zh) * 2008-01-18 2009-07-22 松下电器产业株式会社 编译方法以及编译程序
JP2009169864A (ja) * 2008-01-18 2009-07-30 Panasonic Corp コンパイル方法およびコンパイルプログラム

Similar Documents

Publication Publication Date Title
US7661096B2 (en) Interaction with nested and non-nested streams
Hutton Higher-order functions for parsing
US6434742B1 (en) Symbol for automatically renaming symbols in files during the compiling of the files
US7823139B2 (en) Method and system for translating programming languages
US8464232B2 (en) Compiler compiler system with syntax-controlled runtime and binary application programming interfaces
Miecznikowski et al. Decompiling Java using staged encapsulation
US20130152061A1 (en) Full fidelity parse tree for programming language processing
CN112346722B (zh) 一种实现编译型嵌入式Python的方法
JPH06501583A (ja) 多言語最適化コンパイラ内のフォールディングメカニズムを構成する方法
US6675377B1 (en) Program conversion apparatus
EP0520708B1 (en) Method and apparatus for converting high level form abstract syntaxes into an intermediate form
CN113703779B (zh) 一种跨平台的多语言编译方法和超轻量物联网虚拟机
JP4768984B2 (ja) コンパイル方法、コンパイルプログラムおよびコンパイル装置
US7418659B2 (en) System and method for declaring a resource within a markup document
JP2003050700A (ja) プログラム変換方法
Fisher et al. A calculus for compiling and linking classes
JP5399601B2 (ja) 実装コード開発システム、及び実装コード開発プログラム
JP5600301B2 (ja) システム表現およびハンドリング技術
US7316011B1 (en) Memory reduction for object-oriented compilers
Brooks et al. Design of an optimizing, dynamically retargetable compiler for Common Lisp
JPH07182179A (ja) オブジェクト指向データベース管理装置
US20040045018A1 (en) Using address space bridge in postoptimizer to route indirect calls at runtime
US8056063B2 (en) Method and apparatus minimizing code duplication in a statically typeable language program
Cook Optimizing P#: Translating Prolog to more idiomatic C#
JP3596570B2 (ja) クラスの主記憶装置への配置方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050111

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050314

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20050412