JP2000040005A - プログラム変換装置 - Google Patents

プログラム変換装置

Info

Publication number
JP2000040005A
JP2000040005A JP10206966A JP20696698A JP2000040005A JP 2000040005 A JP2000040005 A JP 2000040005A JP 10206966 A JP10206966 A JP 10206966A JP 20696698 A JP20696698 A JP 20696698A JP 2000040005 A JP2000040005 A JP 2000040005A
Authority
JP
Japan
Prior art keywords
statement
object generation
member variable
initial value
value expression
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.)
Granted
Application number
JP10206966A
Other languages
English (en)
Other versions
JP4026940B2 (ja
Inventor
Toshiyuki Sakata
俊幸 坂田
Seiichi Urushibara
誠一 漆原
Kiyokazu Yamanaka
貴代和 山中
Hirohisa Tanaka
裕久 田中
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 JP20696698A priority Critical patent/JP4026940B2/ja
Priority to US09/356,229 priority patent/US6292937B1/en
Publication of JP2000040005A publication Critical patent/JP2000040005A/ja
Application granted granted Critical
Publication of JP4026940B2 publication Critical patent/JP4026940B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 コードサイズの小さい機械語プログラムを生
成するプログラム変換装置を提供する。 【解決手段】 仮初期値式生成部103はソースプログ
ラム中のオブジェクト生成関数の定義に着目し、オブジ
ェクト生成関数がオブジェクトのメンバ変数への値の設
定以外の動作を行わないものである場合には、メンバ変
数を仮引数で表現した仮初期値式を作成する。実初期値
式生成部105はソースプログラム中のオブジェクト生
成文に着目し、その文が実引数を渡して呼び出すオブジ
ェクト生成関数に対応する仮初期値式が既に作成されて
いれば、その仮初期値式の仮引数を実引数に置き換えた
実初期値式を作成する。実初期値式がメンバ変数を定数
で表したものとなる場合には、オブジェクト生成文翻訳
部107は、オブジェクト生成文を、オブジェクト生成
関数を呼び出す旨のサブルーチンコールに翻訳せず、実
初期値式に示される定数値をもつオブジェクトデータの
みに翻訳する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ソースプログラム
を機械語命令列に変換するプログラム変換装置に関し、
特にオブジェクト生成文を含むオブジェクト指向言語の
ソースプログラムを変換対象とするプログラム変換装置
に関する。
【0002】
【従来の技術】オブジェクト指向言語において、オブジ
ェクト(インスタンス)は、使用する前に生成する必要
があり、オブジェクト生成文により生成される。また、
オブジェクト生成関数は、オブジェクトのメンバ関数で
あり、オブジェクトが生成される際に実行されるもので
ある。従って、オブジェクト生成文は、オブジェクトを
生成するための文であると同時に、オブジェクト生成関
数を呼び出す意味も有する。なお、オブジェクト生成関
数は、通常、オブジェクトのメンバ変数を初期化する処
理等を行うように設計される。以下、オブジェクト指向
言語C++(以下、「C++言語」という。)で記述さ
れたソースプログラムを機械語に翻訳(変換)する従来
のプログラム変換装置の説明を行なう。図1は、オブジ
ェクト生成関数を含むクラスXのクラス定義とクラスX
のオブジェクトを生成するオブジェクト生成文とからな
るC++言語のソースプログラムの一部を示す図であ
る。C++言語では、オブジェクト生成関数はコンスト
ラクタと呼ばれ、クラス名と同じ名前の関数で表され
る。ここでは、「X(int a,int b)」がク
ラスXのオブジェクト生成関数である。
【0003】また、C++言語では、オブジェクト生成
文は、オブジェクトの宣言文として記述され、ここで
は、オブジェクトの宣言文「const X obj
(2,3);」がクラスXのオブジェクト「obj」を
生成する意味を有する文である。このオブジェクトの宣
言文において「obj」の後の「(2,3)」は、オブ
ジェクト生成関数に渡す実引数である。また、「con
st X obj(2,3)」の先頭の修飾子「con
st」は生成されるオブェクトが値の変化しないオブジ
ェクトであることを表している。以下、このような値の
変化しないオブジェクトを、constオブジェクトと
いう。なお、このオブジェクト「obj」は、関数や他
のオブジェクトから参照可能な大域的なオブジェクトで
あるため、このソースプログラムが機械語に翻訳されて
実行される段階においては、必ずメモリに確保されるも
のである。プログラム変換装置は、ソースプログラムを
機械語に翻訳をするいわゆるコンパイラであり、ソース
プログラムを参照することにより、特定のプロセッサ上
で実行可能な機械語プログラムを生成する。ソースプロ
グラム中のデータは、RAM領域に配置されるべき属性
を有するデータ又はROM領域に配置されるべき属性を
有するデータに翻訳され、ソースプログラム中の各手続
きは、ROM領域に配置されるべき属性を有するコード
に翻訳される。ここで、RAM領域とは読み書き可能な
メモリ領域をいい、ROM領域とは読み出しのみが可能
なメモリ領域をいう。プログラム変換装置によって出力
された機械語プログラムは、特定のプロセッサ上におい
てオペレーティングシステムの制御下で、コードやデー
タがそれぞれの配置属性に基づきROM領域やRAM領
域に配置された後に、実行されることになる。従来のプ
ログラム変換装置は、図1に示すようなオブジェクト生
成文をオブジェクトデータとオブジェクト生成関数を呼
び出すサブルーチンコール命令とに翻訳する。ここで、
オブジェクトデータとは、オブジェクトのメンバ変数の
集合をいう。なお、従来のプログラム変換装置は、上述
のサブルーチンコール命令をROM領域に配置されるべ
き属性を有するコードとして生成し、オブジェクトデー
タについては、常にRAM領域に配置されるべき属性を
有するデータとして生成する。かかるオブジェクトデー
タが常にRAM領域に配置されるべき属性を有するデー
タとして生成される理由は、オブジェクトが生成される
ときに実行されるオブジェクト生成関数の動作によっ
て、オブジェクトのメンバ変数に対して動的に値が設定
される得るからである。このことは、生成されるオブジ
ェクトがconstオブジェクトであっても変わらな
い。
【0004】図14は、従来のプログラム変換装置が図
1に示したオブジェクト生成文を翻訳した結果である機
械語命令列を示す図である。これは、従来のプログラム
変換装置がソースプログラムに基づいて生成する機械語
プログラムの一部に相当する。なお、同図では、わかり
易くするため機械語をニモニックコードで示しており、
また、簡単のためにオブジェクト生成関数についての変
換結果は省略している。ここで、「.section
RAMAREA」から「.section END」に
挟まれた部分は、RAM領域に配置される属性のデータ
を表し、「obj:12」は、オブジェクトobjが1
2バイトのサイズであることを表している。従って、機
械語プログラムが実行される時には、RAM領域に12
バイトの領域が確保されることになる。また、「.se
ction TEXT」から「.section EN
D」に挟まれた部分は、ROM領域に配置される属性の
コードを表し、「mov &obj,R0」は、オブジ
ェクトobjのアドレスをレジスタR0に格納する命令
を表し、「mov #2,R1」、「mov #3,R
2」は、それぞれ実引数2、3を、レジスタR1、R2
に格納する機械語命令を表し、「call X」は、オ
ブジェクト生成関数を呼び出すサブルーチンコール命令
を表している。このように、従来のプログラム変換装置
は、ソースプログラム中のオブジェクト生成文を、無条
件にオブジェクト生成関数を呼び出すためのコードと、
RAM領域に配置される属性のオブジェクトデータとに
翻訳する。
【0005】
【発明が解決しようとする課題】一般に、機械語プログ
ラムのコードサイズが大きければ、このプログラムの実
行には容量の大きなメモリが必要になり、実行に要する
コストが高くなる。従って、コスト面からは機械語プロ
グラムのコードサイズは小さい方が望ましい。また、家
電機器等への組み込み用マイクロコンピュータの分野に
おいては、RAMのコストは、ROMのコストより高
く、ROMの4倍以上のコストがかかる場合もある。従
って、可能な限り多くのデータを、RAM領域ではな
く、ROM領域に配置される属性にすることは、コスト
削減につながる。そこで、本発明は、機械語プログラム
のコードサイズを削減し、又は、RAM領域に配置され
る属性のデータを削減することにより、オブジェクト指
向言語で記述されたソースプログラムを実行コストの低
い機械語プログラムに変換するプログラム変換装置を提
供することを目的とする。
【0006】
【課題を解決するための手段】<着眼点>上記課題を解
決するために、本発明は、オブジェクト生成関数の動作
内容が、機械語プログラムの実行時ではなく、プログラ
ム変換装置による翻訳時に定まる場合がある点に着目し
てなされた。大域的なオブジェクトを生成する旨のオブ
ジェクト生成文により呼び出されることになっているオ
ブジェクト生成関数が、オブジェクトのメンバ変数への
定数値の設定以外の動作を行わないものである場合は、
翻訳時に予めこのオブジェクト生成関数の動作結果とな
るオブジェクトのメンバ変数の集合であるオブジェクト
データを算出して、このオブジェクトデータをオブジェ
クト生成文の翻訳結果とすれば足りる。これにより、本
発明に係るプログラム変換装置は、オブジェクト生成関
数の動作内容が所定のものである場合に、大域的なオブ
ジェクトを生成する旨のオブジェクト生成文をオブジェ
クトデータのみに翻訳することができる。従って、従来
のプログラム変換装置がオブジェクト生成文を無条件に
オブジェクト生成関数を呼び出すためのコードとオブジ
ェクトデータとに翻訳するのに対し、本発明に係るプロ
グラム変換装置は、生成する機械語プログラムのコード
サイズを削減するものであるといえる。また、上述のよ
うに、オブジェクト生成関数の動作内容が所定のもので
ある場合に、オブジェクト生成文を、オブジェクトデー
タのみに翻訳することができるのであれば、生成される
オブジェクトがconstオブジェクトであるときに、
このオブジェクトデータが格納されるメモリ領域は一切
更新されないこととなる。これにより、本発明に係るプ
ログラム変換装置は、オブジェクト生成関数の動作内容
が所定のものである場合に、大域的なconstオブジ
ェクトを生成する旨のオブジェクト生成文をROM領域
に配置されるべき属性のデータに翻訳することができ
る。従って、従来のプログラム変換装置がconstオ
ブジェクトを必ずRAM領域に配置されるべき属性のデ
ータに翻訳するのに対し、本発明に係るプログラム変換
装置は、RAM領域に配置される属性のデータを削減す
るものであるといえる。
【0007】<構成>上記課題を解決するために、本発
明に係るプログラム変換装置は、オブジェクト指向言語
で記述されたソースプログラムを機械語プログラムに変
換するプログラム変換装置であって、前記ソースプログ
ラムにおけるオブジェクトを生成するためのオブジェク
ト生成文であってオブジェクト生成関数を呼び出すオブ
ジェクト生成文を特定する特定手段と、前記特定手段に
より特定されたオブジェクト生成文によってオブジェク
ト生成関数が呼び出されたと仮定した場合における当該
呼出によって、当該オブジェクト生成文により生成され
るべきオブジェクトのメンバ変数に対し静的に値を設定
すること以外の動作が行われるか否かを判断する判断手
段と、前記判断手段により否定的な判断がなされた場合
に、前記呼出によって前記メンバ変数に対して設定され
る値を算出するメンバ変数値算出手段と、前記メンバ変
数算出手段により前記値の算出なされたときに、前記オ
ブジェクト生成文を、前記メンバ変数値算出手段により
算出された値をもつデータであってオブジェクトのメン
バ変数と同じサイズのデータのみに変換する変換手段と
を備えることを特徴とする。
【0008】上記構成の説明中、「メンバ変数に対し静
的に値を設定すること」とは、演算処理(判断、分岐を
含む)の実行の結果として定数値をメンバ変数に設定す
ることであって、その定数値が前記演算処理の現実の実
行前に、計算によって特定できるものであることをい
う。なお、前記演算処理は、オペレーティングシステム
のサービスの呼出及び入出力を含まない。また、前記定
数値は、機械語命令列の実行前にオペレーティングシス
テムによって特定されるアドレス値であってもよい。ま
た、上記構成の説明中、「オブジェクト生成文によって
オブジェクト生成関数が呼び出されたと仮定した場合に
おける」とは、オブジェクト生成関数の現実の実行を仮
想した場合をいう。従って、「当該呼出」による動作内
容は、呼び出されるオブジェクト生成関数がオブジェク
ト生成文から渡される引数があるならばその引数の値に
よって特定されるものであり、また、呼び出されるオブ
ジェクト生成関数からさらに呼び出される関数があれ
ば、これら全ての関数における全ての処理によって特定
されるものである。上記構成により、オブジェクトの生
成文を直接オブジェクト生成関数呼出し後の値のオブジ
ェクトデータに変換するのみであって、オブジェクト生
成関数を呼び出す旨のサブルーチンコール命令に変換し
ないため、本発明に係るプログラム変換装置は、結果的
に前記サブルーチンコール命令に必要なコードのサイズ
だけ小さな機械語プログラムを生成する。また、前記プ
ログラム変換装置はさらに、前記特定手段により特定さ
れたオブジェクト生成文が、生成後に値の変化しないオ
ブジェクトを生成するものであるか否かを判断する変化
要否判断手段を備え、前記変換手段は、前記変化要否判
断手段により肯定的な判断がなされたときに、前記オブ
ジェクト生成文をROM領域に配置されるべき属性を有
するデータに変換し、前記変化要否判断手段により否定
的な判断がなされたときに、前記オブジェクト生成文を
RAM領域に配置されるべき属性を有するデータに変換
することとすることもできる。これにより、const
オブジェクトを生成するためのオブジェクト生成文を、
一定条件下で、ROM領域に配置されるべき属性のデー
タに変換する。従って、結果的に機械語プログラムの実
行に際して必要となるRAM領域を縮小することができ
る。
【0009】
【発明の実施の形態】以下、本発明の実施の形態につい
て、図面を用いて説明する。 <構成>図2は本発明のプログラム変換装置100の構
成を示す図である。プログラム変換装置100は、コン
ピュータに備えられたメモリに格納されたプログラムが
CPUにより実行されることで、ソースプログラムを機
械語プログラムに翻訳(変換)する動作を行ういわゆる
コンパイラであり、機能的には、制御部102、仮初期
値式生成部103、仮初期値式記憶部104、実初期値
式生成部105、実初期値式記憶部106、オブジェク
ト生成文翻訳部107及び一般文翻訳部108から構成
される。コンピュータに備えられたメモリに格納された
プログラムにおいて、制御部102は、メインルーチン
に相当し、仮初期値式生成部103、実初期値式生成部
105、オブジェクト生成文翻訳部107及び一般文翻
訳部108はサブルーチンに相当する。同図には、プロ
グラム変換装置100の他に入力ファイル101及び出
力ファイル109も記載している。ここで、入力ファイ
ル101にはオブジェクト指向言語で記述されたソース
プログラムが格納されている。また、出力ファイル10
9には、プログラム変換装置100が入力ファイル10
1を翻訳した結果として生成する機械語命令列が格納さ
れる。制御部102は、入力ファイル101からメモリ
にソースプログラムを読み込み、ソースプログラム中の
各文に逐次着目して、着目した文の種類により、処理を
振り分ける。即ち、制御部102は、着目した文の種類
に応じて、仮初期値式生成部103、実初期値式生成部
105、オブジェクト生成文翻訳部107又は一般文翻
訳部108を起動する。ここで、着目とは、処理対象と
すること、即ち、処理をするためにポインタ等により所
在を特定することをいう。
【0010】仮初期値式生成部103は、制御部102
に起動され、後述する仮初期値式生成処理を行う部分で
ある。即ち、仮初期値式生成部103は、オブジェクト
生成関数の定義に着目し、仮初期値式を生成し、生成で
きた場合にはオブジェクト生成関数の名称と仮初期値式
との組を仮初期値式記憶部104に記憶する。ここで、
仮初期値式は、オブジェクト生成関数と対応するオブジ
ェクトのそれぞれのメンバ変数を、オブジェクト生成関
数の仮引数と定数のみで表現した式である。仮初期値式
について具体的には後述する。また、オブジェクト生成
関数の名称は、オブジェクト名及び仮引数の数に関する
情報を含む。仮初期値式記憶部104は、メモリ中の特
定の領域である。実初期値式生成部105は、制御部1
02により起動され、後述する実初期値式生成処理を行
う部分である。即ち、実初期値式生成部105は、オブ
ジェクト生成文に着目し、オブジェクト生成文によって
呼び出されることになっているオブジェクト生成関数の
名称と仮初期値式との組が仮初期値式記憶部104に記
憶されている場合に、この仮初期値式の仮引数をオブジ
ェクト生成文に含まれる実引数に置き換えた実初期値式
を生成し、この実初期値式が定数となった場合には、着
目しているオブジェクト生成文を特定する情報と実初期
値式との組を実初期値式記憶部106に記憶する。実初
期値式記憶部106は、メモリ中の特定の領域である。
【0011】オブジェクト生成文翻訳部107は、制御
部102により起動され、後述するオブジェクト生成文
翻訳処理を行う部分である。即ち、オブジェクト生成文
翻訳部107は、オブジェクト生成文に着目し、そのオ
ブジェクト生成文を特定する情報と実初期値式との組が
実初期値式記憶部106に記憶されていた場合、オブジ
ェクト生成文がconstオブジェクトを生成する文で
あるときには、着目したオブジェクト生成文を、ROM
領域に配置されるべき属性のオブジェクトデータに翻訳
し、constオブジェクトを生成する文でないときに
は、RAM領域に配置されるべき属性のオブジェクトデ
ータに翻訳し、翻訳結果を出力ファイル109に出力す
る。また、オブジェクト生成文翻訳部107は、着目し
たオブジェクト生成文を特定する情報と実初期値式との
組が実初期値式記憶部106に記憶されていないときに
は、着目したオブジェクト生成文を、RAM領域に配置
されるべき属性のオブジェクトデータとオブジェクト生
成関数を呼び出すサブルーチンコール命令の機械語命令
列からなるコードとに翻訳し、出力ファイル109に出
力する。一般文翻訳部108は、制御部102により起
動され、一般文翻訳処理を行う部分である。即ち、一般
文翻訳部108は、オブジェクト生成文以外の文を、機
械語命令列に翻訳し、出力ファイル109に出力する。
この一般文翻訳処理は、一般的なプログラム変換装置で
用いられている通常の翻訳処理である。
【0012】<動作>以下、上述の構成を備えるプログ
ラム変換装置100の動作について、図1に示したC+
+言語で記述されたソースプログラムの翻訳を例とし
て、説明する。この翻訳対象となるソースプログラム
は、入力ファイル101に格納されているとする。図3
は、プログラム変換装置100の動作を示すフローチャ
ートである。制御部102は、入力ファイル101に格
納されているソースプログラムをメモリに読み込む(ス
テップS301)。制御部102は、読み込んだソース
プログラム中の各文に逐次着目して、その内容に応じて
処理を振り分けるものであり、このためステップS30
2からステップS309までの処理を行う。制御部10
2は、ソースプログラム中の1文に着目し(ステップS
302)、この文がオブジェクト生成関数の定義である
かを判断し(ステップS303)、オブジェクト生成関
数の定義でなければ、次に大域的なオブジェクトを生成
するためのオブジェクト生成文であるかを判断し(ステ
ップS305)、オブジェクト生成文でもなければ、一
般文翻訳部108を起動して一般文翻訳処理を行わせる
(ステップS306)。一般文翻訳処理の終了後、制御
部102は、ソースプログラム中に未だ着目していない
文があるか否かを判断し(ステップS309)、全ての
文を処理し終えたならば動作を終了し、未だ着目してい
ない文があるならば次の文に着目すべくステップS30
2の処理に戻る。制御部102は、着目した文が(ステ
ップS302)、オブジェクト生成関数の定義であれば
(ステップS303)、オブジェクト生成関数の定義を
入力して仮初期値式生成部103を起動する。ここで、
入力するとは、オブジェクト生成関数の定義等の着目し
た文についての所在を示すポインタを渡すことをいう。
起動された仮初期値式生成部103は、仮初期値式生成
処理を行う(ステップS304)。この仮初期値式生成
処理については、後に詳細に説明する。
【0013】なお、着目した文がオブジェクト生成関数
であるか否かの判断は、ソースプログラム中の前後の文
を参照することにより、クラス定義の内部に存在しクラ
ス名と同一名が付されていることを検知することによっ
て行われるが、この判断自体は、一般的なプログラム変
換装置において用いられる技術の域を出るものではな
い。図1に示すソースプログラムの例においては、制御
部102がクラスXのオブジェクト生成関数の定義「X
(int a,int b){x=a;y=b;z=a
*b;}」に着目した場合に仮初期値式生成処理がなさ
れることになる。仮初期値式生成処理(ステップS30
4)の終了後、制御部102は、オブジェクト生成関数
の定義を入力として、一般文翻訳部108を起動し、一
般文翻訳処理を行わせる(ステップS306)。一般文
翻訳処理によって、オブジェクト生成関数の定義は、機
械語命令列に翻訳される。オブジェクト生成関数の定義
に対する一般文翻訳部108の処理が終了した場合に
は、制御部102は、次にオブジェクト生成文「con
st X obj(2,3);」に着目する(ステップ
S309、S302)。制御部102は、着目した文が
オブジェクト生成関数の定義でないので(ステップS3
03)、オブジェクト生成文であるか否かを判定し(ス
テップS305)、「const X obj(2,
3);」はオブジェクト生成文であるので、このオブジ
ェクト生成文を入力として、実初期値式生成部105を
起動する。起動された実初期値式生成部105は、実初
期値式生成処理を行う(ステップS307)。この実初
期値式生成処理については、後に詳細に説明する。実初
期値式生成処理(ステップS307)の終了後、制御部
102は、着目しているオブジェクト生成文を入力とし
て、オブジェクト生成文翻訳部107を起動し、オブジ
ェクト生成文翻訳処理を行わせる(ステップS30
8)。このオブジェクト生成文翻訳処理についても、後
に詳細に説明する。このようにして、プログラム変換装
置100は、制御部102の振り分け制御によって、ソ
ースプログラムの各文を逐次機械語命令列に翻訳する。
以下、仮初期値式生成処理(ステップS304)、実初
期値式生成処理(ステップS307)、オブジェクト生
成文翻訳処理(ステップS308)のそれぞれについて
詳細に説明する。なお、一般文翻訳処理(ステップS3
06)は、上述したように一般的なプログラム変換装置
で用いられている通常の翻訳処理であるため、詳細な動
作説明は省略する。
【0014】<仮初期値式生成処理>以下、仮初期値式
生成部103の行う仮初期値式生成処理について説明す
る。図4は、仮初期値式生成部103の行う仮初期値式
生成処理を示すフローチャートである。仮初期値式生成
部103は、オブジェクト生成関数の定義を入力とし
て、起動される。ここでは、図1に示すオブジェクト生
成関数の定義「X(int a,intb){x=a;
y=b;z=a*b;}」を入力として、起動される例
に触れながら説明する。仮初期値式生成部103は、オ
ブジェクト生成関数の定義に着目し、このオブジェクト
生成関数がオブジェクトの値を設定する以外の処理を行
なわないかどうかを判断する(ステップS401)。こ
の判断は、オブジェクトのメンバ変数を認識するために
メモリ中に格納されたソースプログラムにおけるクラス
Xのクラス定義をも参照して行うものであり、オブジェ
クト生成関数の定義に含まれる文に「オブジェクトのメ
ンバ変数に値を設定するための代入文」以外の文が含ま
れているかいないかによりなされる。ここで、「オブジ
ェクトのメンバ変数に値を設定するための代入文」と
は、オブジェクトのメンバ変数を「=」の左に記述し、
「=」の右にオブジェクト生成関数の仮引数、定数、又
は算術演算子を記述した文をいう。仮初期値式生成部1
03は、オブジェクト生成関数の定義に含まれる文に
「オブジェクトのメンバ変数に値を設定するための代入
文」以外の文が含まれていない場合には、オブジェクト
の値設定以外の処理を行わないと判断し(ステップS4
01)、yesの分岐に進み仮初期値式を生成する(ス
テップS402)。一方、「オブジェクトのメンバ変数
に値を設定するための代入文」以外の文が含まれている
場合には、仮初期値式生成部103は、ステップS40
1においてnoの分岐に進み、仮初期値式を生成するこ
となく仮初期値式生成処理を終了する。
【0015】図1に示すオブジェクト生成関数X(in
t a,int b)の定義に含まれる文は、「x=
a;」、「y=b;」及び「z=a*b;」であるが、
これらはそれぞれ、クラスXのオブジェクトのメンバ変
数x、y及びzに値を設定するための代入文である。従
って、ステップS401において、仮初期値式生成部1
03は、yesの分岐に進み仮初期値式の生成を行う
(ステップS402)。図5は、オブジェクト生成関数
X(int a,int b)について仮初期値式生成
部103が生成した仮初期値式を示す概念図である。な
お、同図には仮初期値式420の構成要素の対応関係を
示すために、クラスXのオブジェクトのメンバ変数x、
y、zからなるオブジェクトデータ410をも示してい
る。クラスXのオブジェクトの第1のメンバ変数はxで
あり、第2のメンバ変数はyであり、第3のメンバ変数
はzであるため、同図に示すように、X(inta,i
nt b)の仮初期値式は、第1のメンバ変数を示すも
のとしてa、第2のメンバ変数を示すものとしてb、第
3のメンバ変数を示すものとしてa*bを構成要素とす
る。なお、オブジェクト生成関数「X(int a,i
nt b)」の定義においては、クラスXのオブジェク
トのすべてのメンバ変数に値が設定されるようになって
いたが、値が設定されないメンバ変数が存在する場合は
値0が設定されるものとみなして、仮初期値式生成部1
03は、仮初期値式を生成する。こうして、仮初期値式
生成部103は仮初期値式を生成した後(ステップS4
02)、生成した仮初期値式とオブジェクト生成関数の
名称とを組として仮初期値式記憶部104に格納し(ス
テップS403)、仮初期値式生成処理を終える。図6
は、仮初期値式記憶部104の内容を示す概念図であ
る。同図では、上述したオブジェクト生成関数の定義
「X(int a,intb){x=a;y=b;z=
a*b;}」に着目して仮初期値式生成部103が格納
した組430と、また別の組440とを示している。
【0016】<実初期値式生成処理>以下、実初期値式
生成部105の行う実初期値式生成処理について説明す
る。図7は、実初期値式生成部105の行う実初期値式
生成処理を示すフローチャートである。実初期値式生成
部105は、大域的なオブジェクトを生成するためのオ
ブジェクト生成文を入力として、起動される。ここで
は、図1に示すオブジェクト生成文「const X
obj(2,3);」を入力として、起動される例に触
れながら説明する。実初期値式生成部105は、起動さ
れると、オブジェクト生成文に着目し、このオブジェク
ト生成文によって呼び出されることになっているオブジ
ェクト生成関数の名称に基づいて仮初期値式記憶部10
4を検索し、そのオブジェクト生成関数の名称と仮初期
値式との組が格納されているか判断する(ステップS5
01)。この判断により、着目したオブジェクト生成文
により呼び出されるオブジェクト生成関数についての仮
初期値式が生成済みであるか否かが判別できる。この判
断の結果、仮初期値式が生成済みでないと判断された場
合には、ステップS501からnoの分岐に進み、実初
期値式生成部105は、実初期値式生成処理を終了す
る。一方、判断の結果、仮初期値式が生成済みであると
判断された場合には(ステップS501)、実初期値式
生成部105は、仮初期値式の仮引数をオブジェクト生
成文の実引数で置き換えたものである実初期値式を生成
する(ステップS502)。ここでは、図6の組430
に含まれる仮初期値式における仮引数a及びbをオブジ
ェクト生成文「const X obj(2,3);」
の実引数2及び3で置き換えることにより実初期値式を
生成する。即ち、実初期値式は、第1のメンバ変数を示
すものとして2、第2のメンバ変数を示すものとして
3、第3のメンバ変数を示すものとして2*3を構成要
素とする。実初期値式を生成した後、実初期値式生成部
105は、実初期値式の全ての構成要素が定数となるか
否かを判断する(ステップS503)。この判断は、実
初期値式に算術演算子が含まれる場合には、その算術演
算子に従って計算した結果が定数となるか否かの判断と
なる。
【0017】ステップS503の判断結果、実初期値式
の全構成要素が定数である場合には、実初期値式生成部
105は、オブジェクト生成文を特定する情報と実初期
値式とオブジェクト生成文との組を実初期値式記憶部1
06に格納し(ステップS504)、実初期値式生成処
理を終える。なお、実初期値式の構成要素のうち算術演
算子が含まれていたものは、実初期値式生成部105が
実初期値式を実初期値式記憶部106に格納する際に
は、その算術演算を計算した上で結果の値に置き換えて
格納する。この結果、実初期値式記憶部106の内容
は、図8のようになる。図8は、実初期値式記憶部10
6の内容を示す概念図である。同図では、上述したオブ
ジェクト生成文「const X obj(2,
3);」に着目して実初期値式生成部105が格納した
組510を示している。同図中、const X ob
j(2,3);のメモリ内でのアドレスとは、メモリ中
に格納されたソースプログラム中のこのオブジェクト生
成文に着目するためのポインタ値をいう。また、ステッ
プS503の判断結果、実初期値式の構成要素に定数で
ないものがある場合には(ステップS503)、実初期
値式生成部105は、実初期値式記憶部106に何も格
納することなく、実初期値式生成処理を終える。
【0018】<オブジェクト生成文翻訳処理>以下、オ
ブジェクト生成文翻訳部107の行うオブジェクト生成
文翻訳処理について説明する。図9は、オブジェクト生
成文翻訳部107の行うオブジェクト生成文翻訳処理を
示すフローチャートである。オブジェクト生成文翻訳部
107は、オブジェクト生成文を入力として、起動され
る。ここでは、上述の実初期値式生成処理に引き続いて
(図3参照)、図1に示すオブジェクト生成文「con
st X obj(2,3);」を入力として、オブジ
ェクト生成文翻訳部107が起動される例に触れながら
説明する。オブジェクト生成文翻訳部107は起動され
ると、オブジェクト生成文に着目し、このオブジェクト
生成文を特定する情報が、実初期値式と組とされて実初
期値式記憶部106に格納されているか否かを判断する
(ステップS601)。ステップS601において格納
されていないと判定された場合には、オブジェクト生成
文翻訳部107は、従来のプログラム変換装置と同様に
(図14参照)、オブジェクト生成文を、オブジェクト
生成関数を呼び出すためのコード(サブルーチンコール
命令)と、RAM領域に配置される属性のオブジェクト
データとに翻訳する(ステップS602)。
【0019】一方、実初期値式記憶部106が図8に示
すような内容である場合には、ステップS601におい
て、着目したオブジェクト生成文を特定する情報が、実
初期値式と組として実初期値式記憶部106に格納され
ていると判断されるため、オブジェクト生成文翻訳部1
07は、着目しているオブジェクト生成文がconst
オブジェクトを生成するものであるか否かを判断する
(ステップS603)。この判断は、着目しているオブ
ジェクト生成文に修飾子「const」が付されている
か否かによって行われる。ステップS603において否
定的な判断がなされたとすると、オブジェクト生成文翻
訳部107は、着目しているオブジェクト生成文を、R
AM領域に配置される属性のオブジェクトデータに翻訳
する(ステップS605)。このステップS605にお
ける翻訳は、サブルーチンコール命令を生成しないた
め、ステップS602における翻訳と比べて、コードサ
イズの小さい機械語プログラムを生成することにつなが
る。また、着目しているオブジェクト生成文が、図1に
示す「const X obj(2,3);」であった
場合には、オブジェクト生成文翻訳部107は、ステッ
プS603において肯定的な判断をなし、着目している
オブジェクト生成文を、ROM領域に配置される属性の
オブジェクトデータに翻訳する(ステップS604)。
なお、ステップS604、S605における翻訳に際し
て、オブジェクト生成文翻訳部107は、実初期値式記
憶部106中の着目したオブジェクト生成文に対応する
実初期値式を参照して、オブジェクトデータの値を特定
する。図10は、オブジェクト生成文翻訳処理のステッ
プS604によるオブジェクト生成文の翻訳結果を示す
図である。
【0020】同図は、「const X obj(2,
3);」の翻訳結果を示している。また、この翻訳結果
は、オブジェクトobjのオブジェクトデータが3つの
4バイトデータでそれぞれの値が「2」、「3」、
「6」のものから構成されることを示しており、またこ
のオブジェクトデータは、「.section ROM
DATA」と「.section END」とに挟まれ
て記述されており、ROM領域に配置されるべきデータ
であることを示している。従って、最終的に生成される
機械語プログラムが、実行されるに際して、オブジェク
トobjのオブジェクトデータは、ROMに配置され得
る。このことは、実行時に必要なRAM領域を縮小でき
ることにつながる。また、例えば、着目したオブジェク
ト生成文が「X obj(2,3);」であったなら
ば、オブジェクト生成文翻訳部107はステップS60
5の処理によって、このオブジェクト生成文を、図10
に示した翻訳結果のうち「.section ROMD
ATA」を「.section RAMDATA」に代
えたものに翻訳する。オブジェクト生成文翻訳部107
は、ステップS602、ステップS604、又はステッ
プS605を行った後、翻訳結果を出力ファイル109
に出力する(ステップS606)。
【0021】以上、本発明に係るプログラム変換装置に
ついて、実施形態に基づいて説明したが、本発明はこれ
ら実施形態に限られないことは勿論である。即ち、 (1)実施の形態では、プログラム変換装置は、C++
言語で記述されたソースプログラムを翻訳対象とした
が、これに限定されることはなく、他のオブジェクト指
向言語で記述されたソースプログラムを翻訳対象とする
ものであってもよい。
【0022】(2)実施の形態では、大域的なオブジェ
クトを生成する旨のオブジェクト生成文についての翻訳
処理(ステップS305等)を説明したが、ここでいう
大域的なオブジェクトとは、オブジェクトデータが機械
語プログラムの実行前にメモリに格納されるべきもので
あることを示すものであれば足る。即ち、言語によって
大域的、局所的の別がない場合であっても、ここでいう
大域的と同等の意味を示すオブジェクトを生成するため
のオブジェクト生成文については、プログラム変換装置
はステップS305の判断ブロックにおいてyesと判
断する。
【0023】(3)実施の形態において図3のフローチ
ャートに示したプログラム変換装置100の動作は、オ
ブジェクト生成関数の定義が、ソースプログラム中にお
いてオブジェクト生成文より前に置かれていることを前
提としたものであるが、この他の場合に対応するために
は、ソースプログラム中のオブジェクト生成関数すべて
について仮初期値式生成処理を行った後に、ソースプロ
グラム中のオブジェクト生成文に着目しても実初期値式
生成処理を行うようにしてもよい。また、オブジェクト
生成文に着目するまでは、そのオブジェクト生成文に対
応するオブジェクト生成関数についての仮初期値式生成
処理は行わず、オブジェクト生成文を発見したときに、
それが呼び出すオブジェクト生成関数を検索して仮初期
値式生成処理を行い、これに続けて実初期値式生成処理
とオブジェクト生成文翻訳処理とを行うようにしてもよ
い。また、オブジェクト生成文を発見したときに、それ
が呼び出すオブジェクト生成関数を検索するならば、実
初期値式生成処理と仮初期値式生成処理とを混ぜ合わせ
て、オブジェクト生成文の実引数の値に基づいてオブジ
ェクト生成関数での動作を計算するような処理とするこ
とにより、このオブジェクト生成文をオブジェクト生成
関数を呼び出すサブルーチンコール命令に翻訳しなけれ
ばならないかを判断することとしてもよい。これによれ
ば、オブジェクト生成関数が仮引数の値によって分岐す
るような複数パスの処理構造をもっている場合において
も、オブジェクト生成文の実引数で定まる単一パスのみ
について、オブジェクトのメンバ変数に値を設定する以
外の処理を行わないかどうかを判断すれば足りることに
なる。
【0024】(4)実施の形態では、実初期値式生成部
105は、実初期値式が定数であるか否かの判断を(ス
テップS503)、仮初期値式の仮引数を実引数で置き
換えた実初期値式を判断対象として行うこととしたが、
判断の方法は、これに限定されることはなく、例えば、
オブジェクト生成文の実引数が定数であるか否かを判別
することによって行うこととしてもよい。
【0025】(5)実施の形態では、仮初期値式生成部
103は、オブジェクト生成関数の定義に「オブジェク
トのメンバ変数に値を設定するための代入文」以外の文
が含まれるかどうかを判断することとしたが(ステップ
S401)、この「代入文」は、オブジェクトのメンバ
変数に静的なアドレス値を代入する文も含むこととして
もよい。静的なアドレス値とは機械語プログラムの実行
前に値の定まるアドレス値であり、実行中に解決される
アドレス値を含まない。また、仮初期値式生成部103
が、オブジェクト生成関数がオブジェクトの値を設定す
る以外の処理を行わないと判断する基準を拡大して、
「オブジェクト生成関数の内部でのみ用いる変数を左辺
又は右辺に置いた代入文」が含まれていてもよいことと
してもよい。即ち、オブジェクト生成関数がオブジェク
トの値を設定する以外の処理を行わないと判断(ステッ
プS401)する理由は、オブジェクト生成関数が静的
なことが、オブジェクト生成文をオブジェクト生成関数
を呼び出す旨のサブルーチンコール命令に翻訳しないで
よいことの条件となるからである。ここで、オブジェク
ト生成関数が静的とは、オブジェクト生成関数の動作
が、例えばオペレーティングシステムのサービスを呼び
出すようなものや入出力動作を行うもの等のように実際
に機械語プログラムを実行しなければ意味をなさないも
のではなく、メンバ変数への値の代入等のように動作結
果を翻訳時に計算によって特定できるものをいう。な
お、オブジェクト生成関数がメンバ変数への値の代入を
行っていない場合は、0という定数をメンバ変数に代入
しているものとして扱えばよい。
【0026】(6)実施の形態で示した仮初期値式生成
部103によるオブジェクト生成関数がオブジェクトの
値を設定する以外の処理を行わないかどうかの判断は、
判断対象のオブジェクト生成関数から呼び出される関数
がある場合には、その関数をも含めて判断することとし
てもよい。即ち、その関数が、オペレーティングシステ
ムのサービスを呼び出すようなものや入出力動作を行う
ものでなく、演算処理(判断、分岐含む)をするのみの
ものであれば、前記判断においてその関数を「オブジェ
クトのメンバ変数に値を設定するための代入文」である
とみなすこととしてもよい。また、仮初期値式生成部1
03の変形例として、前記判断対象のオブジェクト生成
関数の定義にさらに別のオブジェクト生成文が含まれて
いた場合であって、そのオブジェクト生成文が呼び出す
オブジェクト生成関数の名称が仮初期値式記憶部104
に記憶されているときには、前記判断において前記オブ
ジェクト生成文を「オブジェクトのメンバ変数に値を設
定するための代入文」であるとみなすこととするものも
考えられる。以下この変形例を変形仮初期値式生成部と
いう。但し、この場合には、判断対象となるオブジェク
ト生成関数についての仮初期値式は、そのオブジェクト
生成関数に含まれるオブジェクト生成文に関連する仮初
期値式の仮引数を当該オブジェクト生成文の実引数で置
き換えたものとなる。
【0027】以下、オブジェクト生成文がオブジェクト
生成関数の定義に含まれていた場合に上述した変形仮初
期値式生成部が生成する仮初期値式について説明する。
図11は、クラスXのオブジェクト生成関数の定義とク
ラスXのオブジェクト生成文を含むクラスYのオブジェ
クト生成関数の定義を含むC++言語で記述されたソー
スプログラムの一部を示す図である。変形仮初期値式生
成部によって、まず、図11に示すソースプログラムに
おけるクラスXのオブジェクト生成関数に対応する仮初
期値式が生成される。これは、仮初期値式生成部103
と同様の処理となる(図5参照)。次に、変形仮初期値
式生成部は、クラスXのオブジェクト生成関数に対する
仮初期値式を利用して、クラスYのオブジェクト生成関
数に対する仮初期値式を生成する。図12は、オブジェ
クト生成関数Y(int i)について変形仮初期値式
生成部が生成した仮初期値式を示す概念図である。な
お、同図には仮初期値式820の構成要素の対応関係を
示すために、クラスYのオブジェクトのオブジェクトデ
ータ810をも示している。オブジェクトデータ810
については、クラスXのオブジェクトのメンバ変数であ
るx、y、zと独自のメンバ変数nとで表している。仮
初期値式820の構成要素のうち、第1〜第3のメンバ
変数に対応するものは、図5に示すクラスXのオブジェ
クト生成関数についての仮初期値式420中の仮引数
を、図11に示すオブジェクト生成関数Y(int
i)に含まれるオブジェクト生成文obj(i,3)の
実引数に置き換えたものであり、第4のメンバ変数に対
応するものは、オブジェクト生成関数Y(int i)
中のn=i*2;に基づくものである。
【0028】(7)実施の形態で示した仮初期値式生成
部103によるオブジェクト生成関数がオブジェクトの
値を設定する以外の処理を行わないかどうかの判断は、
さらに、ソースプログラムがC++言語で記述されてお
り、オブジェクト生成関数がコンストラクタ初期設定子
(ctor−initializer)と関数本体(f
ct−body)で構成されるコンストラクタである場
合には、関数本体が空文であるかどうかによって判断す
ることとしてもよい。なお、C++言語のコンストラク
タの詳細については、「注釈C++リファレンスマニュ
アル」(B.ストラウストラップ著トッパンISDN4
−8101−110.7c)に詳しく説明されている。
仮初期値式生成部103が上述したような判断を用いる
場合、オブジェクト生成関数のサブルーチンコール命令
に翻訳しなくてよくなるオブジェクト生成文の数は少な
くなる可能性があるが、前記判断が簡単なものであるた
め、プログラム変換装置の処理速度はほとんど低下しな
い。また、プログラマにコンストラクタを、コンストラ
クタ初期設定子と関数本体とで構成するように記述させ
ることにより前記可能性は除去できる。なお、参考まで
に、図11に示したソースプログラムを、コンストラク
タ初期設定子と空文である関数本体からなるコンストラ
クタで記述した場合の例を図13に示す。コンストラク
タ初期設定子は「:」から「{」に囲まれた部分であ
り、関数本体は「{」から「}」に囲まれた部分であ
る。例えば、同図中の「X(int a,int
b):x(a),y(a),z(a*b){ }」にお
ける関数本体は空文である。また、コンストラクタ初期
設定子「x(a)」、「y(b)」、「z(a*b)」
はそれぞれ「x=a」、「y=b」、「z=a*b」と
同じ意味である。
【0029】(8)実施の形態におけるプログラム変換
装置の処理手順(図3、図4、図7、図9のフローチャ
ートの手順等)を機械語プログラムにより実現し、これ
を記録媒体に記録して流通・販売の対象にしても良い。
このような記録媒体には、ICカード、光ディスク、フ
レキシブルディスク、ROM等があるが、これらに記録
された機械語プログラムは、汎用のコンピュータにイン
ストールされることにより利用に供される。即ち、汎用
のコンピュータは、インストールした上記機械語プログ
ラムを逐次実行して、実施の形態に示したようなプログ
ラム変換装置を実現する。また、汎用のコンピュータに
上述のプログラム変換装置の処理手順を実行させるため
のコンピュータプログラムは、ハードディスク等の記録
媒体及び通信回線等を介してオンラインで流通させ頒布
することもできる。
【0030】
【発明の効果】以上の説明から明らかなように、本発明
に係るプログラム変換装置は、オブジェクト指向言語で
記述されたソースプログラムを機械語プログラムに変換
するプログラム変換装置であって、前記ソースプログラ
ムにおけるオブジェクトを生成するためのオブジェクト
生成文であってオブジェクト生成関数を呼び出すオブジ
ェクト生成文を特定する特定手段と、前記特定手段によ
り特定されたオブジェクト生成文によってオブジェクト
生成関数が呼び出されたと仮定した場合における当該呼
出によって、当該オブジェクト生成文により生成される
べきオブジェクトのメンバ変数に対し静的に値を設定す
ること以外の動作が行われるか否かを判断する判断手段
と、前記判断手段により否定的な判断がなされた場合
に、前記呼出によって前記メンバ変数に対して設定され
る値を算出するメンバ変数値算出手段と、前記メンバ変
数算出手段により前記値の算出なされたときに、前記オ
ブジェクト生成文を、前記メンバ変数値算出手段により
算出された値をもつデータであってオブジェクトのメン
バ変数と同じサイズのデータのみに変換する変換手段と
を備えることを特徴とする。これにより、オブジェクト
の生成文を直接オブジェクト生成関数呼出し後の値のオ
ブジェクトデータに変換するのみであって、オブジェク
ト生成関数を呼び出す旨のサブルーチンコール命令に変
換しないため、本発明に係るプログラム変換装置は、結
果的に前記サブルーチンコール命令に必要なコードのサ
イズだけ小さな機械語プログラムを生成する。また、生
成された機械語プログラムのコードサイズが小さいこと
は、実行速度の向上をもたらす。
【0031】ここで、前記判断手段は、前記オブジェク
ト生成文により呼び出されるオブジェクト生成関数が他
の関数を呼び出すものではない場合であって、当該オブ
ジェクト生成関数によって前記オブジェクトのメンバ変
数に設定される値が、定数と当該オブジェクト生成関数
の定義中の仮引数とで構成される式又は前記仮引数によ
り表現できる場合に、前記メンバ変数に設定される値を
前記式又は前記仮引数により表現した仮メンバ変数値式
を生成する仮メンバ変数値式生成部と、前記仮メンバ変
数値式生成部により仮メンバ変数値式が生成されている
場合に、前記仮メンバ変数値式における仮引数を、前記
オブジェクト生成文中の実引数に置換した実メンバ変数
値式を生成する実メンバ変数値式生成部と、前記実メン
バ変数値式生成部により生成された実メンバ変数値式が
定数値であることを検出する定数値検出部とを有し、前
記判断手段は、前記定数値検出部により前記実メンバ変
数値式が定数値であることが検出されたときに、否定的
に前記判断をなすこととすることもできる。これによ
り、複数のオブジェクト生成文によって、同一のオブジ
ェクト生成関数が呼び出される場合において、それぞれ
のオブジェクト生成文についてオブジェクト生成関数の
サブルーチンコール命令に翻訳しなければならないかど
うかの判断に必要な仮メンバ変数値式生成部の動作が1
回で足りるようになるので、同じオブジェクト生成関数
を呼び出すようなオブジェクト生成文が多く含まれるソ
ースプログラムを翻訳する場合に、前記判断を重複動作
なく行うことができるようになる。これは、オブジェク
ト生成関数に関して仮メンバ変数値式生成部が1回生成
した仮メンバ変数値式が、複数のオブジェクト生成文そ
れぞれに対応しての実メンバ変数値式生成部の動作の基
礎となるためである。
【0032】また、前記判断手段は、前記特定手段によ
り特定されたオブジェクト生成文により呼び出されるオ
ブジェクト生成関数の定義に、メンバ変数に値を設定す
る代入文以外の文が含まれているときに、肯定的に前記
判断をなすこととすることもできる。これにより、オブ
ジェクト生成文についてオブジェクト生成関数のサブル
ーチンコール命令に翻訳しなければならないかどうかの
判断を、代入文以外の文が含まれるか否かという簡単な
判断に代えるため、この判断をある程度高速に行える。
【0033】また、前記判断手段は、前記特定手段によ
り特定されたオブジェクト生成文により呼び出されるオ
ブジェクト生成関数の定義に、さらに第2のオブジェク
ト生成文が含まれている場合には、当該第2のオブジェ
クト生成文によって第2のオブジェクト生成関数が呼び
出されたと仮定したときに、当該呼出によって、当該第
2のオブジェクト生成文により生成されるべきオブジェ
クトのメンバ変数に対し静的に値を設定すること以外の
動作が行われないならば、当該第2のオブジェクト生成
文を、前記代入文と等価なものとみなして前記判断をな
すこととすることもできる。これにより、オブジェクト
生成関数内にさらにオブジェクト生成文が含まれている
場合であっても、一定条件下で、当該オブジェクト生成
関数を呼び出すオブジェクト生成文を当該オブジェクト
生成関数のサブルーチンコール命令に翻訳せずにオブジ
ェクトデータのみに翻訳することができるようになる。
【0034】また、前記オブジェクト指向言語はC++
言語であり、前記オブジェクト生成関数は、コンストラ
クタ初期設定子と関数本体とで構成されるコンストラク
タであり、前記判断手段は、前記特定手段により特定さ
れたオブジェクト生成文によって呼び出されるコンスト
ラクタの関数本体が空文以外のときに、肯定的に前記判
断をなすこととすることもできる。これにより、オブジ
ェクト生成文についてオブジェクト生成関数のサブルー
チンコール命令に翻訳しなければならないかどうかの判
断を、関数本体が空文かどうかの簡単な判断を用いて行
うため、この判断を高速に行える。
【0035】また、前記プログラム変換装置はさらに、
前記特定手段により特定されたオブジェクト生成文が、
生成後に値の変化しないオブジェクトを生成するもので
あるか否かを判断する変化要否判断手段を備え、前記変
換手段は、前記変化要否判断手段により肯定的な判断が
なされたときに、前記オブジェクト生成文をROM領域
に配置されるべき属性を有するデータに変換し、前記変
化要否判断手段により否定的な判断がなされたときに、
前記オブジェクト生成文をRAM領域に配置されるべき
属性を有するデータに変換することとすることもでき
る。これにより、constオブジェクトを生成するた
めのオブジェクト生成文を、一定条件下で、ROM領域
に配置されるべき属性のデータに変換する。従って、結
果的に機械語プログラムの実行に際して必要となるRA
M領域を縮小することができる。このことは、組み込み
用途のマイクロコンピュータにおいては一般にROMは
RAMよりコストが低いので、機械語プログラムの実行
コストを削減することにつながる。
【図面の簡単な説明】
【図1】オブジェクト生成関数を含むクラスXのクラス
定義とクラスXのオブジェクトを生成するオブジェクト
生成文とからなるC++言語のソースプログラムの一部
を示す図である。
【図2】本発明のプログラム変換装置100の構成を示
す図である。
【図3】プログラム変換装置100の動作を示すフロー
チャートである。
【図4】仮初期値式生成部103の行う仮初期値式生成
処理を示すフローチャートである。
【図5】オブジェクト生成関数X(int a,int
b)について仮初期値式生成部103が生成した仮初
期値式を示す概念図である。
【図6】仮初期値式記憶部104の内容を示す概念図で
ある。
【図7】実初期値式生成部105の行う実初期値式生成
処理を示すフローチャートである。
【図8】実初期値式記憶部106の内容を示す概念図で
ある。
【図9】オブジェクト生成文翻訳部107の行うオブジ
ェクト生成文翻訳処理を示すフローチャートである。
【図10】オブジェクト生成文翻訳処理のステップS6
04によるオブジェクト生成文の翻訳結果を示す図であ
る。
【図11】クラスXのオブジェクト生成関数の定義とク
ラスXのオブジェクト生成文を含むクラスYのオブジェ
クト生成関数の定義を含むC++言語で記述されたソー
スプログラムの一部を示す図である。
【図12】オブジェクト生成関数Y(int i)につ
いて変形仮初期値式生成部が生成した仮初期値式を示す
概念図である。
【図13】図11に示したソースプログラムを、コンス
トラクタ初期設定子と空文である関数本体からなるコン
ストラクタで記述した場合の例を示す図である。
【図14】従来のプログラム変換装置が図1に示したオ
ブジェクト生成文を翻訳した結果である機械語命令列を
示す図である。
【符号の説明】 100 プログラム変換装置 101 入力ファイル 102 制御部 103 仮初期値式生成部 104 仮初期値式記憶部 105 実初期値式生成部 106 実初期値式記憶部 107 オブジェクト生成文翻訳部 108 一般文翻訳部 109 出力ファイル
───────────────────────────────────────────────────── フロントページの続き (72)発明者 山中 貴代和 大阪府門真市大字門真1006番地 松下電器 産業株式会社内 (72)発明者 田中 裕久 大阪府門真市大字門真1006番地 松下電器 産業株式会社内 Fターム(参考) 5B081 AA09 CC11 CC27 CC41

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクト指向言語で記述されたソー
    スプログラムを機械語プログラムに変換するプログラム
    変換装置であって、 前記ソースプログラムにおけるオブジェクトを生成する
    ためのオブジェクト生成文であってオブジェクト生成関
    数を呼び出すオブジェクト生成文を特定する特定手段
    と、 前記特定手段により特定されたオブジェクト生成文によ
    ってオブジェクト生成関数が呼び出されたと仮定した場
    合における当該呼出によって、当該オブジェクト生成文
    により生成されるべきオブジェクトのメンバ変数に対し
    静的に値を設定すること以外の動作が行われるか否かを
    判断する判断手段と、 前記判断手段により否定的な判断がなされた場合に、前
    記呼出によって前記メンバ変数に対して設定される値を
    算出するメンバ変数値算出手段と、 前記メンバ変数算出手段により前記値の算出なされたと
    きに、前記オブジェクト生成文を、前記メンバ変数値算
    出手段により算出された値をもつデータであってオブジ
    ェクトのメンバ変数と同じサイズのデータのみに変換す
    る変換手段とを備えることを特徴とするプログラム変換
    装置。
  2. 【請求項2】 前記判断手段は、 前記オブジェクト生成文により呼び出されるオブジェク
    ト生成関数が他の関数を呼び出すものではない場合であ
    って、当該オブジェクト生成関数によって前記オブジェ
    クトのメンバ変数に設定される値が、定数と当該オブジ
    ェクト生成関数の定義中の仮引数とで構成される式又は
    前記仮引数により表現できる場合に、前記メンバ変数に
    設定される値を前記式又は前記仮引数により表現した仮
    メンバ変数値式を生成する仮メンバ変数値式生成部と、 前記仮メンバ変数値式生成部により仮メンバ変数値式が
    生成されている場合に、前記仮メンバ変数値式における
    仮引数を、前記オブジェクト生成文中の実引数に置換し
    た実メンバ変数値式を生成する実メンバ変数値式生成部
    と、 前記実メンバ変数値式生成部により生成された実メンバ
    変数値式が定数値であることを検出する定数値検出部と
    を有し、 前記判断手段は、前記定数値検出部により前記実メンバ
    変数値式が定数値であることが検出されたときに、否定
    的に前記判断をなすことを特徴とする請求項1記載のプ
    ログラム変換装置。
  3. 【請求項3】 前記判断手段は、前記特定手段により特
    定されたオブジェクト生成文により呼び出されるオブジ
    ェクト生成関数の定義に、メンバ変数に値を設定する代
    入文以外の文が含まれているときに、肯定的に前記判断
    をなすことを特徴とする請求項1記載のプログラム変換
    装置。
  4. 【請求項4】 前記判断手段は、前記特定手段により特
    定されたオブジェクト生成文により呼び出されるオブジ
    ェクト生成関数の定義に、さらに第2のオブジェクト生
    成文が含まれている場合には、当該第2のオブジェクト
    生成文によって第2のオブジェクト生成関数が呼び出さ
    れたと仮定したときに、当該呼出によって、当該第2の
    オブジェクト生成文により生成されるべきオブジェクト
    のメンバ変数に対し静的に値を設定すること以外の動作
    が行われないならば、当該第2のオブジェクト生成文
    を、前記代入文と等価なものとみなして前記判断をなす
    ことを特徴とする請求項3記載のプログラム変換装置。
  5. 【請求項5】 前記オブジェクト指向言語はC++言語
    であり、 前記オブジェクト生成関数は、コンストラクタ初期設定
    子と関数本体とで構成されるコンストラクタであり、 前記判断手段は、前記特定手段により特定されたオブジ
    ェクト生成文によって呼び出されるコンストラクタの関
    数本体が空文以外のときに、肯定的に前記判断をなすこ
    とを特徴とする請求項1記載のプログラム変換装置。
  6. 【請求項6】 前記プログラム変換装置はさらに、前記
    特定手段により特定されたオブジェクト生成文が、生成
    後に値の変化しないオブジェクトを生成するものである
    か否かを判断する変化要否判断手段を備え、 前記変換手段は、前記変化要否判断手段により肯定的な
    判断がなされたときに、前記オブジェクト生成文をRO
    M領域に配置されるべき属性を有するデータに変換し、
    前記変化要否判断手段により否定的な判断がなされたと
    きに、前記オブジェクト生成文をRAM領域に配置され
    るべき属性を有するデータに変換することを特徴とする
    請求項1〜5のいずれか1項に記載のプログラム変換装
    置。
  7. 【請求項7】 オブジェクト指向言語で記述されたソー
    スプログラムを機械語プログラムに変換するプログラム
    変換処理を、コンピュータに実行させるための制御プロ
    グラムを記録した記録媒体であって、 前記制御プログラムは、 前記ソースプログラムにおけるオブジェクトを生成する
    ためのオブジェクト生成文であってオブジェクト生成関
    数を呼び出すオブジェクト生成文を特定する特定ステッ
    プと、 前記特定ステップにより特定されたオブジェクト生成文
    によってオブジェクト生成関数が呼び出されたと仮定し
    た場合における当該呼出によって、当該オブジェクト生
    成文により生成されるべきオブジェクトのメンバ変数に
    対し静的に値を設定すること以外の動作が行われるか否
    かを判断する判断ステップと、 前記判断ステップにより否定的な判断がなされた場合
    に、前記呼出によって前記メンバ変数に対して設定され
    る値を算出するメンバ変数値算出ステップと、 前記メンバ変数値算出ステップにより前記値の算出がな
    された場合に、前記オブジェクト生成文を、前記メンバ
    変数値算出ステップにより算出された値をもつデータで
    あってオブジェクトのメンバ変数と同じサイズのデータ
    のみに変換する変換ステップとを含むことを特徴とする
    記録媒体。
JP20696698A 1998-07-22 1998-07-22 プログラム変換装置 Expired - Fee Related JP4026940B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP20696698A JP4026940B2 (ja) 1998-07-22 1998-07-22 プログラム変換装置
US09/356,229 US6292937B1 (en) 1998-07-22 1999-07-16 Program conversion device for translating an object-oriented language source program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP20696698A JP4026940B2 (ja) 1998-07-22 1998-07-22 プログラム変換装置

Publications (2)

Publication Number Publication Date
JP2000040005A true JP2000040005A (ja) 2000-02-08
JP4026940B2 JP4026940B2 (ja) 2007-12-26

Family

ID=16531961

Family Applications (1)

Application Number Title Priority Date Filing Date
JP20696698A Expired - Fee Related JP4026940B2 (ja) 1998-07-22 1998-07-22 プログラム変換装置

Country Status (2)

Country Link
US (1) US6292937B1 (ja)
JP (1) JP4026940B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006185353A (ja) * 2004-12-28 2006-07-13 Denso Corp 定数属性・変数属性カプセル化方法およびマイクロコンピュータならびにデータ構造

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6968438B1 (en) * 1999-09-20 2005-11-22 Texas Instruments Incorporated Application programming interface with inverted memory protocol for embedded software systems
JP2005018425A (ja) * 2003-06-26 2005-01-20 Matsushita Electric Ind Co Ltd プログラム変換方法、プログラムおよび記憶媒体
JP2007537512A (ja) * 2004-04-30 2007-12-20 マイクロソフト コーポレーション エンドユーザルールロジックを定義し、実行するルールフレームワーク
EP1625513B1 (en) * 2004-04-30 2018-04-18 Microsoft Technology Licensing, LLC Rules framework for definition and execution of end-user rules logic
US7912863B1 (en) 2004-07-30 2011-03-22 Microsoft Corporation Compositional lifting of operations over structural types
US7774376B1 (en) * 2004-07-30 2010-08-10 Microsoft Corporation Type-system extensions for object-oriented language based on coercive subtyping with restrictions
US7467373B2 (en) * 2004-10-18 2008-12-16 Microsoft Corporation Global object system
US7770159B2 (en) * 2004-10-20 2010-08-03 Microsoft Corporation Virtual types
US20060195411A1 (en) * 2005-02-28 2006-08-31 Microsoft Corporation End user data activation
US7707562B1 (en) * 2005-03-31 2010-04-27 Markus Kaltenbach Code translation verification
US7917887B2 (en) * 2007-06-28 2011-03-29 Microsoft Corporation DDEX (data designer extensibility) default object implementations for software development processes
WO2009017158A1 (ja) * 2007-08-01 2009-02-05 Nec Corporation 変換プログラム探索システムおよび変換プログラム探索方法
EP2154605A1 (fr) * 2008-08-07 2010-02-17 Nagravision S.A. Méthode de traitement d'une sous-routine par un microprocesseur
US8843888B2 (en) * 2010-01-26 2014-09-23 Oracle America, Inc. Characterizing artificiality in object code
CN106708595B (zh) * 2016-12-30 2019-09-20 北京航空航天大学 程序语句形式化转换的方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5481708A (en) * 1992-06-05 1996-01-02 Borland International, Inc. System and methods for optimizing object-oriented compilations
US5790861A (en) * 1995-07-07 1998-08-04 Sun Microsystems, Inc. Method and apparatus for generating executable code from object-oriented C++ source code
JPH09179738A (ja) 1995-12-26 1997-07-11 Hitachi Ltd オブジェクト指向言語処理方法及び処理装置
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
JPH1011291A (ja) 1996-06-21 1998-01-16 Mitsubishi Electric Corp オブジェクトデータ構造およびオブジェクトデータ構造を用いた計算機システム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006185353A (ja) * 2004-12-28 2006-07-13 Denso Corp 定数属性・変数属性カプセル化方法およびマイクロコンピュータならびにデータ構造

Also Published As

Publication number Publication date
JP4026940B2 (ja) 2007-12-26
US6292937B1 (en) 2001-09-18

Similar Documents

Publication Publication Date Title
US5768592A (en) Method and apparatus for managing profile data
JP4794437B2 (ja) 編集処理中にプログラムコンポーネントの整合性を表現しチェックするための拡張型システム
JP2000040005A (ja) プログラム変換装置
JPH09330233A (ja) 最適目的コード生成方法
JP4638484B2 (ja) データ処理装置におけるデータ整合性
US9672084B2 (en) Method of generating automatic code for remote procedure call
JPH05508504A (ja) プログラム翻訳方法
JPH025139A (ja) シミユレーシヨン方法
Bailey et al. A formal model and specification language for procedure calling conventions
US6301652B1 (en) Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
Rieu-Helft et al. How to get an efficient yet verified arbitrary-precision integer library
US11068463B2 (en) System and method for managing log data
CN113835688B (zh) 一种科学计算语言解释器的对象封装方法
JPH0668724B2 (ja) シミユレーシヨン方法
JP4626032B2 (ja) プログラム変換装置,プログラム変換方法及び記録媒体
JP2000122876A (ja) 情報処理装置
JP2004013190A (ja) ソフトウエア開発環境、シミュレータ及び記録媒体
CN114327497A (zh) 一种代码处理方法、装置及设备
US20060123402A1 (en) Forming an executable program from a list of program instructions
JP3327662B2 (ja) プログラム翻訳装置及びプログラム翻訳方法
CN114327469A (zh) 一种代码解析方法、装置、设备及介质
Lichtman Resource Aware Program Synthesis
JP5456457B2 (ja) プログラム開発支援装置及びプログラム開発支援方法
US7627859B2 (en) Method for configuring non-script language library files to be run as scripts
JPH1083311A (ja) シミュレータ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050602

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070608

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070612

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070726

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20070726

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070911

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20071009

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

Free format text: PAYMENT UNTIL: 20101019

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20111019

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20121019

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20131019

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees