JPH0934725A - 言語処理装置及び言語処理方法 - Google Patents

言語処理装置及び言語処理方法

Info

Publication number
JPH0934725A
JPH0934725A JP7201781A JP20178195A JPH0934725A JP H0934725 A JPH0934725 A JP H0934725A JP 7201781 A JP7201781 A JP 7201781A JP 20178195 A JP20178195 A JP 20178195A JP H0934725 A JPH0934725 A JP H0934725A
Authority
JP
Japan
Prior art keywords
function
size
specific space
code
space
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
JP7201781A
Other languages
English (en)
Inventor
Hiroko Isozaki
博子 磯崎
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP7201781A priority Critical patent/JPH0934725A/ja
Priority to EP96111098A priority patent/EP0755002A3/en
Priority to US08/680,029 priority patent/US5845127A/en
Publication of JPH0934725A publication Critical patent/JPH0934725A/ja
Pending 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/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • 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

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)【要約】 【目的】 オブジェクト・モジュール・ファイルの生成
時に特定空間へ配置すべき関数の最適な組合せを自動的
に選択することにより、処理能力の向上を図り、かつユ
ーザの負担を軽減する言語処理装置及び言語処理方法を
提供する。 【構成】 ソースプログラムを入力して解析し、命令コ
ードを生成し、オブジェクトプログラムファイルとして
出力する言語処理装置10において、構文解析時に各関
数毎の呼び出し回数を計数する関数呼び出し計数部12
と、計数された各関数毎の呼び出し回数及びコード生成
部14で生成された各関数毎のコードサイズを格納する
関数呼び出し回数データ格納部13と、プログラム空間
中の特定領域に配置すべき関数を、呼び出し回数の多い
関数を優先しながら、関数本体のサイズの総和が前記領
域のサイズに収まるように選択し、決定する特定空間配
置関数決定部15とを備える。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ソースプログラムをコ
ンパイルしてオブジェクトプログラムを生成するために
用いる言語処理装置及び言語処理方法に関し、特に構文
解析時に使用する関数の1部を特定の領域に配置して特
定の命令で呼び出す言語処理装置及び言語処理方法に関
する。
【0002】
【従来の技術】言語処理プログラムが入力したソースプ
ログラムを翻訳し、その結果として生成したファイルを
オブジェクト・モジュール・ファイル(以下、オブジェ
クトと称す)と言う。一般に、言語処理プログラムによ
って処理されるソフトウエアはその実行性能として高速
性が求められる。これを実現するためには、言語処理を
行なった結果である出力オブジェクトのサイズが小さい
こと、及び出力オブジェクトの実行が速いことが必要で
ある。
【0003】一方、マイクロコンピュータの技術分野に
おいては、アプリケーンョンプログラムの複雑化により
増大したプログラムサイズに対応するため、プログラム
空間が拡張される傾向にある。そして、プログラム空間
の拡張に伴い、プログラムの番地を示すアドレスのデー
タ幅が増え、関数を呼び出すためのコール命令のバイト
数は従来よりも長くなり、実行スピードは遅くなってい
る。
【0004】この欠点を解決するため、プログラム空間
の一部に設定された有限サイズの特定領域(以下、特定
空間と称す)に所定の関数を配置し、この特定空間に配
置された関数を呼び出すための専用コール命令を用意し
たマイクロコンピュータが開発されている。この専用コ
ール命令を用いれば、通常のコール命令を使用するより
もバイト数が短くてすみ、実行スピードを速くすること
ができる。
【0005】ただし、特定空間は有限なサイズであるた
め、言語処理プログラムはすべての関数を特定空間に配
置することができない。そのため、従来は、どの関数を
特定空間に配置するかをソースプログラム作成者(以
下、ユーザと称す)がキーワードで指示する手段を提供
し、キーワードで指示された関数のみを特定空間に配置
して、専用コール命令で呼び出す方式を採用している。
【0006】図9に従来の言語処理方式の構成を示す。
図において、言語処理装置92は、ソースプログラム・
ファイル91を入力し、その内容を横文解析部93で解
析する。解析の過程で特定空間に関数を配置するキーワ
ード(特定空間配置キーワード)を認識したならば、キ
ーワード認識部94において当該キーワードが指定する
関数を記憶する。構文解析の終了後、コード生成部95
に制御を移し、解析された結果に基づいて命令を選択し
てコードを生成する。
【0007】コード生成の過程において、関数を呼び出
す命令を選択する際に、まずキーワード認識部94で記
憶した特定空間に配置する関数か否かを調べる。そし
て、特定空間に配置する関数ならば専用のコール命令を
選択する。コード生成の終了後、オブジェクト出力部9
6に制御を移し、生成したコードを出力する。
【0008】ここで、オブジェクト出力部96は、キー
ワード認識部94で記憶した特定空間に配置する関数の
定義部を収集し、通常の関数定義部とは分離して、特定
空間への配置属性を付加してオブジェクト・モジュール
・ファイル97として出力する。特定空間への配置属性
を付加することにより、当該オブジェクト部分が特定空
間に配置されることが約束される。
【0009】次に、図10を参照して従来の処理のアル
ゴリズムを説明する。まず、ソースプログラム・ファイ
ル91を入力する(ステップ1001)。以降、ソース
・プログラム・ファイル91の最後まで構文解析を繰り
返し実行する(ステップ1002、1003)。
【0010】構文解析時に特定空間配置キーワードを認
識した場合(ステップ1004)、キーワード認識部9
4が該当関数名を記憶する(ステップ1005)。そし
て、再度ソース・プログラム・ファイルの最後まで処理
したか否かを調べるステップ1002に戻り、一連の処
理をソース・プログラム・ファイルの最後まで繰り返す
(ステップ1002〜1005)。
【0011】次に、コード生成を行なう。コード生成部
95は、構文解析部93による構文解析結果を読んで、
コード生成が完了するまで、当該解析結果が関数呼び出
しか否かを調べる(ステップ1006、1007)。そ
して、関数呼び出しでないなら、通常のコード生成を行
なう(ステップ1007、1011)。一方、関数呼び
出しであれば、キーワード認識部94を参照して、その
関数がステップ1005で記憶した特定空間配置キーワ
ードで指定された関数(特定空間配置関数)か否かを調
べる(ステップ1008)。当該関数が特定空間配直関
数であれば、専用コール命令を使用してコード生成を行
なう(ステップ1009)。一方、特定空間配置関数で
はない場合は、通常のコール命令を使用してコード生成
を行なう(ステップ1010)。そして、再度構文解析
結果を読んでコード生成が完了したかを調べるステップ
1006に戻り、一連の処理をコード生成が完了するま
で繰り返す(ステップ1006〜1011)。
【0012】次に、オブジェクト出力を行なう。オブジ
ェクト出力部96は、生成されたコードが特定空間配置
関数の定義部のコードならば、該当コード部を特定空間
への配置属性を付加したセグメントに出力する(ステッ
プ1012、1013)。ここで、セグメントとは、コ
ードをプログラム空間に配置する際に、配置の最小単位
であるコードの集まりを示す。セグメントに付加される
配置属性は、そのセグメントをどこに配置するかを指定
するものである。
【0013】一方、特定空間配置関数の定義部のコード
以外のコードである場合は、通常のセグメントに出力す
る(ステップ1014)。以上のように、コード部は、
特定空間配置関数と通常の関数とを分離して出力する。
この後、変数領域等のデータ部を出力し(ステップ10
15)、コード部、データ部を合わせてオブジェクト・
モジュール・ファイル97として出力して処理を終了す
る(ステップ1016)。
【0014】このような技術の例として、例えば文献
「NEC 78K/IVシリーズ16ピット・シングル
チップ・マイクロコンピュータ 命令編 IEU−84
4B」(1995年、日本電気株式会社)に開示された
技術がある。同文献には、通常のコール命令が3バイト
であるのに対し、プログラム空間の00800H−00
FFFHの領域(CALLFエントリ領域)を2バイト
コール命令(CALLF)で直接サブルーチン・コール
する技術について記載されている。CALLF命令は2
バイトのコール命令であるため、3バイト命令である通
常のコール命令(CALL)を使用した場合に比べ、プ
ログラムのオブジェクト・サイズを圧縮することができ
る。
【0015】このマイクロコンピュータ用のCコンパイ
ラであるCC78K4では、CALLF命令を有効利用
するために、図11に示すように、特定空間に配置する
キーワードとして「callf」(111)を設け、c
allfキーワードが付加された関数func()はC
ALLFエントリ領域に配置されることになる。
【0016】図11をコンパイルした結果のオブジェク
トを図12に示す。関数main()中で呼び出される
関数func()は、CALLF命令を使用してコード
が生成されている(123)。また、関数func()
定義部分のコードはFIXEDAという配置属性(12
2)を付加されたセグメント@@CALFS(121)
に出力される。以上説明したコンパイル技術は、「NE
C0078K4シリーズ 言語編 EEU−961」
(1994年、日本電気株式会社)に記載されている。
【0017】なお、図9、図10では、ソースプログラ
ム・ファイル及びオブジェクト・モジュール・ファイル
をそれぞれ1個ずつ取り扱う例を説明したが、複数のソ
ースプログラム・ファイル及びオブジェクト・モジュー
ル・ファイルを扱う場合もある。この時は、複数のソー
スプログラム・ファイルの各々に対して図10のフロー
チャートを用いて説明した処理を実行することにより、
複数のオブジェクト・モジュール・ファイルを得ること
ができる。
【0018】以上説明したように、従来は、特定空間の
サイズが小さく、配置可能な関数が限られていたので、
キーワードで指示された関数を特定空間に配置する方式
を採用し、ユーザが選択した関数を特定空間に配置する
ことで、十分なオブジェクトの性能(短いオブジェクト
サイズ、速い実行スピード)を得られていた。上記の例
で、仮に関数呼び出しが20箇所あるとすると、キーワ
ードを指定した関数が皆無であれば3バイト×20=6
0バイトを要する。これに対し、すべてがキーワードを
指定した関数であれば2バイト×20=40バイトで済
む。すなわち、コードサイズを2/3に短縮することが
できる。
【0019】また、上述したように、従来の言語処理方
式では、関数を特定空間に配置するためのキーワードは
ユーザが指定していた。そのため、ユーザは特定空間に
配置しようとする関数の総サイズが特定空間のサイズに
収まるかを確認する必要があった。そして、1回目のコ
ンパイルで関数のサイズを確認し、特定空間に配置する
関数を決め、キーワードを付加しなおして2回目のコン
パイルで目的のオブジェクトを得ていた。
【0020】
【発明が解決しようとする課題】上述したように、従来
の言語処理方式は、ユーザが関数を特定空間に配置する
キーワードを指定しない限り、通常のコール命令が使用
されるので、生成されるオブジェクトサイズが長く、実
行スピードが遅くなるという欠点があった。
【0021】また、関数を特定空間に配置するキーワー
ドを指定する場合でも、当該キーワードをユーザが指定
するため、ユーザの負担が大きいという欠点があった。
すなわち、ユーザは特定空間に配置しようとする関数の
総サイズが特定空間のサイズに収まるかを確認しなけれ
ばならない。そこで、1回目のコンパイルで関数のサイ
ズを確認し、特定空間に配置する関数を決め、キーワー
ドを付加しなおして2回目のコンパイルで目的のオブジ
ェクトを初めて得るというように、最低2回のコンパイ
ルを必要とし、作業効率の低下を招いていた。
【0022】さらに、特定空間の限られた領域に関数を
配置しなければならない制限の中で、可能な限り呼び出
し回数の多い関数を特定空間に配置した方が有利である
が、ソースプログラムの規模が大きい場合にユーザがす
べての関数の呼び出しを管理し、最適な選択を行なうの
はユーザの負担が大きいという欠点があった。特に、今
日のように、アプリケーンョンプログラムの高機能化、
複雑化に伴って、プログラム規模が増大し、マイクロコ
ンピュータの特定空間のサイズも増加している現状で
は、どの関数を特定空間に配置するかの選択は、得られ
るオブジェクトの性能を左右してしまうため、ユーザの
負担は一層大きくなっていた。
【0023】また、ソースプログラムの移植を可能とす
るために、言語処理固有の拡張された仕様であるキーワ
ードを付加しないのが一般的である。したがって、特定
空間に配置する拡張キーワードを使用できない場合があ
るという欠点があった。
【0024】本発明は、上記従来の欠点を解消し、オブ
ジェクト・モジュール・ファイルの生成時に特定空間へ
配置すべき関数の最適な組合せを自動的に選択すること
により、処理能力の向上を図り、かつユーザの負担を軽
減する言語処理装置及び言語処理方法を提供することを
目的とする。
【0025】
【課題を解決するための手段】上記の目的を達成するた
め、本発明は、ソースプログラムを入力して解析する構
文解析部と、解析された結果に基づいて命令コードを生
成するコード生成部と、生成された命令コードをオブジ
ェクトプログラムファイルとして出力するオブジェクト
出力部を備える言語処理装置において、構文解析時に各
関数毎の呼び出し回数を計数する関数呼び出し計数部
と、計数された各関数毎の呼び出し回数及びコード生成
部で生成された各関数毎のコードサイズを格納する関数
呼び出し回数データ格納部と、マイクロコンピュータが
プログラム空間中に有する特定領域に配置すべき関数
を、前記関数呼び出し回数データ格納部に格納された関
数毎の呼び出し回数を参照し、呼び出し回数の多い関数
を優先しながら、関数本体のサイズの総和が前記領域の
サイズに収まるように選択し、決定する特定空間配置関
数決定部とを備える構成としている。
【0026】また、他の態様では、前記特定空間配置関
数決定部が、前記特定領域のサイズに収まる関数の組合
せの全てのパターンを選び出す手段と、前記選び出した
パターンに属する関数の呼び出し回数の総和を各パター
ンについて求める手段とを備える構成としている。
【0027】また、他の態様では、前記特定空間配置関
数決定部が、前記プログラム空間中の領域に配置する関
数を決定する処理を実行した後、再度配置可能な関数が
ないかを調べ、必要に応じて再度前記領域空間に配置す
る関数を決定する処理を行う構成としている。
【0028】上記目的を達成する本発明の言語処理方法
は、ソースプログラムを入力して解析するステップと、
解析された結果に基づいて命令コードを生成するステッ
プと、生成された命令コードをオブジェクトプログラム
ファイルとして出力するステップとを有する言語処理方
法において、構文解析時に各関数毎の呼び出し回数を計
数するステップと、各関数毎のコードサイズと前記計数
された呼び出し回数とに基づいて、呼び出し回数の多い
関数を優先しながら合計サイズがプログラム空間中に有
する特定領域のサイズに収まるように前記領域に配置す
る関数を決定するステップとを含む構成としている。
【0029】また、他の態様では、前記プログラム空間
中の特定領域に配置する関数を決定するステップが、前
記領域のサイズに収まる関数の組合せの全てのパターン
を選び出すステップと、前記選び出したパターンに属す
る関数の呼び出し回数の総和を各パターンについて求め
るステップとを含む構成としている。
【0030】また、他の態様では、前記プログラム空間
中の特定領域に配置する関数を決定するステップが、前
記プログラム空間中の領域に配置する関数を決定する処
理を実行したステップと、再度配置可能な関数がないか
を調べるステップと、前記特定領域に配置可能な関数が
さらに存在する場合に再度前記領域空間に配置する関数
を決定する処理を行うステップとを含む構成としてい
る。
【0031】
【作 用】本発明によれば、構文解析時に関数呼び出し
計数部の計数した各関数毎の呼び出し回数を、関数呼び
出し回数データ格納部がコード生成部で生成された各関
数毎のコードサイズと共に格納し、これらの情報を参照
して、特定空間配置関数決定部が、呼び出し回数の多い
関数を優先しながら、関数本体のサイズの総和が前記領
域のサイズに収まるように選択するため、ユーザによる
キーワードの設定を必要とせず、当該特定領域に配置す
る関数を自動的に決定することができる。
【0032】また、特定空間配置関数決定部が、特定領
域に配置する関数の選択を複数回繰り返すことにより、
言語処理装置によるコンパイル処理自体を繰り返すこと
なく、最適な関数の選択を行うことができる。
【0033】
【実施例】以下、本発明の実施例について図面を参照し
て説明する。図1は、本発明の第1の実施例による言語
処理装置の構成を示すブロック図である。
【0034】図示のように、本実施例の言語処理装置1
0は、ソース・プログラム・ファイル21〜2nを入力
して内容の解析を行なう構文解析部11と、構文解析の
結果を元にコード生成を行なうコード生成部14と、コ
ード生成部14で生成されたコードをオブジェクト・モ
ジュール・ファイル31〜3nとして出力するオブジェ
クト出力部108とを備えると共に、構文解析時に認識
した関数呼び出しの回数を計数する関数呼び出し計数部
12と、関数呼び出し計数部12で計数された呼び出し
回数とコード生成部14で一度生成されたコードのサイ
ズを関数毎に保存する関数呼び出し回数データ格納部1
3と、特定空間に配置する関数を決定する特定空間配置
関数決定部15とを備える。以上の構成において、構文
解析部11とコード生成部14とオブジェクト出力部1
6の機能は、従来のものと同様である。
【0035】関数呼び出し計数部12は、構文解析部1
1によるソースプログラムの構文解析の際に認識した関
数呼び出しの回数を計数する。関数呼び出し回数データ
格納部13は、計数された関数呼び出しの回数を格納す
る。また、コード生成部14が1回目に生成したコード
のサイズを各関数ごとに格納する。このようにして格納
された関数呼び出し回数とコードサイズとは、特定空間
配置関数決定部15による処理において利用される。
【0036】特定空間配置関数決定部15は、関数呼び
出し回数データ格納部13に格納された関数呼び出し回
数及びコードサイズとに基づいて特定空間に配置する関
数を決定する。特定空間配置関数を決定する処理の内容
については後述する。特定空間配置関数決定部15によ
る処理結果は、コード生成部14による2回目以降のコ
ード生成処理や、オブジェクト出力部16によるコード
への配置属性の付加処理に用いられる。
【0037】次に、図2のフローチャートを参照して本
実施例の処理の詳細を説明する。まず、全てのソースプ
ログラム・ファイル21〜2nの解析が終了したかを調
べ、まだ解析が終了していなければソースプログラム・
ファイルを入力する(ステップ201、202)。そし
て、入力したソースプログラム・ファイルのソ一スの最
後まで、構文解析部103で構文解析を繰り返し実行す
る(ステップ203、204)。
【0038】構文解析の過程で関数呼び出しを認識した
ならば、関数呼び出し計数部12が関数呼び出し回数デ
ータ格納部13において各関数毎に保存している呼び出
し回数のカウンタの中で該当関数に対応するものをカウ
ントアップして保存する(ステップ205、206)。
以上の処理を繰り返し、当該ソースプログラム・ファイ
ルの最後になったなら、次のソースプログラム・ファイ
ルでも同様にステップ202〜206の処理を行なう。
この処理を繰り返して全てのソースプログラム・ファイ
ル21〜2nの解析が終了したならば、次にコード生成
部14に制御が移る。
【0039】コード生成部14は、全ての構文解析結果
に対して、まず1回目のコード生成を行なう(ステップ
207)。この1回目のコード生成においては、従来の
言語処理方式におけるコード生成と同様に、まず関数か
どうかの判定を行い、関数でなければ通常のコード生成
を行う。また、関数であれば通常のコール命令を用いた
コード生成を行う。
【0040】コード生成によって各関数毎のコードサイ
ズが得られるので、関数呼び出し回数データ格納部13
は、すでに保存している各関数毎の呼び出し回数に加
え、得られた各関数のコードサイズを保存する(ステッ
プ208)。
【0041】次に、特定空間配置関数決定部15は、各
関数毎の呼び出し回数及びコードサイズを元に、呼び出
し回数の多い関数を優先しながら、関数の合計サイズが
特定空間のサイズに収まるように特定空間に配置する関
数を決定する(ステップ209)。この処理の詳細につ
いては後述する。特定空間に配置する関数が決まったな
らば、これらの関数を呼び出している箇所のコール命令
を通常のコール命令から専用のコール命令に置換する。
そのため、1回目のコード生成結果を先頭から走査し、
それが完了するまで当該コードが関数呼び出しか否かを
調べ(ステップ210、211)、関数呼び出しならば
特定空間配置関数決定部15に問い合わせて特定空間配
置関数かを調べ(ステップ212)、特定空間配置関数
ならば通常のコール命令から専用コール命令に置換する
(ステップ213)。以上をコード生成結果の走査が完
了するまで繰り返す。
【0042】次に、オブジェクト出力を行なう。オブジ
ェクト出力部16は、ソースプログラム・ファイル単位
に全てのオブジェクトを出力するまで、生成されたコー
ドが特定空間配置関数の定義部のコードか否かを特定空
間配置関数決定部15に問い合わせて調べる(ステップ
214、215)。そして、該当コード部を特定空間へ
の配置属性を付加したセグメントに出力する(ステップ
216)。セグメントと配置属性の意味は従来の技術で
述べたものと同一である。当該コードが特定空間配置関
数の定義部のコードではない場合は、通常のセグメント
に出力する(ステップ217)。以上のように、コード
部は特定空間配置関数と通常の関数とを分離して出力す
る。次に、変数領域等のデータ部を出力し(ステップ2
18)、コード部とデータ部とを合わせてオブジェクト
・モジュール・ファイルとして出力する(ステップ21
9)。
【0043】以上の処理を全てのソース・プログラム・
ファイル単位に対応するオブジェクト・モジュール・フ
ァイルを出力するまで繰り返し、処理を終了する。な
お、ここで示すオブジェクト・モジュール・ファイル
は、リローケータブルなオブジェクト・モジュール・フ
ァイルあるいはアセンブリ言語で書かれたアセンブラ・
ソース・モジュール・ファイルを意味するものである。
【0044】次に、図3のフローチャートを参照して、
特定関数配置関数決定部107の詳細な処理について説
明する。まず、特定空間のサイズに収まる関数の組合せ
の全てのパターンを選び出す。そして当該パターンに属
する関数の呼び出し回数の総和を各パターンについて求
める。呼び出し回数の総和が最も多いパターンが、特定
空間に配置する関数の最適な選択となる。この動作の具
体的な例を図3に示す。図3は、木構造を用いて関数の
組合せパターンを表現し、かつ木構造を作っていく過程
で呼び出し回数の総和が最も多いパターンを求める方法
である。
【0045】まず、全ての関数をサイズの昇順にソート
し番号をふる(ステップ301)。次にダミー関数番号
0、関数サイズ0、呼び出し回数0のノードを作成する
(ステップ302)。呼び出し回数max値を0に、親
ノードの関数番号を0に初期化する(ステップ303、
304)。ここからは着目している親ノードの下に特定
区間に配置可能な関数の子ノードを作成していく処理で
ある。
【0046】まず、子ノード候補の関数番号として、親
ノード関数番号+1を設定する(ステップ305)。子
ノード候補関数番号が関数の総数以下で、親ノードの関
数サイズと子ノード候補の関数サイズの和が特定空間の
サイズ以下であれば、親ノードの下に子ノード候補を連
絡すると共に、子ノード関数サイズを親ノードと子ノー
ドの関数サイズに和に、子ノードの呼び出し回数を親ノ
ードと子ノードの呼び出し回数の和にそれぞれ更新する
(ステップ306、307、308)。そして、子ノー
ド候補の関数番号を十1増加させ(ステップ309)、
予ノードとして連結できるか否かをステップ306の処
理に戻って繰り返す。子ノード候補の関数番号が関数の
総数を越えた場合、あるいは親ノードと子ノードの関数
サイズの和が特定空間のサイズを越えた場合は、その親
ノードに対する子ノードの連結はそれ以上できないの
で、次の処理に移る。
【0047】着目中の親ノードに対して子ノードを1個
以上連絡したならば、1番目の子ノードに移り、それを
親ノードとして子ノードを連結する処理305に戻る
(ステップ310、311)。着目中の親ノードに子ノ
ードが1個も連結できなかったならば、木構造の末端ノ
ードであることを意味するので、呼び出し回数max値
の更新を行なう。呼び出し回数max値が着目している
親ノードの呼び出し回数よりも小さいならば、呼び出し
回数max値に着目している親ノ−ドの呼び出し回数を
設定すると共に、親ノード番号0から着目親ノード番号
までのパスを最適パスとして記憶する(ステップ31
2、313)。これ以外の場合は、呼び出し回数max
値の更新は行なわない。
【0048】次に1つ上のノードに移り(ステップ31
4)、処理したノ−ドがそのレベルの最後の子ノードで
なければ、同一レベルの次の子ノードに移る(ステップ
315)。そして、当該ノードを親ノードとして子ノー
ドを連結する処理であるステップ305に戻る(ステッ
プ316)。当該ノードが最後の子ノードだったなら
ば、親ノード番号が0かを調べる(ステップ315、3
17)。一方、当該ノードが最後のノードでなければ、
さらに1つ上のノードに移る処理に戻る(ステップ31
4)。ステップ317で、親ノード番号が0であれば全
ての木構造を作成し終ったことになるので、処理を終了
する。処理を終了した時点で保存されている最適パスの
各ノードの関数が、特定空間に配置すべき関数の組合せ
である。
【0049】例として、全ての関数を昇順にソートした
結果が、図4に示す通りである場合を考える。この例に
おいて、特定空間のサイズは75バイトとする。図3の
処理に基づいて作成した木構造は、図5の通りとなる。
1つのノードは501に示す通り、番号、関数サイズ、
呼び出し回数から構成される。また、子ノード連結時に
更新される値をわかりやすくするために502では番
号、関数サイズ、呼び出し回数に加え、更新後の関数サ
イズと呼び出し回数もノードに記載している。503は
関数の呼び出し回数の緩和が最も多い値18であり、こ
のノードへのパス504が求める特定空間に配置すべき
関数である。この例では2番、3番、4番の関数を選択
することが決定された。505は選択した関数のサイズ
の総和が70バイトであることを示している。これによ
り18箇所の関数呼び出しが専用コール命令に変換さ
れ、合計70バイトの関数定義部を特定空間に配置する
ことになる。
【0050】図3に示した特定空間配置関数決定処理の
処理動作では、特定空間のサイズに収まる関数の組合せ
の全てのパターンの中から、パターンに属する関数の呼
び出し回数の総和が最も多いパターンを求めた。この方
式は複雑ではあるが、最もオブジェクトサイズを短くす
ることができる方法を示している。
【0051】すなわち、仮に、関数本体のサイズが特定
空間のサイズに収まる範囲の関数で、呼び出し回数の多
い順に選択するとする。図4の例では番号6、サイズが
70バイト、呼び出し回数が11回の関数が一番呼び出
し回数が多く、サイズも特定空間のサイズ75バイトに
収まる。そこで番号6の関数を選択してしまうと、残る
特定空間のサイズは5バイトとなり、他の関数は全て5
バイトよりも大きいサイズなので、これ以上特定空間に
は配置できない。選択された番号6の関数は呼び出し回
数が11回であるから、11箇所の関数呼び出ししか専
用コール命令に変換されない。この例が示す通り、関数
の呼び出し回数が多くても関数のサイズが大きければ他
の関数が配置できなくなり、それよりも、呼び出し回数
は多くはないがサイズが小さい関数を複数配置する方
が、呼び出し回数の総和が多くなって、専用コール命令
に変換できる箇所が多くなる場合もある。従って、配置
可能な関数の組合せを全て挙げ、その中で関数の呼び出
し回数が最も多くなる組合せを調べるのが最適な選択と
なる。
【0052】以上説明した本実施例の言語処理装置によ
れば、例えば、18箇所の関数呼び出しが3バイトの通
常コール命令から2バイトの専用コール命令に変換され
るとすると、従来の言語処理装置でユーザがキーワード
を全く指定しなかった場合と比較して、18バイトのオ
ブジェクトサイズの削減が実現される。
【0053】また、従来の言語処理装置において、ユー
ザが特定空間に配置する関数をキーワード指定する場合
と比較しても、最も呼び出し回数が多くて、特定空間の
領域に入る関数として図4の番号6、サイズ70バイ
ト、呼び出し回数11回の関数を選択すると、オブジェ
クトサイズは11バイトしか削減されない。したがっ
て、本実施例では、より一層のオブジェクトサイズの削
減が図れることとなる。
【0054】次に、本発明の第2の実施例について説明
する。上記実施例1は、呼び出し回数が多い関数を優先
しながら、合計サイズが特定空間のサイズに収まるよう
に特定空間に配置する関数を決定する処理を1回のみ実
行しているが、本実施例では、特定空間に配置する関数
を決定して専用コール命令に置き換えた後に再度配置可
能な関数がないかを調べる処理を追加して、より多くの
関数を特定空間に配置する。
【0055】本実施例の言語処理装置の構成は、図1に
示した第1の実施例の言語処理装置の構成と同様である
ため、説明を省略する。以下、図6のフローチャートを
参照して本実施例の処理の詳細を説明する。
【0056】構文解析からコード生成完了までのステッ
プ601〜613の処理は、図2に示した第1の実施例
によるステップ201〜213の処理と同一である。1
回目の特定空間配置関数の決定及びコール命令の専用コ
ール命令への変換が終了したならば、専用コール命令に
置き換えた分コードサイズが短縮されるので、更新され
たコードサイズを各関数毎に保存する(ステップ61
0、614)。
【0057】次に、特定空間のサイズから既に特定空間
への配置が決定した関数のサイズを引いた値を新たな特
定空間のサイズとして設定する。そして、全関数から既
に特定空間への配置が決定した関数を除いた残りを対象
関数に設定する(ステップ615)。これは、1度特定
空間への配置を決定した関数は対象からはずしておくこ
とによって特定空間配置関数の決定をより少ない回数で
行うためである。
【0058】新たな対象関数中の最小関数サイズが特定
空間のサイズ以下ならば、再度、呼び出し回数の多い関
数を優先しながら合計サイズが特定空間のサイズに収ま
るように、特定空間に配置する関数を決定する処理であ
るステップ609に戻り(ステップ616)、ステップ
609〜616の処理を繰り返す。
【0059】一方、対象関数中の最小関数サイズが特定
空間のサイズよりも大きくなったならば、これ以上特定
空間に関数を配置することはできないので、コード生成
の処理を終えて、オブジェクト出力処理に移る(ステッ
プ616)。オブジェクト出力処理である617〜62
2の処理は図2に示した第1の実施例のステップ214
〜219の処理と同一である。
【0060】図4に示した例では、特定空間を75バイ
トとした場合、図5に示す通り、番号2、3、4の関数
が選択された。これらの関数のサイズの総和は70バイ
トである。本実施例に従って、再度特定空間配置関数を
決定するならば、残る5バイトに配置可能な関数の組み
合わせを検索することになる。
【0061】番号2、3、4の関数の呼び出される回数
の総和は18だったので、1回の呼び出しにつき、1バ
イトだけコードサイズが短縮されるとすれば、合計18
バイトが短縮される。その結果、図7に示す関数群が対
象関数となったとすると、最小関数のサイズは5バイト
であり、特定空間のサイズ以下という条件を満たす。し
たがって、特定空間配置関数を決定する処理を行う。
【0062】図8は、2回目の特定空間配置関数決定処
理を行った結果である。図示のように、番号1の関数が
選択される。この結果、特定関数のサイズ5バイトから
番号1の関数のサイズ5バイトを引くと、新たな特定空
間のサイズは0となり、これ以上どの関数も配置できな
いことになる。本実施例によれば実施例1に比較して1
関数多く特定空間に配置できたことになる。
【0063】以上説明した本実施例の言語処理装置によ
れば、例えば、18箇所の関数呼び出しが3バイトの通
常コール命令から2バイトの専用コール命令に変換され
るとすると、第1の実施例で専用コール命令に変換され
た関数呼び出しに加えて、4箇所の関数呼び出しが通常
コール命令から専用コール命令に変換されるので、従来
の言語処理装置でユーザがキーワードを全く指定しなか
った場合と比較して、22バイトのオブジェクトサイズ
の削減が実現される。
【0064】以上好ましい実施例をあげて本発明を説明
したが、本発明は必ずしも上記実施例に限定されるもの
ではない。
【0065】
【発明の効果】以上説明したように、本発明によれば、
ユーザによるキーワードの設定を行うことなく、当該特
定領域に配置するのに最適な関数を自動的に決定するこ
とができるため、生成するオブジェクト・モジュール・
ファイルのサイズを短縮することができる。これに伴
い、プログラム空間を節約することができるとともに、
オブジェクトの実行速度を向上することが可能となる。
【0066】また、ユーザによるキーワードの設定を行
わずに自動的に関数の選択を行うため、ソースプログラ
ムの規模によらず、またユーザのスキルに依存せず、特
定空間に配置する最適な関数の組み合わせを常に選択す
ることが可能となり、常によりサイズの短いオブジェク
トを得ることができる。
【0067】また、1回のコンパイルにおいて特定空間
に配置する関数の選択を複数回繰り返すことにより、コ
ンパイル処理自体を繰り返すことなく、最適な関数の選
択を行うことができるため、従来、特定空間に配置する
最適な関数を選択するために複数回のコンパイルが必要
であったことと比較し、ユーザの作業効率の向上を図る
ことができる。
【0068】さらに、特定空間に配置する関数を指定す
るキーワードを付加しなくても良いので、他の言語処理
で使用していたソースプログラムを移植する際に、ソー
スプログラムの修正をせずに、性能の良いオブジェクト
を得ることができる。
【図面の簡単な説明】
【図1】 本発明の第1の実施例による言語処理装置の
構成を示すブロック図である。
【図2】 本実施例の動作を示すフローチャートであ
る。
【図3】 本実施例の特定空間配置関数決定部の動作を
示すフローチャートである。
【図4】 関数をソートした例を示す図である。
【図5】 図4の関数を特定空間配置関数決定部により
処理した結果の木構造を示す図である。
【図6】 本発明の第2の実施例による言語処理装置の
動作を示すフローチャートである。
【図7】 本実施例による2回目の関数のソートの例を
示す図である。
【図8】 図7の関数を特定空間配置関数決定部により
処理した結果の木構造を示す図である。
【図9】 従来の言語処理装置の構成を示すブロック図
である。
【図10】 従来の言語処理装置の動作を示すフローチ
ャートである。
【図11】 ソースプログラムの例を示す図である。
【図12】 図12のソースプログラムをコンパイルし
た結果のオブジェクト・モジュールを示す図である。
【符号の説明】
10 言語処理装置 11 構文解析部 12 関数呼び出し計数部 13 関数呼び出し回数データ格納部 14 コード生成部 15 特定空間配置関数決定部 16 オブジェクト出力部 21〜2n ソースプログラム・ファイル 31〜3n オブジェクト・モジュール・ファイル

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラムを入力して解析する構
    文解析部と、解析された結果に基づいて命令コードを生
    成するコード生成部と、生成された命令コードをオブジ
    ェクトプログラムファイルとして出力するオブジェクト
    出力部を備える言語処理装置において、 構文解析時に各関数毎の呼び出し回数を計数する関数呼
    び出し計数部と、 計数された各関数毎の呼び出し回数及びコード生成部で
    生成された各関数毎のコードサイズを格納する関数呼び
    出し回数データ格納部と、 マイクロコンピュータがプログラム空間中に有する特定
    領域に配置すべき関数を、前記関数呼び出し回数データ
    格納部に格納された関数毎の呼び出し回数を参照し、呼
    び出し回数の多い関数を優先しながら、関数本体のサイ
    ズの総和が前記領域のサイズに収まるように選択し、決
    定する特定空間配置関数決定部とを備えることを特徴と
    する言語処理装置。
  2. 【請求項2】 前記特定空間配置関数決定部が、 前記特定領域のサイズに収まる関数の組合せの全てのパ
    ターンを選び出す手段と、 前記選び出したパターンに属する関数の呼び出し回数の
    総和を各パターンについて求める手段とを備えることを
    特徴とする請求項1に記載の言語処理装置。
  3. 【請求項3】 前記特定空間配置関数決定部が、 前記プログラム空間中の領域に配置する関数を決定する
    処理を実行した後、再度配置可能な関数がないかを調
    べ、必要に応じて再度前記領域空間に配置する関数を決
    定する処理を行うことを特徴とする請求項1に記載の言
    語処理装置。
  4. 【請求項4】 ソースプログラムを入力して解析するス
    テップと、解析された結果に基づいて命令コードを生成
    するステップと、生成された命令コードをオブジェクト
    プログラムファイルとして出力するステップとを有する
    言語処理方法において、 構文解析時に各関数毎の呼び出し回数を計数するステッ
    プと、 各関数毎のコードサイズと前記計数された呼び出し回数
    とに基づいて、呼び出し回数の多い関数を優先しながら
    合計サイズがプログラム空間中に有する特定領域のサイ
    ズに収まるように前記領域に配置する関数を決定するス
    テップとを含むことを特徴とする言語処理方法。
  5. 【請求項5】 前記プログラム空間中の特定領域に配置
    する関数を決定するステップが、 前記領域のサイズに収まる関数の組合せの全てのパター
    ンを選び出すステップと、 前記選び出したパターンに属する関数の呼び出し回数の
    総和を各パターンについて求めるステップとを含むこと
    を特徴とする請求項4に記載の言語処理方法。
  6. 【請求項6】 前記プログラム空間中の特定領域に配置
    する関数を決定するステップが、 前記プログラム空間中の領域に配置する関数を決定する
    処理を実行したステップと、 再度配置可能な関数がないかを調べるステップと、 前記特定領域に配置可能な関数がさらに存在する場合に
    再度前記領域空間に配置する関数を決定する処理を行う
    ステップとを含むことを特徴とする請求項4に記載の言
    語処理方法。
