JP3233245B2 - 言語処理方法 - Google Patents

言語処理方法

Info

Publication number
JP3233245B2
JP3233245B2 JP16338493A JP16338493A JP3233245B2 JP 3233245 B2 JP3233245 B2 JP 3233245B2 JP 16338493 A JP16338493 A JP 16338493A JP 16338493 A JP16338493 A JP 16338493A JP 3233245 B2 JP3233245 B2 JP 3233245B2
Authority
JP
Japan
Prior art keywords
array
address
size
command
language processing
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.)
Expired - Fee Related
Application number
JP16338493A
Other languages
English (en)
Other versions
JPH0721031A (ja
Inventor
博子 磯崎
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 JP16338493A priority Critical patent/JP3233245B2/ja
Priority to EP94110298A priority patent/EP0633525B1/en
Priority to DE69424345T priority patent/DE69424345T2/de
Publication of JPH0721031A publication Critical patent/JPH0721031A/ja
Priority to US08/822,471 priority patent/US5748965A/en
Application granted granted Critical
Publication of JP3233245B2 publication Critical patent/JP3233245B2/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/447Target code generation

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)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、言語処理方法に関し、
特に配列構造を有する言語の言語処理方法に関する。
【0002】
【従来の技術】言語処理プログラムが入力したソースプ
ログラムを翻訳し、その結果として生成したファイルを
オブジェクトモジュール(以下、オブジェクトと呼ぶ)
と言う。一般に、言語処理プログラムによって処理され
るソフトウェアはその実行性能として速さが求められ
る。これを実現するためには言語処理を行なった結果で
あるオブジェクトのサイズが小さいこと、およびオブジ
ェクトの実行が早いことが必要である。一方、ソフトウ
ェアの規模の増大に伴い、ハードウェアのデータ空間は
拡大する方向にある。
【0003】従来の言語処理方法では、このデータ空間
の拡大に伴い、配列要素のデータ空間中の位置を計算す
るアドレス計算に関しても、データ空間の大きさに合せ
て行なっている。仮に、データ空間を4ギガバイト(=
32バイト)だとすると、このデータ空間のアドレスを
表現するには32ビット=4バイト必要である。この仮
定に基づき、図9を参照して従来の配列要素のアドレス
計算の方法について説明する。
【0004】配列要素の先頭からのオフセットを計算す
る処理では、まず配列の添字を取り出す(ステップ90
1)。次に添字の内容を4バイトに拡張する(ステップ
902)。そして、拡張後の添字の内容(4バイト)と
配列要素のデータ幅を乗算してオフセットを求める(ス
テップ903)。以上がオフセットの計算の処理であ
る。
【0005】次に、配列要素のアドレスは、配列の先頭
アドレスを取り出し(ステップ904)、取り出した配
列先頭アドレスと先に求めたオフセットを加算する(ス
テップ905)ことにより求める。
【0006】言語プログラムは、以上の計算方法に対応
したオブジェクトを生成していた。ステップ902で添
字の内容を4バイトに拡張しているのは次の理由によ
る。一般に高級言語では複数モジュールのリンクを可能
とするために、変数の外部参照を許しているが、配列も
同様に外部参照した場合、配列の大きさが不明となる。
そのため、求めるオフセットの最大値がデータ空間と同
じ大きさを持つ可能性を考慮して4バイトに拡張する処
理を行なっている。
【0007】
【発明が解決しようとする課題】上述した従来の方式で
は、オフセットを求めるための乗算の前に添字を4バイ
トに拡張してしまうために、乗算の一方の項が4バイト
となり乗算を行なう負荷が大きくなる問題が発生する。
これは、4バイトデータをオペランドとして指定可能な
乗算命令を持つアーキテクチャをターゲットとしている
言語処理では問題はないが、16ビット=2バイト、あ
るいはそれ以下のビット幅を中心とした命令を備えるア
ーキテクチャをターゲットとする場合には、2バイトデ
ータを取り扱うのと4バイトデータを取り扱う方のとで
は後者の方が命令サイズが長い。つまり、データ空間の
アドレス幅よりもアーキテクチャのデータ幅が小さい場
合に、前述の前列要素のアドレス計算方法をとっている
と生成するオブジェクトのサイズが大きく、かつオブジ
ェクトの実行性能が悪くなってしまう。
【0008】このような問題を解決する方法として、1
6ビットアーキテクチャマシンで一時的に取り扱うデー
タ空間が、16ビットでアドレスを表現できる大きさで
あった。このために配列の計算においても展示を16ビ
ット=2バイトに拡張すれば良く、2バイトデータとも
う1つのデータとの乗算でオフセットを求めることにな
るので、もう1つのデータが2バイトよりも小さければ
一命令で乗算を行なうことが可能であった。
【0009】しかしながら、最近ではアーキテクチャの
データ幅以上に大きなデータ空間が求められる傾向にあ
り、配列要素のアドレス計算においても、前述の通りオ
ブジェクトサイズが大きく実行性能も悪いオブジェクト
を生成してしまう問題が生じている。
【0010】一方、データ空間が拡大されても、多数の
データを取り扱うだけで、必ずしも1つの配列の大きさ
が4バイトの大きさである必要はない。
【0011】したがって、本発明の目的は、アーキテク
チャのデータ幅以上に大きなデータ空間を持つハードウ
ェアをターゲットとする言語処理において、配列要素の
アドレス計算を効率良く行い、オブジェクトをより小さ
くするとともに、オブジェクトの実行性能を向上するこ
とにある。
【0012】
【課題を解決するための手段】本発明の言語処理方法
は、ソースプログラム情報を入力するソースプログラム
情報入力ステップと、前記ソースプログラム情報を解析
する解析ステップと、オブジェクト情報の生成時に処理
する配列のアドレス計算をする配列アドレス計算ステッ
プと、前記オブジェクト情報を出力するオブジェクト情
報出力ステップとを有する言語処理方法において、前記
配列の大きさが不明の場合、前記配列の最大サイズを指
定したコマンドを入力するコマンド入力ステップと、前
記コマンドを解析するコマンド解析ステップとを備え、
前記配列アドレス計算ステップは、前記コマンド解析結
果に基づき前記配列の最大サイズが所定値を超える場合
には、配列の添字を拡張してからオフセットを計算し配
列要素のアドレスを求め、前記配列の最大サイズが所定
値以下である場合は、オフセットを計算してから計算さ
れたオフセットを拡張し配列要素のアドレスを求める配
列アドレス計算ステップである。
【0013】
【実施例】次に、図面を参照して本発明の第1の実施例
の言語処理方法を詳細に説明する。図1は本実施例のシ
ステムブロック図である。
【0014】言語処理ステップ103は、入力ソースフ
ァイル101を入力して解析を行なう構文解析ステップ
104と、コマンド入力102を入力して解析するコマ
ンド解析ステップ105と、構文解析された内容に従っ
てコード生成を行なうコード生成ステップ106と、生
成されたコードをオブジェクトファイル109に出力す
るオブジェクト出力ステップ108とから構成される。
さらに、コード生成ステップ106の中にはコマンド解
析ステップ105の解析結果に従って適切な計算方法を
選択する配列要素アドレス計算ステップ107を含む。
【0015】本実施例では、コマンド入力102で入力
ソースファイル中に現われる配列の最大の大きさがター
ゲットマシンのint幅を超えるか否かを指定する。こ
こではintを2バイトとして、配列の最大の大きさが
64Kバイトを超えるか否かを指定することになる。コ
マンド入力102の例を図2に示す。“_short_
array”がこの例のコマンド指定である。コマンド
解析部105ではこの指定を解析して、計算方法指定デ
ータとして保存する。
【0016】構文解析ステップ104で配列要素の参照
を認識した場合は、まず配列要素のアドレスを計算しな
ければならないので、コード生成ステップ106の配列
要素アドレス計算ステップ107を呼び出す。配列要素
アドレス計算ステップ107ではコマンド解析ステップ
105の解析結果で得られた計算方法指定データに従っ
て、2通りの配列要素アドレス計算アルゴリズムのいず
れかを選択する。
【0017】配列要素アドレス計算107の手順を図3
を参照して以下に説明する。
【0018】まず、計算方法指定データが配列がint
の大きさに収まることを示しているかを調べる(ステッ
プ301)。intの大きさに収まるならば生成するオ
ブジェクトとして配列要素アドレス計算アルゴリズム3
04を選択してオブジェクト生成を行なう(ステップ3
02)。intの大きさに収まらないならば従来と同一
の配列要素アドレス計算アルゴリズム305を選択して
オブジェクト生成を行なう(ステップ303)。配列要
素アドレス計算アルゴリズム304は、配列の添字を取
り出す(ステップ306)。
【0019】次に、取り出した添字の内容(2バイト)
と配列要素のデータ幅の乗算を行なってオフセットを先
に求める(ステップ307)。ここで配列要素のデータ
幅が2バイトを超えるならば複数回に分けて乗算を行な
う必要があるが、添字側は2バイトなので4バイト×4
バイトの乗算よりも負荷は少ない。オフセットを求めた
ならばそれをアドレス幅(4バイト)に拡張する(ステ
ップ308)。これは次にアドレスとの加算を行なうの
でデータ幅を合わせる必要があるからである。以上で配
列の先頭からのオフセットが求められる。
【0020】次に、配列の先頭アドレスを取り出し(ス
テップ309)、取り出した配列の先頭アドレスとステ
ップ308で求めたオフセットを加算して配列要素のア
ドレスを求める(ステップ310)。配列計算アルゴリ
ズム305は、従来技術と同一の配列要素アドレス計算
アルゴリズムである。
【0021】配列要素参照の例を図4に示す。
【0022】配列tabは外部参照をしているので大き
さが不明である。そして、“tab[i]”についてア
ドレス計算が必要になっている。これを前述の手順に基
づいてオブジェクトを生成した結果を図5および図6に
示す。図5は配列の大きさがint以下であることをコ
マンドで指定した場合、図6は配列の大きさがintを
超えることを指定した場合を示す。
【0023】本実施例では、配列要素のデータ幅が4バ
イトであるので、乗算部分で乗算命令を使用せずにシフ
ト命令を用いている。図5および図6に示す通り、配列
の大きさがint以下であることを指定した場合はオブ
ジェクトサイズが合計19バイト、配列の大きさがin
tを超える場合は合計20バイトとなる。図6に示され
た生成コードは従来出力していたものと同じであるか
ら、本実施例において配列の大きさがint以下である
ことを指定した場合は。従来のオブジェクトサイズより
も1バイト減少することがわかる。
【0024】次に、本発明の第2の実施例の言語処理方
法について説明する。
【0025】上記第1の実施例は、コマンド入力によっ
て配列の大きさがintを超えるか否かを指定させた
が、全ての配列がint以下/intより大きいのでは
なく配列毎にintを超えるか否かが異なる場合があ
る。この場合は、入力ソースファイル中にコマンドを埋
め込む手段によって最適な配列要素アドレス計算アルゴ
リズムを選択することが可能である。
【0026】図7を参照すると言語処理ステップ702
は、構文解析ステップ703の中にコマンド解析ステッ
プ704が含まれること、入力ソースファイル701以
外の入力データが存在しないこと以外は、第1の実施例
のステップと同じステップを有している。
【0027】本実施例では図8に示す通り、配列の大き
さがintを超えるか否かを入力ソースファイル701
に中に記述する。図8に示す配列tab1は配列の大き
さがint以下であることを示すコマンド”short
−array記号が宣言部に記述されている。
【0028】構文解析ステップ703が配列の宣言を認
識したならば、コマンド解析ステップ704でintを
超えるか否かのコマンド指定の有無から、その配列の大
きさがintを超えるか否かを判断する。そして、コマ
ンド解析ステップ704の判断に基づき、配列要素の参
照を認識した場合は、コード生成ステップ705の配列
要素アドレス計算ステップ706を呼び出す。以降の処
理については第1の実施例と同じ処理であるので詳細な
説明は省略する。
【0029】この第2の実施例は、配列のそれぞれに対
して配列の大きさを指定できるので、第1の実施例より
もきめ細かなアドレス計算方法の選択が可能である。
【0030】
【発明の効果】以上、説明したように本発明によれば、
コマンドによって指定された配列の大きさに対応して最
適な配列要素のアドレス計算アルゴリズムを選択するこ
とにより、生成するオブジェクトのサイズを短縮するこ
とが可能である。
【0031】配列の大きさがint以下である場合を例
にとると、第1の実施例で説明した通り、コマンド指定
により1回の配列要素のアドレス計算につき1バイト短
縮することが可能である。第1の実施例のデータはC言
語のlonデータ(4バイト)のシフト演算が存在す
るマシンアーキテクチャをターゲットとしたものだが、
lonデータのシフト演算が存在しないマシンの場合
は従来技術の計算方法ではlonデータのシフトをラ
イブラリコールによって実現することになり、増加する
オブジェクトサイズ、増加した命令の実行時間分、本発
明による計算方法の法が有利となる。
【0032】すなわち、生成するオブジェクトのサイズ
を短縮することにより、プログラム空間を節約すること
ができるとともに、オブジェクトのロード時間の短縮を
図ることも可能となる。
【図面の簡単な説明】
【図1】本発明の第1の実施例の言語処理方法全体の構
成図である。
【図2】図1に示す言語処理方法のコマンド入力の例を
示す図である。
【図3】図1に示す言語処理方法の配列要素アドレス計
算アルゴリズム選択処理の流れ図である。
【図4】入力ソースファイルの例(第1の実施例)を示
す図である。
【図5】配列要素アドレス計算アルゴリズム304によ
る出力オブジェクト例を示す図である。
【図6】配列要素アドレス計算アルゴリズム305およ
び従来技術による出力オブジェクト例を示す図である。
【図7】本発明の第2の実施例の言語処理方法全体の構
成図である。
【図8】図7に示す言語処理方法の入力ソースファイル
例を示す図である。
【図9】従来の言語処理方法の配列要素アドレス計算ア
ルゴリズムの流れ図である。
【符号の説明】
101,701 入力ソースファイル 102 コマンド入力ステップ 103,702 言語処理ステップ 104,703 構文解析ステップ 105,704 コマンド解析ステップ 106,705 コード生成ステップ 107,706 配列要素アドレス計算ステップ 108,707 オブジェクト出力部ステップ 109,708 オブジェクトファイル 301〜315 配列要素アドレス計算アルゴリズム
選択処理 901〜905 従来の配列要素アドレス計算処理
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 平2−148142(JP,A) 特開 昭64−12337(JP,A) 特開 昭62−212735(JP,A) 発明協会公開技報 公技番号89− 18587号 A.V.エイホ,R.セシィ,J. D.ウルマン著,原田賢一訳,「コンパ イラ▲II▼−原理・技法・ツール−」 (1990−11−10),サイエンス社,P. 484−485,585−590 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45

Claims (1)

    (57)【特許請求の範囲】
  1. 【請求項1】 ソースプログラム情報を入力するソース
    プログラム情報入力ステップと、前記ソースプログラム
    情報を解析する解析ステップと、オブジェクト情報の生
    成時に処理する配列のアドレス計算をする配列アドレス
    計算ステップと、前記オブジェクト情報を出力するオブ
    ジェクト情報出力ステップとを有する言語処理方法にお
    いて、 前記配列の大きさが不明の場合、前記配列の最大サイズ
    を指定したコマンドを入力するコマンド入力ステップ
    と、前記コマンドを解析するコマンド解析ステップとを
    備え、前記配列アドレス計算ステップは、前記コマンド
    解析結果に基づき前記配列の最大サイズが所定値を超え
    る場合には、配列の添字を拡張してからオフセットを計
    算し配列要素のアドレスを求め、前記配列の最大サイズ
    が所定値以下である場合は、オフセットを計算してから
    計算されたオフセットを拡張し配列要素のアドレスを求
    める配列アドレス計算ステップであることを特徴とする
    言語処理方法。
JP16338493A 1993-07-01 1993-07-01 言語処理方法 Expired - Fee Related JP3233245B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP16338493A JP3233245B2 (ja) 1993-07-01 1993-07-01 言語処理方法
EP94110298A EP0633525B1 (en) 1993-07-01 1994-07-01 Method for compilation of programming languages
DE69424345T DE69424345T2 (de) 1993-07-01 1994-07-01 Verfahren zur Übersetzung von Programmiersprachen
US08/822,471 US5748965A (en) 1993-07-01 1997-03-24 Language processing method for calculating optimum address of array

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP16338493A JP3233245B2 (ja) 1993-07-01 1993-07-01 言語処理方法

Publications (2)

Publication Number Publication Date
JPH0721031A JPH0721031A (ja) 1995-01-24
JP3233245B2 true JP3233245B2 (ja) 2001-11-26

Family

ID=15772869

Family Applications (1)

Application Number Title Priority Date Filing Date
JP16338493A Expired - Fee Related JP3233245B2 (ja) 1993-07-01 1993-07-01 言語処理方法

Country Status (4)

Country Link
US (1) US5748965A (ja)
EP (1) EP0633525B1 (ja)
JP (1) JP3233245B2 (ja)
DE (1) DE69424345T2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4425377B2 (ja) * 1999-07-29 2010-03-03 株式会社ターボデータラボラトリー データ処理装置、および、データ処理方法
JP3847672B2 (ja) 2002-07-03 2006-11-22 松下電器産業株式会社 コンパイラ装置及びコンパイル方法
DE102007003862A1 (de) 2007-01-25 2009-02-05 Anders, Klaus E., 26127 Oldenburg Verfahren zur interkulturellen mehrsprachigen Kommunikation unter Einbeziehung einer Plansprache

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61110240A (ja) * 1984-10-31 1986-05-28 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション 最適化コンパイラ
JPH0685148B2 (ja) * 1986-03-07 1994-10-26 株式会社日立製作所 配列デ−タフロ−解析装置
JP2666847B2 (ja) * 1988-06-06 1997-10-22 日本電気株式会社 異種言語間連絡方式
JP3049814B2 (ja) * 1991-04-09 2000-06-05 日本電気株式会社 マイクロコンピュータの言語処理装置
JPH05217007A (ja) * 1992-02-04 1993-08-27 Sharp Corp データフロープログラムの実行制御方法
JPH0827715B2 (ja) * 1993-03-03 1996-03-21 日本電気株式会社 記憶装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
A.V.エイホ,R.セシィ,J.D.ウルマン著,原田賢一訳,「コンパイラ▲II▼−原理・技法・ツール−」(1990−11−10),サイエンス社,P.484−485,585−590
発明協会公開技報 公技番号89−18587号

Also Published As

Publication number Publication date
US5748965A (en) 1998-05-05
EP0633525B1 (en) 2000-05-10
EP0633525A2 (en) 1995-01-11
DE69424345D1 (de) 2000-06-15
JPH0721031A (ja) 1995-01-24
EP0633525A3 (en) 1997-07-02
DE69424345T2 (de) 2001-02-08

Similar Documents

Publication Publication Date Title
US6467035B2 (en) System and method for performing table look-ups using a multiple data fetch architecture
JP3032031B2 (ja) ループ最適化方法及び装置
US5931940A (en) Testing and string instructions for data stored on memory byte boundaries in a word oriented machine
US5815719A (en) Method and apparatus for easy insertion of assembler code for optimization
JPH08314728A (ja) ソースプログラムをオブジェクトプログラムに変換する方法および装置
US7051060B2 (en) Operand conversion optimization
US6185673B1 (en) Apparatus and method for array bounds checking with a shadow register file
JP3233245B2 (ja) 言語処理方法
KR100735944B1 (ko) 단일명령 복수데이터 관리를 위한 방법 및 컴퓨터 프로그램
US5936627A (en) Method and system for performing perspective divide operations on three-dimensional graphical object data within a computer system
JP2002229778A (ja) 高速ディスプレースメント付きpc相対分岐方式
US5568623A (en) Method for rearranging instruction sequence in risc architecture
JP3887097B2 (ja) コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体
JP3430635B2 (ja) 定数参照最適化処理装置
US5155818A (en) Unconditional wide branch instruction acceleration
US7278138B2 (en) Computer program conversion and compilation
US6144979A (en) Method and apparatus for performing multiply operation of floating point data in 2-cycle pipeline scheme
JP3495230B2 (ja) エミュレーション処理方式
US5764990A (en) Compact encoding for storing integer multiplication Sequences
US4878193A (en) Method and apparatus for accelerated addition of sliced addends
JP3225972B2 (ja) 回路記述支援装置
JP3008483B2 (ja) リンク処理装置
JP3115428B2 (ja) パイプライン制御方法
JP3156343B2 (ja) データ依存関係情報処理方法
JP4327533B2 (ja) 演算処理プログラム、演算処理方法、および演算処理装置

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 19990105

LAPS Cancellation because of no payment of annual fees