(57)【要約】 【課題】変数が確保される記憶域を重複させる記述ができる第１言語のプログラムを、当該記述が不可能な第２言語のプログラムに、飜訳する飜訳装置等を提供する。【解決手段】宣言飜訳部１０４は、第１言語における記憶域が重複する変数の宣言を、第２言語において、独立したデータ変数およびそれぞれに対するフラグ変数の宣言にコンパイルし、代入飜訳部１０５は、第１言語における記憶域が重複する変数への代入を、第２言語において、当該重複する各データ変数へ代入したと仮定した場合に当該変数の値が有効か否かをチェックして、その結果を各変数ごとにフラグ変数に保存し、有効となるデータ変数にのみ代入を行うようにコンパイルし、参照飜訳部１０６は、第１言語における記憶域が重複する変数の参照を、第２言語において、当該フラグ変数が有効であれば当該データ変数の値を返し、無効であれば例外を生じさせるようにコンパイルする。【選択図】図１
2010231312.tif 000002
【特許請求の範囲】
【請求項１】
第１のプログラミング言語で記述された飜訳前プログラムを、第２のプログラミング言語で記述された飜訳後プログラムに飜訳する飜訳装置であって、
前記飜訳前プログラムにおける「第１の飜訳前変数が確保される記憶域と、第２の飜訳前変数が確保される記憶域と、が重複する」旨の宣言を、当該宣言を、前記飜訳後プログラムにおいて、「前記第１の飜訳前変数に対応付けられる第１の飜訳後変数および第１の飜訳後フラグと、前記第２の飜訳前変数に対応付けられる第２の飜訳後変数および第２の飜訳後フラグと、を、互いに重複しない記憶域に確保する」旨の宣言に飜訳する宣言飜訳部、
前記飜訳前プログラムにおける「前記第１の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第１の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第２の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第２の飜訳後変数が確保される記憶域に記憶される情報が、前記第２の飜訳後変数の値として有効であるか否かを、前記第２の飜訳後フラグに書き込む」旨の文に飜訳し、前記飜訳前プログラムにおける「前記第２の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第２の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第１の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第１の飜訳後変数が確保される記憶域に記憶される情報が、前記第１の飜訳後変数の値として有効であるか否かを、前記第１の飜訳後フラグに書き込む」旨の文に飜訳する代入飜訳部、
前記飜訳前プログラムにおける「前記第１の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第１の飜訳後変数が確保される記憶域に記憶される情報が前記第１の飜訳後変数の値として有効であるか否かを、前記第１の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第１の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳し、前記飜訳前プログラムにおける「前記第２の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第２の飜訳後変数が確保される記憶域に記憶される情報が前記第２の飜訳後変数の値として有効であるか否かを、前記第２の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第２の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳する参照飜訳部
を備えることを特徴とする飜訳装置。
【請求項２】
請求項１に記載の飜訳装置であって、
前記飜訳前プログラムにおける「前記第１の飜訳前変数の値をデータベースに登録する」旨の文を、前記飜訳後プログラムにおいて、「前記第１の飜訳後変数が確保される記憶域に記憶される情報が前記第１の飜訳後変数の値として有効であるか否かを、前記第１の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第１の飜訳後変数の値をデータベースに登録し、有効でないと判定された場合は、ＮＩＬ値をデータベースに登録」する旨の文に飜訳し、前記飜訳前プログラムにおける「前記第２の飜訳前変数の値をデータベースに登録する」旨の文を、前記飜訳後プログラムにおいて、「前記第２の飜訳後変数が確保される記憶域に記憶される情報が前記第２の飜訳後変数の値として有効であるか否かを、前記第２の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第２の飜訳後変数の値をデータベースに登録し、有効でないと判定された場合は、ＮＩＬ値をデータベースに登録」する旨の文に飜訳する登録飜訳部、
前記飜訳前プログラムにおける「データベースから読み出した値を第１の飜訳前変数に代入する」旨の文を、前記飜訳後プログラムにおいて、「データベースから値を読み出し、当該読み出された値がＮＩＬ値である場合、前記第１の飜訳後変数が確保される記憶域に記憶される情報が有効でない旨を前記第１の飜訳後フラグに書き込み、当該読み出された値がＮＩＬ値でない場合、前記第１の飜訳後変数が確保される記憶域に記憶される情報が有効である旨を前記第１の飜訳後フラグに書き込み、前記第１の飜訳後変数が確保される記憶域にに当該読み出された値を書き込む」旨の文に飜訳し、前記飜訳前プログラムにおける「データベースから読み出した値を第２の飜訳前変数に代入する」旨の文を、前記飜訳後プログラムにおいて、「データベースから値を読み出し、当該読み出された値がＮＩＬ値である場合、前記第２の飜訳後変数が確保される記憶域に記憶される情報が有効でない旨を前記第２の飜訳後フラグに書き込み、当該読み出された値がＮＩＬ値でない場合、前記第２の飜訳後変数が確保される記憶域に記憶される情報が有効である旨を前記第２の飜訳後フラグに書き込み、前記第２の飜訳後変数が確保される記憶域にに当該読み出された値を書き込む」旨の文に飜訳する読出飜訳部
をさらに備えることを特徴とする飜訳装置。
【請求項３】
請求項１または２に記載の飜訳装置であって、
前記第１の飜訳前変数は、ゾーン形式二進化十進数型であり、
前記第２の飜訳前変数は、他方は、それ以外の整数型であり、
前記第１の飜訳後変数は、前記第１の飜訳前変数ががとりうる整数の範囲を表現できる整数型であり、
前記第２の飜訳後変数は、前記第２の飜訳前変数ががとりうる整数の範囲を表現できる整数型である
ことを特徴とする飜訳装置。
【請求項４】
請求項１または２に記載の飜訳装置であって、
前記第１の飜訳前変数は、ゾーン形式二進化十進数型であり、
前記第２の飜訳前変数は、文字列型であり、
前記第１の飜訳後変数は、前記第１の飜訳前変数ががとりうる整数の範囲を表現できる整数型であり、
前記第２の飜訳後変数は、前記第２の飜訳前変数は、文字列型である
ことを特徴とする飜訳装置。
【請求項５】
第１のプログラミング言語で記述された飜訳前プログラムを、第２のプログラミング言語で記述された飜訳後プログラムに飜訳する翻訳装置が実行する飜訳方法であって、前記飜訳装置は、宣言飜訳部、代入飜訳部、参照飜訳部を備え、
前記宣言飜訳部が、前記飜訳前プログラムにおける「第１の飜訳前変数が確保される記憶域と、第２の飜訳前変数が確保される記憶域と、が重複する」旨の宣言を、当該宣言を、前記飜訳後プログラムにおいて、「前記第１の飜訳前変数に対応付けられる第１の飜訳後変数および第１の飜訳後フラグと、前記第２の飜訳前変数に対応付けられる第２の飜訳後変数および第２の飜訳後フラグと、を、互いに重複しない記憶域に確保する」旨の宣言に飜訳する宣言飜訳工程、
前記代入飜訳部が、前記飜訳前プログラムにおける「前記第１の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第１の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第２の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第２の飜訳後変数が確保される記憶域に記憶される情報が、前記第２の飜訳後変数の値として有効であるか否かを、前記第２の飜訳後フラグに書き込む」旨の文に飜訳し、前記飜訳前プログラムにおける「前記第２の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第２の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第１の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第１の飜訳後変数が確保される記憶域に記憶される情報が、前記第１の飜訳後変数の値として有効であるか否かを、前記第１の飜訳後フラグに書き込む」旨の文に飜訳する代入飜訳工程、
前記参照飜訳部が、前記飜訳前プログラムにおける「前記第１の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第１の飜訳後変数が確保される記憶域に記憶される情報が前記第１の飜訳後変数の値として有効であるか否かを、前記第１の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第１の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳し、前記飜訳前プログラムにおける「前記第２の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第２の飜訳後変数が確保される記憶域に記憶される情報が前記第２の飜訳後変数の値として有効であるか否かを、前記第２の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第２の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳する参照飜訳工程
を備えることを特徴とする飜訳方法。
【請求項６】
コンピュータに、第１のプログラミング言語で記述された飜訳前プログラムを、第２のプログラミング言語で記述された飜訳後プログラムに飜訳させるプログラムであって、前記プログラムは、前記コンピュータを、
前記飜訳前プログラムにおける「第１の飜訳前変数が確保される記憶域と、第２の飜訳前変数が確保される記憶域と、が重複する」旨の宣言を、当該宣言を、前記飜訳後プログラムにおいて、「前記第１の飜訳前変数に対応付けられる第１の飜訳後変数および第１の飜訳後フラグと、前記第２の飜訳前変数に対応付けられる第２の飜訳後変数および第２の飜訳後フラグと、を、互いに重複しない記憶域に確保する」旨の宣言に飜訳する宣言飜訳部、
前記飜訳前プログラムにおける「前記第１の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第１の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第２の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第２の飜訳後変数が確保される記憶域に記憶される情報が、前記第２の飜訳後変数の値として有効であるか否かを、前記第２の飜訳後フラグに書き込む」旨の文に飜訳し、前記飜訳前プログラムにおける「前記第２の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第２の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第１の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第１の飜訳後変数が確保される記憶域に記憶される情報が、前記第１の飜訳後変数の値として有効であるか否かを、前記第１の飜訳後フラグに書き込む」旨の文に飜訳する代入飜訳部、
前記飜訳前プログラムにおける「前記第１の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第１の飜訳後変数が確保される記憶域に記憶される情報が前記第１の飜訳後変数の値として有効であるか否かを、前記第１の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第１の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳し、前記飜訳前プログラムにおける「前記第２の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第２の飜訳後変数が確保される記憶域に記憶される情報が前記第２の飜訳後変数の値として有効であるか否かを、前記第２の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第２の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳する参照飜訳部
として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、変数が確保される記憶域を重複させる記述ができる第１のプログラミング言語で記述されたプログラムを、第２のプログラミング言語で記述されたプログラムに、変数の記憶域を重複させずに、飜訳するのに好適な飜訳装置、飜訳方法、ならびに、これらをコンピュータにて実現するプログラムに関する。
【背景技術】
【０００２】
従来から産業界では、種々のプログラミング言語が利用されており、長期間の運用実績により動作の安定性がある程度保証されているプログラムも多数ある。
【０００３】
このようなプログラムには、記憶域の制約が厳しかった時代のプログラミング言語で記述されたものも多数ある。このようなプログラミング言語では、記憶域を節約したり、ある種の型変換を行うために、ある変数と別の変数とが、共通する記憶域に重複して確保されるような記述が可能なものも多い。
【０００４】
たとえば、Ｃ言語において、西暦を表す整数と、その西暦を文字列として表現する文字配列と、を、重複してＲＡＭ（Random Access Memory）によって実現されるメモリ内に配置するには、以下のような共用体を宣言する記述を用いる。
union｛int i； char s[5]；｝y；
【０００５】
変数yは、年を格納するためのものであり、この記述では、整数変数y.iと、文字配列変数y.sと、が、重複した領域に配置され、y.iには整数値で、y.sには文字列値で、西暦年が格納されることを期待するものである。
【０００６】
このプログラムが１６ビットのＣＰＵ（Central Processing Unit）向けのものである場合、整数int iは１６ビット、２バイトで表現されるのが一般的である。一方、文字配列char s[5]は、５バイトで表現される。この場合、整数変数y.iは、文字配列変数y.sの先頭２バイトy.s[0]，y.s[1]と重複して記憶域に配置される。
【０００７】
バイト列並びとしてリトルエンディアンを採用している場合を想定する。西暦年として、整数値を代入する場合には、
y.i = 2009；
を実行することになる。
【０００８】
ここで、
2009 = 217 + 7×256
であるから、上記の整数値の代入を実行することによって、y.s[0]は217になり、y.s[1]は7になる。
【０００９】
一方、Ｃ言語の文字列は、値０を終端文字とするＡＳＣＩＩＺ形式を採用している。したがって、y.iへの代入以前に、
strcpy(y.s，"")；
や、
strcpy(y.s，"a")；
などによって、文字配列y.sに長さ０や１のＡＳＣＩＩＺ文字列が書き込まれていた場合には特に、y.iへの代入によって、終端文字が上書きされてしまう。
【００１０】
このため、y.sは、ＡＳＣＩＩＺ文字列としては不正なものとなってしまう。
【００１１】
また、ＡＳＣＩＩ文字では7はベルの文字コードであり、217はＡＳＣＩＩ文字の範囲を超え、半角カナの「ル」の文字コードである。これは、プログラマーが意図した「西暦年を表す文字列」ではない。
【００１２】
さらに、
strcpy(y.s，"2009")；
を実行した場合には、文字配列y.sは、ＡＳＣＩＩＺ文字列として有効なものであり、プログラマーが期待した値が格納されているが、整数y.iは、「2」の文字コード５０と、「0」の文字コード４８と、から、
50 + 48×256 = 12338
という値を持つことになる。これは、西暦年としては、適切なものではない。
【００１３】
このほか、整数を表現する手法として、１の補数表現や２の補数表現によりビット列をそのまま利用する手法、十進数の１桁（０〜９）の値を１ニブルに格納するパック形式二進化十進表現による手法、十進数の１桁（０〜９）の値を対応する文字コードで表現し、整数としても文字配列としても解釈可能なゾーン形式二進化十進表現による手法等がある。
【００１４】
たとえば、ＣＯＢＯＬ言語においては、Ｃ言語とは異なり、ＣＰＵ等の仕様や機能とは独立して、４桁のゾーン形式二進化十進数は、１バイトに１桁ずつ格納され、４バイトの領域が確保される。
【００１５】
また、ゾーン形式二進化十進数の変数の記憶域と文字列の変数の記憶域を重複させるためには、ＲＥＤＥＦＩＮＥＳ句を用いる。
【００１６】
したがって、上記のＣ言語のプログラムを、ＣＯＢＯＬ言語において、再定義項目の宣言を利用して記述する場合には、以下のような記述を用いることになる。
01      Y
02      YI PIC Z(4)
03      YY REDEFINES YI
04      YS PIC X(4)
【００１７】
このような宣言がなされたＣＯＢＯＬ言語のプログラムにおいて、
MOVE 2009 TO YI
を実行したとすると、これと記憶域が重なる文字列変数YSの０文字目は文字2の文字コードが、０文字目は文字0の文字コードが、０文字目は文字0の文字コードが、０文字目は文字9の文字コードが、それぞれ割り当てられることとなる。
【００１８】
したがってこの場合、文字列変数YSと、整数変数YIと、は、いずれも有効な値を持つことになる。
【００１９】
一方、文字列変数YSに、
MOVE 'abcd' TO YS
のように、長さ４の文字列「ａｂｃｄ」を代入した場合には、この文字列は整数として解釈することが不可能である。したがって、整数変数YIの値は無効になり、YIの値を参照すると、例外が生じる。
【００２０】
また、これらの変数の値をデータベースに格納したり、データベースから取得したりするような技術も以前から利用されている。
【００２１】
あるＣＯＢＯＬ処理系においては、データベースへの格納の際には、再定義項目の先頭に宣言された変数のみを書き込み、データベースからの取得の際には、再定義項目の先頭に宣言された変数のみを読み出すこととして、変数の値が無効である場合には、データベースとの間で格納・取得される値をＮＩＬ値とする実装の下で、多数のプログラムが運用されている。
【００２２】
一方、近年、メモリの低価格化、コンピュータの高性能化にともなって、複数の変数が重複する記憶域に配置されるような機能を有していないプログラミング言語を用いて、各種の処理が記述されるようになりつつある。たとえば、先行文献１に開示される技術では、上記のような機能は持たないＪＡＶＡ（登録商標）言語を用いて、ビジネスプロセスを機械化するための飜訳（コンパイル；compile）技術が開示されている。
【先行技術文献】
【特許文献】
【００２３】
【特許文献１】特開２００６−０３１１７３号公報
【発明の概要】
【発明が解決しようとする課題】
【００２４】
したがって、ＣＯＢＯＬ言語で記述されたプログラムなどの過去の資産を生かすには、当該プログラムをＪＡＶＡ（登録商標）言語に飜訳する手法がありうる。しかしながら、上記のように、ＪＡＶＡ（登録商標）言語には、共用体や再定義項目に相当する機能が存在しない。したがって、これらを飜訳する新たな技術が求められている。
【００２５】
このほか、Ｃ言語やＣ＋＋言語に飜訳する際においても、ＣＰＵ等の仕様に対する依存度をできるだけ少なくするため、共用体を使用しないように飜訳する技術が求められている。
【００２６】
本発明は、上記のような課題を解決するもので、変数が確保される記憶域を重複させる記述ができる第１のプログラミング言語で記述されたプログラムを、第２のプログラミング言語で記述されたプログラムに、変数の記憶域を重複させずに、飜訳するのに好適な飜訳装置、飜訳方法、ならびに、これらをコンピュータにて実現するプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２７】
以上の目的を達成するため、本発明の原理にしたがって、下記の発明を開示する。
【００２８】
本発明の第１の観点に係る飜訳装置は、第１のプログラミング言語で記述された飜訳前プログラムを、第２のプログラミング言語で記述された飜訳後プログラムに飜訳し、宣言飜訳部、代入飜訳部、参照飜訳部を備え、以下のように構成する。
【００２９】
すなわち、宣言飜訳部は、飜訳前プログラムにおける「第１の飜訳前変数が確保される記憶域と、第２の飜訳前変数が確保される記憶域と、が重複する」旨の宣言を、当該宣言を、飜訳後プログラムにおいて、「第１の飜訳前変数に対応付けられる第１の飜訳後変数および第１の飜訳後フラグと、第２の飜訳前変数に対応付けられる第２の飜訳後変数および第２の飜訳後フラグと、を、互いに重複しない記憶域に確保する」旨の宣言に飜訳する。
【００３０】
一方、代入飜訳部は、飜訳前プログラムにおける「第１の飜訳前変数に値を代入する」旨の文を、飜訳後プログラムにおいて「第１の飜訳後変数に当該値を代入し、当該代入される値のうち、重複される記憶域に記憶されるべき情報を、当該第２の飜訳後変数が確保される記憶域のうち、重複される記憶域に対応付けられる記憶域に書き込み、第２の飜訳後変数が確保される記憶域に記憶される情報が、第２の飜訳後変数の値として有効であるか否かを、第２の飜訳後フラグに書き込む」旨の文に飜訳し、飜訳前プログラムにおける「第２の飜訳前変数に値を代入する」旨の文を、飜訳後プログラムにおいて「第２の飜訳後変数に当該値を代入し、当該代入される値のうち、重複される記憶域に記憶されるべき情報を、当該第１の飜訳後変数が確保される記憶域のうち、重複される記憶域に対応付けられる記憶域に書き込み、第１の飜訳後変数が確保される記憶域に記憶される情報が、第１の飜訳後変数の値として有効であるか否かを、第１の飜訳後フラグに書き込む」旨の文に飜訳する。
【００３１】
さらに、参照飜訳部は、飜訳前プログラムにおける「第１の飜訳前変数の値を参照する」旨の式を、飜訳後プログラムにおいて「第１の飜訳後変数が確保される記憶域に記憶される情報が第１の飜訳後変数の値として有効であるか否かを、第１の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第１の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳し、飜訳前プログラムにおける「第２の飜訳前変数の値を参照する」旨の式を、飜訳後プログラムにおいて「第２の飜訳後変数が確保される記憶域に記憶される情報が第２の飜訳後変数の値として有効であるか否かを、第２の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第２の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳する。
【００３２】
また、本発明の飜訳装置は、登録飜訳部、読出飜訳部をさらに備え、以下のように構成することができる。
【００３３】
すなわち、登録飜訳部は、飜訳前プログラムにおける「第１の飜訳前変数の値をデータベースに登録する」旨の文を、飜訳後プログラムにおいて、「第１の飜訳後変数が確保される記憶域に記憶される情報が第１の飜訳後変数の値として有効であるか否かを、第１の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第１の飜訳後変数の値をデータベースに登録し、有効でないと判定された場合は、ＮＩＬ値をデータベースに登録」する旨の文に飜訳し、飜訳前プログラムにおける「第２の飜訳前変数の値をデータベースに登録する」旨の文を、飜訳後プログラムにおいて、「第２の飜訳後変数が確保される記憶域に記憶される情報が第２の飜訳後変数の値として有効であるか否かを、第２の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第２の飜訳後変数の値をデータベースに登録し、有効でないと判定された場合は、ＮＩＬ値をデータベースに登録」する旨の文に飜訳する。
【００３４】
一方、読出飜訳部は、飜訳前プログラムにおける「データベースから読み出した値を第１の飜訳前変数に代入する」旨の文を、飜訳後プログラムにおいて、「データベースから値を読み出し、当該読み出された値がＮＩＬ値である場合、第１の飜訳後変数が確保される記憶域に記憶される情報が有効でない旨を第１の飜訳後フラグに書き込み、当該読み出された値がＮＩＬ値でない場合、第１の飜訳後変数が確保される記憶域に記憶される情報が有効である旨を第１の飜訳後フラグに書き込み、第１の飜訳後変数が確保される記憶域にに当該読み出された値を書き込む」旨の文に飜訳し、飜訳前プログラムにおける「データベースから読み出した値を第２の飜訳前変数に代入する」旨の文を、飜訳後プログラムにおいて、「データベースから値を読み出し、当該読み出された値がＮＩＬ値である場合、第２の飜訳後変数が確保される記憶域に記憶される情報が有効でない旨を第２の飜訳後フラグに書き込み、当該読み出された値がＮＩＬ値でない場合、第２の飜訳後変数が確保される記憶域に記憶される情報が有効である旨を第２の飜訳後フラグに書き込み、第２の飜訳後変数が確保される記憶域にに当該読み出された値を書き込む」旨の文に飜訳する。
【００３５】
また、本発明の飜訳装置において、第１の飜訳前変数は、ゾーン形式二進化十進数型であり、第２の飜訳前変数は、他方は、それ以外の整数型であり、第１の飜訳後変数は、第１の飜訳前変数ががとりうる整数の範囲を表現できる整数型であり、第２の飜訳後変数は、第２の飜訳前変数ががとりうる整数の範囲を表現できる整数型であるように構成することができる。
【００３６】
また、本発明の飜訳装置において、第１の飜訳前変数は、ゾーン形式二進化十進数型であり、第２の飜訳前変数は、文字列型であり、第１の飜訳後変数は、第１の飜訳前変数ががとりうる整数の範囲を表現できる整数型であり、第２の飜訳後変数は、第２の飜訳前変数は、文字列型であるように構成することができる。
【００３７】
本発明のその他の観点に係る飜訳方法は、第１のプログラミング言語で記述された飜訳前プログラムを、第２のプログラミング言語で記述された飜訳後プログラムに飜訳する翻訳装置が実行し、飜訳装置は、宣言飜訳部、代入飜訳部、参照飜訳部を備え、飜訳方法は、宣言飜訳工程、代入飜訳工程、参照飜訳工程を備え、以下のように構成する。
【００３８】
すなわち、宣言飜訳工程では、宣言飜訳部が、飜訳前プログラムにおける「第１の飜訳前変数が確保される記憶域と、第２の飜訳前変数が確保される記憶域と、が重複する」旨の宣言を、当該宣言を、飜訳後プログラムにおいて、「第１の飜訳前変数に対応付けられる第１の飜訳後変数および第１の飜訳後フラグと、第２の飜訳前変数に対応付けられる第２の飜訳後変数および第２の飜訳後フラグと、を、互いに重複しない記憶域に確保する」旨の宣言に飜訳する。
【００３９】
一方、代入飜訳工程では、代入飜訳部が、飜訳前プログラムにおける「第１の飜訳前変数に値を代入する」旨の文を、飜訳後プログラムにおいて「第１の飜訳後変数に当該値を代入し、当該代入される値のうち、重複される記憶域に記憶されるべき情報を、当該第２の飜訳後変数が確保される記憶域のうち、重複される記憶域に対応付けられる記憶域に書き込み、第２の飜訳後変数が確保される記憶域に記憶される情報が、第２の飜訳後変数の値として有効であるか否かを、第２の飜訳後フラグに書き込む」旨の文に飜訳し、飜訳前プログラムにおける「第２の飜訳前変数に値を代入する」旨の文を、飜訳後プログラムにおいて「第２の飜訳後変数に当該値を代入し、当該代入される値のうち、重複される記憶域に記憶されるべき情報を、当該第１の飜訳後変数が確保される記憶域のうち、重複される記憶域に対応付けられる記憶域に書き込み、第１の飜訳後変数が確保される記憶域に記憶される情報が、第１の飜訳後変数の値として有効であるか否かを、第１の飜訳後フラグに書き込む」旨の文に飜訳する。
【００４０】
さらに、参照飜訳工程では、参照飜訳部が、飜訳前プログラムにおける「第１の飜訳前変数の値を参照する」旨の式を、飜訳後プログラムにおいて「第１の飜訳後変数が確保される記憶域に記憶される情報が第１の飜訳後変数の値として有効であるか否かを、第１の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第１の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳し、飜訳前プログラムにおける「第２の飜訳前変数の値を参照する」旨の式を、飜訳後プログラムにおいて「第２の飜訳後変数が確保される記憶域に記憶される情報が第２の飜訳後変数の値として有効であるか否かを、第２の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第２の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳する。
【００４１】
本発明のその他の観点に係るプログラムは、コンピュータに、第１のプログラミング言語で記述された飜訳前プログラムを、第２のプログラミング言語で記述された飜訳後プログラムに飜訳させ、宣言飜訳部、代入飜訳部、参照飜訳部として機能させるように構成する。
【００４２】
ここで、宣言飜訳部は、飜訳前プログラムにおける「第１の飜訳前変数が確保される記憶域と、第２の飜訳前変数が確保される記憶域と、が重複する」旨の宣言を、当該宣言を、飜訳後プログラムにおいて、「第１の飜訳前変数に対応付けられる第１の飜訳後変数および第１の飜訳後フラグと、第２の飜訳前変数に対応付けられる第２の飜訳後変数および第２の飜訳後フラグと、を、互いに重複しない記憶域に確保する」旨の宣言に飜訳する。
【００４３】
一方、代入飜訳部は、飜訳前プログラムにおける「第１の飜訳前変数に値を代入する」旨の文を、飜訳後プログラムにおいて「第１の飜訳後変数に当該値を代入し、当該代入される値のうち、重複される記憶域に記憶されるべき情報を、当該第２の飜訳後変数が確保される記憶域のうち、重複される記憶域に対応付けられる記憶域に書き込み、第２の飜訳後変数が確保される記憶域に記憶される情報が、第２の飜訳後変数の値として有効であるか否かを、第２の飜訳後フラグに書き込む」旨の文に飜訳し、飜訳前プログラムにおける「第２の飜訳前変数に値を代入する」旨の文を、飜訳後プログラムにおいて「第２の飜訳後変数に当該値を代入し、当該代入される値のうち、重複される記憶域に記憶されるべき情報を、当該第１の飜訳後変数が確保される記憶域のうち、重複される記憶域に対応付けられる記憶域に書き込み、第１の飜訳後変数が確保される記憶域に記憶される情報が、第１の飜訳後変数の値として有効であるか否かを、第１の飜訳後フラグに書き込む」旨の文に飜訳する。
【００４４】
さらに、参照飜訳部は、飜訳前プログラムにおける「第１の飜訳前変数の値を参照する」旨の式を、飜訳後プログラムにおいて「第１の飜訳後変数が確保される記憶域に記憶される情報が第１の飜訳後変数の値として有効であるか否かを、第１の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第１の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳し、飜訳前プログラムにおける「第２の飜訳前変数の値を参照する」旨の式を、飜訳後プログラムにおいて「第２の飜訳後変数が確保される記憶域に記憶される情報が第２の飜訳後変数の値として有効であるか否かを、第２の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第２の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳する。
【００４５】
本発明のプログラムは、コンパクトディスク、フレキシブルディスク、ハードディスク、光磁気ディスク、ディジタルビデオディスク、磁気テープ、半導体メモリ等のコンピュータ読取可能な情報記憶媒体に記録することができる。
【００４６】
上記プログラムは、プログラムが実行されるコンピュータとは独立して、コンピュータ通信網を介して配布・販売することができる。また、上記情報記憶媒体は、コンピュータとは独立して配布・販売することができる。
【発明の効果】
【００４７】
本発明によれば、変数が確保される記憶域を重複させる記述ができる第１のプログラミング言語で記述されたプログラムを、第２のプログラミング言語で記述されたプログラムに、変数の記憶域を重複させずに、飜訳するのに好適な飜訳装置、飜訳方法、ならびに、これらをコンピュータにて実現するプログラムを提供することができる。
【図面の簡単な説明】
【００４８】
【図１】本発明の実施形態に係る飜訳装置の概要構成を示す模式図である。
【図２】セッターメソッドが実行する処理の制御の流れを示すフローチャートである。
【図３】ゲッターメソッドが実行する処理の制御の流れを示すフローチャートである。
【発明を実施するための形態】
【００４９】
以下に本発明の実施形態を説明する。以下では、理解を容易にするため、ＣＯＢＯＬ言語（第１のプログラミング言語）のプログラム（飜訳前プログラム）をＪＡＶＡ（登録商標）言語（第２のプログラミング言語）のプログラム（飜訳後プログラム）にコンパイル（飜訳）する実施形態を説明するが、本願発明の範囲は、これに制限されるものではない。
【００５０】
したがって、当業者であればこれらの各要素もしくは全要素をこれと均等なものに置換した実施形態を採用することが可能であるが、これらの実施形態も本発明の範囲に含まれる。
【００５１】
たとえば、飜訳後プログラムを記述するプログラミング言語として、Ｃ言語やＣ＋＋言語を採用し、飜訳後プログラムにおいては、共用体を使用しないようにする場合にも、同様に本発明を適用することが可能である。
【実施例１】
【００５２】
図１は、本発明の実施形態に係る飜訳装置の概要構成を示す模式図である。以下、本図を参照して説明する。
【００５３】
本図に示す飜訳装置１０１は、コンピュータにおいてコンパイラプログラムを動作させることによって実現される。コンピュータは、ハードディスクなどの記憶媒体からＲＡＭにコンパイラプログラムを読み出し、当該コンパイラプログラムを、コンピュータ内の他の機能要素とＣＰＵが共働しながら実行する。
【００５４】
たとえば、飜訳前プログラムと飜訳後プログラムは、いずれも、ハードディスク等の記憶媒体に記録されることとなる。また、ＲＡＭは、コンパイル処理の一時的な結果を記憶するため等に用いられる。
【００５５】
本図に示すように、飜訳前プログラムが飜訳装置１０１に与えられると、字句解析部１０２が字句解析を行って、飜訳前プログラムを、識別子や演算子、予約語などの字句の列に変換する。
【００５６】
ついで、字句の列を構文解析部１０３が受け付け、構文解析を行って、飜訳前プログラムをなす文を得る。
【００５７】
この文には、以下のような種類がある。
（１）変数の記憶域を重複させるための宣言文。
（２）記憶域が重複した変数に値を代入する代入文。当該変数の使用は、Ｃ＋＋言語でいう「左辺値（L-value）」としての使用に相当する。
（３）記憶域が重複した変数の値を参照する式を含む参照文。当該変数の使用は、Ｃ＋＋言語でいう「右辺値（R-value）」としての使用に相当する。
（４）記憶域が重複した変数の値をデータベースに登録する登録文。
（５）記憶域が重複した変数の値をデータベースから読み出す読出文。
（６）記憶域が重複した変数を利用しない通常文。
【００５８】
なお、上記の代入文においては、代入される値に、参照される式が含まれることもある。
【００５９】
これら各種の文をコンパイルするのが、それぞれ、宣言飜訳部１０４、代入飜訳部１０５、登録飜訳部１０７、読出飜訳部１０８、通常飜訳部１０９である。
【００６０】
また、参照飜訳部１０６では、参照文に含まれる「記憶域が重複した変数の値を参照する式」をコンパイルする。そこで、「記憶域が重複した変数の値を参照する式」が、代入される側の値として代入文で利用されている場合には、代入飜訳部１０５は、参照飜訳部１０６に、当該式のコンパイルをさせて、その結果を利用する。
【００６１】
飜訳された文は、結合部１１０により、結合されて飜訳後プログラムとなる。
【００６２】
字句解析部１０２や構文解析部１０３、通常飜訳部１０９、結合部１１０が実行する詳細は、各種のコンパイラやトランスレータで用いられる公知の技術を適用することができる。以下では、宣言飜訳部１０４、代入飜訳部１０５、参照飜訳部１０６、登録飜訳部１０７、読出飜訳部１０８の機能について、さらに詳細に説明する。
【００６３】
（宣言飜訳部）
宣言飜訳部１０４は、記憶域に配置される領域が重複する変数のＣＯＢＯＬ言語による宣言を、ＪＡＶＡ（登録商標）による宣言にコンパイルする。
【００６４】
たとえば、上記の例では、ゾーン形式二進化十進表現整数変数YIと、文字配列変数YSと、が、再定義可能項目として、同じ記憶域に重複して配置する旨の宣言がなされている。以下、理解を容易にするため、これらの変数をコンパイルする際の手法を例にあげて説明する。
【００６５】
宣言飜訳部１０４は、このような記憶域が重複する変数を、以下のような宣言にコンパイルする。
【００６６】
（ａ）各ＣＯＢＯＬ変数を記憶するためのＪＡＶＡ（登録商標）変数の宣言。たとえば、ＣＯＢＯＬ変数yi，ysに格納される値を記憶するためのＪＡＶＡ（登録商標）変数としてvi，vsが宣言されるものとする。以下、これらの変数をデータ変数と呼ぶこととする。viおよびvsの型は、YIおよびYSが格納できる情報を記憶できるだけの精度が必要となる。
【００６７】
（ｂ）各ＣＯＢＯＬ変数にアクセスしたとした場合に、その値が有効であるか否かを示すＪＡＶＡ（登録商標）変数の宣言。たとえば、ＣＯＢＯＬ変数yi，ysに格納される値を記憶するためのＪＡＶＡ（登録商標）変数がfi，fsであるとする。以下、これらの変数をフラグ変数と呼ぶこととする。fiおよびfsの型は、真偽値を記憶する論理型とするのが典型的であるが、ビット配列、ビットフィールドなどの技術を利用することとしても良い。fiおよびfsの初期値はfalseとするのが典型的である。
【００６８】
（ｃ）当該ＪＡＶＡ（登録商標）変数に対するセッター（setter）メソッドとゲッター（getter）メソッドの定義。セッターメソッドは、代入文を飜訳するした結果の中に含まれるメソッドであり、ゲッターメソッドは参照式を飜訳した結果の中に含まれるメソッドである。上記vi，vsに対するそれぞれのメソッドは、以下のようなシグネチャを持つこととなる。
void setVI(Object value)；
void setVS(Object value)；
Object getVI() throws CobolException；
Object getVS() throws CobolException；
【００６９】
なお、Object型の代わりに、ＣＯＢＯＬ言語の値を格納するためのユーザ定義クラスや、int型、long型などの組み込み型、String型などの組み込みクラスなどの型を利用することとしても良い。宣言飜訳部１０４におけるコンパイルの結果出力されるメソッドの内容の詳細については、後述する。
【００７０】
（代入飜訳部）
代入飜訳部１０５は、重複した記憶域に配置される変数に対する代入文を飜訳するものである。したがって、飜訳の際には、
（１）まず、ＣＯＢＯＬ言語による「変数に代入される値を表す式」をＪＡＶＡ（登録商標）言語のプログラムに、飜訳する。
（２）その後に、当該飜訳結果を実行した結果得られる値を引き数として与えて、セッターメソッドを呼び出すことによって、当該変数に代入するというＪＡＶＡ（登録商標）プログラムに飜訳する。
【００７１】
式の飜訳するには、一般的なコンパイラ／トランスレータの技術を利用することが可能であるが、「重複した記憶域に配置される変数」の値を参照する式については、後述する参照飜訳部１０６に飜訳を任せる。
【００７２】
以下では、ＪＡＶＡ（登録商標）言語のプログラムを実行した際に、セッターメソッドがどのような処理を行うか、について説明する。
【００７３】
図２は、セッターメソッドが実行する処理の制御の流れを示すフローチャートである。以下、本図を参照して説明する。
【００７４】
代入すべき値が引き数として与えられ、セッターメソッドが呼び出されることによって、処理が開始されると、セッターメソッドは、まず、与えられた引き数を、バイト列に展開する（ステップＳ２０１）。
【００７５】
たとえば、引き数がargであり、これをバイト列bsに展開するために、以下のようなメソッド呼び出しを行う。
bs = CobolExtractToByteSequence(arg)；
【００７６】
次に、当該引き数を展開したバイト列が、セッターメソッドに対応付けられるデータ変数の値として有効であるか否かをチェックする（ステップＳ２０２）。
【００７７】
上記の例では、バイト列bsが、データ変数vsの値として有効であるか否か、すなわち、ＣＯＢＯＬの文字列として有効なものに相当するか否かをチェックすることとなる。
【００７８】
その結果、有効であると判定された場合には（ステップＳ２０２；Ｙｅｓ）、引き数を対応するデータ変数に代入し（ステップＳ２０３）、フラグ変数をtrueにする（ステップＳ２０４）。たとえば、引き数がargであり、セッターメソッドがsetVS()である場合には、
vs = arg；
fs = true；
が実行されることになる。
【００７９】
一方、有効でないと判定された場合には（ステップＳ２０２；Ｎｏ）、フラグ変数にfalseを代入する（ステップＳ２０５）。
【００８０】
上記の例では、たとえば、
fs = false
のような代入が行われる。
【００８１】
つぎに、当該セッターメソッドに対応するＣＯＢＯＬ変数重複した記憶域に配置される変数のすべてについて、以下の処理を行う（ステップＳ２０６〜ステップＳ２１３）。本例では、ＣＯＢＯＬ変数YSに重複して配置されているのは、ＣＯＢＯＬ変数YIであるから、ＣＯＢＯＬ変数YIについて、以下の処理を行うことになる。
【００８２】
まず、現在データ変数に記憶されている値を、バイト列のメモリイメージに展開する（ステップＳ２０７）。
【００８３】
本例では、YIをバイト列csに、
cs = CobolExtractToByteSequence(yi)；
のように展開する。
【００８４】
そして、データ変数について展開されたバイト列csのうち、重複している領域に、引き数について展開されたバイト列bsのうち、重複している領域に記憶されているバイト値を上書きする（ステップＳ２０８）。
【００８５】
本例では、YSとYIは同じサイズであることから展開バイト列も同じサイズとなり、全体を上書きすることとなるべきである。
【００８６】
なお、記憶域において一部のみが重複する場合には、データ変数について展開されたバイト列の一部の領域のみが転送先となったり、引き数について展開されたバイト列の一部の領域のみが転送元となることがありうる。
【００８７】
また、全体を上書きすることが翻訳時に判明した場合には、ステップＳ２０７において、データ変数に記憶される値の展開を省略することとしても良い。
【００８８】
ついで、上書き結果のバイト列が、元のデータ変数の値を表すバイト列として有効であるか否かを判定する（ステップＳ２０９）。
【００８９】
有効でない場合（ステップＳ２０９；Ｎｏ）、フラグ変数にfalseを代入する（ステップＳ２１２）。本例では、
fi = false；
となる。
【００９０】
一方、有効である場合（ステップＳ２０９；Ｙｅｓ）、当該バイト列により表現される値を生成して、元のデータ変数に代入し（ステップＳ２１０）、フラグ変数にtrueを代入する（ステップＳ２１１）。本例では、
vi = CobolDeExtractFromByteSequence(cs)；
fi = true；
のような処理を行うこととなる。
【００９１】
その後、記憶域が重複するＣＯＢＯＬ変数すべてについて、ループを繰り返す（ステップＳ２１３）。ループが完了したら、セッターメソッドは終了する。
【００９２】
なお、データ変数に格納されている値をバイト列に展開するCobolExtractToByteSequence()や、その逆の処理を行うCobolDeExtractFromByteSequence()には、当該データ変数の型を表す引き数などを付加したり、データ変数の型ごとに異なるメソッドを呼び出すこととするのが典型的であるが、理解を容易にするため、当該部分については説明を省略した。
【００９３】
このように、ＣＯＢＯＬプログラムの代入文をＪＡＶＡ（登録商標）プログラムに飜訳することで、後述する式の参照に備えることができる。
【００９４】
（参照飜訳部）
参照飜訳部１０６は、「重複する記憶域に配置される変数の値を参照する式」や、「重複する記憶域に配置される変数の値を参照する式を含む文」を飜訳する。
【００９５】
典型的なプログラミング言語では、「変数の値を参照する式」においては、当該変数の識別子が「右辺値」として使用されている。
【００９６】
参照飜訳部１０６は、これらのＣＯＢＯＬ変数を、当該データ変数に対するゲッターメソッドの呼び出しにコンパイルする。
【００９７】
以下では、ＪＡＶＡ（登録商標）言語のプログラムを実行した際に、ゲッターメソッドがどのような処理を行うか、について説明する。
【００９８】
図３は、ゲッターメソッドが実行する処理の制御の流れを示すフローチャートである。以下、本図を参照して説明する。
【００９９】
あるＣＯＢＯＬ変数に対するゲッターメソッドが呼び出されると、まず当該ＣＯＢＯＬ変数に対するフラグ変数の値がtrue/falseのいずれであるかを判定する（ステップＳ３０１）。
【０１００】
たとえば、ＣＯＢＯＬ変数YIを参照する式については、フラグ変数fiが判定対象となる。
【０１０１】
フラグ変数の値がtrueである場合（ステップＳ３０１；true）、これに対応するデータ変数の値は有効であることになるから、当該データ変数の値を式の結果として（ステップＳ３０２）、本処理を終了する。上記の例では、
return vi；
に相当する。
【０１０２】
一方、フラグ変数fiの値がfalseである場合（ステップＳ３０１；false）、これに対応するデータ変数の値は無効であることになる。そこで、ＣＯＢＯＬ言語における動作に合わせて、例外を生じさせて（ステップＳ３０３）、本処理を終了する。上記の例では、
throw (new CobolException)；
を実行することに相当する。
【０１０３】
ここで、CobolExceptionは、ＣＯＢＯＬ言語の動作時に生じる例外をシミュレートするもので、ＪＡＶＡ（登録商標）言語におけるtry ...catch ...finally ...構文によって、例外を捕捉することが可能である。
【０１０４】
すなわち、ＣＯＢＯＬ言語で記述された例外処理は、ＪＡＶＡ（登録商標）言語におけるtry ...catch ...finally ...構文にコンパイルされることになる。
【０１０５】
なお、ＣＯＢＯＬ言語のプログラムをＣ言語やＣ＋＋言語に飜訳する場合には、共用体を用いるのではなく、上記のＪＡＶＡ（登録商標）言語と同様の技術を用いることができる。Ｃ＋＋言語は例外処理機能を有しているため、ＪＡＶＡ（登録商標）言語と同様に飜訳が可能であるが、Ｃ言語は、例外処理機能を有していない。
【０１０６】
この場合、Ｃ言語においては、tryのかわりにsetjmp()関数を、throwのかわりにlongjmp()関数を、それぞれ利用することによって、例外処理による大域脱出を実現することが可能である。
【０１０７】
（登録飜訳部および読出飜訳部）
再定義項目、すなわち、記憶域が重複して配置される変数がデータベースに登録されるレコードの一部となっている場合、あるＣＯＢＯＬ言語の実装では、最先に宣言された変数についてのみ、データベースとの間での登録と読出を行うこととしている。
【０１０８】
このような実装で、データベースへの登録を行う登録文を飜訳した結果のＪＡＶＡ（登録商標）プログラムは、
（ａ）当該最先に宣言されたＣＯＢＯＬ変数に対するフラグ変数がtrueであれば、当該データ変数の値をデータベースへ書き込み、
（ｂ）フラグ変数がfalseであれば、値が存在しないことを表すＮＩＬ値をデータベースへ書き込む
処理を行うものとなる。
【０１０９】
一方、データベースからの読出を行う読出文を飜訳した結果のＪＡＶＡ（登録商標）プログラムは、
（ａ）データベースから読み出した値がＮＩＬ値であれば、当該フラグ変数をfalseに設定し、
（ｂ）データベースから読み出した値がＮＩＬ値でなければ、当該フラグ変数をtrueに設定し、当該データ変数に読み出した値を代入する
処理を行うものとなる。
【０１１０】
また、記憶域が重複して配置される変数のそれぞれについて、データベースとの間で登録したり読み出したりするような他の実装では、上記の処理を、各ＣＯＢＯＬ変数についてそれぞれ繰り返すように、ＪＡＶＡ（登録商標）プログラムに飜訳すれば良い。
【０１１１】
このように、ＣＯＢＯＬ言語で記述されデータベースを利用するプログラムを、これと同等な機能を果たすＪＡＶＡ（登録商標）言語のプログラムに自動的に変換することで、昨今のコンピュータ環境に適応する一方、従来の莫大なプログラム資産を活用することが可能となる。
【産業上の利用可能性】
【０１１２】
以上説明したように、本発明によれば、変数が確保される記憶域を重複させる記述ができる第１のプログラミング言語で記述されたプログラムを、第２のプログラミング言語で記述されたプログラムに、変数の記憶域を重複させずに、飜訳するのに好適な飜訳装置、飜訳方法、ならびに、これらをコンピュータにて実現するプログラムを提供することができる。
【符号の説明】
【０１１３】
１０１  飜訳装置
１０２  字句解析部
１０３  構文解析部
１０４  宣言飜訳部
１０５  代入飜訳部
１０６  参照飜訳部
１０７  登録飜訳部
１０８  読出飜訳部
１０９  通常飜訳部
１１０  結合部
【図１】
2010231312.tif 000003
【図２】
2010231312.tif 000004
【図３】
2010231312.tif 000005