JP7201781A 1995-07-15 1995-07-15 言語処理装置及び言語処理方法 Pending JPH0934725A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP7201781A JPH0934725A (ja) 1995-07-15 1995-07-15 言語処理装置及び言語処理方法
EP96111098A EP0755002A3 (en) 1995-07-15 1996-07-10 Language processor and language processing method for generating object programs by translating source programs
US08/680,029 US5845127A (en) 1995-07-15 1996-07-15 Language processor and language processing method to generate object programs by compiling source programs

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7201781A JPH0934725A (ja) 1995-07-15 1995-07-15 言語処理装置及び言語処理方法

Publications (1)

Publication Number Publication Date
JPH0934725A true JPH0934725A (ja) 1997-02-07

Family

ID=16446844

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7201781A Pending JPH0934725A (ja) 1995-07-15 1995-07-15 言語処理装置及び言語処理方法

Country Status (3)

Country Link
US (1) US5845127A (ja)
EP (1) EP0755002A3 (ja)
JP (1) JPH0934725A (ja)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5845127A (en) * 1995-07-15 1998-12-01 Nec Corporation Language processor and language processing method to generate object programs by compiling source programs
US6163882A (en) * 1997-04-03 2000-12-19 Nec Corporation Language processing apparatus for converting source program into object program
US6282707B1 (en) 1998-02-16 2001-08-28 Nec Corporation Program transformation method and program transformation system
JP2007293383A (ja) * 2006-04-20 2007-11-08 Toshiba Corp プログラム開発支援装置及びプログラム開発支援装置の動作方法
JP2011107848A (ja) * 2009-11-13 2011-06-02 Renesas Electronics Corp 実行可能オブジェクトのサイズ予測装置、そのサイズ予測方法、及びそのプログラム
JP2018029737A (ja) * 2016-08-23 2018-03-01 株式会社三共 遊技機
JP2018175615A (ja) * 2017-04-19 2018-11-15 株式会社三共 遊技機
JP2018175616A (ja) * 2017-04-19 2018-11-15 株式会社三共 遊技機
JP2018175569A (ja) * 2017-04-18 2018-11-15 株式会社三共 遊技機
JP2018175617A (ja) * 2017-04-19 2018-11-15 株式会社三共 遊技機
JP2022136310A (ja) * 2017-05-16 2022-09-15 株式会社ユニバーサルエンターテインメント 遊技機

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7278137B1 (en) 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
JP2011028648A (ja) * 2009-07-28 2011-02-10 Renesas Electronics Corp オブジェクトコード生成システム、及びオブジェクトコード生成方法
TWI690802B (zh) * 2016-03-08 2020-04-11 慧榮科技股份有限公司 函式分析方法與記憶體裝置
CN111258656B (zh) * 2020-01-20 2022-06-28 展讯通信(上海)有限公司 数据处理装置及终端

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03184126A (ja) * 1989-12-13 1991-08-12 Hitachi Ltd コンパイラおよびプログラムの命令コードの配置方法
JPH04311227A (ja) * 1991-04-09 1992-11-04 Nec Corp マイクロコンピュータの言語処理装置
JPH07105013A (ja) * 1993-10-01 1995-04-21 Nec Corp レジスタ割り付け方式

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58175074A (ja) * 1982-04-07 1983-10-14 Toshiba Corp 構文分析方式
JPH0281230A (ja) * 1988-09-19 1990-03-22 Hitachi Ltd 構文解析および言語処理システム
US4931928A (en) * 1988-11-09 1990-06-05 Greenfeld Norton R Apparatus for analyzing source code
EP0458512A3 (en) * 1990-05-24 1993-03-24 American Telephone And Telegraph Company Visible cache processing
US5826256A (en) * 1991-10-22 1998-10-20 Lucent Technologies Inc. Apparatus and methods for source code discovery
CA2077273C (en) * 1991-12-12 1996-12-03 Mike H. Conner Language neutral objects
US5590331A (en) * 1994-12-23 1996-12-31 Sun Microsystems, Inc. Method and apparatus for generating platform-standard object files containing machine-independent code
JPH0934725A (ja) * 1995-07-15 1997-02-07 Nec Corp 言語処理装置及び言語処理方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03184126A (ja) * 1989-12-13 1991-08-12 Hitachi Ltd コンパイラおよびプログラムの命令コードの配置方法
JPH04311227A (ja) * 1991-04-09 1992-11-04 Nec Corp マイクロコンピュータの言語処理装置
JPH07105013A (ja) * 1993-10-01 1995-04-21 Nec Corp レジスタ割り付け方式

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5845127A (en) * 1995-07-15 1998-12-01 Nec Corporation Language processor and language processing method to generate object programs by compiling source programs
US6163882A (en) * 1997-04-03 2000-12-19 Nec Corporation Language processing apparatus for converting source program into object program
US6282707B1 (en) 1998-02-16 2001-08-28 Nec Corporation Program transformation method and program transformation system
JP2007293383A (ja) * 2006-04-20 2007-11-08 Toshiba Corp プログラム開発支援装置及びプログラム開発支援装置の動作方法
JP2011107848A (ja) * 2009-11-13 2011-06-02 Renesas Electronics Corp 実行可能オブジェクトのサイズ予測装置、そのサイズ予測方法、及びそのプログラム
JP2018029737A (ja) * 2016-08-23 2018-03-01 株式会社三共 遊技機
JP2018175569A (ja) * 2017-04-18 2018-11-15 株式会社三共 遊技機
JP2018175615A (ja) * 2017-04-19 2018-11-15 株式会社三共 遊技機
JP2018175616A (ja) * 2017-04-19 2018-11-15 株式会社三共 遊技機
JP2018175617A (ja) * 2017-04-19 2018-11-15 株式会社三共 遊技機
JP2022136310A (ja) * 2017-05-16 2022-09-15 株式会社ユニバーサルエンターテインメント 遊技機

