以下、プログラム変換装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
(実施の形態1)
図1は、本実施の形態におけるプログラム変換装置のブロック図である。
プログラム変換装置1は、命令パターン格納部100、命令パターン指定情報受付部101、第一ソースプログラム受付部102、比較部103、変換部104、コメント記述部105、コメント格納部106、及び出力部107を備えている。
命令パターン格納部100には、第一ソースプログラムの命令パターンを示す情報である第一命令パターン情報と、第二ソースプログラムの命令パターンを示す情報である第二命令パターン情報の対が1以上格納され得る。第一命令パターン情報と第二命令パターン情報との1以上の対を、ここでは、変換用命令パターン情報と呼ぶ。変換用命令パターン情報は、第一命令パターン情報と第二命令パターン情報との対のグループと考えてもよい。また、第一命令パターン情報と第二命令パターン情報との対のグループを管理するデータベース等と考えても良い。第一ソースプログラムとは、具体的には、変換の対象となるソースプログラムである。第二ソースプログラムとは、第一ソースプログラムが変換されることによって得られるソースプログラムである。第一ソースプログラムを旧ソースプログラムや変換前のソースプログラム、第二ソースプログラムを新ソースプログラムや変換後のソースプログラムと考えても良い。「第一ソースプログラムを、第二ソースプログラムに変換する場合」とは、具体例としては、旧ソースプログラムを新ソースプログラムに移植するための変換、いわゆるマイグレーション等を行う場合等を指す。
この実施の形態における命令パターンとは、第一ソースプログラムおよび第二ソースプログラムにおいて利用されている命令における文字列等の情報の出現するパターン等である。第一命令パターン情報とは、第一ソースプログラムを第二ソースプログラムに変換する場合の、変換対象となる第一ソースプログラムの命令パターンを示す情報である。第二命令パターン情報とは、第一ソースプログラムを第二ソースプログラムに変換する場合における、第一ソースプログラムの上述した第一命令パターン情報に一致する箇所がどのように変換されるかを示す命令パターンを示す情報である。即ち変換後の命令パターンの情報である。第二命令パターン情報は、第一ソースプログラムの第一命令パターン情報と一致する箇所を置換するために用いる命令パターンの情報と考えても良い。
第一命令パターン情報とは、例えば、第一ソースプログラムにおいて利用可能な命令における文字列等の情報の出現するパターン等を示す情報である。第二命令パターン情報とは、例えば、第二ソースプログラムにおいて利用可能な命令における文字列等の情報の出現するパターン等を示す情報である。以下、第一命令パターン情報について説明するが、第二命令パターン情報についても、対応するソースプログラムが、第二ソースプログラムである点を除けば第一命令パターン情報と同様である。第一命令パターン情報は、命令において出現する文字列のうちの一部、例えば、変数やリテラル文字や関数名等を、固定されていない文字列であることを示すための、予め指定されている字句要素(例えば単語)で置き換えた情報であっても良い。この置き換える情報を、ここでは、例えば変換語と呼ぶ。また、変数やリテラル文字や関数名やこれらを含む文字列等の固定されていない文字列をここでは非固定語と呼ぶ。逆に、これ以外の固定されている文字列を固定語と呼ぶ。変換語は、当該変換語が配置されている位置に配置される情報のデータタイプやデータサイズや属性等が判断可能な情報であることが好ましい。変換語は、ソースプログラムの少なくとも一部を構成する文字列が、変数、関数名、またはリテラル文字の少なくとも一つを含む非固定語のタイプのうちの、いずれのタイプの非固定語であるかを示す文字列と考えても良い。例えば、ソースプログラムの少なくとも一部を構成する文字列が、どのような属性を有する非固定語であるかを示す文字列と考えても良い。すなわち、変換語を、ソースプログラムの少なくとも一部に含まれる、変数、関数名、またはリテラル文字の少なくとも一つを含む文字列(例えば単語)が、どのような属性の文字列であるかを示す文字列と考えても良い。この属性は、ソースプログラムの文字列が、変数、関数名、またはリテラル文字のいずれであるかを示す属性であっても良いし、ソースプログラムの文字列の用途等や、文字列が指定するものの種別等を示す属性であっても良い。また、この属性は、ソースプログラムの文字列の文字数や、文字の種類等を示す属性であっても良い。変換語は、例えば、変数やリテラル文字や関数名等の非予約語を置き換える情報と考えてもよく、この場合、変換語は、いずれのタイプの非予約語であるか、例えば属性の非予約語であるかを示す文字列と考えても良い。第一命令パターン情報は、例えば、命令語と、ユーザ指定語と、変換語と、その他の文字列とのうちの1以上の組み合わせで構成される。命令語、ユーザ指定語、変換語等の詳細については後述する。命令パターンは、第一ソースプログラムにおける命令語等の固定語の出現するパターン、非固定語(例えば、変数やリテラル文字や関数名等)の出現するパターン、または固定語および非固定語の出現するパターンと考えても良い。また、命令パターンを、第一ソースプログラムにおける予約語(例えば命令語等)の出現するパターン、非予約語(例えば、変数やリテラル文字や関数名等)の出現するパターン、または予約語および非予約語の出現するパターンと考えても良く、この場合、第一命令パターン情報は、例えば、第一ソースプログラムにおける予約語の出現するパターン、非予約語の出現するパターン、または予約語および非予約語の出現するパターンの少なくとも一つを示す情報であってもよい。具体例を挙げると、第一命令パターン情報は、「命令語 <引数1> <引数2>」という予約語と非予約語の配列パターンを示す情報である。ただし、この場合、「命令語」は、「OPEN」や「MOVE」、「CALL」等の予約語であり、「<引数1>」、「<引数2>」は変数文字列である非予約語である。また、第一命令パターン情報は、固定語や非固定語がどのような順番で配列されているかを示す情報等であっても良い。また、第一命令パターン情報は、特定の予約語、例えば命令語や不特定の予約語がどのような順番で配列されているかを示す情報等であっても良い。なお、予約語とは、プログラミング言語の仕様等で定められた、変数名や関数名、クラス名等の識別子名として使用できない字句要素である。また、ここでは、命令語でない予約語を非予約語と呼ぶようにしても良い。
なお、ここでは、特に例として、命令パターン格納部100に、1以上の第一ソースプログラムの命令パターンを示す情報である第一命令パターン情報と第二ソースプログラムの命令パターンを示す情報である第二命令パターン情報との対により構成される変換用命令パターン情報が、1以上格納され得る場合について説明する。即ち、第一命令パターン情報と第二命令パターン情報との一以上の対により構成される変換用命令パターン情報が、命令パターン格納部100に一以上格納されている場合について説明する。例えば、異なる変換用命令パターン情報が、同じ第一命令パターン情報に対して、異なる第二命令パターン情報がそれぞれ対応付けられたものである場合等において、変換の際に利用する変換用命令パターン情報をユーザの指定等に応じて切り替えることで、一のプログラム変換装置で、第一ソースプログラムに対して異なる変換を行って、異なる第二ソースプログラムを変換結果として得ることが可能となる。例えば、異なる変換用命令パターン情報が、同じ第一命令パターン情報に対して、異なる第二命令パターン情報がそれぞれ対応付けられたものである場合等においては、どの変換用命令パターン情報を利用するかによって、第一命令パターン情報の変換結果が異なるものとすることができる。
第一ソースプログラムおよび第二ソースプログラムは、それぞれ、COBOL言語や、C言語、perl言語等、どのような言語のソースプログラムであっても良い。また、スクリプト等であっても良い。また、これらの言語をカスタマイズした言語のソースプログラムであっても良い。ここでは、例として、第一ソースプログラムおよび第二ソースプログラムは、いわゆるマイグレーション元およびマイグレーション先となるソースプログラムであるとする。
命令パターン格納部100に、第一命令パターン情報と、第二命令パターン情報との対が蓄積される手段等は問わない。例えば、製品出荷時等に予め格納されていても良いし、図示しない受付部等を介して受け付けた第一命令パターン情報と第二命令パターン情報との対が蓄積されても良い。命令パターン格納部100に格納され得る第一命令パターン情報は、第一ソースプログラムの言語等に対応した第一命令パターン情報、すなわち第一ソースプログラムの言語等において出現する可能性のある命令パターンの情報と考えても良い。命令パターン格納部100は、不揮発性の記録媒体でも、揮発性の記録媒体でも実現可能である。
命令パターン指定情報受付部101は、命令パターン格納部100に格納されている変換用命令パターン情報の1つを指定する情報である命令パターン指定情報を、例えばユーザ等から受け付ける。なお、変換用命令パターン情報の1つを指定する必要がない場合、具体的には、命令パターン格納部100に1以上の第一ソースプログラムの命令パターンを示す情報である第一命令パターン情報と第二ソースプログラムの命令パターンを示す情報である第二命令パターン情報との対が、一つのグループしか格納されていない場合、あるいは、命令パターン格納部100に変換用命令パターン情報が1つしか格納されていない場合には、命令パターン指定情報受付部101は省略してもよい。ここで述べる受付とは、例えば、入力手段からの受付や、他の機器等から送信される入力信号の受信や、記録媒体等からの情報の読み出し等である。命令パターン指定情報の入力手段は、テンキーやキーボードやマウスやメニュー画面によるもの等、何でも良い。命令パターン指定情報受付部101は、テンキーやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
第一ソースプログラム受付部102は、第一ソースプログラムを受け付ける。ここで述べる受付とは、例えば、入力手段からの受付や、他の機器等から送信される入力信号の受信や、記録媒体等からの情報の読み出し等である。入力手段は、テンキーやキーボードやマウスやメニュー画面によるもの等、何でも良い。第一ソースプログラム受付部102は、通信デバイスや、情報を読み出すデバイス等のデバイスドライバーや、テンキーやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
比較部103は、第一ソースプログラム受付部102が受け付けた第一ソースプログラムと、命令パターン格納部100に格納されている第一命令パターン情報とを比較する。比較部103は、具体的には、比較することによって、第一命令パターン情報のいずれか一つと一致する第一ソースプログラムの記述箇所を検出する。完全一致であっても部分一致であっても良い。ここでの一致とは、第一命令パターン情報のいずれか一つと第一ソースプログラムの一部の箇所の記述とが、対応していることも含む概念と考えて良い。なお、この具体例においては、特に、比較部103は、命令パターン指定情報により指定された変換用命令パターン情報に含まれる第一命令パターン情報と、第一ソースプログラムとを比較するものとする。比較部103がどのように比較を行うかは問わない。比較部103が行う比較の一例について以下に説明する。
比較部103は、例えば、第一ソースプログラムから、第一ソースプログラムを変換する際の単位である変換単位の情報である変換単位情報を1以上取り出し、当該取り出した変換単位情報のそれぞれと、命令パターン格納部100に格納されている第一命令パターン情報とを比較する。
変換単位とは、例えば、第一ソースプログラムを他のソースプログラム、例えば第二ソースプログラムに変換する際に処理が行われる情報の単位である。具体例として、第一ソースプログラムをマイグレーションする際に変換が行われる文字列等の情報の単位と考えても良い。変換単位を、第一ソースプログラム内の比較部103により第一命令パターン情報との比較が行われる単位である比較単位と考えても良い。
変換単位は、例えば、第一ソースプログラムのうちの、所定のルールに従って決定される文字列等の情報の単位である。所定のルールはどのようなルールであっても良い。例えば、第一ソースプログラム内の、ユーザ等により予め指定された1以上の所定の情報のうちのいずれかで区切られた範囲の情報を変換単位情報とする、というルールであっても良い。また、第一ソースプログラム内の所定の情報と、所定の情報とで挟まれた間の情報を変換単位情報とする、というルールであっても良い。この所定の情報は、例えば、後述する指定情報である。変換単位情報には、この所定の情報を含むようにしても含まないようにしてもよい。なお、所定ルールは、例えば、図示しない記憶媒体等に予め格納されている。
変換単位情報は、例えば、第一ソースプログラムのうちの、後述する指定情報格納部108等に格納されている、予め指定された情報である指定情報のうちの一つが出現してから次に指定情報の一つが出現する間の範囲内の情報である。あるいは、第一ソースプログラムのうちの、当該指定情報により区切られた情報であると考えても良い。指定情報のうちの一つが出現してから次に指定情報の一つが出現する間の範囲内の情報には、先に現れた指定情報を含むようにしても良いし、含まないようにしても良い。また、指定情報のうちの一つが出現してから次に指定情報の一つが出現する間の範囲内の情報には、次に現れた指定情報を含むようにしても良いし、含まないようにしても良い。
指定情報は、例えば、ユーザにより指定された文字列等の情報である。ここでは文字列に、ピリオドやセミコロン等の記号を含むと考えてもよい。指定情報は、予め指定された、改行コードやTAB等の制御コード等であっても良い。改行コードやTAB等の制御コードを文字列と考えても良い。また、指定情報は、例えば、第一ソースプログラムに用いられる命令語、すなわち、第一ソースプログラムの言語等に用いられる命令語の全部、あるいは一部等であっても良い。また、指定情報は、これらの情報の組み合わせであっても良い。
上述した所定のルールは、上述したルール以外の、例えば、行番号等で、区切られている情報を変換単位情報として決定するというルールであっても良い。すなわち第一ソースプログラムの行を変換単位情報に決定するというルールであっても良い。このルールを示す情報は、例えば、図示しないメモリ等に格納されているようにしても良い。
比較部103は、例えば、第一ソースプログラムから、予め指定されたルールにより決定される情報である変換単位情報を1以上取り出し、当該取り出した変換単位情報のそれぞれと、命令パターン格納部100に格納されている第一命令パターン情報とを比較する。
例えば、比較部103は、検索を行って、第一ソースプログラム内から、指定情報格納部108に格納されている指定情報に一致する情報を検出し、第一ソースプログラム内の、指定情報格納部108に格納されている指定情報のうちの一つが出現してから次に指定情報の一つが出現する間の範囲内の情報である変換単位情報を1以上取り出し、当該取り出した変換単位情報のそれぞれと、命令パターン格納部100に格納されている第一命令パターン情報とを比較する。
また、比較部103は、例えば、第一ソースプログラムに対して検索を行って、指定情報格納部108に格納されている指定情報である1以上の命令語を検出し、第一ソースプログラム内の、指定情報格納部108に格納されている命令語のうちの一つが出現してから次に命令語の一つが出現する間の範囲内の情報である変換単位情報を1以上取り出し、当該取り出した変換単位情報のそれぞれと、命令パターン格納部100に格納されている第一命令パターン情報とを比較してもよい。ここで述べる命令語とは、変換単位情報の最初の字句となり得る字句であり、ソースプログラムとして意味のある字句である。ここで述べる命令語とは、例えば、演算子や命令部やトークンの一部等の全てまたは一部である。また、COBOL等の言語特有の命令語と考えても良い。なお、この場合、指定情報格納部108は、命令語の格納部と考えて良い。
比較部103は、具体的には、第一ソースプログラムの各変換単位情報と、命令パターン格納部100に格納されている1以上の第一命令パターン情報とを比較して、これらが一致しているか否かを判断する。ここで比較部103が判断する一致とは、完全一致であっても良いし、部分一致であっても良い。また、第一命令パターン情報と変換単位情報との一部同士が一致している場合を一致と判断しても良い。例えば、両者の固定語や非固定語の配列が一致している場合を一致と判断しても良い。例えば、両者に出現する固定語が一致しているとともに、両者の固定語や非固定語(あるいは非固定語を表す変換語)の配列が一致している場合を一致と判断しても良い。また、両者の予約語や非予約語の配列が一致している場合を一致と判断しても良い。また、例えば、命令語と引数との数等が一致している場合を一致と判断するようにしても良い。また、ここでは第一命令パターン情報と変換単位情報とが対応関係を有している場合を一致と考えても良い。
比較部103が、第一ソースプログラムの各変換単位情報と、命令パターン格納部100に格納されている1以上の第一命令パターン情報とをどのように比較するかは問わない。例えば、比較部103は、変換単位情報を、当該変換単位情報に対応した命令パターンを示す情報である比較命令パターン情報に変更して、当該変更した比較命令パターン情報と第一命令パターン情報とを比較しても良い。この比較命令パターン情報は、例えば、上述した第一命令パターン情報と同様の、命令パターンを示すための情報である。また、比較部103は、変換単位情報と第一命令パターン情報とをそのまま比較しても良い。例えば、比較部103は、変換単位情報の全体と、第一命令パターン情報の全体とをそのまま比較しても良い。また、比較の際に、スペース等の予め指定された記号の違いや段落番号やコメント等を取り除く、例えば削除するようにしても良い。また、比較部103は、例えば、変換単位情報のうちの、変数や関数名やリテラル文字等のユーザ等が値や文字列等を指定可能な情報である非固定語以外の文字列である固定語の出現パターンと、命令パターン格納部100に格納されている1以上の第一命令パターン情報内の固定情報の出現パターンとを比較して、これらが一致しているか否かを判断してもよい。また、比較部103は、第一命令パターン情報の非固定語の部分の出現パターンと、第一ソースプログラムの変換単位情報内の非固定語の部分の出現パターンとの一致、または第一命令パターン情報の固定語および非固定語が出現するパターンと、第一ソースプログラムの変換単位情報内の固定語および非固定語が出現するパターンとの一致を判断するようにしてもよい。また、これらを組みあわせて判断するようにしても良い。また、非固定語のうちの、ユーザ等により指定された情報、例えばユーザが指定した文字列であるユーザ指定語等を、固定語に指定して上記の比較および判断を行うようにしても良い。また、比較部103は、変換単位情報のうちの、非固定語の一部や全部を、当該非固定語に対応した文字列に変換して、第一命令パターン情報と比較を行うようにしても良い。また、非固定語に対応した文字列に変換する際に、非固定語の属性やデータタイプやパターンを判断して、そのパターンに応じて指定されている文字列に変換するように指定も良い。
比較部103は、具体例としては、固定語の出現パターン同士、非固定情報の出現パターン同士、あるいは固定情報と非固定情報の出現パターン同士が、完全一致していれば、比較した第一ソースプログラムの変換単位情報と第一命令パターン情報とが一致していると考える。ここで述べる出現パターンとは、例えば、固定語同士や非固定語同士や固定語と非固定語の配列順序等も含むパターンである。出現パターンは、特定の固定語や非固定語が現れるパターンであってもよく、不特定の固定語や非固定語が現れるパターンであっても良い。また、これらの組み合わせであっても良い。
また、比較部103は、第一命令パターン情報の予約語の部分の出現パターンと、第一ソースプログラムの変換単位情報内の予約語の部分の出現パターンとの一致、第一命令パターン情報の非予約語の部分の出現パターンと、第一ソースプログラムの変換単位情報内の非予約語の部分の出現パターンとの一致、または第一命令パターン情報の予約語および非予約語が出現するパターンと、第一ソースプログラムの変換単位情報内の予約語および非予約語が出現するパターンとの一致のうちの、少なくとも一つを判断するようにしてもよい。具体的には、予約語の出現パターン同士、非予約語の出現パターン同士、あるいは予約語と被予約語の出現パターン同士が、完全一致していれば、比較した第一ソースプログラムの変換単位情報と第一命令パターン情報とが一致していると考えるようにしてもよい。ここで述べる出現パターンとは、例えば、予約語同士や予約語と非予約語の配列順序も含むパターンである。出現パターンは、特定の予約語や非予約語が現れるパターンであってもよく、不特定の予約語や非予約語が現れるパターンであっても良い。また、これらの組み合わせであっても良い。
なお、比較部103は、上記のように第一ソースプログラムから取り出した変換単位情報と、第一命令パターン情報との比較を行う代わりに、例えば、命令パターン格納部100に格納されている第一命令パターン情報を一つずつ順次取り出し、取り出した第一命令パターン情報を検索キーとして、第一ソースプログラム受付部102が受け付けた第一ソースプログラム内に一致する命令パターンを検索していくようにしても良い。この場合の一致とは、完全一致であってもよいし、部分一致であっても良い。例えば、第一命令パターン情報の一部が、上述した変換語である場合、検索対象となる第一ソースプログラムの、この変換語に対応する位置の文字列については、いわゆる検索におけるワイルドカード等と同様に、一致を判断しない、あるいは変換語が指定する属性等だけが一致するか否かを判断するようにしても良い。
比較部103は、通常、MPUやメモリ等から実現され得る。比較部103の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
変換部104は、比較部103が、第一命令パターン情報と一致すると判断した第一ソースプログラムの記述箇所を、当該第一命令パターン情報と対になる第二命令パターン情報に対応するよう変換する。変換部104は、具体的には、比較部103が比較の際に用いた第一命令パターン情報に対応する第二命令パターン情報を、命令パターン格納部100から読み出し、比較部103が一致すると判断した第一ソースプログラムの記述箇所を、読み出した第二命令パターン情報が示す命令パターンに変換する。例えば、比較部103が第一命令パターン情報と一致すると判断した第一ソースプログラムの記述箇所の文字列を、第二命令パターン情報に置き換える。また、例えば、比較部103が第一命令パターン情報と一致すると判断した第一ソースプログラムの記述箇所のうちの、変換語に対応する文字列以外の文字列を、第二命令パターン情報に置き換えるようにしてもよい。具体的には、第一命令パターン情報が、「SOURCE−COMPUTER.変数」であり、このうちの「変数」が変換語であったとする。そして、この第一命令パターン情報に一致すると判断された第一ソースプログラムの記述箇所が「SOURCE−COMPUTER.XXXX」、第一命令パターン情報に一致する第二命令パターン情報が「SOURCE−COMPUTER.JCMF80021」であったとすると、第一ソースプログラムの「SOURCE−COMPUTER.XXXX」という記述箇所が、変換部104により、「SOURCE−COMPUTER.JCMF80021」に変換される。また、変換の際には、第一命令パターン情報中の変換語に対応する第一ソースプログラム上の文字列の位置を、第二命令パターン情報が示す変換語の文字列の配置される位置に移動させても良い。なお、第二命令パターン情報は、命令パターンがないことを示す情報や、命令パターンが削除されることを示す情報である場合、第一命令パターン情報に一致すると判断された第一ソースプログラムの記述箇所は、変換部104により削除される。また、第二命令パターン情報は、命令パターンを追加する情報であってもよい。第二命令パターン情報が、命令パターンを追加する情報である場合、第一命令パターン情報に一致すると判断された第一ソースプログラムの記述箇所に、第二命令パターン情報が示す命令パターンが追加される。変換部104による変換は、例えば、いわゆるワイルドカードを用いた検索置換処理と同様の技術により実現可能であり、この場合、ワイルドカードは変換語に相当する。変換部104は、通常、MPUやメモリ等から実現され得る。変換部104の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
コメント記述部105は、第一ソースプログラム、具体的には変換部104により変換された第一ソースプログラムの、変換部104が変換を行った記述箇所に対応する箇所に、変換を行った自装置に関するコメントを記述する。変換を行った自装置に関するコメントとは、例えば変換を行った自装置を識別可能なコメントである。自装置を識別可能なコメントとは、例えば自装置の装置名や、型番等の識別情報である。また、変換部104による処理が、MPU等にソフトウェアで構成される変換用のツールを実行させることで実現されるものである場合、このツール名や、ツールの識別情報を、自装置を識別可能なコメントとして記述しても良い。ツール名は、例えば、プログラム名や実行ファイル名や、実行モジュール名等である。また、ツールを実現する実行モジュール等が、複数のモジュール等に分かれて図示しない格納部等に格納されている場合、コメント記述部105は、これらの実行モジュールの識別情報等を収集して、コメントとして記述しても良い。このツールには、変換の際に利用される命令パターン格納部100に格納されている第一命令パターン情報と第二ソースプログラムとの対を含むと考えても含まないと考えても良い。コメント記述部105は、例えば、自装置の識別情報や、変換に用いたツールの識別情報等を取得し、これらの情報にコメントアウトを示す情報等を付加してコメントを作成し、作成したコメントを第一ソースプログラムに配置する。また、変換を行った際の自装置の状態や設定や条件等を示す情報を取得し、自装置を識別するコメントとして記述しても良い。同じ装置であっても、変換を行う状態や設定や条件で変換を行っている場合には、異なる装置が変換を行っている装置と考えることができるからである。従って、例えば、変換用命令パターン情報が、命令パターン格納部100に複数格納されており、命令パターン指定情報により指定されたその一つが、変換部104による変換に用いられている場合、この変換に用いられている変換用命令パターン情報を識別する情報を取得し、自装置を識別可能なコメントとして記述しても良い。例えば、各変換命令パターン情報に名称が付与されている場合、現在変換に利用されている変換命令パターン情報の名称を取得し、この名称を自装置を識別可能なコメントとして記述する。あるいは各変換命令パターン情報がそれぞれデータベースを構成していると考えた場合、利用するデータベースの名称等の識別情報を取得し、自装置を識別可能なコメントとして記述しても良い。コメントは、例えば、文字列である。コメントを記述する、ということは、例えば、コメントを示す情報を第一ソースプログラムに挿入することである。コメントを記述する箇所は、変換部104により変換された記述箇所と対応する箇所、言い換えれば対応関係が分かる箇所であれば、どのような箇所であるかは問わない。ただし、コメントは、変換部104により命令パターンが変換された部分のできるだけ近くに記述することが、変換箇所を視覚的に認識しやすい点で好ましい。例えば、コメントは、変換された箇所と同じ行や、その前後の行に記載されることが好ましい。コメントは、プログラムの実行時に無視される形式等で記述される。コメントは、通常、プログラミング言語の仕様等で定められたルールに従って記述される。例えば、仕様により指定された場所や、形式で記述される。例えば、COBOL言語等においては、各行の73カラムから80カラムまでは、コメントを記述する領域に予め指定されているため、変換部104が変換した第一ソースプログラムの記述箇所が含まれる行の73カラムから80カラムに、自装置に関するコメントが記述される。また、プログラミング言語によって、予め指定された文字、例えば「*」や「#」で挟まれた文字列が、コメントであると定義されている場合、このような文字で囲んだコメントを、変換部104が変換した第一ソースプログラムの記述箇所の近傍、例えば、次の行等に記述しても良い。コメント記述部105がコメントとして記述する自装置を識別する情報等は、例えば、後述するコメント格納部106等に予め格納しておくようにしても良い。また、変換部104による処理が、MPU等にソフトウェアで構成されるツールを実行させることで実現されるものである場合、このツールの識別情報、例えば実行ファイル名等を、実行ファイルが格納されている図示しない格納部等から取得して、コメントに用いるようにしても良い。また、変換に用いられた変換用命令パターン情報の識別情報を、命令パターン格納部100等から取得して、コメントに用いるようにしても良い。また、後述するコメント格納部106等に、コメントを構成する際に利用されるテンプレートの情報等を予め格納しておくようにし、コメント作成のために取得したツールの識別情報や、変換用命令パターン情報の識別情報等を、このテンプレートに配置することで、コメント記述部105がコメントを作成し、作成したコメントを第一ソースプログラムに記述しても良い。
なお、コメント記述部105は、変換部104が変換を行った記述箇所に対応する箇所に、変換前の記述に対応する第一命令パターン情報に関するコメント、具体的には一致する第一命令パターン情報に関するコメントを更に記述するようにしてもよい。第一命令パターン情報に関するコメントとは、例えば、第一命令パターン情報そのものを含むコメントや、第一命令パターン情報の識別情報を含むコメントや、この第一命令パターンが、変換前の記述に一致する第一命令パターンであることを示すコメントである。例えば、変換の対象となる記述箇所の検出に用いられた第一命令パターン情報や、その識別情報等を、コメントとして更に記述しても良い。例えば、コメント記述部105は、変換に用いた第一命令パターン情報やその識別情報を取得し、取得した情報にコメントアウトを示す情報等を適宜付加して構成したコメントを、第一ソースプログラムに配置する。なお、このようなコメントを作成する際に利用されるテンプレートの情報は、後述するコメント格納部106に予め格納されているようにしても良い。例えば、このようなテンプレートに、変換前の記述に一致する第一命令パターン情報やその識別情報を配置することで、コメントが作成される。
また、コメント記述部105は、変換部104が変換を行った記述箇所に対応する箇所に、変換部104が変換に用いた第二命令パターン情報に関するコメントを更に記述するようにしてもよい。第二命令パターン情報に関するコメントとは、例えば、第二命令パターン情報そのものを含むコメントや、第二命令パターン情報の識別情報を含むコメントや、この第二命令パターンが、変換に用いられた第二命令パターンであることを示すコメントである。例えば、変換に用いられた第二命令パターン情報そのものを、コメントとして更に記述しても良い。例えば、コメント記述部105は、第二命令パターン情報やその識別情報を取得し、取得した情報にコメントアウトを示す情報等を適宜付加して構成したコメントを、第一ソースプログラムに配置する。なお、このようなコメントを作成する際に利用されるテンプレートの情報は、後述するコメント格納部106に予め格納されているようにしても良い。例えば、このようなテンプレートに、変換に用いた第二命令パターン情報やその識別情報を配置することで、コメントが作成される。コメント記述部105は、通常、MPUやメモリ等から実現され得る。コメント記述部105の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
コメント格納部106には、コメント記述部105が記述する自装置についてのコメントの情報が格納され得る。例えば、予め用意された自装置に付いてのコメントが格納されている。なお、コメント格納部106には、自装置についてのコメントの情報が格納される代わりに、自装置についてのコメントの情報を作成する際に利用されるテンプレートの情報が格納されていても良い。また、変換前の記述に一致する第一命令パターン情報についてのコメントの情報を作成する際に利用されるテンプレートの情報が格納されていても良い。また、変換に用いられた第二命令パターン情報についてのコメントを作成する際に利用されるテンプレートの情報が格納されていてもよい。コメント格納部106は、不揮発性の記録媒体でも、揮発性の記録媒体でも実現可能である。なお、例えばツールの識別情報や、変換用命令パターン情報の識別情報等を、そのままコメントとして用いる場合等には、コメント格納部106は省略しても良い。
出力部107は、コメント記述部105が記述したコメントを含む、変換部104が第一ソースプログラムを変換した結果である第二ソースプログラムを出力する。ここで述べる出力とは、ディスプレイへの表示、プロジェクターを用いた投影、プリンタへの印字、外部の装置への送信、記録媒体への蓄積、他の処理装置や他のプログラム等への処理結果の引渡し等を含む概念である。出力部107は、ディスプレイやプリンタ等の出力デバイスを含むと考えても含まないと考えても良い。出力部は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
指定情報格納部108には、ユーザ等により予め指定された情報である1以上の指定情報が格納されている。指定情報は、上述したように、例えば、変換単位情報の区切を指定するための、予め指定された文字列や記号等を含む情報である。指定情報は、具体的には、予め指定された命令語または制御コードの少なくとも一方である。また、指定情報は、上述したような、当該指定情報を用いて変換単位情報を得るためのルールと対応付けられていてもよい。また、このルールを指定情報が有していても良い。指定情報格納部108は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
次に、プログラム変換装置の動作について図2のフローチャートを用いて説明する。
(ステップS201)第一ソースプログラム受付部102は、第一ソースプログラムを受け付ける。第一ソースプログラムは、例えば、変換対象のプログラムである。例えば、第一ソースプログラムがメモリ等に格納されている場合、この第一ソースプログラムを、第一ソースプログラム受付部102が読み込んで受け付けてもよい。受け付けた第一ソースプログラムは、図示しないメモリ等の記憶媒体に一時記憶される。
(ステップS202)命令パターン指定情報受付部101は、命令パターン指定情報を受け付ける。具体的には、命令パターン格納部100に格納されている複数の変換用命令パターン情報のうちの一つを指定する命令パターン指定情報を受け付ける。命令パターン指定情報は、例えば変換用命令パターン情報を、当該変換用命令パターン情報の識別情報等を用いて指定する情報である。受け付けた命令パターン指定情報は、例えば、図示しないメモリ等の記憶媒体に一時記憶される。
(ステップS203)比較部103は、カウンターkに1を代入する。
(ステップS204)比較部103は、ステップS201で受け付けた第一ソースプログラムからk番目の変換単位情報を読み出す。具体例を挙げると、第一ソースプログラムのうちの、前回変換単位情報が読み出された位置から(ただし、k=1の場合には、第一ソースプログラムの最初の位置から)所定のルールで決められた文字列、例えば、スペース等で区切られたいわゆる単語等の文字列を順番に読み出し、読み出した文字列が、指定情報格納部108に格納された文字列である指定情報のいずれか一つと一致するか否かを順次判断していく。そして、一致する文字列が読み出されてから、次の一致する文字列が読み出されるまで、処理を繰り返し、最初に一致する文字列から、次に一致する文字列の直前までの情報をk番目の変換単位情報として読みだす。なお、このルールに従って、変換単位情報を読み出す場合、変換単位情報の読み出し開始位置の最初の文字列は、指定情報に一致すると考えて、最初の文字列に対する指定情報との比較を行わず、読み出し開始位置から、次に現れた指定情報と一致する文字列の直前までの情報を取り出すようにしても良い。ただし、上記以外の方法で変換単位情報を取得するようにしても良い。
(ステップS205)比較部103は、ステップS204で取り出したk番目の変換単位情報と、命令パターン格納部100に蓄積されている第一命令パターン情報との比較処理を行う。なお、この比較処理の詳細については、後述する。
(ステップS206)変換部104は、ステップS205による比較の結果、k番目の変換単位情報が、命令パターン格納部100に格納されている第一命令パターン情報のいずれか一つと一致しているという結果が得られたか否かを判断する。いずれか一つと一致しているという結果が得られた場合、ステップS207に進み、いずれにも一致していないという結果が得られた場合、ステップS210に進む。
(ステップS207)変換部104は、ステップS202において指定された変換用パターン情報のうちの、ステップS205において一致すると判断された第一命令パターン情報に対応付けられた第二命令パターン情報を、命令パターン格納部100から読み出す。そして、読み出した第二命令パターン情報を用いて、ステップS201で受け付けた第一ソースプログラムのk番目の変換単位情報に対応する箇所を変換する。例えば、第二命令パターン情報で全体を置き換えても良いし、変換語に対応する部分を除いた箇所だけを置き換えても良い。また、第二命令パターン情報によっては、第一ソースプログラムのk番目の変換単位情報に対応する箇所を削除したり、第二命令パターン情報を追加しても良い。
(ステップS208)コメント記述部105は、ステップS207において変換した箇所に記述するためのコメントの情報を取得する。具体的には、自装置に関するコメントの情報を取得する。例えば、コメント格納部106に予め格納されている自装置についてのコメントを読み出してもよい。また、例えば、コメント格納部106に予め格納されている、変換部104が変換のために利用しているツールの名称等をコメントの情報として取得しても良い。また、ステップS202において指定された変換用パターン情報の識別情報をコメントの情報として取得しても良い。さらに、自装置に関するコメントに加えて、ステップS205において一致すると判断された第一命令パターン情報を示す情報をコメントの情報として取得しても良いし、ステップS207において変換に用いられた第二命令パターン情報を示す情報をコメントの情報として取得しても良い。また、取得したツール名や、変換用パターン情報の識別情報や、変換に利用した第一命令パターン情報と第二命令パターン情報との対に対応した識別情報等の情報を取得し、コメント格納部106に予め格納されているテンプレートにはめ込んでコメントの情報を構成しても良い。取得したコメントの情報は、メモリ等の記憶媒体に一時記憶される。
(ステップS209)コメント記述部105は、ステップS208において取得したコメントの情報を用いて、ステップS207において変換が行われた第一ソースプログラムの記述箇所に対応する位置にコメントを記述する。例えば、コメントを追記する。
(ステップS210)比較部103は、カウンターkの値を1インクリメントする。
(ステップS211)比較部103は、第一ソースプログラムの中にk番目の変換単位情報があるか否かを判断する。k番目の変換単位情報がある場合、ステップS204に戻り、ない場合、ステップS212に進む。例えば、直前のステップS204の処理において、第一ソースプログラムの末尾の情報が変換単位情報として取り出された場合、k番目の変換単位情報がないと判断するようにしてもよい。
(ステップS212)出力部107は、ステップS207において変換され、ステップS209においてコメントが記述された第一ソースプログラムである第二ソースプログラムを、出力する。例えば、図示しない記憶媒体等に蓄積したり、図示しないモニタ等に表示したりする。そして処理を終了する。
なお、図2のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
次に、図2のステップS205の処理の詳細について、図3のフローチャートを用いて説明する。
(ステップS301)比較部103は、カウンターiに1を代入する。
(ステップS302)比較部103は、ステップS202において指定された変換用命令パターン情報からi番目の第一命令パターン情報を読み出す。
(ステップS303)比較部103は、ステップS202において指定された変換用命令パターン情報のi番目の第一命令パターン情報と、ステップS204で取得したk番目の変換単位情報とを比較する。
(ステップS304)比較部103は、i番目の第一命令パターン情報と、ステップS204で取得したk番目の変換単位情報とが一致するか否かを判断する。ここでの一致は、部分一致であっても完全一致であっても良い。i番目の第一命令パターン情報と、k番目の変換単位情報とが一致するか否かの判断は、例えば、検索や、構文解析や、字句解析等で可能であり、既存技術であるのでここでは詳細な説明を省略する。一致する場合、ステップS308に進み、一致しない場合、ステップS305に進む。
(ステップS305)比較部103は、カウンターiを1インクリメントする。
(ステップS306)比較部103は、ステップS202において指定された変換用命令パターン情報内のi番目の第一命令パターン情報が、ステップS202において指定された変換用命令パターン情報内にあるか否かを判断する。ある場合、ステップS302に戻り、ない場合ステップS307に進む。
(ステップS307)比較部103は、ステップS202において指定された変換用命令パターン情報内に、一致する第一命令パターン情報がないことを示す判断結果を上位の処理に出力する。そして、上位の処理に戻る。
(ステップS308)比較部103は、k番目の変換単位情報が、ステップS202において指定された変換用命令パターン情報のi番目の第一命令パターン情報に一致することを上位の処理に出力する。そして上位の処理に戻る。
なお、図3のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
次に、具体例について説明する。なお、具体例において用いられるプログラムやソースコード等は、一例としてCOBOL言語に基づいて説明のために便宜上用意されたものである。ただし、一部、実際のものとは異なる場合がある。また、本発明はCOBOL言語に限定されるものではない。
図4は、命令パターン格納部100に格納されている変換用命令パターン情報を管理する変換用命令パターン情報管理表である。変換用命令パターン情報管理表は、「パターンID」、「変換用命令パターンID」、「第一命令パターン情報」、および「第二命令パターン情報」という属性を有している。「パターンID」は、レコードを識別する情報であり、表管理上、利用される情報である。本具体例においては、特に、「パターンID」を、第一命令パターン情報と第二命令パターン情報との対を管理するための識別情報としても利用する。「変換用命令パターンID」は、変換用命令パターン情報の識別情報であり、「変換用命令パターンID」の属性値が同じレコード(行)に含まれる第一命令パターン情報と第二命令パターン情報との対は、同一の変換用命令パターン情報を構成する第一命令パターン情報と第二命令パターン情報との対であることを示している。変換用命令パターン情報は、第一命令パターン情報と第二命令パターン情報との対により構成されるデータベースと考えても良い。「変換用命令パターンID」の属性値が異なる変換用命令パターン情報は、異なるデータベースと考えも良い。「第一命令パターン情報」は、第一命令パターン情報を示している。「第二命令パターン情報」は、第二命令パターン情報を示している。第二命令パターン情報は、同じレコードに含まれる第一命令パターン情報と対応付けられている。第一命令パターン情報や第二命令パターン情報は、英字と数字と日本語とスペース等の記号を用いて表されている。日本語の部分は、変数や関数名やリテラル文字等のユーザ等が値や文字列等を指定可能な情報である変換語を示しており、他の部分は変換語以外の情報を示している。例えば、「SELECT 変数01 ASSIGN TO 変数02」では、「変数01」、「変数02」が変換語、例えば非予約語であり、「SELECT」、「ASSIGN」、「TO」が変換語以外の文字列、例えば予約語である。変換語は正規表現に対応している。これらの変換語は、例えば、「[a−z、A−Z、0−9…]*」、すなわち、aからzの小文字または大文字のアルファベット、または0から9までの数字等のいずれかの文字で構成される1文字以上の文字列を表している。なお、ここでの「*」は、1文字以上の文字数を指定する。また、第二命令パターン情報における「#DEL#」は、置き換え用の第二命令パターン情報がなく、第一命令パターン情報に対応する第一ソースプログラムの記述箇所を、削除する処理が行われることを示す文字列である。また、「#ADD#」は、これに続く命令パターンが、第一命令パターン情報に対応する第一ソースプログラムの記述箇所に追加されることを示す。
図5は、第一ソースプログラム受付部102が受け付ける第一ソースプログラムの例である。ここでは、プログラム変換装置1が、ユーザの指示により、図5に示すような第一ソースプログラムを受け付けて解析を開始する場合について説明する。なお、図5の第一ソースプログラムにおいては、各行の73カラムから80カラムまでがコメントを記述するコメント領域50であるとする。また、「*」で挟まれた箇所や「#」で始まる文字列(例えば#からピリオドや改行コードまでの文字列)は、コメント行であるとする。比較部103は、コメント領域や、コメント行であることを判断した場合、その領域や行等に記述されているコードについての比較は行わない。また、改行コード等の制御記号等は、比較部103による比較の対象としないようにしてもよい。例えば無視するようにして良い。なお、図5において、二以上の連続したスペース等については、1つのスペースと同じ扱いをするようにしても良い。
まず、ユーザの指示等に応じて、第一ソースプログラム受付部102が、メモリ等から図5に示すような第一ソースプログラムを読み出す。読み出した第一ソースプログラムは、図示しないメモリ等に一時記憶される。
次に、ユーザがメニュー画面等を操作して、第一ソースプログラムの変換に用いる変換用命令パターン情報を指定する指示、具体的には、変換用命令パターンIDの一つである「A」を入力すると、命令パターン指定情報受付部101は、指示に応じて変換用命令パターンIDが「A」である変換用命令パターン情報の指定を受け付ける。
図6は、指定情報格納部108に格納されている指定情報を管理する指定情報管理表である。指定情報管理表は、「ID」と「指定情報」という属性を有している。「ID」は、レコードを識別する情報であり、表管理上、利用される情報である。「指定情報」は、指定情報である。なお、ここでは、指定情報は、ユーザが指定する文字列、例えば「MOVE」や「CALL」等の命令語やピリオドを含む文字列である。なお、ここでは、命令語として、「IF」や「ELSE」等も含むと考える。
次に、比較部103が、第一ソースプログラム受付部102が受け付けた第一ソースプログラムから、変換単位情報を取り出す処理を行う。具体的には、比較部103は、予め指定された変換単位情報を取り出すためのルールに従って、変換単位情報を取り出す処理を行う。変換単位情報を取り出すルールは、ここでは具体例として、第一ソースプログラム内の、図6に示したような指定情報格納部108に格納されている指定情報の一つであるピリオドが現れた位置の次の文字列から、次に指定情報が現れた直前の位置までの情報、および、第一ソースプログラム内の、指定情報格納部108に格納されている指定情報のうちのピリオド以外の文字列が現れた位置から、次に指定情報が現れた直前の位置までの範囲の情報を取り出す、というルールであるとする。なお、このルールは一例であり、適宜変更や追加が可能である。また、改行コード等は、この取り出す処理においては無視されるか、あるは情報を取り出す際に、スペース等に変換されるようにすればよい。また、2以上の連続したスペース等を一のスペースを残して削除してもよい。また、コメント行や、コメント領域の文字列は取り出さない。なお、この取り出す処理を行なう前に、上述したように、改行コード等をスペースに置換する処理等を、第一ソースプログラムに実行しておくようにしてもよい。比較部103が、このルールに従って変換単位情報を取り出す処理は、例えば、プログラム等を実行することにより行われるようにする。このプログラムについては、図示しないメモリ等に予め格納されているようにすればよい。
例えば、このようなるルールに従うことによって、第一ソースプログラムの先頭から、図7において点線で示したような変換単位情報が、順番に比較部103により取り出されることとなる。
次に、比較部103は、第一ソースプログラムから取得した変換単位情報が、図4に示したような命令パターン格納部100に格納されている第一命令パターン情報のうちの、「変換用命令パターンID」が「A」である第一命令パターン情報のいずれか一つと一致するか否かを判断する。ここでは、比較部103は、スペースや、ピリオドで区切られた文字列、すなわち単語を単位として、変換単位情報と各第一命令パターン情報との比較等を行なうものとする。なお、変換単位情報と第一命令パターン情報との比較は、ここでは、第一命令パターン情報と変換単位情報との、変換語に対応する文字列(単語)を除いた文字列が完全一致であるか否かにより判断される。ただし、スペースや改行コード等の制御コード等については、一致であるか否かの判断においては無視するようにしても良い。また、第一命令パターン情報の変換語が示す属性と、変換単位情報の変換語に相当する位置に配置されている文字列の属性とが一致するか否か等も判断するようにしても良い。なお、このような比較については、例えば、構文解析や、字句解析、パターンマッチングの技術等において公知であるので詳細な説明は省略する。
この比較において、例えば、第一ソースプログラムから取得した変換単位情報である「SOURCE−COMPUTER BCD7100」が、「変換用命令パターンID」が「A」である変換用命令パターン情報に含まれる第一命令パターン情報である「SOURCE−COMPUTER 変数」という第一命令パターン情報と一致すると判断される。この第一命令パターン情報「SOURCE−COMPUTER 変数」は「パターンID」が「P01」である第一命令パターン情報である。
一致すると判断されたため、変換部104は、「パターンID」が「P01」である「SOURCE−COMPUTER 変数」という第一命令パターン情報に対応する第二命令パターン情報を、命令パターン格納部100から読み出す。具体的には、図4に示した変換用命令パターン情報管理表における「パターンID」が「P01」である第二命令パターン情報である「SOURCE−COMPUTER ABC−600」を読み出す。そして、第一ソースプログラム受付部102が受け付けた第一ソースプログラムにおける「SOURCE−COMPUTER BCD7100」という変換単位情報の取得元となる記述箇所を、取得した第二命令パターン情報「SOURCE−COMPUTER ABC−600」で置換する。
なお、対をなす第一命令パターン情報と第二命令パターン情報とのいずれにも共通する変換語が含まれる場合、変換部104は、変換単位情報の、第一命令パターン情報の変換語に対応する位置に配置されている文字列を取り出し、この取り出した文字列で、対をなす第二命令パターン情報の共通する変換語を置換し、この置換により得られた第二命令パターン情報で、第一ソースプログラムの変換単位情報の取得元となる記述箇所を置換するようにすればよい。
さらに、コメント記述部105は、第一ソースプログラムの変換を行った自装置についての情報を取得し、第二命令パターン情報による置換を行った文字列を含む行のコメント領域50に、自装置についての情報を示すコメントを記述する。ここでは、例えば、比較部103および変換部104が一以上の実行モジュールを実行させることで、比較や変換を行っており、その実行モジュールのモジュール名が「T1」であったとする。また、コメント格納部106には、コメントのテンプレートの情報である「モジュール名,変換用命令パターンID,パターンID」が予め格納されているものとする。このテンプレートにおいて、「モジュール名,変換用命令パターンID」の部分が、自装置についてのコメントである。このうち、「変換用命令パターンID」の部分は、命令パターン指定情報により指定される変換用命令パターン情報を用いた変換であることを示すコメントである。コメント記述部105は、比較および変換に利用した実行モジュール名「T1」と、比較および変換に用いられた「変換用命令パターン情報ID」である「A」と、変換に用いられた第一命令パターン情報と第二命令パターン情報との対の「パターンID」である「P01」をそれぞれ取得し、コメント格納部106に格納されていたテンプレートのモジュール名を、実行モジュール名「T1」で置き換え、さらに、「変換用命令パターンID」を、「A」で置き換え、「パターンID」を「P01」で置き換えたコメント「T1,A,P01」を作成する。このコメントは、「T01」という実行モジュールで、「A」という変換用命令パターン情報を用いて、「P01」という第一命令パターン情報と第二命令パターン情報との対に応じた変換が行われたことを示すコメントである。そして、作成したコメントを、第二命令パターン情報による置換を行った文字列を含む行のコメント領域50に記述する。
図8は、コメントを記述した状態の第一ソースプログラムを示す図である。
なお、比較部103は、第一ソースプログラムから取得した変換単位情報が、図4に示したような命令パターン格納部100に格納されている第一命令パターン情報のうちの、「変換用命令パターンID」が「A」である第一命令パターン情報のいずれにも一致しないと判断された場合、第二命令パターンによる変換は行われず、他の変換単位情報についての、同様の処理が繰り返される。
また、比較部103により、変換単位情報が、「パターンID」が「P06」の第一命令パターン情報と一致すると判断された場合、「パターンID」が「P06」である「第二命令パターン情報」の値が「#DEL#」であるため、この変換単位情報に対応する第一ソースプログラムの記述箇所は削除される。
以上の処理を、第一ソースプログラムの変換単位情報について繰り返し、第一ソースプログラムの全ての変換単位情報についての処理が終わった時点で変換の処理が終了する。
変換が終了した時点で、第一ソースプログラムが変換されたことにより作成された第二ソースプログラムが、出力部107により、図示しないハードディスク等の記憶媒体により構成される格納部に蓄積される。また、作成された第二ソースプログラムがユーザ等の指示に応じて、図示しないモニタやプリンタに出力される。
図9に、第二ソースプログラムの表示例を示す図である。このような第二ソースプログラムにおいては、コメント領域50のコメントを見ることで、ユーザは、コメントがある行が、第二命令情報により変換されていることや、コメントがある行が、どのような装置やモジュールで、どのような変換用命令パターン情報を用いて変換されたかを容易に知ることができる。また、コメントから、どのような第一命令パターン情報と第二命令パターン情報との対を用いて変換が行われたかを知ることもできる。これにより、変換が適切に行われているか否かや、どのような装置やモジュールや変換用命令パターン情報を用いた場合に、効率的に変換が行われるか等を、容易に認識することが可能となる。
なお、ユーザがメニュー画面等を操作して、第一ソースプログラムの変換に用いる変換用命令パターン情報を指定する指示として、「A」以外の変換用命令パターンID、例えば「B」を入力した場合、この変換用命令パターンID「B」に対応した変換用命令パターン情報を構成する第一命令パターン情報や、第二命令パターン情報を用いて第一ソースプログラムの変換が行われることとなる。
なお、上記具体例において、比較部103や変換部104が利用するモジュールが予め複数用意されており、ユーザにからの指定によって、比較や変換の処理に用いるモジュールを適宜変更できるようにしても良い。この場合、例えば、現在利用されている実行モジュール名が、コメントに用いられることとなる。
また、ユーザにより変換用命令パターン情報を指定する代わりに、実行モジュールによって、予めどのような変換用命令パターン情報が利用されるかが指定されているようにしても良い。
また、上記具体例においては、変換に用いられた第一命令パターン情報と第二命令パターン情報との対を示す「パターンID」を含むコメントを記述するようにしたが、第一ソースプログラムの、第二命令パターン情報により変換された記述箇所の、変換前のソースコードを、コメントに記述するようにしても良いし、変換部が変換を行った記述箇所の、変換前の記述に対応する第一命令パターン情報や、変換に用いられた第二命令パターン情報を示す情報を、コメントに記述するようにしても良い。
なお、上記具体例においては、コメントをコメント領域50に記述するようにしたが、例えば、図10に示すように、第二命令情報を用いて変換を行った箇所の次の行等に、コメント行を設け、上記と同様の、自装置のコメントを含む変換に関するコメントを記述するようにしても良い。なお、図10において、「#DEL#」と同じ行にある文字列は、削除されたソースコード、「#CHG#」と同じ行にある文字列は、削除された箇所の置き換えに用いられた第二命令パターン情報を示す。また、「#TOOL#」は、変換や追加や削除に用いられた実行モジュールを示す情報、「#DB#」は、変更や追加や削除に用いられた変換用命令パターン情報を示す情報である。
また、コメント領域50に記述するコメントの文字数がコメント領域一行分よりも長い場合、複数行にわたってコメントを記述するようにしても良い。
以上、本実施の形態によれば、第一ソースプログラムの、第一命令パターン情報と第二命令パターン情報の対を用いて変換を行った箇所に、変換を行った自装置に関するコメントを記述するようにしたことにより、どのような装置やツールによって変換を行った場合に、どのような変換結果が得られるかを、容易に認識することができる。これにより、例えば、ソースプログラムを変換する際にどのような装置やツールを利用するかを検討する際に、有用な情報を得ることが可能となる。また、ツールや、変換用命令パターン情報のデータベース等を切り替えて、ソースプログラムの変換を行った場合に、どのような変換が行われるかを容易に調べて判断することが可能となる。
(実施の形態2)
本実施の形態のプログラム分析装置は、上記実施の形態において説明したプログラム分析装置のような変換ツールを用いて第一ソースプログラムを変換した場合に変換されると考えられる部分を、上記実施の形態の比較部と同様の構成を用いて検出し、当該検出された部分がどのような変換ツールによって変換されるかを示すコメントを記述するようにしたものである。
図17は、本実施の形態におけるプログラム分析装置のブロック図である。
プログラム分析装置2は、第一命令パターン格納部200、変換ツール指定情報受付部201、命令パターン組指定情報受付部202、第一ソースプログラム受付部203、比較部204、コメント記述部205、コメント格納部206、第一ソース出力部207、および指定情報格納部208を備えている。
第一命令パターン格納部200には、第一ソースプログラムを第二ソースプログラムに変換するツールである変換ツールと対応付けられた情報であって、当該変換ツールが変換に利用する第一ソースプログラムの命令パターンを示す情報である第一命令パターン情報が1以上格納され得る。具体的には、第一ソースプログラムを第二ソースプログラムに変換するツールである変換ツールを識別する情報であるツール識別情報と、当該変換ツールが変換に利用する、第一ソースプログラムの命令パターンを示す情報である第一命令パターン情報とが対応付けられて1以上格納され得る。例えば、変換ツールの識別情報と、当該変換ツールがソースコードの変換に利用する、変換前の第一ソースプログラムの命令パターンの情報と、当該命令パターンに対応する変換後の第二ソースプログラムの命令パターンの情報との対が1以上格納され得る。ただし、第二ソースプログラムの命令パターン情報とは対応付けられていなくても良い。ここでの第一命令パターン情報は、具体的には、上記実施の形態1において説明した第二命令パターン情報と対応付けられた命令パターンの情報である。即ち、第一命令パターン情報は、変換後の命令パターンの情報である第二命令パターン情報と対応付けられた命令パターンの情報である。第一ソースプログラムや、第二ソースプログラムや、命令パターンや、第一命令パターン情報等については、上記実施の形態1と同様であるのでここでは説明を省略する。変換ツールとは、第一ソースプログラムを第二ソースプログラムに変換する装置や、変換を行うためのプログラムや実行モジュール等である。変換ツールを実現する実行モジュール等は、複数のモジュールにより構成されていてもよい。変換ツールは、例えば、上記実施の形態において説明したプログラム変換装置1の変換部104等と同様の、ソースプログラムを変換するための構成を備えた変換装置等である。変換ツールは変換を行うためのプログラムを実行可能なコンピュータ等であってもよい。ツール識別情報は、変換ツールに割り当てられた任意の識別情報等の、ツールが識別可能な情報であればよい。ツール識別情報は、例えば変換ツールのツール名や、プログラム名や、実行ファイル名や、実行モジュール名等である。なお、ソースプログラムの変換に利用可能な変換ツールは1以上であってもよい。第一命令パターン格納部200には、複数の変換ツールのツール識別情報と対応付けられた第一命令パターン情報が格納されていても良い。即ち、第一命令パターン格納部200には、各変換ツールに対応した第一命令パターン情報が、ツール識別情報と対応付けられて格納されていてもよい。第一命令パターン格納部200に格納されている第一命令パターン情報は、例えば、上記実施の形態において説明した命令パターン情報に格納されている第一命令パターン情報と同様の命令パターン情報である。また、第一命令パターン格納部200には、上記実施の形態1と同様に、第一ソースプログラムの第一命令パターン情報に対応した部分(例えば上述した変換単位)を変換する際に利用される第二命令パターン情報が、第一命令パターン情報と対応付けられて格納されていても良い。
なお、本実施の形態においては、第一ソースプログラムに利用され得る命令パターンであって、第一ソースプログラムを第二ソースプログラムに変換する際に変換されない命令パターンを示す情報が、ツール識別情報と対応付けられて格納されていても良い。ここではこのような命令パターン及び命令パターンの情報を、非変換命令パターンおよび非変換命令パターン情報と呼ぶ。このような非変換命令パターンは、分析結果や命令パターンの見直し等によって、変換の対象となる第一命令パターンとなり得る可能性がある。例えば、移行後の新たな環境にあわせて変換が必要な命令パターンが増える場合や、本願のプログラム分析装置2等を用いた変換状況の分析の結果、変換効率を挙げる必要がある場合に変換の対象となる第一命令パターンに変更されることが考えられるからである。また、分析時には、変換内容、具体的には対応する第二命令パターンが確定していないものもあるからである。このため、予め非変換命令パターン情報として登録しておくことで、分析時には変換の対象となる第一命令パターンとしての分類はできていなくても、必要なときに、容易に第一命令パターンに変換が可能となる。非変換命令パターン情報や、非変換命令パターン情報であることを示す情報と対応付けて格納されてもよい。第一命令パターン格納部200は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
なお、第一命令パターン格納部200には、変換ツールが変換に利用可能な1以上の第一命令パターン情報の組が、一の変換ツールに対して複数対応付けられて格納されていてもよい。例えば、複数の変換ツールがある場合、各変換ツール毎に第一命令パターン情報により構成される組が複数用意されていても良い。例えば、第一命令パターン格納部200には、変換ツールと、当該変換ツールが利用可能な上述した変換命令用パターン情報と同様の情報とが対応付けられて格納されていても良い。例えば、異なる第一命令パターン情報の組においては、一方の組にしか存在しない第一命令パターン情報が存在しても良い。このような場合、一の変換ツールが、第一命令パターン情報のどの組を変換に利用するかによって、変換ツールによる変換結果、即ち変換により得られる第二ソースプログラムが異なるものとなり得る。つまり、変換の際に利用する第一命令パターン情報の組をユーザの指定等に応じて切り替えることで、一の変換ツールで、第一ソースプログラムに対して異なる変換を行って、異なる第二ソースプログラムを変換結果として得ることが可能となる。
変換ツール指定情報受付部201は、ユーザ等から、変換ツールを指定する指示である変換ツール指定情報を受け付ける。例えば、指定する変換ツールの変換ツール識別情報を受け付けてもよい。なお、第一命令パターン格納部200に複数の変換ツールに対応した第一ソースプログラムが格納されていない場合、常に第一命令パターン格納部200に格納されている変換ツール識別情報が示す変換ツールを指定するようにすれば良いため、変換ツール指定情報受付部201は省略しても良い。ここで述べる受付とは、例えば、入力手段からの受付や、他の機器等から送信される入力信号の受信や、記録媒体等からの情報の読み出し等である。変換ツール指定情報の入力手段は、テンキーやキーボードやマウスやメニュー画面によるもの等、何でも良い。変換ツール指定情報受付部201は、テンキーやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
命令パターン組指定情報受付部202は、変換ツール指定情報により指定される変換ツールに対応した第一命令パターン情報が、複数の組を構成している場合、いずれの組を選択するかを指定する情報を受け付ける。なお、以下、一以上の第一命令パターン情報で構成される一の組を、第一命令パターン情報組と呼ぶ。また、第一命令パターン情報組を指定する情報を、命令パターン組指定情報と呼ぶ。なお、第一命令パターン情報が複数の組を構成していない場合、命令パターン組指定情報受付部202は省略しても良い。ここで述べる受付とは、例えば、入力手段からの受付や、他の機器等から送信される入力信号の受信や、記録媒体等からの情報の読み出し等である。命令パターン組指定情報の入力手段は、テンキーやキーボードやマウスやメニュー画面によるもの等、何でも良い。命令パターン組指定情報受付部202は、テンキーやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
第一ソースプログラム受付部203は、第一ソースプログラムを受け付ける。第一ソースプログラム受付部203の構成および処理等については、上述した第一ソースプログラム受付部102と同様であるので、ここでは説明を省略する。
比較部204は、第一ソースプログラム受付部203が受け付けた第一ソースプログラムと、第一命令パターン格納部200に格納されている第一命令パターン情報とを比較する。例えば、比較部204は、変換ツール指定情報により指定された変換ツールのツール識別情報に対応する第一命令パターン情報と、第一ソースプログラムとを比較する。また、例えば、比較部204は、命令パターン組指定情報により指定された第一命令パターン情報の組に含まれる第一命令パターン情報と、第一ソースプログラムとを比較する。比較部204が行う比較処理については上述した比較部204と同様であるので、ここでは説明を省略する。比較部204は、通常、MPUやメモリ等から実現され得る。比較部204の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
コメント記述部205は、比較部204が第一命令パターン情報と一致すると判断した、第一ソースプログラムの記述箇所に対応する箇所に、変換ツールに関するコメントを記述する。変換ツールに関するコメントは、自装置の代わりに変換ツール指定情報で指定された変換ツールについての記述を行う点を除けば、上述した自装置に関するコメントと同様のコメントである。変換ツールに関するコメントは、例えば変換ツールを識別する情報や、変換ツールの属性や特徴等を示す情報を含む情報であってもよい。コメント記述部205は、例えば、変換ツール指定情報受付部201が受け付けた変換ツール指定情報が有する変換ツール識別情報を取得してコメントを作成し記述する。さらに、変換ツール指定情報が指定した変換ツールを示す情報と比較部204が一致すると判断した第一命令パターン情報とを含むコメントを作成し記述しても良い。また、変換ツール指定情報が指定する変換ツールの変換ツール識別情報を、後述するコメント格納部206に格納されているコメント用のテンプレート等に配置することでコメントを作成し、記述しても良い。また、取得した変換ツール識別情報を、後述するコメント格納部206に格納されているルールに従って変換したり配置したりすることでコメントを作成し、記述しても良い。また、変換ツール指定情報が指定する変換ツールに対応付けられて(具体的には変換ツール識別情報に対応付けられて)コメント格納部206に格納されている変換ツールに関するコメントを取得しても良い。コメントを記述する箇所は、結果的に、比較部204が一致すると判断した記述箇所との対応関係が分かる箇所であればよく、上述したコメント記述部107がコメントを記述する箇所とは、比較部204が一致すると判断した箇所と対応する箇所である点が異なる以外は同様の箇所である。例えば、コメントは、上記実施の形態1と同様に、第一ソースプログラムと一致すると判断された箇所と同じ行や、その前後の行に記載されることが好ましい。なお、コメント記述部205がコメントを記述する処理等は、コメントの記述先が、上記実施の形態とは異なる変換されていない第一ソースプログラムである点や、比較部204が比較に用いた第一命令パターン情報に対応する変換ツールに関するコメントを記述する点等を除けば、上記コメント記述部105と同様であるので、ここでは詳細な説明は省略する。コメント記述部205は、通常、MPUやメモリ等から実現され得る。コメント記述部205の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
コメント格納部206には、コメント記述部105が記述する変換ツールに関するコメントの情報が格納され得る。コメント格納部206は、格納され得るコメントの情報が、コメント記述部105が記述する変換ツールに関するコメント、具体的には、比較部204が比較に用いた第一命令パターン情報に対応する変換ツールに関するコメントである点を除けば、上述したコメント格納部106と同様であるので、ここでは説明を省略する。なお、コメント格納部206には、コメントの情報が格納されている代わりに、コメントを作成する際に利用されるテンプレートや、コメント作成のためのルール等が格納されていても良い。
第一ソース出力部207は、コメント記述部205が記述したコメントを含む第一ソースプログラムを出力する。第一ソース出力部207が出力する第一ソースプログラムは、具体的には、上記実施の形態1の出力部107が出力する第二命令パターン情報で変換されたソースプログラムとは異なり、第二命令パターン情報を用いて変換されていない第一ソースプログラムである。ここで述べる出力とは、ディスプレイへの表示、プロジェクターを用いた投影、プリンタへの印字、外部の装置への送信、記録媒体への蓄積、他の処理装置や他のプログラム等への処理結果の引渡し等を含む概念である。第一ソース出力部207は、ディスプレイやプリンタ等の出力デバイスを含むと考えても含まないと考えても良い。出力部は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
指定情報格納部208には、ユーザ等により予め指定された情報である1以上の指定情報が格納されている。指定情報格納部208の構成および処理は、上述した指定情報格納部108等と同様であるので、ここでは説明を省略する。
次に、プログラム分析装置の動作について図18のフローチャートを用いて説明する。
(ステップS1201)第一ソースプログラム受付部203は、第一ソースプログラムを受け付ける。第一ソースプログラムは、例えば、分析対象のプログラムである。第一ソースプログラムは、例えば、プログラム変換装置により変換の対象となるプログラムの一部等であってもよい。例えば、第一ソースプログラムがメモリ等に格納されている場合、第一ソースプログラム受付部203は、この第一ソースプログラムを読み込んで受け付けてもよい。受け付けた第一ソースプログラムは、図示しないメモリ等の記憶媒体に一時記憶される。
(ステップS1202)変換ツール指定情報受付部201は、ユーザ等から、変換ツール指定情報を受け付ける。受け付けた変換ツール指定情報は、例えば、図示しないメモリ等の記憶媒体に一時記憶される。
(ステップS1203)命令パターン組指定情報受付部202は、命令パターン組指定情報を受け付ける。具体的には、変換ツール指定情報により指定される変換ツールに対応した、第一命令パターン格納部200に格納されている一以上の第一命令パターン情報組のいずれかの組を指定する命令パターン組指定情報を受け付ける。命令パターン組指定情報は、例えば、第一命令パターン情報組を指定するための、当該第一命令パターン情報組の識別情報等を有する情報である。受け付けた命令パターン組指定情報は、例えば、図示しないメモリ等の記憶媒体に一時記憶される。
(ステップS1204)比較部204は、カウンターkに1を代入する。
(ステップS1205)比較部204は、ステップS1201で受け付けた第一ソースプログラムからk番目の変換単位情報を読み出す。具体例を挙げると、第一ソースプログラムのうちの、前回変換単位情報が読み出された位置から(ただし、k=1の場合には、第一ソースプログラムの最初の位置から)所定のルールで決められた文字列、例えば、スペース等で区切られたいわゆる単語等の文字列を順番に読み出し、読み出した文字列が、指定情報格納部108に格納された文字列である指定情報のいずれか一つと一致するか否かを順次判断していく。そして、一致する文字列が読み出されてから、次の一致する文字列が読み出されるまで、処理を繰り返し、最初に一致する文字列から、次に一致する文字列の直前までの情報をk番目の変換単位情報として読みだす。なお、このルールに従って、変換単位情報を読み出す場合、変換単位情報の読み出し開始位置の最初の文字列は、指定情報に一致すると考えて、最初の文字列に対する指定情報との比較を行わず、読み出し開始位置から、次に現れた指定情報と一致する文字列の直前までの情報を取り出すようにしても良い。ただし、上記以外の方法で変換単位情報を取得するようにしても良い。
(ステップS1206)比較部204は、ステップS1205で取り出したk番目の変換単位情報と、第一命令パターン格納部200に蓄積されている第一命令パターン情報のうちの、ステップS1202で指定された変換ツール指定情報により指定された変換ツールに対応した第一命令パターン情報のうちの、ステップS1203で指定された命令パターン組指定情報により指定された第一命令パターン情報組に含まれる第一命令パターン情報との比較処理を行う。なお、この比較処理については、比較対象となる第一命令パターン情報が異なる点を除けば、上記実施の形態において説明したステップS205の処理、即ち、図3に示した処理と同様であるので、詳細な説明は省略する。
(ステップS1207)コメント記述部205は、ステップS1206による比較の結果、k番目の変換単位情報が、第一命令パターン格納部200に格納されている第一命令パターン情報のいずれか一つと一致しているという結果が得られたか否かを判断する。いずれか一つと一致しているという結果が得られた場合、ステップS1208に進み、いずれにも一致していないという結果が得られた場合、ステップS1210に進む。
(ステップS1208)コメント記述部205は、ステップS1207において一致していると判断された箇所に記述するためのコメントの情報を取得する。具体的には、ステップS1202において変換ツール指定情報受付部201が受け付けた変換ツール指定情報が指定する変換ツールに関するコメントの情報を取得する。例えば、コメント格納部206に予め格納されている変換ツール指定情報に対応した変換ツールの識別情報、例えばツール名等をコメントの情報として取得してもよい。また、ステップS1203において命令パターン組指定情報により指定された第一命令パターン情報組の識別情報等をコメントの情報として取得しても良い。さらに、変換ツール等に関するコメントに加えて、ステップS1206において一致すると判断された第一命令パターン情報を示す情報をコメントの情報として取得しても良い。また、取得した変換ツールの識別情報や、命令パターン組識別情報や、一致すると判断された第一命令パターン情報等の情報を取得し、コメント格納部106に予め格納されているテンプレート等の予め指定された位置に配置して、コメントの情報を構成しても良い。取得したコメントの情報は、メモリ等の記憶媒体に一時記憶される。
(ステップS1209)コメント記述部205は、ステップS1208において取得したコメントの情報を用いて、ステップS1206において一致していると判断された第一ソースプログラムの記述箇所に対応する位置にコメントを記述する。例えば、コメントを追記する。
(ステップS1210)比較部204は、カウンターkの値を1インクリメントする。
(ステップS1211)比較部204は、第一ソースプログラムの中にk番目の変換単位情報があるか否かを判断する。k番目の変換単位情報がある場合、ステップS1205に戻り、ない場合、ステップS1212に進む。例えば、直前のステップS1205の処理において、第一ソースプログラムの末尾の情報が変換単位情報として取り出された場合、k番目の変換単位情報がないと判断するようにしてもよい。
(ステップS1212)第一ソース出力部207は、ステップS1209においてコメントが記述された第一ソースプログラムを、出力する。例えば、図示しない記憶媒体等に蓄積したり、図示しないモニタ等に表示したりする。そして処理を終了する。
なお、図18のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
以下、本実施の形態におけるプログラム分析装置の具体的な動作について説明する。なお、この具体例においては、各変換ツールに対応した第一命令パターン情報組がそれぞれ一つであり、命令パターン組指定情報の入力等が不要である場合について説明する。
図13は、第一命令パターン格納部200に格納されている第一命令パターン情報を管理する第一命令パターン情報管理表である。この第一命令パターン情報管理表においては、第二命令パターン情報に変換されない第一命令パターン情報も管理されているものとする。なお、ここでは、第一命令パターン情報が変換される第二命令パターン情報も、第一命令パターン情報と対応付けて管理しているが、単に分析を行うだけであれば、第二命令パターン情報は省略可能である。第一命令パターン情報管理表は、「変換ツールID」、「パターンID」、「第一命令パターン情報」、および「第二命令パターン情報」という属性を有している。「変換ツールID」は、変換ツールの識別情報である。「パターンID」は、第一命令パターン情報を管理するための識別情報である。なお、「パターンID」の末尾が「S」の行から、次に現れる末尾が「E」である「パターンID」の行までのレコードの「第一命令パターン情報」は、一の第一命令パターン情報であることを示す。「第一命令パターン情報」は、第一命令パターン情報を示している。「第二命令パターン情報」は、第二命令パターン情報を示している。第二命令パターン情報は、同じレコードに含まれる第一命令パターン情報と対応付けられている。第一命令パターン情報や第二命令パターン情報については、上記実施の形態において説明した具体例と同様である。なお、「第二命令パターン情報」の値のないレコード「第一命令パターン情報」は、変換ツールにより変換されずに、そのまま残る第一命令パターン情報であることを示す。また、第二命令パターン情報における「#DEL#」は、置き換え用の第二命令パターン情報がなく、第一命令パターン情報に対応する第一ソースプログラムの記述箇所を、削除する処理が行われることを示す文字列であるとする。
図14は、第一ソースプログラム受付部203が受け付ける第一ソースプログラムの例である。ここでは、プログラム分析装置2が、ユーザの指示により、図14に示すような第一ソースプログラムを受け付けて解析を開始する場合について説明する。なお、図14の第一ソースプログラムにおいては、各行の1から6カラムまでが行番号等を記述するコメント領域であり、各行の81カラム以降がコメントを記述するコメント領域であるとする。また、「*」で始まる文字列(例えば「*」からピリオドや改行コードまでの文字列)は、コメント行であるとする。比較部204は、コメント領域や、コメント行であることを判断した場合、その領域や行等に記述されているコードについての比較は行わない。また、改行コード等の制御記号等は、比較部204による比較の対象としないようにしてもよい。例えば無視するようにして良い。なお、図14において、二以上の連続したスペース等については、1つのスペースと同じ扱いをするようにしても良い。
まず、ユーザの指示等に応じて、第一ソースプログラム受付部203が、メモリ等から図14に示すような第一ソースプログラムを読み出す。読み出した第一ソースプログラムは、図示しないメモリ等に一時記憶される。
次に、ユーザがメニュー画面等を操作して、第一ソースプログラムの変換に用いる変換ツールを指定する指示を与えたとする。ここでは例として変換ツールIDが「E」である実行モジュールを変換に用いることを指定する指示を与えたとする。変換ツール指定情報受付部201は、この指示の入力に応じて「変換ツールID」が「E」である変換ツール指定情報の入力を受け付ける。
次に、ユーザが、図示しない受付部等にプログラムの分析を行う指示を与えると、比較部204が、第一ソースプログラム受付部203が受け付けた第一ソースプログラムから、変換単位情報を取り出す処理を行う。この処理については、上記実施の形態において説明した具体例と同様であるので、ここでは説明を省略する。
次に、比較部204は、第一ソースプログラムから取得した変換単位情報が、図13に示したような第一命令パターン格納部200に格納されている第一命令パターン情報管理表のうちの、「変換ツールID」が「E」である第一命令パターン情報のいずれか一つと一致するか否かを判断する。この比較処理については、上記実施の形態において説明した具体例と同様であるので、ここでは説明を省略する。なお、複数行にわたる第一命令パターン情報、例えばパターンIDの末尾が「S」から「E」までの第一命令パターン情報は、1つの命令パターンとして、複数行にわたる一の変換単位情報と比較する。
コメント記述部105は、比較部204による比較の結果、第一命令パターン情報と一致すると判断された変換単位情報については、一致する第一命令パターン情報に対応した変換ツールの情報、ここでは変換ツールID「E」と、一致する第一命令パターン情報のパターンIDとを取得し、この変換ツールIDとパターンIDとを並べた変換ツールに関するコメントを作成し、第一ソースプログラム内の変換単位情報の取得元となる行のコメント領域に、作成した変換ツールに関するコメントを記述する。
比較部204およびコメント記述部205は、以上の処理を、第一ソースプログラムの変換単位情報について繰り返し、第一ソースプログラムの全ての変換単位情報についての処理が終わった時点で変換の処理が終了する。
変換が終了した時点で、コメントが記述された第一ソースプログラムが、第一ソース出力部207により、図示しないハードディスク等の記憶媒体により構成される格納部に蓄積される。また、コメントが記述されたソースプログラムがユーザ等の指示に応じて、図示しないモニタやプリンタに出力される。
図15は、第一ソース出力部207が出力する、変換ツールに関するコメントが記述された第一ソースプログラムの表示例を示す図である。このような第一ソースプログラムにおいては、コメント領域のコメントを見ることで、ユーザは、コメントがある行が、変換ツールが変換に用いる第一命令パターン情報のうちの、どのような第一命令パターン情報と一致しているか否かを容易に知ることができる。これにより、例えば、変換ツールのどの第一命令パターン情報が、第一ソースプログラム内に利用されているかを分析することができる。したがって、この分析結果を用いて、変換ツールを用いて効率的に第一ソースプログラムを変換するためには、どの第一命令パターン情報に、変換先となる第二命令パターン情報を用意すればよいか等を知ることが可能となる。
なお、第一ソース出力部207の出力結果を用いて、上記実施の形態において説明したような変換部104等を備えた図示しないプログラム変換装置が、上記実施の形態と同様の変換処理により、第一ソースプログラムの変換を行うようにしても良い。この変換の処理については、上記具体例と同様であるので説明は省略する。
例えば、図15に示した第一ソースプログラムにおいては、第一ソースプログラムの各部分が、どの変換ツールのどのパターンIDの第一命令パターン情報と一致しているかが、コメントとして記述されている。このため、第一ソースプログラムのコメントが対応付けられた箇所を、当該コメントに記述された変換ツールを用いて、コメントに記述された第一命令パターン情報と対応付けられた第二命令パターン情報で置き換えていくことで、第一ソースプログラムを、容易に第二ソースプログラムに変換することができる。
図16は、第一ソース出力部207が出力した第一ソースプログラムから、図示しないプログラム変換装置によって、図13に示したような第一命令パターン情報管理表を用いて変換された第二ソースプログラムの例を示す図である。図において、変換前の行および変換後の行については、変換に関連する行であることを示す文字列「#CNV#」が、行番号の代わりに記載されている。特に、第二命令パターン情報に変換される前の変換単位情報については、コメント行であることを示す「*」を付した行として配置されている。また、この変換単位情報が第二命令パターン情報で変換された行は、この変換前の変換単位情報の直後の行として配置されている。
なお、この具体例においては説明を省略したが、命令パターン組指定情報を用いる場合については、上記実施の形態において具体例に説明したように、変換用命令パターンIDを用いる場合と同様である。つまり、ユーザにより指定された変換ツールが利用可能な第一命令パターン情報組のうちの、命令パターン組指定情報が指定する第一命令パターン情報組の第一命令パターン情報と、第一ソースプログラムの変換単位情報とを比較するようにする。そして、一致する変換単位情報に対応したコメントとして、例えば、変換ツールの識別情報に加えて、指定された第一命令パターン情報組の識別情報を加えるようにすればよい。
以上、本実施の形態によれば、変換ツールを用いた場合の変換状況を、第一ソースプログラムの変換前に予め確認することができる。例えば、変換ツールが変換に用いる第一命令パターン情報のうちの、どの第一命令パターン情報が、分析対象となる第一ソースプログラムに出現しているかを変換前の第一ソースプログラムに対してコメントとして出力することができる。この結果、変換ツールを用いて変換を行う前に、変換ツールを第一ソースプログラムにあわせて、どのように最適化すべきかを確認することができる。例えば、変換ツールを用いて効率的に第一ソースプログラムを変換するためには、どの第一命令パターン情報に、変換先となる第二命令パターン情報を用意することが適切であるか等を知ることが可能となる。具体例としては、出力結果を基に、出現頻度の高い第一命令パターン情報に応じた第二命令パターン情報を第一ソースプログラムにあわせて新たに用意すること等によって、変換ツールによる変換率を向上させることができる。
なお、上記具体例においては、変換されない第一命令パターン情報に一致する箇所も検出するようにしたが、本発明においては、変換されない第一命令パターン情報については、検出しないようにしても良い。このようにすることで、変換ツールが変換可能な箇所だけにコメントを作成して、変換箇所を認識しやすくすることができる。
また、上記各実施の形態において、各処理(各機能)は、単一の装置(システム)によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
また、上記各実施の形態において、各構成要素が実行する処理に関係する情報、例えば、各構成要素が受け付けたり、取得したり、選択したり、生成したり、送信したり、受信したりする情報や、各構成要素が処理で用いるしきい値や数式、アドレス等の情報等は、上記説明で明記していない場合であっても、図示しない記録媒体において、一時的に、あるいは長期にわたって保持されていてもよい。また、その図示しない記録媒体への情報の蓄積を、各構成要素、あるいは、図示しない蓄積部が行ってもよい。また、その図示しない記録媒体からの情報の読み出しを、各構成要素、あるいは、図示しない読み出し部が行ってもよい。
また、上記各実施の形態では、プログラム変換装置がスタンドアロンである場合について説明したが、プログラム変換装置は、スタンドアロンの装置であってもよく、サーバ・クライアントシステムにおけるサーバ装置であってもよい。後者の場合には、出力部や受付部は、通信回線を介して入力を受け付けたり、画面を出力したりすることになる。
また、上記各実施の形態において、各構成要素は専用のハードウェアにより構成されてもよく、あるいは、ソフトウェアにより実現可能な構成要素については、プログラムを実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の記録媒体に記録されたソフトウェア・プログラムをCPU等のプログラム実行部が読み出して実行することによって、各構成要素が実現され得る。
なお、上記各実施の形態におけるプログラム変換装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、命令パターン格納部と、第一ソースプログラムを受け付ける第一ソースプログラム受付部と、前記第一ソースプログラム受付部が受け付けた第一ソースプログラムと、第一ソースプログラムの命令パターンを示す情報である第一命令パターン情報と、第二ソースプログラムの命令パターンを示す情報である第二命令パターン情報の対が1以上格納され得る命令パターン格納部に格納されている第一命令パターン情報とを比較する比較部と、前記比較部が第一命令パターン情報と一致すると判断した、前記第一ソースプログラムの記述箇所を、当該第一命令パターン情報と対になる第二命令パターン情報に対応するよう変換する変換部と、前記第一ソースプログラムの、前記変換部が変換を行った記述箇所に対応する箇所に、変換を行った自装置に関するコメントを記述するコメント記述部と、前記コメント記述部が記述したコメントを含む、前記変換部が前記第一ソースプログラムを変換した結果である第二ソースプログラムを出力する出力部として機能させるためのプログラムである。
また、コンピュータを、第一ソースプログラムを受け付ける第一ソースプログラム受付部と、前記第一ソースプログラム受付部が受け付けた第一ソースプログラムと、第一ソースプログラムを第二ソースプログラムに変換するツールである変換ツールに対応付けられた情報であって、当該変換ツールが変換に利用する第一ソースプログラムの命令パターンを示す情報である第一命令パターン情報が1以上格納され得る第一命令パターン格納部に格納されている第一命令パターン情報とを比較する比較部と、第一命令パターン情報と一致すると前記比較部が判断した、前記第一ソースプログラムの記述箇所に対応する箇所に、前記変換ツールに関するコメントを記述するコメント記述部と、前記コメント記述部が記述したコメントを含む前記第一ソースプログラムを出力する第一ソース出力部として機能させるためのプログラムである。
なお、上記プログラムにおいて、上記プログラムが実現する機能には、ハードウェアでしか実現できない機能は含まれない。例えば、情報を取得する取得部や、情報を出力する出力部などにおけるモデムやインターフェースカードなどのハードウェアでしか実現できない機能は、上記プログラムが実現する機能には含まれない。
また、このプログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
図17は、上記プログラムを実行して、上記実施の形態によるプログラム変換装置を実現するコンピュータの外観の一例を示す模式図である。上記実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムによって実現されうる。
図17において、コンピュータシステム900は、CD−ROM(Compact Disk Read Only Memory)ドライブ905、FD(Floppy(登録商標) Disk)ドライブ906を含むコンピュータ901と、キーボード902と、マウス903と、モニタ904とを備える。
図18は、コンピュータシステム900の内部構成を示す図である。図18において、コンピュータ901は、CD−ROMドライブ905、FDドライブ906に加えて、MPU(Micro Processing Unit)911と、ブートアッププログラム等のプログラムを記憶するためのROM912と、MPU911に接続され、アプリケーションプログラムの命令を一時的に記憶すると共に、一時記憶空間を提供するRAM(Random Access Memory)913と、アプリケーションプログラム、システムプログラム、及びデータを記憶するハードディスク914と、MPU911、ROM912等を相互に接続するバス915とを備える。なお、コンピュータ901は、LANへの接続を提供する図示しないネットワークカードを含んでいてもよい。
コンピュータシステム900に、上記実施の形態によるプログラム変換装置の機能を実行させるプログラムは、CD−ROM921、またはFD922に記憶されて、CD−ROMドライブ905、またはFDドライブ906に挿入され、ハードディスク914に転送されてもよい。これに代えて、そのプログラムは、図示しないネットワークを介してコンピュータ901に送信され、ハードディスク914に記憶されてもよい。プログラムは実行の際にRAM913にロードされる。なお、プログラムは、CD−ROM921やFD922、またはネットワークから直接、ロードされてもよい。
プログラムは、コンピュータ901に、上記実施の形態によるプログラム変換装置の機能を実行させるオペレーティングシステム(OS)、またはサードパーティプログラム等を必ずしも含んでいなくてもよい。プログラムは、制御された態様で適切な機能(モジュール)を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいてもよい。コンピュータシステム900がどのように動作するのかについては周知であり、詳細な説明は省略する。
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。