JP5278088B2 - プログラムの飜訳装置、飜訳方法、ならびに、プログラム - Google Patents

プログラムの飜訳装置、飜訳方法、ならびに、プログラム Download PDF

Info

Publication number
JP5278088B2
JP5278088B2 JP2009075783A JP2009075783A JP5278088B2 JP 5278088 B2 JP5278088 B2 JP 5278088B2 JP 2009075783 A JP2009075783 A JP 2009075783A JP 2009075783 A JP2009075783 A JP 2009075783A JP 5278088 B2 JP5278088 B2 JP 5278088B2
Authority
JP
Japan
Prior art keywords
translation
variable
post
value
storage area
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.)
Active
Application number
JP2009075783A
Other languages
English (en)
Other versions
JP2010231312A (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 JP2009075783A priority Critical patent/JP5278088B2/ja
Priority to CN201080013814.9A priority patent/CN102365622B/zh
Priority to PCT/JP2010/055387 priority patent/WO2010110430A1/ja
Priority to US13/259,914 priority patent/US8527968B2/en
Publication of JP2010231312A publication Critical patent/JP2010231312A/ja
Application granted granted Critical
Publication of JP5278088B2 publication Critical patent/JP5278088B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

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

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

Claims (6)

  1. 第1のプログラミング言語で記述された飜訳前プログラムを、第2のプログラミング言語で記述された飜訳後プログラムに飜訳する飜訳装置であって、
    前記飜訳前プログラムにおける「第1の飜訳前変数が確保される記憶域と、第2の飜訳前変数が確保される記憶域と、が重複する」旨の宣言を、当該宣言を、前記飜訳後プログラムにおいて、「前記第1の飜訳前変数に対応付けられる第1の飜訳後変数および第1の飜訳後フラグと、前記第2の飜訳前変数に対応付けられる第2の飜訳後変数および第2の飜訳後フラグと、を、互いに重複しない記憶域に確保する」旨の宣言に飜訳する宣言飜訳部、
    前記飜訳前プログラムにおける「前記第1の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第1の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第2の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第2の飜訳後変数が確保される記憶域に記憶される情報が、前記第2の飜訳後変数の値として有効であるか否かを、前記第2の飜訳後フラグに書き込む」旨の文に飜訳し、前記飜訳前プログラムにおける「前記第2の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第2の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第1の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第1の飜訳後変数が確保される記憶域に記憶される情報が、前記第1の飜訳後変数の値として有効であるか否かを、前記第1の飜訳後フラグに書き込む」旨の文に飜訳する代入飜訳部、
    前記飜訳前プログラムにおける「前記第1の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第1の飜訳後変数が確保される記憶域に記憶される情報が前記第1の飜訳後変数の値として有効であるか否かを、前記第1の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第1の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳し、前記飜訳前プログラムにおける「前記第2の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第2の飜訳後変数が確保される記憶域に記憶される情報が前記第2の飜訳後変数の値として有効であるか否かを、前記第2の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第2の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳する参照飜訳部
    を備えることを特徴とする飜訳装置。
  2. 請求項1に記載の飜訳装置であって、
    前記飜訳前プログラムにおける「前記第1の飜訳前変数の値をデータベースに登録する」旨の文を、前記飜訳後プログラムにおいて、「前記第1の飜訳後変数が確保される記憶域に記憶される情報が前記第1の飜訳後変数の値として有効であるか否かを、前記第1の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第1の飜訳後変数の値をデータベースに登録し、有効でないと判定された場合は、NIL値をデータベースに登録」する旨の文に飜訳し、前記飜訳前プログラムにおける「前記第2の飜訳前変数の値をデータベースに登録する」旨の文を、前記飜訳後プログラムにおいて、「前記第2の飜訳後変数が確保される記憶域に記憶される情報が前記第2の飜訳後変数の値として有効であるか否かを、前記第2の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第2の飜訳後変数の値をデータベースに登録し、有効でないと判定された場合は、NIL値をデータベースに登録」する旨の文に飜訳する登録飜訳部、
    前記飜訳前プログラムにおける「データベースから読み出した値を第1の飜訳前変数に代入する」旨の文を、前記飜訳後プログラムにおいて、「データベースから値を読み出し、当該読み出された値がNIL値である場合、前記第1の飜訳後変数が確保される記憶域に記憶される情報が有効でない旨を前記第1の飜訳後フラグに書き込み、当該読み出された値がNIL値でない場合、前記第1の飜訳後変数が確保される記憶域に記憶される情報が有効である旨を前記第1の飜訳後フラグに書き込み、前記第1の飜訳後変数が確保される記憶域にに当該読み出された値を書き込む」旨の文に飜訳し、前記飜訳前プログラムにおける「データベースから読み出した値を第2の飜訳前変数に代入する」旨の文を、前記飜訳後プログラムにおいて、「データベースから値を読み出し、当該読み出された値がNIL値である場合、前記第2の飜訳後変数が確保される記憶域に記憶される情報が有効でない旨を前記第2の飜訳後フラグに書き込み、当該読み出された値がNIL値でない場合、前記第2の飜訳後変数が確保される記憶域に記憶される情報が有効である旨を前記第2の飜訳後フラグに書き込み、前記第2の飜訳後変数が確保される記憶域にに当該読み出された値を書き込む」旨の文に飜訳する読出飜訳部
    をさらに備えることを特徴とする飜訳装置。
  3. 請求項1または2に記載の飜訳装置であって、
    前記第1の飜訳前変数は、ゾーン形式二進化十進数型であり、
    前記第2の飜訳前変数は、他方は、それ以外の整数型であり、
    前記第1の飜訳後変数は、前記第1の飜訳前変数ががとりうる整数の範囲を表現できる整数型であり、
    前記第2の飜訳後変数は、前記第2の飜訳前変数ががとりうる整数の範囲を表現できる整数型である
    ことを特徴とする飜訳装置。
  4. 請求項1または2に記載の飜訳装置であって、
    前記第1の飜訳前変数は、ゾーン形式二進化十進数型であり、
    前記第2の飜訳前変数は、文字列型であり、
    前記第1の飜訳後変数は、前記第1の飜訳前変数ががとりうる整数の範囲を表現できる整数型であり、
    前記第2の飜訳後変数は、前記第2の飜訳前変数は、文字列型である
    ことを特徴とする飜訳装置。
  5. 第1のプログラミング言語で記述された飜訳前プログラムを、第2のプログラミング言語で記述された飜訳後プログラムに飜訳する翻訳装置が実行する飜訳方法であって、前記飜訳装置は、宣言飜訳部、代入飜訳部、参照飜訳部を備え、
    前記宣言飜訳部が、前記飜訳前プログラムにおける「第1の飜訳前変数が確保される記憶域と、第2の飜訳前変数が確保される記憶域と、が重複する」旨の宣言を、当該宣言を、前記飜訳後プログラムにおいて、「前記第1の飜訳前変数に対応付けられる第1の飜訳後変数および第1の飜訳後フラグと、前記第2の飜訳前変数に対応付けられる第2の飜訳後変数および第2の飜訳後フラグと、を、互いに重複しない記憶域に確保する」旨の宣言に飜訳する宣言飜訳工程、
    前記代入飜訳部が、前記飜訳前プログラムにおける「前記第1の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第1の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第2の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第2の飜訳後変数が確保される記憶域に記憶される情報が、前記第2の飜訳後変数の値として有効であるか否かを、前記第2の飜訳後フラグに書き込む」旨の文に飜訳し、前記飜訳前プログラムにおける「前記第2の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第2の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第1の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第1の飜訳後変数が確保される記憶域に記憶される情報が、前記第1の飜訳後変数の値として有効であるか否かを、前記第1の飜訳後フラグに書き込む」旨の文に飜訳する代入飜訳工程、
    前記参照飜訳部が、前記飜訳前プログラムにおける「前記第1の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第1の飜訳後変数が確保される記憶域に記憶される情報が前記第1の飜訳後変数の値として有効であるか否かを、前記第1の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第1の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳し、前記飜訳前プログラムにおける「前記第2の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第2の飜訳後変数が確保される記憶域に記憶される情報が前記第2の飜訳後変数の値として有効であるか否かを、前記第2の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第2の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳する参照飜訳工程
    を備えることを特徴とする飜訳方法。
  6. コンピュータに、第1のプログラミング言語で記述された飜訳前プログラムを、第2のプログラミング言語で記述された飜訳後プログラムに飜訳させるプログラムであって、前記プログラムは、前記コンピュータを、
    前記飜訳前プログラムにおける「第1の飜訳前変数が確保される記憶域と、第2の飜訳前変数が確保される記憶域と、が重複する」旨の宣言を、当該宣言を、前記飜訳後プログラムにおいて、「前記第1の飜訳前変数に対応付けられる第1の飜訳後変数および第1の飜訳後フラグと、前記第2の飜訳前変数に対応付けられる第2の飜訳後変数および第2の飜訳後フラグと、を、互いに重複しない記憶域に確保する」旨の宣言に飜訳する宣言飜訳部、
    前記飜訳前プログラムにおける「前記第1の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第1の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第2の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第2の飜訳後変数が確保される記憶域に記憶される情報が、前記第2の飜訳後変数の値として有効であるか否かを、前記第2の飜訳後フラグに書き込む」旨の文に飜訳し、前記飜訳前プログラムにおける「前記第2の飜訳前変数に値を代入する」旨の文を、前記飜訳後プログラムにおいて「前記第2の飜訳後変数に当該値を代入し、当該代入される値のうち、前記重複される記憶域に記憶されるべき情報を、当該第1の飜訳後変数が確保される記憶域のうち、前記重複される記憶域に対応付けられる記憶域に書き込み、前記第1の飜訳後変数が確保される記憶域に記憶される情報が、前記第1の飜訳後変数の値として有効であるか否かを、前記第1の飜訳後フラグに書き込む」旨の文に飜訳する代入飜訳部、
    前記飜訳前プログラムにおける「前記第1の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第1の飜訳後変数が確保される記憶域に記憶される情報が前記第1の飜訳後変数の値として有効であるか否かを、前記第1の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第1の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳し、前記飜訳前プログラムにおける「前記第2の飜訳前変数の値を参照する」旨の式を、前記飜訳後プログラムにおいて「前記第2の飜訳後変数が確保される記憶域に記憶される情報が前記第2の飜訳後変数の値として有効であるか否かを、前記第2の飜訳後フラグを参照して判定し、有効であると判定された場合は、当該第2の飜訳後変数の値を参照し、有効でないと判定された場合は、例外を発生させる」旨の式に飜訳する参照飜訳部
    として機能させることを特徴とするプログラム。
JP2009075783A 2009-03-26 2009-03-26 プログラムの飜訳装置、飜訳方法、ならびに、プログラム Active JP5278088B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2009075783A JP5278088B2 (ja) 2009-03-26 2009-03-26 プログラムの飜訳装置、飜訳方法、ならびに、プログラム
CN201080013814.9A CN102365622B (zh) 2009-03-26 2010-03-26 翻译设备、翻译方法和程序存储介质
PCT/JP2010/055387 WO2010110430A1 (ja) 2009-03-26 2010-03-26 プログラムの飜訳装置、飜訳方法、ならびに、記録媒体
US13/259,914 US8527968B2 (en) 2009-03-26 2010-03-26 Translation device, translation method, and storage medium for program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009075783A JP5278088B2 (ja) 2009-03-26 2009-03-26 プログラムの飜訳装置、飜訳方法、ならびに、プログラム

Publications (2)

Publication Number Publication Date
JP2010231312A JP2010231312A (ja) 2010-10-14
JP5278088B2 true JP5278088B2 (ja) 2013-09-04

Family

ID=42781120

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009075783A Active JP5278088B2 (ja) 2009-03-26 2009-03-26 プログラムの飜訳装置、飜訳方法、ならびに、プログラム

Country Status (4)

Country Link
US (1) US8527968B2 (ja)
JP (1) JP5278088B2 (ja)
CN (1) CN102365622B (ja)
WO (1) WO2010110430A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5278088B2 (ja) 2009-03-26 2013-09-04 日本電気株式会社 プログラムの飜訳装置、飜訳方法、ならびに、プログラム
US10846197B1 (en) * 2018-12-13 2020-11-24 Facebook, Inc. Systems and methods for debugging mixed-language applications
CN112114817B (zh) * 2020-09-28 2023-09-19 中国银行股份有限公司 基于cobol语言的数据字典字段信息获取方法及装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001005674A (ja) * 1999-06-21 2001-01-12 Pfu Ltd データ受渡装置および記録媒体
JP2006031173A (ja) 2004-07-13 2006-02-02 Nec Corp コンパイル装置,方法およびそのプログラム
US20060031820A1 (en) * 2004-08-09 2006-02-09 Aizhong Li Method for program transformation and apparatus for COBOL to Java program transformation
US7386840B1 (en) * 2004-09-09 2008-06-10 Lockheed Martin Corporation Method, apparatus, and program for source code translation from COBOL to object-oriented code
US7779396B2 (en) * 2005-08-10 2010-08-17 Microsoft Corporation Syntactic program language translation
JP5278088B2 (ja) 2009-03-26 2013-09-04 日本電気株式会社 プログラムの飜訳装置、飜訳方法、ならびに、プログラム
US9182962B2 (en) * 2010-12-09 2015-11-10 Todd Bradley KNEISEL Method for translating a cobol source program into readable and maintainable program code in an object oriented second programming language

Also Published As

Publication number Publication date
JP2010231312A (ja) 2010-10-14
US8527968B2 (en) 2013-09-03
WO2010110430A1 (ja) 2010-09-30
CN102365622A (zh) 2012-02-29
US20120017202A1 (en) 2012-01-19
CN102365622B (zh) 2014-04-16

Similar Documents

Publication Publication Date Title
Leroy Unboxed objects and polymorphic typing
US8707278B2 (en) Embedding class hierarchy into object models for multiple class inheritance
JP2005032259A (ja) 共有ライブラリーシステム及び前記システム構築方法
US10409559B2 (en) Single-source-base compilation for multiple target environments
JP6418696B2 (ja) 命令セットシミュレータおよびそのシミュレータ生成方法
US10545743B2 (en) Enhanced programming language source code conversion with implicit temporary object emulation
JP2001022591A (ja) コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
JP2011118909A (ja) メモリアクセス命令のベクトル化
US11556317B2 (en) Instruction translation support method and information processing apparatus
JP5278088B2 (ja) プログラムの飜訳装置、飜訳方法、ならびに、プログラム
US8539458B2 (en) Transforming addressing alignment during code generation
JP4652680B2 (ja) コンパイル方法および装置、ならびにコンパイラ
CN113835620B (zh) 一种提高安全芯片应用执行效率的方法及系统
CN114780100A (zh) 编译方法、电子设备及存储介质
CN113138755A (zh) 一种json序列化和反序列化的优化方法及系统
US9298630B2 (en) Optimizing memory bandwidth consumption using data splitting with software caching
JP6982920B1 (ja) ソースコード変換装置、及びプログラム
US11635947B2 (en) Instruction translation support method and information processing apparatus
JP2006146613A (ja) プログラム変換方法
KR20190060561A (ko) 이종 디바이스의 선택적 추상화를 통한 사물 인터넷 어플리케이션의 개발 환경을 통합하는 방법 및 시스템
CN114428603A (zh) 一种基于编译器生成short和int类型指令的方法和系统
JP2018124877A (ja) コード生成装置、コード生成方法、およびコード生成プログラム
CN118672588A (zh) 智能合约编译方法、系统、电子设备和目标代码运行方法
Kim Advanced compiler optimization for CalmRISC8 low-end embedded processor
Xu et al. Implementation Method and Code Reuse and Maintenance Mechanism of a RISC-V Lightweight Code Library

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120208

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130423

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130506

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5278088

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150