JP2014203343A - プログラム解析装置及びプログラム解析方法 - Google Patents
プログラム解析装置及びプログラム解析方法 Download PDFInfo
- Publication number
- JP2014203343A JP2014203343A JP2013080472A JP2013080472A JP2014203343A JP 2014203343 A JP2014203343 A JP 2014203343A JP 2013080472 A JP2013080472 A JP 2013080472A JP 2013080472 A JP2013080472 A JP 2013080472A JP 2014203343 A JP2014203343 A JP 2014203343A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- word
- information
- input
- parameter
- 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.)
- Granted
Links
Landscapes
- Programmable Controllers (AREA)
Abstract
Description
ここで、本実施形態における用語の定義を行う。
本実施形態において、「命令語」とは、ラダー図をコンパイルした結果生成される中間語を構成するものであり、中間語における一つ一つの命令に関するものである。命令語には、入力命令に関する入力命令語や、演算に関する演算命令語や、出力に関する出力命令語等がある。
デバイス素子は、ラダー図を構成する部品であり、接点命令や、コイル命令や、演算命令や、分岐命令等がある。
また、本実施形態は、ラダー図から各命令語を生成・出力することで中間語を生成・出力するコンパイルと、中間語における命令語からデバイス素子を生成することで、ラダー図を復元する逆コンパイルとについて説明するものである。
図1は、本実施形態に係るプログラム解析装置の構成例を示す図である。
プログラム解析装置1は、PC等であり、メモリ10、CPU(Central Processing Unit)20、HD(Hard Disk)等の記憶装置(記憶部)30、キーボードや、マウス等の入力装置40、ディスプレイ等の出力装置50を有する。
記憶装置30に格納されているプログラムがメモリに展開され、展開されたプログラムがCPU20によって実行されることで、処理部100、コンパイル部110、解析部111、中間語生成部112、逆コンパイル部120、入出力解析部121、演算命令解析部122、変換部123が具現化している。
なお、処理部100は、コンパイル部110及び逆コンパイル部120を有している。
解析部111はラダー図のPI/O(Process Input/Output)文字列(後記)を分解し、命令情報テーブル35を生成する。
中間語生成部112は、解析部111が生成した命令情報テーブル35を基に、テンプレートテーブル31、パラメータテンプレートテーブル32等を参照して、中間語(後記)を生成する。
入出力解析部121は、中間語中の「MOV」命令から入出力パラメータの情報を抽出し、命令情報テーブル35に格納する。
演算命令解析部122は、中間語中の演算命令からテンプレートテーブル31におけるテンプレート番号(後記)を特定し、命令情報テーブル35に格納する。
変換部123は、入出力解析部121、演算命令解析部122によって生成された命令情報テーブル35を基にデバイス素子を生成することにより、ラダー図を復元する。
テンプレートテーブル31は、中間語における命令語列のパターンを格納しているものである。
パラメータテンプレートテーブル32は、入出力に関する命令語におけるパラメータの配置情報を格納しているものである。
デバイス−アドレス対応テーブル33は、ラダー図で用いられるデバイスと、アドレスの範囲とが対応付けられて格納されているものである。
演算命令管理テーブル34は、演算命令と、演算命令を識別する命令番号とが対応付けられて格納されているものである。
命令情報テーブル35は、ラダー図から中間語を生成するための情報、もしくは、中間語からラダー図を復元するための情報を格納しているものである。
なお、各テーブル31〜35は後記して詳細に説明する。
以下、図2及び図3を参照して、ラダー図のコンパイル処理の概要について説明する。
図2は、ラダー図と、そのラダー図に対応する中間語の例である。
図2(a)がラダー図201を示し、図2(b)が図2(a)を基に生成されるアセンブラ等の中間語202を示す。
図2(a)に示すように、ラダー図201の主要な構成部品としては接点命令211,212や、コイル命令213,214や、演算命令215,分岐命令216,217等がある。前記したように、接点命令211,212や、コイル命令213,214や、演算命令215,分岐命令216,217等の総称を(つまり、一つ一つを)「デバイス素子」と称する。また、ラダー言語では、符号211,216,215,217,213のような、1つの列回路単位で処理が行われる。このような列回路を「ラング」と称する。
コイル命令213が実行されたところで1つのラング231が終了し、制御装置は、その次のラング232に移って接点命令212から新たに命令が実行され、接点命令212、コイル命令214の順に命令が実行される。実際には、これらの命令は図2(b)の命令語226,227に変換され、実行される。
(1)ラングの最初は必ず接点命令である。そのため、コンパイル部110は、接点命令211,212がラングの最初に挿入されなければシンタックスエラーとする。
(2)分岐命令が挿入された場合には、分岐命令の直前の接点命令のON/OFF情報をスタックにコピーする。そのため、図2(a)の例で、コンパイル部110は分岐命令216,217の実行後、直前にある接点命令211,212のON/OFFの情報をスタックにコピーする。
図3(a)は演算命令301のデバイス素子を示す図である。演算命令301のPI/O文字列に示されているように、このデバイス素子は「ADD」による加算を行う命令である。演算命令301をアセンブラにすると、図3(b)に示すようなものとなる。このアセンブラによる処理を逐次的に記述すると以下のようになる。
(A1)プロセッサが、アドレス「D000」のPI/Oの値を読み出し、汎用レジスタ「AX」に格納する(MOV.L AX[D000]:符号302)。なお、「L」は、扱われている値がロングワードサイズであることを示している。以下、符号302のようにアセンブラ記述の1行を命令語と称する。
(A2)プロセッサが、定数値「H00001234」を読み出し、汎用レジスタ「BX」に格納する(MOV BX #H00001234:符号303)。
(A3)プロセッサが、「AX」に格納されている値と、「BX」に格納されている値を加算して、AXに格納する(ADD.L AX BX:符号304)。
(A4)プロセッサが、「AX」に格納されている値を、アドレス「D000」のPI/Oに書き出す(MOV.L [D000] AX:符号305)。
この接点命令311をアセンブラにすると、図3(d)に示すようなものとなる。このアセンブラによる処理を逐次的に記述すると以下のようになる。
(B1)プロセッサがアドレス「X000」のPI/Oの値を読み出し、汎用レジスタ「AX」に格納する(MOV AX [X000]:符号312)。
(B2)プロセッサが「AX」に格納されている値をスタックに追加する(PUSH AX:符号313)。
コイル命令321をアセンブラにすると、図3(f)に示すようなものとなる。このアセンブラによる処理を逐次的に記述すると以下のようになる。
(C1)プロセッサがスタックから値を汎用レジスタ「AX」に取り出す(POP AX:符号322)。
(C2)「AX」に格納されている値をアドレス「Z000」のPI/Oに書き出す(MOV [Z000] AX:符号323)。
図3(g)に示すように、プロセッサがアドレス「D000」から値を取り出し、それを汎用レジスタ「AX」に格納する(S11)。
次に、プロセッサが、定数値「H00001234」を汎用レジスタ「BX」に格納する(S12)。
そして、プロセッサが、汎用レジスタ「AX」に格納されている値と、汎用レジスタ「BX」に格納されている値を加算し(S13)、加算した結果を汎用レジスタ「AX」に格納する(S14)。
そして、プロセッサがアドレス「D000」に汎用レジスタ「AX」に格納されている値を書き込む(S15)。
(D1)PI/Oや定数値の汎用レジスタ(「AX」や「BX」等)への取り込み(入力)。
(D2)汎用レジスタに取り込まれた数値の演算命令実行。
(D3)演算命令結果のPI/Oへの書き込み(出力)。
同様に、符号304のステップは、前記した(D2)の汎用レジスタの値に対して演算命令を行う演算命令実行に分類される。
そして、符号305のステップは、前記した(D3)の演算命令結果をPI/Oに書き出す出力に分類される。
図3(c)の接点命令311でも同様に、図3(d)における符号313の「PUSH」は演算命令と出力とを兼ねている(D2とD3を兼ねている)とみなすことができる。また、、図3(e)のコイル命令321でも同様に、図3(f)における符号323の「POP」は入力と演算命令とを兼ねている(D1とD2を兼ねている)とみなすこともできる。
図3(a)に示す例では「ADD」という演算命令1ステップで演算命令を終了していたが、実際にはその限りではない。複雑な処理になった場合でも、演算命令をコンパイルして適切なオブジェクトに変換し、またそのオブジェクトを逆コンパイルして元の演算命令に戻すことができるようにする必要がある。
ここで、図4〜図6を参照して、本実施形態で使用する各種テーブルを説明する。
(デバイス−アドレス対応テーブル)
図4(a)は、本実施形態に係るデバイス−アドレス対応テーブルの例を示す図である。
デバイス−アドレス対応テーブル33では、PI/Oに使用されるデバイス指定文字と、そのデバイス指定文字に割り当てられているアドレスの範囲が対応付けられている。なお、デバイス−アドレス対応テーブル33は設定者によって予め設定されているテーブルである。
図4(b)は、本実施形態に係る演算命令管理テーブルの例を示す図である。
演算命令管理テーブル34では、演算命令名称と、その命令番号とが対応付けられている。ここで、図4(b)に示す「FUNC1」、「FUNC2」とは、前記した「ADD」等を代表するものである。また、命令番号とは、設定者によって各演算命令に対して一意に割り振られる番号である。
図5は、本実施形態に係るテンプレートテーブルの例を示す図である。
図5(a)は、テンプレートテーブル31の構成例を示す図であり、図5(b)は図5(a)に示すテンプレートテーブル31をアセンブラによる記述(中間語)に変換した例である。
テンプレートテーブル31は、設定者によって予め作成されているテーブルであり、図5(a)に示すように複数のテーブル(以降、個々のテーブルをテンプレートと称する)を有している。各テンプレートには、テンプレート番号、ステップ総数、第1ステップ〜第nステップ(図5の例では第3ステップまで)の情報が格納されている。そして、テンプレートテーブル31は、中間語を作成するための雛形となるテーブルである。
ステップとは、図5(b)に示されるように、中間語としてアセンブラを使用した場合における各命令語のことである。
従って、ステップ総数は、命令語の総数である。
「生成条件」は、該当するステップが生成される条件である。例えば、第1ステップのように「常に」が記載されている場合は、該当する命令語は常に生成される。また、第2ステップのように「パラメータ1がロングワード」が生成条件となっている場合、第1ステップで使用されている「パラメータ1」の「サイズ」がロングワードである場合に該当する命令語が生成される。
「オプション設定」は、後記するようにジャンプ命令等の特殊な命令の情報を格納する。
「オペコード」は「オペレーションコード」の略であり、ここではアセンブラにおける命令の種類である。
「サイズ」は、使用されるパラメータのサイズ(ロングワードサイズ)等である。
「汎用レジスタ」は、使用される汎用レジスタのPI/Oデバイスを示す。
例えば、第1ステップは、「オペコード」は「MOV」命令を使用し、「サイズ」は「パラメータ1」のサイズが設定されている。第1ステップの例では「サイズ」で「パラメータ1のサイズ」が設定されている。従って、「パラメータ1」のサイズに「L(ロングワードサイズ)」が設定されている場合、コンパイル部110は命令語の生成時に「MOV.L」の命令、すなわち「ロングワードサイズ」の「MOV」命令を生成する。
「分類」は、本命令の分類がパラメータ1をリードする分類(前記した(D1)の「入力」)であることを示している。例えば、「パラメータ1」をリードするように設定すると、「パラメータ1」のアドレスに対して命令を実行することが設定される。オプションの設定は「なし」であるので、オプションの設定は特に行わない。また、汎用レジスタは「EAX」を使用するように設定されている。
また、「生成条件」として、「パラメータ1」が「ロングワード(サイズ)」となっている。これは、「パラメータ1」がロングワードサイズではない場合、コンパイル部110は、第2ステップの命令を生成しないことを意味している。
「分類」は、本命令の分類が演算命令を実行する分類((D2)演算命令実行)であることを示している。「オプション設定」には、「飽和あり」が設定されている。「飽和あり」とは以下のような意味である。いくつかの命令では、演算命令を実行した結果、オーバーフローが発生する場合があるが、そのオーバーフローが発生したときに数値をどのように扱うかを設定できる命令語も存在する。「飽和あり」は、オーバーフローしたときに、最大値に飽和をするように命令を生成することを意味している。
また、汎用レジスタは「EAX」を使用するように設定されている。
このような第2ステップの設定内容をアセンブラで記述すると、図5(b)に示される第2ステップ「FUNC.OL EAX」となる。
「生成条件」として第1ステップと同様に「常に」が設定されており、「オプション設定」も「なし」が設定されている。ただし、「分類」は「パラメータ2ライト」であり、パラメータ2で設定されたアドレスに対してライト((D3)出力)が行われることを意味している。
また、汎用レジスタは「EAX」を使用するように設定されている。
このような第3ステップの設定内容をアセンブラで記述すると、図5(b)に示される第3ステップ「MOV.S2 [パラメータ2] EAX」(S2はパラメータ2のサイズ)となる。
図6は、本実施形態に係るパラメータテンプレートテーブルの例を示す図である。
本実施形態では、中間語における各ステップの詳細な記述を行うテンプレートテーブル31とは別に、引数の設定方式を具体的に設定するパラメータテンプレートテーブル32を定義する。なお、引数とは、命令語における各値を示す。
パラメータテンプレートテーブル32は、「No.」と、「設定方式」と、「命令ステップ」とが対応付けられている。
そして、「命令ステップ」において、各「設定方式」における詳細なパラメータの形式が設定されている。
なお、なお、「“アドレス・定数”」において「[ ]」がついているものはアドレス参照を示し、「[ ]」がないものは定数値を参照している。
なお、パラメータテンプレートテーブル32における行を「命令テンプレート」と称することとする。
まず、図7〜図13を参照して、本実施形態に係るコンパイル処理について説明する。
(状態遷移図)
図7は、本実施形態に係るコンパイル処理についての状態遷移図である。
コンパイル部110が処理を開始すると、コンパイル部110の解析部111がラダー図における最初のラングを読み込み、最初のデバイス素子について、解析フェーズ処理に遷移する(S21)。解析フェーズ処理では、PI/O文字列の分解・解析が行われ、図11で後記する命令情報テーブル35が生成される。解析フェーズ処理の詳細については、図9〜図11を参照して後記する。
処理対象となっているデバイス素子について解析フェーズ処理が終了すると、コンパイル部110の中間語生成部112が中間語生成フェーズ処理に遷移する(S22)。中間語生成フェーズ処理では、解析フェーズ処理で生成された命令情報テーブル35と、テンプレートテーブル31、パラメータテンプレートテーブル32を基に、中間語が生成される。中間語生成フェーズ処理の詳細は、図12〜図13を参照して後記する。
次に実行されるデバイス素子がない場合(S24)、コンパイル部110はコンパイル処理を終了する。
図8におけるデバイス1061は「FUNC1」という演算命令を表している。そして、PI/O文字列1062は「FUNC1」の式を表す文字列である。
PI/O文字列1062において、「FUNC1」のあとに続く文字列は入出力のPI/Oを示し、「FUNC1」命令は1つめのパラメータに入力、2つめのパラメータに出力を要求するものとする。ここで、入力パラメータ「X000L」は、直接アドレスリードにより、デバイス「X」の「000番目」のアドレスの値をロングワードサイズ(「L」)で取得することを示している。
各パラメータが入力なのか出力なのかについては演算命令に依存する。上記のような設定が、ユーザによってアプリケーション画面から入力され、コンパイルが実行すると演算命令の文字列解析が行われる。その結果、スペースで区切っているテンプレートから、PI/O文字列1062は、「FUNC1」の演算命令(符号1001)、第1パラメータ「X000L」(符号1002)、第2パラメータ「Y001(D010W)L」(符号1003)とに分けることができる。「( )」で区切っているものは、間接アドレス方式であるので、第2パラメータは、「Y001L」(第1分解文字列1051)と「(D010W)」(第2分解文字列1052)とに分けることが可能である。「第1分解文字列」、「第2分解文字列」については後記して説明する。
また、演算命令の名称から、図4(b)における演算命令管理テーブル34を用いて演算命令「FUNC1」の命令番号「0001h」を取得することができる。
そして、解析部111は、デバイスのアドレス値といった入出力演算のパラメータに関する情報や、命令番号といった演算命令に関する情報を図11に示す命令情報テーブル34に格納する。
以下、このことを詳細に説明する。
図9及び図10は、本実施形態に係る解析フェーズ処理の詳細な手順を示すフローチャートである。適宜、図1、図4、図8、図11を参照する。
まず解析部111は、ラダー図に記載されているPI/O文字列を分解する。
まず、解析部111はiを「2」として初期化する(i=2;S101)。
次に、解析部111はPI/O文字列をスペースの部分で分解する文字列分解を行う(S102)。ここで、分解された結果、生じるそれぞれの文字列群を分解文字列と称することとする。この段階で、図8の符号1001,1002,1003のような分解文字列が生成される。
次に、解析部111は、最初の分解文字列(図8の例では分解文字列1001)をキーとして、図4(b)に示す演算命令管理テーブル34を検索し、命令番号を取得する。そして、解析部111は、取得した命令番号を命令情報テーブル35(図11)の「命令番号」欄に格納する(S103)。
ステップS104の結果、i番目の分解文字列が存在しない場合(S104→No)、解析部111は、「i−1」の数をパラメータ数として命令情報テーブル35の「パラメータ数」欄に格納した(S161)後、コンパイル部110は中間語生成フェーズ処理へ処理を進める。
そして、解析部111は、ステップS105で取得した分解文字列中に括弧があるか否かを判定する(S106)。
ステップ105の結果、図8の分解文字列1002のように分解文字列郡中に括弧でくくられた部分がない場合(S106→No)、解析部111は、処理対象となっている分解文字列の最初が文字であるか数字であるかを判定する(最初が文字or数字?;S107)。
ステップS108の結果、文字である場合(S107→文字)、解析部111は、方式情報として「直接アドレス方式」を命令情報テーブル35の「方式」欄に格納する(S108)。ここで、解析部111は、i=2のとき、「直接アドレスリード」を格納し、i=3のとき、「直接アドレスライト」を書き込む。なお、本実施形態では、パラメータテンプレートテーブル32の形式に従って、i=2のとき、「直接アドレスリード」を格納し、i=3のとき、「直接アドレスライト」としたが、パラメータテンプレートテーブル32で格納されている形式が異なれば、当然「直接アドレスリード」、「直接アドレスライト」の判別も変わってくる。
続いて、解析部111は、図8の符号1012のような分解文字列における最後の文字を取得し(S110)、そして、図8の符号1013のような残りの文字列(数字列)を取得する(S111)。
解析部111は、ステップS111で取得した最初の文字をキーとして、デバイス−アドレス対応テーブル33(図4(a))を参照し、該文字に対応するアドレス値を取得する(S112)。このとき、取得するアドレス値は、デバイス−アドレス対応テーブル33における先頭のアドレスである。例えば、ステップS109で取得した文字が「X」であれば、「C1000000h」が取得される。
さらに、解析部111はステップS110で取得した文字をサイズ値として、命令情報テーブル35の「パラメータi」における「サイズ」欄に格納する(S115)。
そして、本パラメータは、直接アドレス方式(「直接アドレスリード」又は「直接アドレスライト」)であるので、解析部111は、「オフセットアドレス」欄には「0」を、「オフセットサイズ」欄には「−」を格納する。
続いて、解析部111は、iに「1」を加算し(i=i+1;S116)、ステップS104へ処理を戻す。
そして、解析部111は最後の文字を取得し(S122)、そして、残った文字列(数字列)を取得する(S123)。
続いて、解析部111は、ステップS123で取得した数字列を定数値として、命令情報テーブル35の「パラメータi」における「アドレス・定数」欄に格納する(S124)。
次に、解析部111は、ステップS122で取得した文字をサイズ値として、命令情報テーブル35の「パラメータi」における「サイズ」欄に格納する(S125)。
続いて、解析部111は、iに「1」を加算し(i=i+1;S127)、ステップS104へ処理を戻す。
続いて、解析部111は、図8の符号1022のような第2分解文字列の最後の文字を取得し(S134)、そして、図8の符号1023のような残りの文字列(数字列)を取得する(S135)。
解析部111は、ステップS111で取得した最初の文字をキーとして、デバイス−アドレス対応テーブル33(図4(a))を参照し、該文字に対応するアドレス値を取得する(S136)。このとき、取得するアドレス値は、デバイス−アドレス対応テーブル33における先頭のアドレスである。例えば、ステップS133で取得した文字が図8の符号1021のように「Y」であれば、「C2000000h」が取得される。
次に、解析部111はステップS137で算出した結果であるアドレス値を、命令情報テーブル35の「パラメータi」における「アドレス・定数」欄に格納する(S138)。
さらに、解析部111はステップS134で取得した文字をサイズ値として、命令情報テーブル35の「パラメータi」における「サイズ」欄に格納する(S139)。
続いて、解析部111は、図8の符号1032のような第2分解文字列の最後の文字を取得し(S152)、そして、図8の符号1033のような残りの文字列(数字列)を取得する(S153)。
さらに、解析部111はステップS152で取得した文字をオフセットサイズ値として、命令情報テーブル35の「パラメータi」における「オフセットサイズ」欄に格納する(S157)。
続いて、解析部111は、iに「1」を加算し(i=i+1;S158)、ステップS104へ処理を戻す。
このような解析フェーズ処理が行われることによって、図11に示すような命令情報テーブル35が生成される。
図11は、本実施形態に係る命令情報テーブルの例を示す図である。
命令情報テーブル35は、「命令番号」、「パラメータ数」、「パラメータ1」、「パラメータ2」・・・の欄を有する。
「命令番号」欄には、図10のステップS103で取得・格納された命令番号が格納されている。
「パラメータ数」欄には、該命令情報テーブル35に格納されているパラメータの数が格納されている。「パラメータ数」欄に格納されている値は、図10のステップS161で格納された値である。
「方式」欄には、図11に示すように「直接アドレスリード」や、「間接アドレスライト」等、対象となっている演算命令の方式に関する情報が格納されている。
「サイズ」欄には、対象となっているパラメータのサイズが格納されている。
「オフセットアドレス」欄には、対象となっているパラメータがオフセットを使用している場合、オフセットアドレス値が格納されている。
「オフセットサイズ」欄には、対象となっているパラメータがオフセットを用いている場合、そのオフセットアドレス値のサイズが格納されている。
同様に、図11の例において「パラメータ2」の「方式」、「アドレス・定数」、「サイズ」の各欄に格納されている値は、図10、図10におけるステップS131〜S139の処理で格納されたものである。
そして、図11の例において「パラメータ2」の「オフセットアドレス」、「オフセットサイズ」の各欄に格納されている値は、図10、図10におけるステップS151〜S157の処理で格納されたものである。
図6のパラメータテンプレートテーブル32の各引数に図11の命令情報テーブル35の各情報を当てはめることで入出力命令に関する命令語(入力命令語、出力命令語)が生成される。また、命令情報テーブル35の「分類」欄が「演算命令実行」となっているステップの情報を参照して、演算命令に関する命令語(つまり、演算命令語)が生成される。
以下、このことを詳細に説明する。
図12は、本実施形態に係る中間語生成フェーズ処理の詳細な手順を示すフローチャートである。
まず、中間語生成部112は、命令情報テーブル35における命令番号を基に、テンプレートテーブル31(図5(a))におけるテンプレートを特定する(S201)。
次に、中間語生成部112は、k=1とし(S202)、さらに、特定されたテンプレートにおいて、k番目のステップがあるか否かを判定する(S203)。
ステップS203の結果、命令語が存在しない場合(S203→No)、中間語生成部112は中間語生成フェーズ処理を終了し、次のフェーズ処理へ遷移する。
そして、中間語生成部112は、テンプレートテーブル31の第kステップにおける「分類」欄を参照して、命令種別を判別する(S205)。図5(a)に示すように、命令種別には「パラメータ1リード」、「演算命令実行」、「パラメータ2ライト」等がある。
中間語生成部112は、第kステップの命令種別が「演算命令実行」であるか否かを判定する(S206)。
例えば、ステップS205で判別された命令種別が「パラメータ1リード」である場合、前記したように、中間語生成部112は、ステップS207で参照した、命令情報テーブル35における「パラメータ1」欄を参照する。そして、命令情報テーブル35における「パラメータ1」の「方式」欄に記述されている「直接アドレスリード」を取得する。そして、中間語生成部112は、パラメータテンプレートテーブル32の「直接アドレスリード」を参照し、その命令テンプレート(行)を取得する。
例えば、ステップS205で判別された命令種別が「パラメータ1リード」である場合、前記したように、ステップS208の段階で、パラメータテンプレートテーブル32の「直接アドレスリード」の命令テンプレートが取得されている。図6に示す「直接アドレスリード」において、各引数は、「サイズ」、「汎用レジスタ」、「アドレス・定数」である。そこで、中間語生成部112は、命令情報テーブル35の「パラメータ1」におけるサイズ「L」を取得する。また、中間語生成部112は、テンプレートテーブル31の第1ステップ(現在処理対象となっているステップ)の「汎用レジスタ」欄から汎用レジスタ「EAX」を取得する。そして、中間語生成部112は、命令情報テーブル35の「パラメータ1」における「アドレス・定数」欄から「C1000000h」を取得する。
例えば、図5(a)における第2ステップの例の場合、生成条件は「パラメータ1がロングワード」である。そこで、中間語生成部112は、命令情報テーブル35における「パラメータ1」の「サイズ」を参照する。すると、その「サイズ」は「L」、つまりロングワードであるので、前記した生成条件は満たされていることになる。
ステップS221の結果、生成条件を満たしている場合(S221→Yes)、中間語生成部112はテンプレートテーブル31の第kステップにおける情報を基に、演算命令語を生成する(S222)。
そして、その演算命令語を中間語に追加し(S223)、kに「1」を加算して(k=k+1;S224)、ステップS203へ処理を戻す。
図13において、符号1301の命令語は、図6の「直接アドレスリード」の命令テンプレートを基に図12のステップS207〜S210の処理で生成された命令語である。
また、符号1302の命令語は、図5(a)の第2ステップを基に、図12のステップS222、S223の処理で生成された命令語である。
そして、符号1303,1304の命令語は、図6の「間接アドレスライト」の命令テンプレートを基に図12のステップS207〜S210の処理で生成された命令語である。
次に、図14〜図21を参照して、生成された命令語を逆に変換していき、ラダー図に戻す逆コンパイルについて説明する。逆コンパイルでは、中間語から命令語が1つずつ取り出され、その命令語から命令情報テーブル35が生成される。そして、生成された命令情報テーブル35を基に、ラダー図が復元される。
本実施形態では、中間語の構成が前記した(D1)入力、(D2)演算命令、(D3)出力の各部から構成されることに注目し、入力解析、演算解析、出力解析の順で逆コンパイルを進めていく。
つまり、ラダー言語の演算命令やコイル命令命令では、パラメータのリード(入力)は命令語列の前半に集中する。また、演算命令等の実行部分の命令は命令語列の中盤に集中する。さらに、パラメータのライト(出力)は命令語列の後半に集中する傾向がある。これらの性質を利用して、解析を入力解析、演算解析、出力解析といったフェーズ処理毎に行う。このようにすることで、効率的な逆コンパイルが可能となる。
図14は、本実施形態に係る逆コンパイルの処理についての状態遷移図である。
まず、逆コンパイル部120が逆コンパイルを開始すると、逆コンパイル部120が、入力解析フェーズ処理へ遷移する(S31)。
入力解析フェーズ処理では、入出力解析部121が取得された命令語において、入力パラメータ(「MOV」命令)が存在するかをチェックする。存在する場合、入出力解析部121が、その入力パラメータに関する情報を命令情報テーブル35に格納する。入出力解析部121は、「MOV」命令が検出される検出される限り(「MOV」あり:S32)、入力解析フェーズ処理における処理を行い続ける。
なお、入力解析フェーズ処理の詳細な処理は後記して説明する。
なお、演算命令解析フェーズ処理の詳細な処理は後記して説明する。
なお、出力解析フェーズ処理の詳細な処理は後記して説明する。
入力解析フェーズ処理、演算命令解析フェーズ処理、出力解析フェーズ処理で、命令情報テーブル35が生成される。
終了コードでない場合(終了コードなし:S41)、逆コンパイル部120は入力解析フェーズ処理へ遷移する(S31)。
図15のような中間語が逆コンパイルの対象となっているものとする。この中間語は、命令語1801〜1804の4ステップからなるものとする。
まず、入出力解析部121が、入力命令の解析を行い、入力命令に関する情報を図11の命令情報テーブル35に格納する。
命令語1801は「MOV.L EAX [C1000000h]」という記述になっている。入出力解析部121は、「MOV」が存在しているため、入力命令か、出力命令のどちらかであると判別する。そして、命令語1801が、中間語の最初に位置していることから、入出力解析部121は、当該命令語1801が入力命令であると判定する。
入出力解析部121は、入力解析フェーズ処理S31において、各引数を抽出する。そして、入力解析部121は、抽出した引数を入力命令情報35に格納していく。
変換フェーズ処理では、入力解析フェーズ処理S31、演算命令解析フェーズ処理S34、出力解析フェーズ処理S37で生成された命令情報テーブル35を基に、デバイス素子が復元される。
以下、このことを詳細に説明する。
図16及び図17は、本実施形態に係る入出力解析フェーズ処理の詳細な処理手順を示すフローチャートである。ここで、入出力解析フェーズ処理とは、図14の入力解析フェーズ処理及び出力解析フェーズ処理のことである。
まず、入出力解析部121はi=0とする(S301)。ここで「i」はパラメータ番号のための変数である。
続いて、入出力解析部121は、中間語におけるh番目の命令語列のオペコードに「MOV」命令が含まれているか否かを判定する(MOV?;ステップS302)。ここで、hは中間語における命令語の列番号であ。一番最初の入力解析フェーズ処理において、命令語列が読み込まれたときにhに「1」が設定され、以降、入力解析フェーズ、演算命令解析フェーズ処理、出力解析フェーズで命令語が読み込まれる毎にhに「1」が加算されていく。
続いて、入出力解析部121は、処理対象となっている命令語から「アドレス・定数」部分を取得する(S304)。入出力解析部121は、命令語における各パラメータの書式を基に、アドレスもしくは定数を取得する。
また、命令語が「MOV.L EAX C1000000h」のように[ ]なしの場合、入出力解析部121は、「アドレス・定数」のタイプを「定数」と判別する。
そして、命令語が「MOV.L EAX [C1000000h + EBX]」のように「[ ]」があり、かつ、「[ ]」の中に「+」がある場合、入出力解析部121は、「アドレス・定数」のタイプを「オフセット付アドレス」と判別する。
そして、入出力解析部121は、ステップS303、S304で取得した定数値、サイズ値を命令情報テーブル35におけるパラメータiの「アドレス・定数」欄及び「サイズ」欄に格納する(S310)。
次に、入出力解析部121はhに「1」を加算し(h=h+1;S312)、バッファ情報を消去して、ステップS302へ処理を戻す。
続いて、入出力解析部121は命令情報テーブル35におけるパラメータiの「方式」欄に「直接アドレスリード」もしくは「直接アドレスライト」といった方式情報を格納する(S323)。例えば、現在のフェーズ処理が入力解析フェーズ処理であれば、入出力解析部121は「直接アドレスリード」を格納する。また、現在のフェーズ処理が出力解析フェーズ処理であれば、入出力解析部121は「直接アドレスライト」を格納する。
そして、入出力解析部121は、ステップS303、S304で取得したアドレス値、サイズ値をバッファ情報としてバッファに格納する(S325)。
次に、入出力解析部121は、ステップS303,S304で取得したアドレス値、サイズ値を、それぞれオフセットアドレス値、オフセットサイズ値として命令情報テーブル35の「オフセットアドレス」欄、「オフセットサイズ」欄に格納する(S332)。
続いて、入出力解析部121は、hに「1」を加算し(h=h+1;S334)、ステップS302へ処理を戻す。
図18は、本実施形態に係る演算命令解析フェーズ処理の詳細な処理手順を示すフローチャートである。適宜、図1、図5、図11を参照する。
まず、演算命令解析部122は、テンプレートテーブル31のテンプレート番号iを「0」に初期化し(i=0;S401)、kを「n」に初期化する(k=n;S402)。ここで、nは、中間語における命令語列において、「MOV」以外のオペコードが初めてでてくるステップ番号である(図15の例では「2」)。
次に、演算命令解析部122が、テンプレートテーブル31におけるi番目のテンプレートを検索し、i番目のテンプレートが存在するか否かを判定する(S403)。
ステップS403の結果、i番目のテンプレートが存在しない場合(S403→No)、逆コンパイル部120は出力解析フェーズ処理へ処理を進める。なお、このとき、該当する演算命令に対してエラーフラグを付してもよい。例えば、命令情報テーブル35に「エラー」欄を設け、ステップS403で「No」が判定されると、演算命令解析部122「エラー」欄にフラグをたててもよい。
続いて、演算命令解析部122は、i番目のテンプレートにおけるj番目のステップを取得する(S405)。
そして、演算命令解析部122は、テンプレートテーブル31(図5(a)を参照して、ステップS405で取得したj番目のステップの分類が「演算命令実行」であるか否かを判定する(S406)。
そして、演算命令解析部122は、ステップS407における比較結果を判定する(S408)。ここでの比較結果は、「一致」、「スキップ」、「不一致」の3つがある。
例えば、図5(a)にしめされるテンプレートの第2ステップの生成条件は「パラメータ1がロングワード」となっている。これは、「パラメータ1」がロングワード(「L」)でない場合(ワードや、バイトサイズである場合等)では、該当する演算命令を命令語として生成しないことを意味する。つまり、生成条件が満たされていない場合は、該当する演算命令は実行されないこととなり、かつ、この演算命令に該当する命令語が存在しない(スキップされている)ことはエラーではないことを意味する。
なお、生成条件が「常に」である場合、該当する演算命令は、コンパイル時において常に命令語として生成されることになる。
このように、ステップS408で「スキップ」と判定することは、該当する命令語がスキップされていることでエラーと認識されることを回避するための処理である。
ステップS421の結果、k番目の命令語が演算命令である場合(S421→Yes)、テンプレートでは演算命令ではないのに、命令語では演算命令となっていることから、演算命令解析部122は、処理対象のテンプレートは処理対象となっている中間語に一致しないものと判定する。なお、演算命令であるか否かは、例えば、命令が「MOV」以外であるか否か等によって判定される。
従って、演算命令解析部122はiに「1」を加算し(i=i+1;S422)、ステップS402へ処理を戻す。つまり、ステップS408で「不一致」と判定された場合と同じ処理を行う。このとき、図16、図17で使用されている現在処理されている命令語の列番号hは、入力解析フェーズ処理が終了した時点での値に戻される。
そして、演算命令解析部122は、処理対象となっているテンプレートの命令番号を命令情報テーブル35に格納し(S423)、演算命令解析部122は演算命令解析フェーズ処理を終了する。そして、逆コンパイル部120は出力解析フェーズ処理へ処理を進める。このとき、図16、図17で使用されている現在処理されている命令語の列番号hに「1」が加算される。
図19及び図20は、本実施形態に係る変換フェーズ処理の詳細な処理手順を示すフローチャートである。図19では、図16〜図18の処理で生成された図11のような命令情報テーブル35を基に、ラダー図におけるPI/O文字列や、シンボルを生成する。以下、図、図4、図11、図21を適宜参照する。
まず、変換部123は、i=1とする(S501)。
続いて、変換部123は、命令情報テーブル35(図11)を参照し、命令番号を取得する(図19のS502)。ここでは、「0001h」が取得される。
続いて、変換部123は、演算命令管理テーブル34(図4(b))を参照し、取得した命令番号に対応する命令語の文字列を取得する(S503)。ここでは「FUNC1」が取得される。
そして、変換部123は取得した文字列を文字列バッファの文字列に追加する(S504)。ここでは、文字列バッファとは、逆コンパイルで復元されるPI/O文字列のための領域である。ステップS504の処理によって、図21の符号2101の文字列が文字列バッファに追加される。
そして、変換部123は、処理対象となっている命令情報テーブル35(図11)におけるすべてのパラメータを文字列化済みであるか否かを判定する(S506)。
ステップS507の結果、方式が「定数代入」である場合(S507→定数代入方式)、変換部123は、命令情報テーブル35において、処理対象となっているパラメータの「アドレス・定数」欄に格納されている定数値を取得する(S508)。
ステップS509の後、変換部123はiに「1」を加算し(i=i+1;S551)、ステップS505へ処理を戻す。
そして、変換部123は、デバイス−アドレス対応テーブル33(図4(a))を参照して、ステップS521で取得したアドレス値に該当するデバイス指定文字を取得する(S522)。
そして、変換部123は、ステップS521で取得したアドレス値から、ステップS523で取得したデバイスの先頭アドレスを減算して、アドレス指定数字を生成する(S524)。
そして、変換部123は、ステップS522で取得したデバイス指定文字と、ステップS524で算出したアドレス指定数字を連結したアドレス文字列を文字列バッファに追加する(S525)。
ステップS527の結果、「直接アドレス方式」であった場合(S527→直接)、変換部123はステップS551へ処理を進める。
次に、変換部123は、デバイス−アドレス対応テーブル33(図4(a))を参照して、ステップS532で取得したオフセットアドレス値に該当するデバイス指定文字を取得する(S533)。
次に、変換部123は、ステップS533で取得したデバイスの先頭アドレス値を取得する(S534)。デバイスの先頭アドレス値は、デバイス−アドレス対応テーブル33において、該当するデバイスが割り当てられている範囲の先頭である(図4(a)の例におけるデバイス「D」の先頭アドレスは「41000000h」)。
そして、変換部123は、ステップS532で取得したオフセットアドレス値から、ステップS534で取得したデバイスの先頭アドレス値を減算して、アドレス指定数字を生成する(S535)。
そして、変換部123は、ステップS533で取得したデバイス指定文字と、ステップS535で算出したアドレス指定数字を連結したオフセットアドレス文字列を文字列バッファに追加する(S536)。
続いて、変換部123は、文字列バッファに「)」を追加し(S538:図21の符号2111)、ステップS551へ処理を進める。
条件付ジャンプを挿入した命令語に対する処理の例を図22に示す。デバイス素子2201は、条件成立時のみ実行する演算命令である。ここでは一例として、無条件で実行する演算命令とは異なるデバイス素子(シンボルの中心に横線がある)を使用して区別することにする。このようなデバイス素子が設定された場合、コンパイル部110の解析部111は、例えば、命令情報テーブル35に示すように「オプション設定」欄を設けて、ここに「条件成立時実行」を設定する。なお、命令情報テーブル35は、一部のみが示されている。このような欄を設けることで、条件付実行命令のような特殊な命令語に対するコンパイルが可能となる。
符号2211に示す「JZ」命令はその前に実行した命令が「0(偽)」ならば符号2212のステップへジャンプするが、「1(真)」であればジャンプしないという命令語である。つまり、条件が成立して「真」であるときのみ「JZ」命令2211の後の演算命令が実行され、「偽」であれば演算命令は実行されないことになる。このように命令語2211,2221を挿入することによって条件成立時実行が実現可能である。
逆コンパイル時には、入出力解析部121が、演算命令の先頭で「JZ命令」を検出した場合、条件成立時実行の命令であることがわかるので、命令情報テーブル35の「オプション設定」欄に「条件成立時実行」を格納する。このようにすることで、符号2201のようなラダー図を復元することが可能となる。
また、演算命令の形式情報を格納しているテンプレートテーブル31を有し、中間語におけるこのテンプレートテーブル31と一致するテンプレートの情報を命令情報テーブル35に格納することで、さらに効率的な逆コンパイルを行うことが可能である。
さらに、入力命令、出力命令に用いられているパラメータに関する情報を命令情報テーブル35に格納しておくことで、パラメータ管理を容易にすることができる。
そして、入力命令、出力命令の形式に関する情報をパラメータテンプレートテーブル32に格納しておき、このパラメータテンプレートテーブル32を用いたコンパイルを行うことで、多様な形式の命令語に対応したコンパイルを行うことができる。
また、各実施形態において、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には、ほとんどすべての構成が相互に接続されていると考えてよい。
10 メモリ
20 CPU
30 記憶装置(記憶部)
31 テンプレートテーブル
32 パラメータテンプレートテーブル
33 デバイス−アドレス対応テーブル
34 演算命令管理テーブル
35 命令情報テーブル
40 入力装置
50 出力装置
100 処理部
110 コンパイル部
111 解析部(文字列分解部、情報格納部)
112 中間語生成部
120 逆コンパイル部
121 入出力解析部(入力命令解析部、出力命令解析部)
122 演算命令解析部
123 変換部
Claims (12)
- ラダー言語に基づくデバイス素子を連結したラダー図をコンパイルした結果であり、入力命令語、演算命令語及び出力命令語を含む命令語の集合体である中間語を処理対象として前記入力命令語を検出し、前記入力命令語に関する情報を前記入力命令語から抽出して、当該抽出した入力命令語に関する情報を命令情報テーブルに格納する入力命令解析部と、
前記入力命令語解析部における処理の終了後、前記中間語において、前記入力命令語に続く前記命令語が前記演算命令語であるとみなし、前記演算命令語に関する情報を前記命令情報テーブルに格納する演算命令解析部と、
前記演算解析部における処理の終了後、前記中間語において、前記演算命令語に続く前記命令語が前記出力命令語であるとみなし、前記出力命令語に関する情報を前記出力命令語から抽出して、前記命令情報テーブルに格納する出力命令解析部と、
前記出力命令語解析部における処理の終了後、前記命令情報テーブルを基に、前記デバイス素子を生成する変換部と、
を有することを特徴とするプログラム解析装置。 - 前記演算命令語の形式に関する情報と、前記形式に関する形式識別情報とが対応付けられるテンプレートテーブルが格納される記憶部を、さらに有し、
前記演算命令解析部は、
前記テンプレートテーブルを参照して、処理対象となっている前記演算命令語の形式を判定し、当該形式に該当する形式識別情報を、前記演算命令語に関する情報として前記命令情報テーブルに格納する
ことを特徴とする請求項1に記載のプログラム解析装置。 - 前記入力命令語に関する情報及び前記出力命令語に関する情報は、当該命令語において使用されているパラメータに関する情報である
ことを特徴とする請求項1に記載のプログラム解析装置。 - 前記パラメータに関する情報は、前記パラメータの読込方式又は書込方式を含み、さらに前記パラメータが格納されるアドレス値、及び前記パラメータのサイズに関する情報が前記パラメータに関する情報に含まれる
ことを特徴とする請求項3に記載のプログラム解析装置。 - 入力命令語及び出力命令語の形式に関する情報であるパラメータテンプレートテーブルが格納されるとともに、前記演算命令語の形式に関する情報と、前記形式に関する形式識別情報とが対応付けられるテンプレートテーブルが格納される記憶部と、
ラダー言語におけるシンボルに付随する文字列を、所定の書式に従って分解する文字列分解部と、
前記文字列分解部によって分解された文字列を基に、前記文字列に関する情報を前記命令情報テーブルに格納する情報格納部と、
前記命令情報テーブルと、前記パラメータテンプレートテーブルと、前記テンプレートテーブルと、を基に、前記入力命令語と、前記演算命令語と、前記出力命令語による中間語を出力する中間語生成部と
をさらに有することを特徴とする請求項1に記載のプログラム解析装置。 - 前記命令情報テーブルには、条件付実行命令語に関する情報が格納され、
前記中間語生成部は、前記命令情報テーブルに前記条件付実行命令語に関する情報が格納される場合、当該条件付実行命令語に対応する命令語を前記中間語に付加する
ことを特徴とする請求項5に記載のプログラム解析装置。 - ラダー言語に基づくデバイス素子を連結したラダー図をコンパイルした結果であり、入力命令語、演算命令語及び出力命令語を含む命令語の集合体である中間語を処理対象として逆コンパイルを行うプログラム解析装置が、
前記中間語から前記入力命令語を検出し、前記入力命令語に関する情報を前記入力命令語から抽出し、
当該抽出した入力命令語に関する情報を命令情報テーブルに格納し、
すべての前記入力命令語に関する情報を命令情報テーブルに格納した後、前記中間語において、前記入力命令語に続く前記命令語が前記演算命令語であるとみなし、前記演算命令語に関する情報を前記命令情報テーブルに格納し、
すべての前記演算命令語に関する情報を前記命令情報テーブルに格納した後、前記中間語において、前記演算命令語に続く前記命令語が前記出力命令語であるとみなし、前記出力命令語に関する情報を前記出力命令語から抽出し、
当該抽出した出力命令語に関する情報を前記命令情報テーブルに格納し、
すべての前記出力命令語に関する情報を命令情報テーブルに格納した後、前記命令情報テーブルを基に、前記デバイス素子を生成する
ことを特徴とするプログラム解析方法。 - 前記プログラム解析装置は、
前記演算命令語の形式に関する情報と、前記形式に関する形式識別情報とが対応付けられるテンプレートテーブルが格納される記憶部を有し、
前記プログラム解析装置が、
前記テンプレートテーブルを参照して、処理対象となっている前記演算命令語の形式を判定し、当該形式に該当する形式識別情報を、前記演算命令語に関する情報として前記命令情報テーブルに格納する
ことを特徴とする請求項7に記載のプログラム解析方法。 - 前記入力命令語に関する情報及び前記出力命令語に関する情報は、当該命令語において使用されているパラメータに関する情報である
ことを特徴とする請求項7に記載のプログラム解析方法。 - 前記パラメータに関する情報は、前記パラメータの読込方式又は書込方式を含み、さらに前記パラメータが格納されるアドレス値、及び前記パラメータのサイズに関する情報が前記パラメータに関する情報に含まれる
ことを特徴とする請求項9に記載のプログラム解析方法。 - 前記プログラム解析装置は、
入力命令語及び出力命令語の形式に関する情報であるパラメータテンプレートテーブルが格納されるとともに、前記演算命令語の形式に関する情報と、前記形式に関する形式識別情報とが対応付けられるテンプレートテーブルが格納される記憶部を有し、
前記プログラム解析装置が、
ラダー言語におけるシンボルに付随する文字列を、所定の書式に従って分解し、
前記分解された文字列を基に、前記文字列に関する情報を前記命令情報テーブルに格納し、
前記命令情報テーブルと、前記パラメータテンプレートテーブルと、前記テンプレートテーブルと、を基に、前記入力命令語と、前記演算命令語と、出力命令語による中間語を出力することによる前記ラダー図のコンパイルを行う
ことを特徴とする請求項7に記載のプログラム解析方法。 - 前記命令情報テーブルには、条件付実行命令語に関する情報が格納され、
前記命令情報テーブルに前記条件付実行命令語に関する情報が格納される場合、前記プログラム解析装置が、当該条件付実行命令語に対応する命令語を前記中間語に付加する
ことを特徴とする請求項11に記載のプログラム解析方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013080472A JP6243619B2 (ja) | 2013-04-08 | 2013-04-08 | プログラム解析装置及びプログラム解析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013080472A JP6243619B2 (ja) | 2013-04-08 | 2013-04-08 | プログラム解析装置及びプログラム解析方法 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2014203343A true JP2014203343A (ja) | 2014-10-27 |
JP2014203343A5 JP2014203343A5 (ja) | 2016-04-28 |
JP6243619B2 JP6243619B2 (ja) | 2017-12-06 |
Family
ID=52353711
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013080472A Active JP6243619B2 (ja) | 2013-04-08 | 2013-04-08 | プログラム解析装置及びプログラム解析方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6243619B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7524978B2 (ja) | 2021-01-22 | 2024-07-30 | 日本電気株式会社 | プログラム解析支援装置、プログラム解析支援方法、及びプログラム |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010204998A (ja) * | 2009-03-04 | 2010-09-16 | Koyo Electronics Ind Co Ltd | 学習機能型プログラマブルコントローラ |
-
2013
- 2013-04-08 JP JP2013080472A patent/JP6243619B2/ja active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010204998A (ja) * | 2009-03-04 | 2010-09-16 | Koyo Electronics Ind Co Ltd | 学習機能型プログラマブルコントローラ |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7524978B2 (ja) | 2021-01-22 | 2024-07-30 | 日本電気株式会社 | プログラム解析支援装置、プログラム解析支援方法、及びプログラム |
Also Published As
Publication number | Publication date |
---|---|
JP6243619B2 (ja) | 2017-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI584198B (zh) | 使用階層式結構分析資料 | |
JP6479184B2 (ja) | コンピュータ実行可能なモデルリバースエンジニアリング方法及び装置 | |
JP5218063B2 (ja) | 命令オペコード生成システム | |
JP6243619B2 (ja) | プログラム解析装置及びプログラム解析方法 | |
JP2008276735A (ja) | プログラムコード変換装置及びプログラムコード変換方法 | |
JP2006301989A (ja) | 計算機言語によるプログラムをブロック図から自動生成する方法と装置とプログラム | |
WO2004036463A1 (ja) | コンパイラ及び論理回路の設計方法 | |
JP2007183897A (ja) | ハイレベルプログラミング言語を自動的eadに転換する方法 | |
US11635947B2 (en) | Instruction translation support method and information processing apparatus | |
JP6121126B2 (ja) | 帳票出力装置、帳票出力方法、および、プログラム | |
JP6175306B2 (ja) | 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体 | |
JP6489985B2 (ja) | プログラム開発支援装置およびプログラム開発支援ソフトウェア | |
WO2011024554A1 (ja) | アセンブル装置、構文解析方法、及びアセンブラプログラム | |
JPH11353164A (ja) | ソースプログラム生成システムおよびソースプログラム生成方法ならびにチャート生成システムおよびチャート生成方法 | |
JP2009251666A (ja) | 変更履歴作成装置、方法及びプログラム | |
JP2010282248A (ja) | プログラム言語解析実行プログラム | |
CN113609821B (zh) | 一种正则表达式转换方法、装置、设备及存储介质 | |
JP6062735B2 (ja) | ソフトウェア開発支援装置、ソフトウェア開発支援方法、ソフトウェア開発支援プログラム | |
JP7083473B2 (ja) | 入力支援装置 | |
WO2022201506A1 (ja) | プログラム作成支援システムおよびプログラム作成支援プログラム | |
JP2019135593A (ja) | 言語処理方法及び言語処理システム | |
CN110262802B (zh) | 一种取出机Sequence数据的新型执行方法 | |
JP6214455B2 (ja) | 命令テーブル生成装置、命令デコードプログラム生成装置、命令テーブル生成方法、命令デコードプログラム生成方法、およびプログラム | |
JP3031767B2 (ja) | 自然言語処理装置 | |
JP2004192609A (ja) | マイクロコントローラソフトip内蔵用romソフトipの生成方法及びこの方法を実行させるためのプログラムを記録した記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160309 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160309 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20160715 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20170328 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20170512 |
|
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: 20171024 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20171110 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6243619 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |