JP4712925B2 - コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 - Google Patents
コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 Download PDFInfo
- Publication number
- JP4712925B2 JP4712925B2 JP11567899A JP11567899A JP4712925B2 JP 4712925 B2 JP4712925 B2 JP 4712925B2 JP 11567899 A JP11567899 A JP 11567899A JP 11567899 A JP11567899 A JP 11567899A JP 4712925 B2 JP4712925 B2 JP 4712925B2
- Authority
- JP
- Japan
- Prior art keywords
- optimization
- source program
- enclosed
- evaluation order
- parentheses
- 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
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、数式演算を記述するソースプログラムをコンパイルしてオブジェクトプログラムを生成するコンパイル処理装置と、そのコンパイル処理装置の実現に用いられるプログラムを記録したコンピュータ読み取り可能なプログラム記録媒体とに関し、特に、プログラマの望む形態で数式演算を実行するオブジェクトプログラムを生成できるようにするコンパイル処理装置と、そのコンパイル処理装置の実現に用いられるプログラムを記録したコンピュータ読み取り可能なプログラム記録媒体とに関する。
【0002】
数式演算を記述するプログラムを実行する場合には、プログラマの望む形態で数式演算を実行することが好ましい。これから、これを実現するための技術を構築していく必要がある。
【0003】
【従来の技術】
多くの高級プログラミング言語では、括弧によって演算評価順序を指定することができる。更に、特定の高級プログラミング言語の中には、自然に決定する演算評価順序(例えば、掛け算は足し算より優先するとか、左側を優先するとかいったルール)については、数学的に等価である限り、その演算評価順序の変更を許しているものの、括弧で指定された演算評価順序については、その演算評価順序の変更を許していないものもある。
【0004】
一方、高級プログラミング言語を機械語などの別の言語に変換するコンパイラでは、自然に決定する演算評価順序と括弧で指定された演算評価順序とを区別せずに最適化処理を施すことで、オブジェクトプログラムを生成するように処理している。
【0005】
【発明が解決しようとする課題】
このように、従来のコンパイラでは、プログラマの記述した括弧を無視して、最も高い最適化効率が得られるようにと、ソースプログラムに記述される数式演算の演算評価順序を変更していくように処理している。
【0006】
しかしながら、このような従来技術に従っていると、プログラマの望む形態で数式演算が実行されないことが起こるという問題点がある。
【0007】
例えば、プログラマは、桁落ちを考慮して括弧を挿入することがあるが、従来技術に従っていると、このような場合にも、最適化の観点から括弧に関係なく演算評価順序が変更されてしまうことで、桁落ちが発生してしまうという問題点がある。
【0008】
本発明はかかる事情に鑑みてなされたものであって、数式演算を記述するソースプログラムをコンパイルする構成を採るときにあって、プログラマの望む形態で数式演算を実行するオブジェクトプログラムを生成できるようにする新たなコンパイル処理技術の提供を目的とする。
【0009】
【課題を解決するための手段】
図1に本発明の原理構成を図示する。
【0010】
図中、1は本発明を具備するコンパイル処理装置であって、数式演算を記述するソースプログラムをコンパイルしてオブジェクトプログラムを生成するものである。
【0011】
本発明のコンパイル処理装置1は、ソースプログラムを構文解析する構文解析手段2と、構文解析手段2の解析結果に従い演算評価順序を変更することで数式演算の最適化を実行する最適化手段3と、最適化手段3により最適化されたソースプログラムの中間テキストからオブジェクトプログラムを生成するオブジェクト生成手段4とを備える。
【0012】
本発明のコンパイル処理装置1では、本発明を実現するために、構文解析手段2に、ソースプログラムに括弧又はそれに相当するものでくくられた数式演算が記述されているのか否かを検出する検出手段5と、検出手段5により括弧又はそれに相当するものでくくられた数式演算が記述されていることが検出される場合に、括弧又はそれに相当するものでくくられた数式演算部分であることを示す命令情報を生成する生成手段6とを備え、これを受けて、最適化手段3は、生成手段6の生成した命令情報が検出される場合には、その命令情報に係る数式演算部分に対しての演算評価順序に関する最適化を抑止しつつ、ソースプログラムに記述される数式演算に対しての演算評価順序に関する最適化を実行する。
【0013】
ここで、本発明のコンパイル処理装置1の持つ機能は具体的にはプログラムで実現されるものであり、このプログラムは、フロッピィディスクなどに格納されたり、サーバなどのディスクなどに格納され、それらからコンパイル処理装置1にインストールされてメモリ上で動作することで、本発明を実現することになる。
【0014】
このように構成される本発明のコンパイル処理装置1では、構文解析手段2の検出手段5は、入力したソースプログラムに、括弧又はそれに相当するものでくくられた数式演算が記述されているのか否かを検出し、これを受けて、構文解析手段2の生成手段6は、検出手段5により括弧又はそれに相当するものでくくられた数式演算が記述されていることが検出される場合に、括弧又はそれに相当するものでくくられた数式演算部分であることを示す命令情報を生成する。
【0016】
この構文解析手段2の処理を受けて、最適化手段3は、生成手段6の生成した命令情報が検出される場合には、その命令情報に係る数式演算部分に対しての演算評価順序に関する最適化を抑止しつつ、ソースプログラムに記述される数式演算に対しての演算評価順序に関する最適化を実行する。
【0017】
このように、本発明のコンパイル処理装置1では、数式演算を記述するソースプログラムをコンパイルする構成を採るときにあって、プログラマが括弧又はそれに相当するものを記述しつつ数式演算をプログラムするときには、その括弧又はそれに相当するものの指す数式演算部分の演算評価順序に関する最適化を抑止する構成を採ることから、プログラマの望む形態で数式演算を実行するオブジェクトプログラムを生成できるようになる。
【0018】
【発明の実施の形態】
以下、実施の形態に従って本発明を詳細に説明する。
【0019】
図中、10は本発明を具備する計算機であって、プリコンパイラ100と本発明を具備するコンパイラ101とを備えて、ソースファイル20に格納される数式演算を記述するソースプログラムをコンパイルすることでオブジェクトプログラムを生成して、それをオブジェクトファイル30に格納する処理を行うものである。
【0020】
ここで、プリコンパイラ100やコンパイラ101は、フロッピィディスクや回線などを介してインストールされることになる。
【0021】
図3に、本発明を具備するコンパイラ101が構文解析処理で実行する処理フローの一実施例、図4に、本発明を具備するコンパイラ101が最適化処理で実行する処理フローの一実施例を図示する。次に、これらの処理フローに従って、本発明について詳細に説明する。
【0022】
本発明を具備するコンパイラ101は、構文解析処理に入ると、図3の処理フローに従って、数式演算を記述するソースプログラムを構文解析することで、中間テキストレベルの命令列を生成する。
【0023】
すなわち、本発明を具備するコンパイラ101は、構文解析処理に入ると、図3の処理フローに示すように、先ず最初に、ステップ1で、最適化処理のレベルを示す最適化オプションを入力する。この最適化オプションは、翻訳対象となるソースプログラム名を指定して発行される翻訳コマンドに付加されているので、それを抽出することで行う。
【0024】
続いて、ステップ2で、入力した最適化オプションがソースプログラムに記述される括弧の無視を指示するものであるのか否かを判断して、括弧を無視してはならないことの指示を判断するときには、ステップ3に進んで、翻訳対象となるソースプログラムから数式演算を読み込む。
【0025】
続いて、ステップ4で、その読み込んだ数式演算が括弧でくくられたものであるのか否かを判断して、括弧でくくられた数式演算であることを判断するときには、ステップ5に進んで、その数式演算に対する命令と括弧を示す命令とを生成する。一方、括弧でくくられた数式演算でないことを判断するときには、ステップ6に進んで、その数式演算に対する命令のみを生成する。
【0026】
そして、ステップ5/ステップ6の処理を終了すると、ステップ7に進んで、全ソースプログラムの読み込みを終了したのか否かを判断して、全ソースプログラムの読み込みを終了していないことを判断するときには、ステップ3に戻り、全ソースプログラムの読み込みを終了したことを判断するときには、処理を終了する。
【0027】
一方、ステップ2で、入力した最適化オプションがソースプログラムに記述される括弧の無視を指示するものであることを判断するときには、ステップ8に進んで、翻訳対象となるソースプログラムから数式演算を読み込み、続くステップ9で、その読み込んだ数式演算が括弧でくくられているものであっても、括弧を示す命令を生成することなく、その数式演算に対する命令を生成し、その読み込んだ数式演算が括弧でくくられていない場合には、そのままその数式演算に対する命令を生成する。
【0028】
そして、続くステップ10で、全ソースプログラムの読み込みを終了したのか否かを判断して、全ソースプログラムの読み込みを終了していないことを判断するときには、ステップ8に戻り、全ソースプログラムの読み込みを終了したことを判断するときには、処理を終了する。
【0029】
このようにして、本発明を具備するコンパイラ101は、構文解析処理に入るときにあって、最適化オプションがソースプログラムに記述される括弧を無視してはならないことを指示するときに、
x=(a+2.0)+1.0
という数式演算が与えられると、図5(a)に示すように、一時格納域から別の一時格納域への格納を指示する命令内容を持つ“括弧を示す命令「psis」”を生成しつつ、この数式演算に対応させて、
add t1,“a”,“2.0”
psis t2,t1
add t3,t2,“1.0”
という中間テキストレベルの命令列を生成するように処理する。
【0030】
一方、最適化オプションがソースプログラムに記述される括弧を無視してはならないことを指示するときに、
x=a+2.0+1.0
という括弧のない数式演算が与えられると、図5(b)に示すように、この括弧を示す命令「psis」を生成することなく、この数式演算に対応させて、
add t1,“a”,“2.0”
add t2,t1,“1.0”
という中間テキストレベルの命令列を生成するように処理する。
【0031】
すなわち、本発明を具備するコンパイラ101は、ソースプログラムの構文解析処理に入ると、括弧でくくられていない数式演算のときには、図6に示すように、従来技術と同様のツリー構造に従って中間テキストレベルの命令列を生成していくのに対して、括弧でくくられた数式演算のときには、図7に示すように、従来技術と異なるツリー構造に従って、“括弧を示す命令「psis」”を生成しつつ中間テキストレベルの命令列を生成していく構成を採るのである。
【0032】
この構文解析処理を受けて、本発明を具備するコンパイラ101は、図4の処理フローに従って、生成した中間テキストレベルの命令列の演算評価順序を変更していくことで、数式演算の最適化処理を実行する。
【0033】
すなわち、本発明を具備するコンパイラ101は、最適化処理に入ると、図4の処理フローに示すように、先ず最初に、ステップ1で、最適化オプションがソースプログラムに記述される括弧の無視を指示するものであるのか否かを判断して、括弧を無視してはならないことの指示を判断するときには、ステップ2に進んで、構文解析処理で生成した中間テキストレベルの命令を読み込む。
【0034】
続いて、ステップ3で、その読み込んだ命令が括弧を示す命令であるのか否かを判断して、括弧を示す命令であることを判断するときには、ステップ4に進んで、その括弧を示す命令が規定する演算評価順序を変更することになる最適化を行わず、最適化を行う。一方、括弧を示す命令でないことを判断するときには、ステップ5に進んで、演算評価順序を変更する最適化を行う。
【0035】
そして、ステップ4/ステップ5の処理を終了すると、ステップ6に進んで、全命令の処理を終了したのか否かを判断して、全命令の処理を終了していないことを判断するときには、ステップ2に戻り、全命令の処理を終了したことを判断するときには、処理を終了する。
【0036】
一方、ステップ1で、最適化オプションがソースプログラムに記述される括弧の無視を指示するものであることを判断するときには、ステップ7に進んで、構文解析処理で生成した中間テキストレベルの命令を読み込み、続くステップ8で、その読み込んだ命令が括弧を示す命令であってもなくても、演算評価順序を変更する最適化を行う。
【0037】
そして、続くステップ9で、全命令の処理を終了したのか否かを判断して、全命令の処理を終了していないことを判断するときには、ステップ7に戻り、全命令の処理を終了したことを判断するときには、処理を終了する。
【0038】
このようにして、本発明を具備するコンパイラ101は、最適化処理に入るときにあって、最適化オプションがソースプログラムに記述される括弧を無視してはならないことを指示するときに、構文解析処理で得た中間テキストレベルの命令例が、
add t1,“a”,“2.0”
psis t2,t1
add t3,t2,“1.0”
であるときには、図8に示すように、括弧を示す命令「psis」が規定する演算評価順序を最適化の対象とすることなく、最適化を行うように処理する。すなわち、括弧の中の演算評価順序を変えずに、最適化を行うように処理するのである。
【0039】
一方、最適化オプションがソースプログラムに記述される括弧を無視してはならないことを指示するときに、構文解析処理で得た中間テキストレベルの命令例が、
add t1,“a”,“2.0”
add t2,t1,“1.0”
であるときには、整数をまとめるべく、図9に示すように、演算評価順序を変更させる最適化を行うことで、この命令列を、
add t2,“3.0”,“a”
という形に変形していくように処理する。
【0040】
このようにして、本発明を具備するコンパイラ101は、数式演算を記述するソースプログラムをコンパイルするときに、ソースプログラムに記述される括弧の指定する数式演算部分の演算評価順序に関する最適化を抑止するように処理するのである。これにより、プログラマの望む形態で数式演算を実行するオブジェクトプログラムを生成できるようになる。
【0041】
本発明を具備するコンパイラ101は、図3の処理フローに従う場合には、図10(a)に示すように、括弧を示す命令を生成することで、括弧の指定する数式演算部分の演算評価順序に関する最適化を抑止するように処理したが、このような命令を生成しない構成を採ることも可能である。
【0042】
例えば、図10(b)に示すように、括弧の記述箇所に、それが記述されていないときに生成する命令(この例ではadd命令)と同一内容を持つ別の名前を持つ命令(この例ではpadd命令)を生成することで、括弧の指定する数式演算部分の演算評価順序に関する最適化を抑止するように処理したり、図10(c)に示すように、括弧の記述箇所の指す命令のオペランドに対応付けて、括弧が記述されている旨を示す特別のコメント(この例ではpointer)を付加することで、括弧の指定する数式演算部分の演算評価順序に関する最適化を抑止するように処理する構成を採ることも可能である。
【0043】
また、本発明を具備するコンパイラ101は、ソースプログラムに記述される括弧のみに適用されるものではなく、演算評価順序を規定する性質を持つ全てのもの(括弧に相当するもの)に対して適用可能である。
【0044】
例えば、C言語で宣言するボラタイルも、演算評価順序を規定する括弧に相当する性質を有することから、本発明を用いることで、ボラタイルとして宣言された部分までは、その演算評価順序を変更しないように処理することができるようになる。
【0045】
【発明の効果】
以上説明したように、本発明によれば、数式演算を記述するソースプログラムをコンパイルする構成を採るときにあって、プログラマが括弧又はそれに相当するものを記述しつつ数式演算をプログラムするときには、その括弧又はそれに相当するものの指す数式演算部分の演算評価順序に関する最適化を抑止する構成を採ることから、プログラマの望む形態で数式演算を実行するオブジェクトプログラムを生成できるようになる。
【図面の簡単な説明】
【図1】本発明の原理構成図である。
【図2】本発明の一実施例である。
【図3】コンパイラの処理フローである。
【図4】コンパイラの処理フローである。
【図5】コンパイラの処理の説明図である。
【図6】コンパイラの処理の説明図である。
【図7】コンパイラの処理の説明図である。
【図8】コンパイラの処理の説明図である。
【図9】コンパイラの処理の説明図である。
【図10】コンパイラの処理の説明図である。
【符号の説明】
1 コンパイル処理装置
2 構文解析手段
3 最適化手段
4 オブジェクト生成手段
5 検出手段
6 生成手段
Claims (2)
- 数式演算を記述するソースプログラムをコンパイルするコンパイル処理装置において、
入力したソースプログラムに、括弧又はそれに相当するものでくくられた数式演算が記述されているのか否かを検出する検出手段と、
上記検出手段により括弧又はそれに相当するものでくくられた数式演算が記述されていることが検出される場合に、括弧又はそれに相当するものでくくられた数式演算部分であることを示す命令情報を生成する生成手段と、
上記生成手段の生成した命令情報が検出される場合には、その命令情報に係る数式演算部分に対しての演算評価順序に関する最適化を抑止しつつ、ソースプログラムに記述される数式演算に対しての演算評価順序に関する最適化を実行する最適化手段とを備えることを、
特徴とするコンパイル処理装置。 - 数式演算を記述するソースプログラムをコンパイルするコンパイル処理装置の実現に用いられるプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
入力したソースプログラムに、括弧又はそれに相当するものでくくられた数式演算が記述されているのか否かを検出する検出処理と、
上記検出処理により括弧又はそれに相当するものでくくられた数式演算が記述されていることが検出される場合に、括弧又はそれに相当するものでくくられた数式演算部分であることを示す命令情報を生成する生成処理と、
上記生成処理で生成した命令情報が検出される場合には、その命令情報に係る数式演算部分に対しての演算評価順序に関する最適化を抑止しつつ、ソースプログラムに記述される数式演算に対しての演算評価順序に関する最適化を実行する最適化処理とをコンピュータに実行させるためのプログラムを記録したことを、
特徴とするコンピュータ読み取り可能な記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11567899A JP4712925B2 (ja) | 1999-04-23 | 1999-04-23 | コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11567899A JP4712925B2 (ja) | 1999-04-23 | 1999-04-23 | コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000305786A JP2000305786A (ja) | 2000-11-02 |
JP4712925B2 true JP4712925B2 (ja) | 2011-06-29 |
Family
ID=14668583
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11567899A Expired - Fee Related JP4712925B2 (ja) | 1999-04-23 | 1999-04-23 | コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4712925B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101118819B1 (ko) * | 2010-02-08 | 2012-03-20 | 김준홍 | 심볼과 수식을 지원하는 컴파일러를 기록한 기록 매체 |
-
1999
- 1999-04-23 JP JP11567899A patent/JP4712925B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2000305786A (ja) | 2000-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Leopoldseder et al. | Dominance-based duplication simulation (DBDS): code duplication to enable compiler optimizations | |
US20070226720A1 (en) | System and Method for Efficiently Passing Information Between Compiler and Post-Compile-Time Software | |
US7376941B2 (en) | Inferring function calls in an ambiguous language computer program | |
JP2008505423A (ja) | 最適化されたプログラムのためのアンワインド情報の生成 | |
Bouchhima et al. | Automatic instrumentation of embedded software for high level hardware/software co-simulation | |
JP3199013B2 (ja) | 言語処理方法及び言語処理装置並びに言語処理プログラムを記録した記憶媒体 | |
JP2002024029A (ja) | コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体 | |
JPH0769832B2 (ja) | プログラミング演算の効果と従属性とを表現する方法及び装置 | |
Kiss et al. | Interprocedural static slicing of binary executables | |
KR20160003485A (ko) | 원격 함수 호출을 위한 자동 코드 생성 | |
US8539467B2 (en) | Method and data processing system for solving resource conflicts in assembler programs | |
JP4026940B2 (ja) | プログラム変換装置 | |
Rieu-Helft et al. | How to get an efficient yet verified arbitrary-precision integer library | |
US20090249317A1 (en) | Xslt-specific jit compiler | |
JP2008276735A (ja) | プログラムコード変換装置及びプログラムコード変換方法 | |
JP4712925B2 (ja) | コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 | |
JP2010108258A (ja) | コンパイル方法及びコンパイルプログラム | |
KR102614967B1 (ko) | 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법 | |
JP3840149B2 (ja) | コンパイラ、演算処理システム及び演算処理方法 | |
Kim et al. | Comparison of LLVM and GCC on the ARM Platform | |
El-Shobaky et al. | Automatic vectorization using dynamic compilation and tree pattern matching technique in Jikes RVM | |
JP4228602B2 (ja) | 仮引数重複違反検出機能を備えたコンパイラプログラム、その記録媒体、およびコンパイラ装置 | |
JP4019361B2 (ja) | 並列化変換システムと並列化変換方法およびプログラムならびにコンパイラ | |
von Ronne et al. | Interpreting programs in static single assignment form | |
Lameed et al. | Optimizing MATLAB feval with dynamic techniques |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060316 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20081006 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090421 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090622 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20090622 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20090622 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100330 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110324 |
|
LAPS | Cancellation because of no payment of annual fees |