(57)【要約】【課題】  数式システムにおいて、入力されたプログラムの構文解析の結果に基づき、型変換が必要な演算にのみ型変換を適用する。【解決手段】  本発明は、プログラム言語に予め定義されていない未定義の型をユーザが使用する際に、プログラムの字句解析を行った後、型情報データーベースを参照して構文解析を行い、構文解析の結果に基づき型変換が必要な箇所のみに変換規則データーベースに基づいた型変換を行う。【選択図】  図１
2005038212.tif 000002
【特許請求の範囲】
【請求項１】
数式処理システムにおける、新しい型の定義に伴う既存プログラムの基本演算部分を変換するためのプログラム変換方法において、
前記既存プログラムを入力し、
入力された前記既存プログラムの字句解析を行い、
前記数式処理システムにおいて予め定義された型を出力とする関数名と該関数名の型を格納した型情報データーベースを参照して、構文解析を行い、
前記数式処理システムにおいて予め定義された型のみが代入される部分については変換しない変換規則を含む変換規則データーベースを参照し、構文解析されたプログラムを変換し、
変換されたプログラムを出力することを特徴とするプログラム変換方法。
【請求項２】
数式処理システムにおける、新しい型の定義に伴う既存プログラムの基本演算部分を変換するためのプログラム変換装置であって、
前記数式処理システムにおいて予め定義された型を出力とする関数名と該関数名の型を格納した型情報データーベースと、
前記数式処理システムにおいて予め定義された型のみが代入される部分については変換しない変換規則を含む変換規則が蓄積された変換規則データーベースと、
前記既存プログラムを入力する入力手段と、
入力された前記既存プログラムの字句解析を行う字句解析手段と、
前記型情報データーベースを参照して、構文解析を行う構文解析手段と、
前記変換規則データーベースを参照して、構文解析されたプログラムを変換する変換手段と、
変換されたプログラムを出力する出力手段と、を有することを特徴とするプログラム変換装置。
【請求項３】
数式処理システムにおける、新しい型の定義に伴う既存プログラムの基本演算部分を変換するためのプログラム変換プログラムであって、
前記既存プログラムを入力するステップと、
入力された前記既存プログラムの字句解析を行うステップと、
前記数式処理システムにおいて予め定義された型を出力とする関数名と該関数名の型を格納した型情報データーベースを参照して、構文解析を行うステップと、
前記数式処理システムにおいて予め定義された型のみが代入される部分については変換しない変換規則を含む変換規則データーベースを参照し、構文解析されたプログラムを変換するステップと、
変換されたプログラムを出力するステップと、からなることを特徴とするプログラム変換プログラム。
【請求項４】
数式処理システムにおける、新しい型の定義に伴う既存プログラムの基本演算部分を変換するためのプログラム変換プログラムを格納した記憶媒体であって、
前記既存プログラムを入力するステップと、
入力された前記既存プログラムの字句解析を行うステップと、
前記数式処理システムにおいて予め定義された型を出力とする関数名と該関数名の型を格納した型情報データーベースを参照して、構文解析を行うステップと、
前記数式処理システムにおいて予め定義された型のみが代入される部分については変換しない変換規則を含む変換規則データーベースを参照し、構文解析されたプログラムを変換するステップと、
変換されたプログラムを出力するステップと、からなるプログラムを格納したことを特徴とするプログラム変換プログラムを格納した記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム変換方法及び装置及びプログラム変換プログラム及びプログラム変換プログラムを格納した記憶媒体に係り、特に、数式処理システムの機能拡張を行うためのプログラム変換方法及び装置及びプログラム変換プログラム及びプログラム変換プログラムを格納した記憶媒体に関する。
【背景技術】
【０００２】
数式処理システムにおいて、予め定義されている以外の型の数を扱う場合、そのシステムが完全にオブジェクト指向であれば、その型についてクラス定義を行うことにより既存のプログラムをそのまま利用できる。しかし、数式処理システムの中には、オブジェクト指向が不十分であるものもあり、その場合は、新しい型の定義や演算の定義と合わせて、プログラム変換などの種々の処理を人手によって行っている。このため、多大な労力と時間を要するという問題がある。
【０００３】
この人手による作業の問題を解決する方法として、プログラムを自動的に変換する方法がある（例えば、特許文献１参照）。
【０００４】
【特許文献１】特開平１１−２２４２００号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、プログラムを自動的に変換する方法によって変換されたプログラムは、新しい型が決して代入されることのない部分の変換も行うため、人手によって変換されたプログラムに比べて、実行効率が劣るという問題がある。
【０００６】
本発明は、上記の点を解決し、完全にはオブジェクト指向になっていない数式処理システムにおいて、新しい型を定義した場合に、既存のプログラムを自動変換し、新しい型に対しても計算可能とするプログラム変換方法及び装置及びプログラム変換プログラム及びプログラム変換プログラムを格納した記憶媒体を提供することを目的とする。
【課題を解決するための手段】
【０００７】
図１は、本発明の原理を説明するための図である。
【０００８】
本発明は、数式処理システムにおける、新しい型の定義に伴う既存プログラムの基本演算部分を変換するためのプログラム変換方法において、
既存プログラムを入力し（ステップ１）、
入力された既存プログラムの字句解析を行い（ステップ２）、
数式処理システムにおいて予め定義された型を出力とする関数名と該関数名の型を格納した型情報データーベースを参照して、構文解析を行い（ステップ３）、
前記数式処理システムにおいて予め定義された型のみが代入される部分については変換しない変換規則を含む変換規則データーベースを参照し、構文解析されたプログラムを変換し（ステップ４）、
変換されたプログラムを出力する（ステップ５）。
【０００９】
図２は、本発明の原理構成図である。
【００１０】
本発明は、数式処理システムにおける、新しい型の定義に伴う既存プログラムの基本演算部分を変換するためのプログラム変換装置であって、
数式処理システムにおいて予め定義された型を出力とする関数名と該関数名の型を格納した型情報データーベース６０と、
数式処理システムにおいて予め定義された型のみが代入される部分については変換しない変換規則を含む変換規則が蓄積された変換規則データーベース７０と、
既存プログラムを入力する入力手段１０と、
入力された既存プログラムの字句解析を行う字句解析手段２０と、
型情報が蓄積された型情報データーベース６０を参照して、構文解析を行う構文解析手段３０と、
変換規則データーベース７０を参照して、構文解析されたプログラムを変換する変換手段４０と、
変換されたプログラムを出力する出力手段５０と、を有する。
【００１１】
本発明は、数式処理システムにおける、新しい型の定義に伴う既存プログラムの基本演算部分を変換するためのプログラム変換プログラムであって、
既存プログラムを入力するステップと、
入力された既存プログラムの字句解析を行うステップと、
数式処理システムにおいて予め定義された型を出力とする関数名と該関数名の型を格納した型情報データーベースを参照して、構文解析を行うステップと、
数式処理システムにおいて予め定義された型のみが代入される部分については変換しない変換規則を含む変換規則データーベースを参照し、構文解析されたプログラムを変換するステップと、
変換されたプログラムを出力するステップと、からなる。
【００１２】
本発明は、数式処理システムにおける、新しい型の定義に伴う既存プログラムの基本演算部分を変換するためのプログラム変換プログラムを格納した記憶媒体であって、
既存プログラムを入力するステップと、
入力された既存プログラムの字句解析を行うステップと、
数式処理システムにおいて予め定義された型を出力とする関数名と該関数名の型を格納した型情報データーベースを参照して、構文解析を行うステップと、
数式処理システムにおいて予め定義された型のみが代入される部分については変換しない変換規則を含む変換規則データーベースを参照し、構文解析されたプログラムを変換するステップと、
変換されたプログラムを出力するステップと、からなるプログラムを格納する。
【発明の効果】
【００１３】
本発明によれば、数式処理において、新しい型を定義したとき、基本演算部分及び型変換用のプログラムのみを予め用意しておけば、残りのプログラムは、本発明のプログラム変換方法あるいは、装置あるいは、記憶媒体に記録されているプログラムにより変換するだけで、そのまま使用可能である。
【００１４】
また、一度変換されたプログラムは、さらに新しい型を定義したときも、新しい型についての基本演算のプログラムのみ用意すれば、そのまま使用することが可能である。
【００１５】
さらに、不必要な型の確認処理が抑制されるよう変換を行うので、変換されたプログラムは、従来の方法（特開平１１−２２４２００）のみによって変換した場合よりも実行時の効率が良いものとなる。
【発明を実施するための最良の形態】
【００１６】
以下、図面と共に本発明の実施の形態を説明する。
【００１７】
最初に、数式処理システムにおいて、新しい型を定義し、その型を持つ数の計算を行うことを考える。
【００１８】
ここでは、例として、対象とする数式処理システムには、有理数及びその間の加減乗除算、大小比較、絶対値の基本演算が定義され、さらに浮動小数及びその間の加減乗除算、大小比較、絶対値の基本演算が定義され、浮動小数の丸めのモードとして四捨五入、−∞丸め、及び、＋∞丸めが用意されているものとする。
【００１９】
このシステムに新しく区間数という型を定義し、さらに、区間数係数の多項式の計算を行おうとする場合について説明する。
【００２０】
区間数は、ａ１≦ａ２なる浮動小数の対[ａ１，ａ２]で表され、ａ１≦ｂ≦ａ２なる数ｂの集合を意味する。また、区間数の基本演算の定義は、図３に示したとおりである。但し、浮動小数の計算において、ｏ＜、ｏ＞（ｏは＋，−，＊，／のいずれか）は、それぞれ、丸めのモードとして、−∞丸め、＋∞丸めを表す。区間係数多項式の加減乗算は、各次数毎に係数をまとめて、それを区間数の演算で計算するものとする。
【００２１】
例えば、図４に示す、有理数係数の一変数多項式ｆ（ｘ）のＬ１ノルムを計算するＬ１というプログラムによって説明する（多項式ｆ（ｘ）＝ｃｎｘｎ＋ｃｎ−１ｘｎ−１＋・・・＋ｃ０のＬ１ノルムは│ｃｎ│＋│ｃｎ−１│＋・・・＋│ｃ０│で定義される）。なお、同図において、「L１：＝ｐｒｏｃ（ｆ，ｘ）」とは、Ｌ１の仮引数がｆとｘであることを意味し、「ｌｏｃａｌ  ｄ，ｉ，ｒｅｓ；」は、この関数の中で用いる局所変数の宣言である（数式処理のプログラム言語は、型の宣言の無いものが多い）。ｄｅｇｒｅｅ（ｆ，ｘ）は、ｆのｘについての次数を返す関数、また、「ｆｏｒ  ｉ  ｆｒｏｍ  ０  ｔｏ  ｄ  ｄｏ．．．ｅｎｄ  ｄｏ；」は、ｉが０からｄまで値を１ずつ増やしながらの繰り返しを示し、ａｂｓは、絶対値を返す関数、ｃｏｅｆｆ（ｆ，ｘ，ｉ）は、ｆにおけるｘのｉ乗の係数を返す関数である。
【００２２】
もし、完全にオブジェクト指向の数式処理システムならば、ユーザは基本演算の定義を変更して、図４のプログラムのままで区間数係数多項式のＬ１ノルムを計算することが可能である。
【００２３】
しかし、ユーザによる基本演算の定義変更が不可能な場合は、図５のようにプログラムを書き換え、プログラム中の基本演算、例えば、加算「＋」があれば、その部分をａｄｄ２ｉｎｔｅｒｖａｌという二引数関数に書き換え、図６に示す「ａｄｄ２ｉｎｔｅｒｖａｌ」というプログラムを用意し、区間数同士の加算が可能になるように準備する必要がある。また、この例では、区間数の絶対値を返す関数「ａｂｓｉｎｔｅｒｖａｌ」も必要である。なお、このプログラム「Ｌ１ｉｎｔｅｒｖａｌ」は、区間数係数の多項式を受け付けるが、通常の有理数係数の多項式の計算はできない。ユーザは、入力する多項式の種類によって、「Ｌ１」あるいは、「Ｌ１ｉｎｔｅｒｖａｌ」のどちらを使用するのか決める必要がある。
【００２４】
一方、このプログラムを従来の方法（特開平１１−２２４２００）により変換した結果を図７に示す。この例では、新しい型（区間数）についてはリストを用いて表現し、その第一成分に型名（ｉｎｔｅｒｖａｌ）、第二成分にデータそのものを入れるものとする。図８のプログラム「ｃｏｎｖｅｒｔｉｎｔｅｒｖａｌ」は、有理数を区間数に変換するものであり、「ｅｖａｌｆｄ」、「ｅｖａｌｆｕ」は、入力された値を予め定めておいた精度の浮動小数に変換するもので、変換の際、「ｅｖａｌｆｄ」は、−∞丸め、「ｅｖａｌｆｕ」は＋∞丸めを行うものである。また、図９にある「ａｄｄ２．ｎ」の「．」は文字列の連結を表すものであり、例えば、ｎが文字列「ｉｎｔｅｒｖａｌ」であるとき、「ａｄｄ２．ｎ」は「ａｄｄ２ｉｎｔｅｒｖａｌ」を表す。また、「ｌａｒｇｅｒ」は大小判定をするプログラムで、「ａｄｄ２」と同じく用意しておく。
【００２５】
この変換により、有理数係数、区間数係数のいずれの多項式にも対応可能となるが、ｆｏｒループの変数ｉのように整数値しかとらない部分についても、区間数にも対応できるように変換されるため、変換したプログラムの実行時に型を調べるための余計な処理が発生し、効率が落ちることとなる。
【００２６】
本発明は、新しく定義した型が決して代入されない部分については変換をしないことにより、プログラム実行時の効率を上げるプログラム変換処理を行うものである。
【００２７】
以下に、本発明のプログラム変換処理について説明する。
【００２８】
今、新しく定義する区間数の型名を「ｉｎｔｅｒｖａｌ」とし、図３に従って区間数の間の基本演算を定義する。
【００２９】
新しい型の定義に伴って、ユーザは、元々数式処理システムに定義されている型から新しく定義する型への変換をするプログラム、及び、図３に現れる基本演算を定義するプログラムを用意する。例えば、型変換プログラムは、図８、二引数の加算「ａｄｄ２」は図１０に示した通りである。なお、システムに元々定義されている以外の型については、リストを用いて表現し、その第一成分に型名、第二成分にデータそのものを入れるものとする。
【００３０】
さらに、ユーザは、プログラムの変換によっても新しく定義された型を出力することなく、数式処理システムにおいて予め定義された型を出力とする関数名とその型を格納した型情報データーベース６０を用意しておく。図１１は、型情報データーベース６０に格納される情報の例を示す。
【００３１】
また、基本演算部分の変換規則を図１１に示す。但し、‖・‖は、「・」の部分が省略される場合があることを示す。この言語においては、繰り返し部分で、「ｆｏｒ＜ｎａｍｅ＞」と指定した場合、「ｆｒｏｍ＜ｅｘｐｒ＞」が省略されたときには、＜ｎａｍｅ＞の初期値は１であり、「ｂｙ＜ｅｘｐｒ＞」が省略されたときには、＜ｎａｍｅ＞は１ずつ増えるものとする。
【００３２】
図１２に示す変換規則の適用のしかたは以下の通りである。
【００３３】
・基本演算番号１から１３までについては、基本演算を記述しているプログラム（基本演算プログラムとも略す）が正常に実行された場合、即ち、構文解析をする際、その基本演算プログラムが正常に動作した（エラーメッセージではなく数値を返してきた）と仮定した場合、ある規則の（ａ）に現れるすべての＜ｅｘｐｒ＞，＜ｅｘｐｒ１＞，＜ｅｘｐｒ２＞が数式処理システムにおいて予め定義された型のみをとる場合は何も変換しない。そうでなければ、（ａ）のパターンがあれば、それを同じ番号の（ｂ）のパターンに書き換える。
【００３４】
・基本演算番号１４については、プログラムが正常に実行された場合、（ａ）の＜ｅｘｐｅｒ１＞が数式処理システムにおいて予め定義された型のみをとる場合には何も変換しない。そうでない場合は、それを（ｂ）のパターンに書き換える。
【００３５】
・基本演算番号１５，１６については、プログラムが正常に実行された場合、（ａ）の＜ｅｘｐｒ１＞，＜ｅｘｐｒ２＞の両方が数式処理システムおいて予め定義された型をとる場合には何も変換しない。
【００３６】
＜ｅｘｐｒ１>が数式処理システムにおいて予め定義された型のみをとり、＜ｅｘｐｒ２＞が新しく定義された型をとる場合には同じ番号の（ｂ１）に書き換える。それ以外の場合には（ｂ２）に書き換える。
【００３７】
・基本演算番号１７については、プログラムが正常に実行された場合、（ａ）の＜ｅｘｐｒ１＞，＜ｅｘｐｒ２＞，＜ｅｘｐｒ３＞の全てが数式処理システムにおいて予め定義された型のみをとる場合には何も変換しない。
【００３８】
＜ｅｘｐｒ１＞，＜ｅｘｐｒ２＞の両方が数式処理システムにおいて予め定義された型のみをとり、＜ｅｘｐｒ３>が新しく定義された型をとり得る場合には（ｂ１）に書き換える。
【００３９】
それ以外の場合には（ｂ２）に書き換える。
【００４０】
構文解析部３０において関数名が抽出された場合、型情報データーベース６０を参照し、その関数名が型情報データーベース６０に存在するか否かを調べる。存在する場合、この関数の出力の型はプログラムの変換によっても新しく定義された型となることはなく、数式処理システムにおいて予め定義された型である。
【００４１】
図１３は、本発明の一実施の形態におけるプログラム変換装置の構成を示す。同図に示すプログラム変換装置は、入力部１０、字句解析部２０、構文解析部３０、変換部４０、出力部５０、型情報データーベース６０、変換規則データーベース７０から構成される。
【００４２】
型情報データーベース６０は、プログラムの型に関する情報を格納する。
【００４３】
変換規則データーベース７０は、図１２に示すような変換規則を格納する。
【００４４】
入力部１０は、変換対象となるプログラムを入力する。
【００４５】
字句解析部２０は、入力されたプログラムの字句を解析する。
【００４６】
構文解析部３０は、型情報データーベース６０を参照して字句解析されたプログラムの構文を解析する。
【００４７】
変換部４０は、変換規則データーベース７０に登録されている変換規則に基づいて構文解析されたプログラムを変換する。
【００４８】
出力部５０は、変換されたプログラムを出力する。
【００４９】
実際に図１２及び上記の適用法を実現する手法としては、例えば、以下のような手段がある。
【００５０】
今、考えている数式処理システムの構文規則において、＜ｅｘｐｒ>が図１４のようにＢＮＦ（Backus
Naur Form）で定義されているものとする。このとき、この構文規則を図１５のように細分化する。但し、＜ｅｘｐｒｏｌｄ＞とは、数式処理システムで予め定義されていた型しか取らないものを指し、＜ｅｘｐｒｎｅｗ＞とは、それ以外を指す。図１３の構文解析部３０においては、細分化した構文規則により解析を行い、それに基づいて書き換えを行う。例として、細分化した構文規則に基づいた変換規則のうち、図１２の基本演算番号１，３，１５にあたる部分を書き出したものが図１６である。
【００５１】
新しく定義した型が決して代入されない、即ち、予め定義された型しか代入されない部分の抽出は以下のように行う。
【００５２】
構文解析部３０において関数名が抽出された場合、型情報データーベース６０を参照し、その関数名が型情報データーベース６０に存在するか否かを調べる。存在する場合、この関数の出力の型は、プログラムの変換によっても新しく定義された型となることはない。即ち、数式処理システムにおいて予め定義された型となる。従って、この関数値が代入される変数については、新しく定義した型が決して代入されない、ということがわかる。
【００５３】
また、プログラムの中で、入力データとは無関係に、変数に直接数値が代入されている部分も新しく定義した型が決して代入されない場所である。
【００５４】
以下、上記の構成の動作を具体的なプログラムの一部を例として説明する。
【００５５】
［例１］Ｌ１ノルムを計算する例：
前述の図４のＬ１ノルムを計算するプログラムＬ１については、字句解析部２０、構文解析部３０により、「ｆｏｒ  ｉ  ｆｒｏｍ  ０  ｔｏ  ｄｏ  ・・・ｅｎｄ  ｄｏ」の部分が図１６の１５．１（ａ）である。よって、同図の１５．１（ｂ）の書き換えが適用され、図１７に示したプログラムに変換して出力する。
【００５６】
なお、従来の方法（特開平１１−２２４２００）の方法を適用して書き換えたプログラムは、前述の図７に示すとおりである。変数ｉの数を１増加させる際に、図７に記載されたプログラムでは、ｉ：＝ａｄｄ２（ｉ，１）によって、プログラム「ａｄｄ２」を呼び、「ａｄｄ２」の中で変数ｉの型を調べた上で、ｉ＋１を実行する。一方、図１７に記載されるプログラムでは、プログラム「ａｄｄ２」を呼ぶことなく、直接ｉ＋１を実行する。この処理の差は、プログラム実行時の実行効率の差を生じさせる。即ち、従来の方法（特開平１１−２２４２００）の方法と比較して、本発明の方法は、不要なプログラムの呼び出し及び不要な型の確認を行わないために、プログラムを実行する計算機資源をより効率的に利用することを可能にする。
【００５７】
［例２］加算を含む例：
まず、図１８の例を考える。
【００５８】
字句解析部２０、構文解析部３０により、「ａ＋ｂ」の部分が図１６の３．３（ａ）である（この部分だけではａ，ｂにどのような型が入るかわからないため）。よって、同図３．３（ｂ）の変換規則に従い、加算「＋」のところを「ａｄｄ２」という二引数の関数に書き換え、図１９に示したプログラムに変換して出力する。
【００５９】
次に、図２０の例について考える。図１１の型情報データーベース６０を参照することにより、構文解析部３０において、「ｄｅｇｒｅｅ」は整数値のみ返すので、「ｄｅｇｒｅｅ（ｆ，ｘ）＋ｄｅｇｒｅｅ（ｇ，ｘ）；」の部分は、「＜ｅｘｐｒｏｌｄ＞＋＜ｅｘｐｒｏｌｄ＞」と解釈される。図１６の基本演算番号３のところに適用する変換規則がないため、書き換えは起きない。
【００６０】
参考のため、図２０に示すプログラムを従来の方法（特開平１１−２２４２００）の方法のみを適用して書き換えたプログラムを図２１に示す。
【００６１】
ｄｅｇｒｅｅ（ｆ，ｘ）とｄｅｇｒｅｅ（ｇ，ｘ）とを加える際に、図２１に記載されているプログラムでは、ａｄｄ２（ｄｅｇｒｅｅ（ｆ，ｘ），ｄｅｇｒｅｅ（ｇ，ｘ））によって、プログラム「ａｄｄ２」を呼び、「ａｄｄ２」の中で関数「ｄｅｇｒｅｅ」から帰ってきた値の方を調べた上で、ｄｅｇｒｅｅ（ｆ，ｘ）＋ｄｅｇｒｅｅ（ｇ，ｘ）を実行する。一方、図２０に記載されているプログラムでは、プログラム「ａｄｄ２」を呼び出すことなく、直接ｄｅｇｒｅｅ（ｆ，ｘ）＋ｄｅｇｒｅｅ（ｇ，ｘ）を実行する。
【００６２】
この差によって、プログラム実行時において、実行効率の差が生じる。即ち、従来の方法（特開平１１−２２４２００）と比較して、本発明の方法は、不要なプログラムの呼び出し及び不要な型の確認を行わないために、プログラムを実行する計算機資源を効率的に利用することを可能にする。
【００６３】
［例３］分岐条件を含む例：
まず、図２２の例を考える。字句解析部２０、構文解析部３０により、「ｉｆ  ｎ＞  ａ  ｔｈｅｎ  ．．．ｅｎｄ  ｉｆ」の部分が図１２の基本演算番号１０である。この部分だけではｎ，ａにどのような型が入るかわからないために、変換規則に従い、不等号「＞」のところを「ｌａｒｇｅｒ」という二引数の関数に書き換え、図２３に示したプログラムに変換して出力する。
【００６４】
次に、図２４の例を考える。字句解析部２０、構文解析部３０により、「ｎｏｐｓ（Ｓ）＞３」の部分が図１２の基本演算番号１０である。同図において、「ｎｏｐｓ」は数式処理システムで予め定義されている集合の元の数を返す関数とする。よって、図１１の型情報データーベース６０を参照することにより、構文解析部３０において「＜ｅｘｐｒ１＞」は正常処理の場合、整数値のみを返すことがわかり、＜ｅｘｐｒ２＞が整数値のみを取る（３のみをとる）ことと合わせ、この部分は、「<ｅｘｐｒｏｌｄ>＞<ｅｘｐｒｏｌｄ>」と解釈される。よって、「変換規則を適用しない」という規則が適用され、書き換えは起きない。
【００６５】
参考のため、図２４に示すプログラムを従来の方法（特開平１１−２２４２００）のみを適用して書き換えたプログラムを図２５に示す。
【００６６】
ｎｏｐｓ（Ｓ）と３との大小を比較する際に、図２５に記載されているプログラムでは、ｌａｒｇｅｒ（ｎｏｐｓ（Ｓ），３）によって、プログラム「ｌａｒｇｅｒ」を呼び、「ｌａｒｇｅｒ」の中で関数ｎｏｐｓから返ってきた値の型を調べた上でｎｏｐｓ（Ｓ）と３の大小を比較する。一方、図２５に記載されているプログラムでは、プログラム「ｌａｒｇｅｒ」を呼ぶことなく、直接ｎｏｐｓ（Ｓ）と３の大小を比較する。
【００６７】
この差によって、プログラム実行時において、実行効率の差が生じる。即ち、従来の方法（特開平１１−２２４２００）と比較して、本発明の方法は、不要なプログラムの呼び出し及び不要な型の確認を行わないために、プログラムを実行する計算機資源をより効率的に利用することが可能となる。
【００６８】
［例４］繰り返し部分を含む例：
まず、図２６の例を考える。字句解析部２０、構文解析部３０により、「ｆｏｒ  ｉ  ｆｒｏｍ  ａ  ｂｙ  ｓ  ｔｏ  ｂ  ｄｏ  ．．．ｅｎｄ  ｄｏ」の部分が図１２の基本演算番号１７である。この部分だけでは、ｉ，ａ，ｓ，ｂにどのような型が入るか分からないために、変換規則に従い、図２７に示したプログラムに変換して出力する。
【００６９】
次に、図２８の例を考える。字句解析部２０、構文解析部３０により、「ｆｏｒ  ｉ  ｆｒｏｍ  １  ｔｏ  ｎｏｐｓ（Ｓ）  ｄｏ．．．ｅｎｄ  ｄｏ」の部分が図１２の基本演算番号１５である。同図において、ｎｏｐｓは、図２４と同じものとする。よって、図１１の型情報データーベース６０を参照することにより、正常処理の場合、整数値のみを返すので、＜ｅｘｐｒ２＞は整数値のみをとる。＜ｅｘｐｒ１＞が整数値のみをとる（１のみをとる）ことと合わせ、この部分は、「ｆｏｒ  <ｎａｍｅ＞  ｆｒｏｍ  <ｅｘｐｒｏｌｄ＞  ｔｏ  <ｅｘｐｒｏｌｄ＞ｄｏ  <ｓｔａｔｓｅｑ＞  ｅｎｄ  ｄｏ」と解釈される。図１６の基本演算番号１５のところに適用する変換規則がないため、書き換えは起きない。
【００７０】
参考のため、図２８に示すプログラムに従来の方法（特開平１１−２２４２００）のみを適用して書き換えたプログラムを図２９に示す。
【００７１】
変数ｉの値とｎｏｐｓ（Ｓ）の値の大小を比較する際に、図２９に示すプログラムでは、ｌａｒｇｅｒ（ｉ，ｎｏｐｓ（Ｓ））によって、プログラム「ｌａｒｇｅｒ」を呼び、「ｌａｒｇｅｒ」の中で関数ｎｏｐｓから返ってきた値の型を調べた上で、ｉとｎｏｐｓ（Ｓ）の大小を比較する。一方、図２８に記載されているプログラムでは、プログラム「ｌａｒｇｅｒ」を呼ぶことなく、直接ｉとｎｏｐｓ（Ｓ）の大小を比較する。また、変数ｉの数を１増加させる際に、図２９に記載されているプログラムでは、ｉ：＝ａｄｄ２（ｉ，１）によって、プログラム「ａｄｄ２」を呼び、「ａｄｄ２」の中で変数ｉの型を調べた上で、ｉ＋１を実行するが、図２８に記載のプログラムでは、プログラム「ａｄｄ２」を呼ぶことなく、直接ｉ＋１を実行する。
【００７２】
この処理の差は、プログラム実行時の実行効率の差を生じさせる。即ち、従来の方法（特開平１１−２２４２００）と比較して、本発明の方法は、不要なプログラムの呼び出し及び不要な型の確認を行わないために、プログラムを実行する計算機資源をより効率的に利用することを可能にする。
【００７３】
なお、上記の動作をプログラムとして構築し、プログラム変換装置として利用されるコンピュータにインストールし、ＣＰＵ等の制御手段により実行する、または、ネットワークを介して流通させることが可能である。
【００７４】
また、構築されたプログラムをプログラム変換装置として利用されるコンピュータに接続されるハードディスク装置や、フレキシブルディスク、ＣＤ−ＲＯＭ等の可搬記憶媒体に格納しておき、実行時にコンピュータにインストールすることも可能である。
【００７５】
なお、本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において種々変更・応用が可能である。
【産業上の利用可能性】
【００７６】
本発明は、数式処理システムの拡張機能としてプログラムを変換するためのシステムに利用可能である。
【図面の簡単な説明】
【００７７】
【図１】本発明の原理を説明するための図である。
【図２】本発明の原理構成図である。
【図３】区間数の基本演算の定義を示す図である。
【図４】有理数を係数とする一変数多項式に対してそのＬ１ノルムを計算するプログラムの例である。
【図５】図４のプログラムを区間係数多項式に対して計算できるよう人手で変換したプログラムの例である。
【図６】２つの区間数の加算を計算するプログラムの例である。
【図７】有理数係数、区間数係数どちらかの場合にも計算できるよう従来の方法（特開平１１−２２４２００）により図４のプログラムを変換した例である。
【図８】予め数式処理に定義されている型から新しく定義された型への変換プログラムを示す図である。
【図９】従来の方法（特開平１１−２２４２００）により予め定義されている二引数の加算を定義しているプログラムを示す図である。
【図１０】従来の方法（特開平１１−２２４２００）の方法に沿って二つの区間数の加算を定義するプログラムを示す図である。
【図１１】本発明の一実施の形態における型情報データーベースの情報の例を示す図である。
【図１２】本発明の一実施の形態におけるプログラムの変換規則の例である。
【図１３】本発明の一実施の形態におけるプログラム変換装置の構成図である。
【図１４】本発明の一実施の形態における数式処理プログラムの言語の定義の一部を示す図である。
【図１５】本発明の一実施の形態における図１２の定義を細分化した例である。
【図１６】本発明の一実施の形態における図１３に従って変換規則を細分化した例である。
【図１７】本発明の一実施の形態において図４のプログラムを変換した例である。
【図１８】本発明の一実施の形態におけるプログラムに加算を含むプログラムの例である。
【図１９】本発明の一実施の形態における図１８を変換したプログラムの例である。
【図２０】本発明の一実施の形態における不必要な変換が抑制される例である。
【図２１】図２０の例に対して従来の方法（特開平１１−２２４２００）を適用した例である。
【図２２】本発明の一実施の形態におけるプログラムの一部に条件分岐を含むプログラムの例である。
【図２３】本発明の一実施の形態における図２２のプログラムを変換した例である。
【図２４】本発明の一実施の形態における条件分岐に対し不必要な変換が抑制される例である。
【図２５】図２３に対して従来の方法（特開平１１−２２４２００）を適用した例である。
【図２６】本発明の一実施の形態における図１７のプログラムの一部に繰り返し部分を含むプログラムの例である。
【図２７】本発明の一実施の形態における図２６のプログラムを変換したプログラムの例である。
【図２８】本発明の一実施の形態における繰り返し部分に不必要な変換が抑制される例である。
【図２９】図２６の例に対して従来の方法（特開平１１−２２４２００）を適用した例である。
【符号の説明】
【００７８】
１０  入力手段、入力部
２０  字句解析手段、字句解析部
３０  構文解析手段、構文解析部
４０  変換手段、変換部
５０  出力手段、出力部
６０  型情報データーベース
７０  変換規則データーベース
【図１】
2005038212.tif 000003
【図２】
2005038212.tif 000004
【図３】
2005038212.tif 000005
【図４】
2005038212.tif 000006
【図５】
2005038212.tif 000007
【図６】
2005038212.tif 000008
【図７】
2005038212.tif 000009
【図８】
2005038212.tif 000010
【図９】
2005038212.tif 000011
【図１０】
2005038212.tif 000012
【図１１】
2005038212.tif 000013
【図１２】
2005038212.tif 000014
【図１３】
2005038212.tif 000015
【図１４】
2005038212.tif 000016
【図１５】
2005038212.tif 000017
【図１６】
2005038212.tif 000018
【図１７】
2005038212.tif 000019
【図１８】
2005038212.tif 000020
【図１９】
2005038212.tif 000021
【図２０】
2005038212.tif 000022
【図２１】
2005038212.tif 000023
【図２２】
2005038212.tif 000024
【図２３】
2005038212.tif 000025
【図２４】
2005038212.tif 000026
【図２５】
2005038212.tif 000027
【図２６】
2005038212.tif 000028
【図２７】
2005038212.tif 000029
【図２８】
2005038212.tif 000030
【図２９】
2005038212.tif 000031