Also Published As

Publication number Publication date
EP0755002A3 (en) 1997-07-23
EP0755002A2 (en) 1997-01-22
US5845127A (en) 1998-12-01

Similar Documents

Publication Publication Date Title
JPH0934725A (ja) 言語処理装置及び言語処理方法
US7784039B2 (en) Compiler, compilation method, and compilation program
JP2755154B2 (ja) プログラム変換処理装置およびプログラム変換処理方法
US8032873B2 (en) Computer program code size partitioning system for multiple memory multi-processing systems
US5606697A (en) Compiler system for language processing program
US5920723A (en) Compiler with inter-modular procedure optimization
US20130218299A1 (en) MCP Scheduling For Parallelization Of LAD/FBD Control Program In Multi-Core PLC
US5958071A (en) Method and system for controlling parallel execution of jobs
JP2005216177A (ja) コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法
JPH11212797A (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US8037463B2 (en) Computer program functional partitioning system for heterogeneous multi-processing systems
US20200356600A1 (en) Method and Apparatus for Compiling Computation Graphs into an Integrated Circuit
US5781777A (en) Optimization method for computation partitioning oriented to a distributed memory
US10445095B2 (en) Information processing device, compiler method, and recording medium recording compiler program
EP0825531B1 (en) A language processing unit and a language processing method to translate a source program and generate an object module file
JP2007122187A (ja) プログラム・コード生成装置
US20050144605A1 (en) Information processing system and code generation method
JPH09223023A (ja) コンパイル装置およびコンパイラ
CN113031952A (zh) 深度学习模型的执行代码的确定方法、装置及存储介质
US12039308B2 (en) Information processing device and compiler method
CN110532577B (zh) 数字逻辑电路编译方法及装置
JPH08255086A (ja) オブジェクトコード生成方式
US20030035582A1 (en) Dynamic scanner
JP2801193B2 (ja) インダクション変数のベクトル化処理装置
JP2000339172A (ja) メモリ効率化方法

Legal Events

Date Code Title Description
RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20040108