JPH08272622A - プログラム変換装置 - Google Patents
プログラム変換装置Info
- Publication number
- JPH08272622A JPH08272622A JP7076662A JP7666295A JPH08272622A JP H08272622 A JPH08272622 A JP H08272622A JP 7076662 A JP7076662 A JP 7076662A JP 7666295 A JP7666295 A JP 7666295A JP H08272622 A JPH08272622 A JP H08272622A
- Authority
- JP
- Japan
- Prior art keywords
- syntax tree
- program
- syntax
- rule
- conversion
- 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.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【目的】 複雑な構造のプログラムを、煩雑な記述のル
ールを用いることなく別のプログラムに変換すること。 【構成】 変換対象の入力プログラムとその変換ルール
の構文を、構文木を構成するノードに型階層を用いた構
文解析を行い、入力プログラムの構文木および変換ルー
ルの構文木を作成する構文解析手段と、前記入力プログ
ラムの構文木を前記変換ルールの構文木で書き換える構
文木書き換え手段と、書き換えられた入力プログラムの
構文木を変換されたプログラムとして出力する出力手段
とを備える。
ールを用いることなく別のプログラムに変換すること。 【構成】 変換対象の入力プログラムとその変換ルール
の構文を、構文木を構成するノードに型階層を用いた構
文解析を行い、入力プログラムの構文木および変換ルー
ルの構文木を作成する構文解析手段と、前記入力プログ
ラムの構文木を前記変換ルールの構文木で書き換える構
文木書き換え手段と、書き換えられた入力プログラムの
構文木を変換されたプログラムとして出力する出力手段
とを備える。
Description
【0001】
【産業上の利用分野】本発明は、プログラム変換装置に
関し、特に複雑な構文を持った入力プログラムを構文解
析し、その結果を変換ルールに基づき別のプログラムへ
変換するプログラム変換装置に関するものである。
関し、特に複雑な構文を持った入力プログラムを構文解
析し、その結果を変換ルールに基づき別のプログラムへ
変換するプログラム変換装置に関するものである。
【0002】
【従来の技術】従来において、変換対象の入力プログラ
ムを別のプログラムへ変換する方法として、入力プログ
ラムを単なるテキストデータと見做し、文書編集ツール
をプログラムの書換えに援用する方法が知られている。
ムを別のプログラムへ変換する方法として、入力プログ
ラムを単なるテキストデータと見做し、文書編集ツール
をプログラムの書換えに援用する方法が知られている。
【0003】また、記号処理用言語Lispに対しては
プログラムの構造を考慮した書換えツールが言語仕様の
一部として用意され、新しい制御構造の導入の目的に標
準的に用いられているが、これはLisp言語の構文が
非常に簡単で、プログラムそのものがすでに構文木の形
をしているという事実に着目したものである。
プログラムの構造を考慮した書換えツールが言語仕様の
一部として用意され、新しい制御構造の導入の目的に標
準的に用いられているが、これはLisp言語の構文が
非常に簡単で、プログラムそのものがすでに構文木の形
をしているという事実に着目したものである。
【0004】一方、特開平5−181651号の「プロ
グラム自動生成装置」に開示されているように、設計知
識を変換対象部分と変換対象にならない部分に分離する
ことにより、変換途中の仕様を小さく保ち、検索時間を
削減する方法がある。
グラム自動生成装置」に開示されているように、設計知
識を変換対象部分と変換対象にならない部分に分離する
ことにより、変換途中の仕様を小さく保ち、検索時間を
削減する方法がある。
【0005】
【発明が解決しようとする課題】しかしながら、上記従
来技術にあっては、構文木の構造、特に複雑な構造の通
常のプログラムを変換対象として考慮していないため、
このようなプログラムを変換することは不可能である。
来技術にあっては、構文木の構造、特に複雑な構造の通
常のプログラムを変換対象として考慮していないため、
このようなプログラムを変換することは不可能である。
【0006】一方、ソフトウェア開発に実際用いられて
いるプログラミング言語の構文は複雑であり、正確な構
文解析を行おうとすると、解析ルーチンが大規模とな
り、解析結果である構文木も複雑なものとなってしま
う。
いるプログラミング言語の構文は複雑であり、正確な構
文解析を行おうとすると、解析ルーチンが大規模とな
り、解析結果である構文木も複雑なものとなってしま
う。
【0007】これは、プログラム変換装置を実現しよう
とするとき、構文解析部の実現が困難であることのみで
はなく、構文木書換え用の変換ルールを記述しようとす
る時に、ルールの記述が煩雑な形になってしまうことを
意味している。
とするとき、構文解析部の実現が困難であることのみで
はなく、構文木書換え用の変換ルールを記述しようとす
る時に、ルールの記述が煩雑な形になってしまうことを
意味している。
【0008】また、変換ツールを用いて新しい制御構造
を定義しようとする時、構文解析があまりにも厳密であ
ると、定義しようとしている新しい制御構造の解析が構
文エラーとなり、構文木の書換えの形では実現できなく
なるという問題がある。
を定義しようとする時、構文解析があまりにも厳密であ
ると、定義しようとしている新しい制御構造の解析が構
文エラーとなり、構文木の書換えの形では実現できなく
なるという問題がある。
【0009】本発明の目的は、複雑な構造のプログラム
を、煩雑な記述のルールを用いることなく別のプログラ
ムに変換することができるプログラム変換装置を提供す
ることにある。
を、煩雑な記述のルールを用いることなく別のプログラ
ムに変換することができるプログラム変換装置を提供す
ることにある。
【0010】
【課題を解決するための手段】上記目的を達成するた
め、本発明のプログラム変換装置は、変換対象の入力プ
ログラムとその変換ルールの構文を、構文木を構成する
ノードに型階層を用いた構文解析を行い、入力プログラ
ムの構文木および変換ルールの構文木を作成する構文解
析手段と、前記入力プログラムの構文木を前記変換ルー
ルの構文木で書き換える構文木書き換え手段と、書き換
えられた入力プログラムの構文木を変換されたプログラ
ムとして出力する出力手段とを備えることを特徴とす
る。
め、本発明のプログラム変換装置は、変換対象の入力プ
ログラムとその変換ルールの構文を、構文木を構成する
ノードに型階層を用いた構文解析を行い、入力プログラ
ムの構文木および変換ルールの構文木を作成する構文解
析手段と、前記入力プログラムの構文木を前記変換ルー
ルの構文木で書き換える構文木書き換え手段と、書き換
えられた入力プログラムの構文木を変換されたプログラ
ムとして出力する出力手段とを備えることを特徴とす
る。
【0011】そして、構文解析手段は、変換対象の入力
プログラムの構文に一致した変換ルールの構文木を出力
することを特徴とする。
プログラムの構文に一致した変換ルールの構文木を出力
することを特徴とする。
【0012】
【作用】上記手段によれば、入力された変換対象のプロ
グラムを変換ルールに従って構文解析し、変換対象のプ
ログラムの構文木を得る。
グラムを変換ルールに従って構文解析し、変換対象のプ
ログラムの構文木を得る。
【0013】同様に、変換ルール自体も構文解析し、変
換ルールの構文木を得る。
換ルールの構文木を得る。
【0014】次に、プログラムの構文木に構文木化され
た変換ルールを適用し、書換えられたプログラムの構文
木を得る。
た変換ルールを適用し、書換えられたプログラムの構文
木を得る。
【0015】最後に、書換えられた構文木を、変換され
たプログラムとして出力する。
たプログラムとして出力する。
【0016】ここで、構文解析手段は、構文木を構成す
るノードに型階層を用いた構文解析を行う。構文木のノ
ードに型階層を導入した場合、構文木において上位型の
ノードが出現可能である下位型のノードが出現すること
も許す。これにより、構文解析ルーチンは上位型のノー
ドのみが出現する簡約化された構文木を出力すればよい
ことになり、処理が楽になる。
るノードに型階層を用いた構文解析を行う。構文木のノ
ードに型階層を導入した場合、構文木において上位型の
ノードが出現可能である下位型のノードが出現すること
も許す。これにより、構文解析ルーチンは上位型のノー
ドのみが出現する簡約化された構文木を出力すればよい
ことになり、処理が楽になる。
【0017】さらに、構文木の変換ルールを型に応じて
記述するオブジェクト指向プログラミングが可能とな
り、変換ルールの記述と処理が簡単かつ明確となる。
記述するオブジェクト指向プログラミングが可能とな
り、変換ルールの記述と処理が簡単かつ明確となる。
【0018】構文木を簡約化したことから解析結果にあ
いまいさが生じる場合があるが、これはあいまいさを持
ち得るノード型に対して、あいまいさの解消ルールを与
えることで解決する。
いまいさが生じる場合があるが、これはあいまいさを持
ち得るノード型に対して、あいまいさの解消ルールを与
えることで解決する。
【0019】また、構文木の変換ルールとして、変換対
象となっているプログラミング言語と同じ構文を用い、
プログラム変換装置全体も対象プログラミング言語を用
いて作成すると、プログラム変換装置を自分自身に適用
することが可能となり、オペレーティングシステムが異
なる機種のプログラムへの移植、拡張を容易に行うこと
ができる。
象となっているプログラミング言語と同じ構文を用い、
プログラム変換装置全体も対象プログラミング言語を用
いて作成すると、プログラム変換装置を自分自身に適用
することが可能となり、オペレーティングシステムが異
なる機種のプログラムへの移植、拡張を容易に行うこと
ができる。
【0020】
【実施例】以下、図を用いて本発明の一実施例について
説明する。
説明する。
【0021】図1は、本発明の一実施例を示すブロック
構成図であり、変換対象の入力プログラム102とその
変換ルール103の構文を、構文木を構成するノードに
型階層を用いた構文解析を行い、入力プログラム102
の構文木104および変換ルール103の構文木(以
下、構文木書換えルールという)105を作成する構文
解析装置101と、入力プログラム102の構文木を書
換えルール105の構文木で書換える構文木書き換え装
置106と、書き換えられた入力プログラムの構文木1
07を変換されたプログラム109として出力する出力
装置108とを備えている。
構成図であり、変換対象の入力プログラム102とその
変換ルール103の構文を、構文木を構成するノードに
型階層を用いた構文解析を行い、入力プログラム102
の構文木104および変換ルール103の構文木(以
下、構文木書換えルールという)105を作成する構文
解析装置101と、入力プログラム102の構文木を書
換えルール105の構文木で書換える構文木書き換え装
置106と、書き換えられた入力プログラムの構文木1
07を変換されたプログラム109として出力する出力
装置108とを備えている。
【0022】構文木書き換え装置106は、入力プログ
ラムの構文木104と構文木書き換えルール105の構
文木を比較し、書き換えルール105の構文木の各ノー
ドに当てはまるノードが入力プログラムの構文木104
にあるか否かを調べ、当てはまるノードは書換えルール
105の構文木で書換える操作を行うものである。
ラムの構文木104と構文木書き換えルール105の構
文木を比較し、書き換えルール105の構文木の各ノー
ドに当てはまるノードが入力プログラムの構文木104
にあるか否かを調べ、当てはまるノードは書換えルール
105の構文木で書換える操作を行うものである。
【0023】本実施例では、変換対象とするプログラミ
ング言語としてC言語を選び、構文解析は、標準的なパ
ーザ生成装置(Lex,Yacc)等の名称で知られて
いる構文解析装置を使用できるので、実現が容易であ
る。
ング言語としてC言語を選び、構文解析は、標準的なパ
ーザ生成装置(Lex,Yacc)等の名称で知られて
いる構文解析装置を使用できるので、実現が容易であ
る。
【0024】しかし、C言語の構文は、文脈自由文法で
は解析しきれないことが知られており、解析結果である
構文木104には誤りのある可能性がある。しかし、こ
の誤りの出現箇所は限られており、C言語の場合は複文
の最初の部分において宣言文と実行文を解析し間違える
場合だけである。
は解析しきれないことが知られており、解析結果である
構文木104には誤りのある可能性がある。しかし、こ
の誤りの出現箇所は限られており、C言語の場合は複文
の最初の部分において宣言文と実行文を解析し間違える
場合だけである。
【0025】そこで、複文を示す構文木ノードの型に訂
正ルールを与えることで、この誤りを訂正する。訂正ル
ールは、このシステムのユーザが記述する変換ルールの
先頭に自動的に付加される。
正ルールを与えることで、この誤りを訂正する。訂正ル
ールは、このシステムのユーザが記述する変換ルールの
先頭に自動的に付加される。
【0026】C言語に対する厳密な構文木を作成しよう
とすると、構文木のノードは100種類程度必要になる
が、型階層を導入することで10種類程度のノード型か
らなる構文木に簡約化できる。
とすると、構文木のノードは100種類程度必要になる
が、型階層を導入することで10種類程度のノード型か
らなる構文木に簡約化できる。
【0027】例えば、実行文は、通常の構文木では、ラ
ベル付き実行文、式、複文、条件文、繰り返し文、ジャ
ンプ文、代入式、論理式など30以上の種類が必要とな
るが、この実施例では図2に示すような型階層を用いて
おり、ノードの種類は実行文201、複文202、制御
文203、条件文204、繰返し分205の5種類で済
んでいる。
ベル付き実行文、式、複文、条件文、繰り返し文、ジャ
ンプ文、代入式、論理式など30以上の種類が必要とな
るが、この実施例では図2に示すような型階層を用いて
おり、ノードの種類は実行文201、複文202、制御
文203、条件文204、繰返し分205の5種類で済
んでいる。
【0028】このうち制御文203は条件文201、繰
り返し文205の上位型となるノード型として導入した
もので、元の構文木にはなかったノード型である。
り返し文205の上位型となるノード型として導入した
もので、元の構文木にはなかったノード型である。
【0029】通常の構文解析では、条件文、繰り返し文
の解析処理がキーワード(if,while,forな
ど)をチェックするので、新しい制御構造を定義すると
構文解析がエラーとなってしまう。
の解析処理がキーワード(if,while,forな
ど)をチェックするので、新しい制御構造を定義すると
構文解析がエラーとなってしまう。
【0030】これに対し、本実施例では、制御文203
という上位型で解析を止めているのでエラーとなること
はなく、新しい制御構造の定義が可能となる。
という上位型で解析を止めているのでエラーとなること
はなく、新しい制御構造の定義が可能となる。
【0031】図3に、構文木書換えのアルゴリズムを示
している。
している。
【0032】まず、構文解析装置101(Parse)
を呼び、変換対象のプログラム102(P)の構文木1
04(TP)を得る(ステップ301)。
を呼び、変換対象のプログラム102(P)の構文木1
04(TP)を得る(ステップ301)。
【0033】次に、構文木104(TP)から次に書き
換えるべき部分TP’を選択する(ステップ302)。
この選択は書換えの戦略に依存し、最内書換え、最外書
換えなど数種類の戦略が知られているが、採用する戦略
は大域変数「strategy」の値により切り換える
ことができる(デフォルトは最内書換えを採用してい
る)。
換えるべき部分TP’を選択する(ステップ302)。
この選択は書換えの戦略に依存し、最内書換え、最外書
換えなど数種類の戦略が知られているが、採用する戦略
は大域変数「strategy」の値により切り換える
ことができる(デフォルトは最内書換えを採用してい
る)。
【0034】書き換えるべき部分木がないときには、T
P’の値として「False」が返るので、終了してT
Pを書換え結果の構文木として返す(ステップ303,
311)。
P’の値として「False」が返るので、終了してT
Pを書換え結果の構文木として返す(ステップ303,
311)。
【0035】そうでないときは、TP’に適用できるル
ールの集合を「get_rule」により取り出す(ス
テップ304)。「get_rule」は与えられた構
文木のルートノードの型によって適用可能ルール集合を
取り出す関数である。このルール集合の要素であるルー
ルは、(A,B,C)の3組である。
ールの集合を「get_rule」により取り出す(ス
テップ304)。「get_rule」は与えられた構
文木のルートノードの型によって適用可能ルール集合を
取り出す関数である。このルール集合の要素であるルー
ルは、(A,B,C)の3組である。
【0036】ただし、Aは入力パターン指定、Bは中間
処理指定、Cは出力パターン指定である。
処理指定、Cは出力パターン指定である。
【0037】A,B,C共に、C言語の構文で記述する
が、構文中にパターン変数を用いることができ、このパ
ターン変数に関してマッチングとインスタンシエーショ
ンが行われる。
が、構文中にパターン変数を用いることができ、このパ
ターン変数に関してマッチングとインスタンシエーショ
ンが行われる。
【0038】Aの構文解析結果の構文木TAがTP’と
マッチし、かつ中間処理Bが成功するようなルール(の
うち最初のもの)に対してルールの適用が行われる。T
P’に対するルールの集合を取り出す(ステップ30
4)。もし、ルールの集合がNILならば(ステップ3
05)、ステップ302に戻る。ルールの集合があった
場合、その先頭のルールを取り出し、TAとTP’のマ
ッチングからパターン変数の変数束縛「bind」を作
成する(ステップ306)。
マッチし、かつ中間処理Bが成功するようなルール(の
うち最初のもの)に対してルールの適用が行われる。T
P’に対するルールの集合を取り出す(ステップ30
4)。もし、ルールの集合がNILならば(ステップ3
05)、ステップ302に戻る。ルールの集合があった
場合、その先頭のルールを取り出し、TAとTP’のマ
ッチングからパターン変数の変数束縛「bind」を作
成する(ステップ306)。
【0039】「bind」が「false」であれば
(ステップ307)、このルールは適用可能でないので
ステップ305に戻る。
(ステップ307)、このルールは適用可能でないので
ステップ305に戻る。
【0040】「bind」が「false」でなかった
時は、この変数束縛のもとで、中間処理指定Bを中間処
理評価装置「Eval」により評価し、新しい変数束縛
「new_bind」を得る(ステップ308)。
時は、この変数束縛のもとで、中間処理指定Bを中間処
理評価装置「Eval」により評価し、新しい変数束縛
「new_bind」を得る(ステップ308)。
【0041】中間処理出失敗した場合は、「new_b
ind」が「false」となるので(ステップ30
9)、ステップ302に戻る。
ind」が「false」となるので(ステップ30
9)、ステップ302に戻る。
【0042】「new_bind」が「false」で
ない時は、「new_bind」により出力パターンC
の構文木TC内のパターン変数をインスタンシエイトし
たもものを構成し、TP内の部分木TP’をこれに置き
換える(ステップ310)。
ない時は、「new_bind」により出力パターンC
の構文木TC内のパターン変数をインスタンシエイトし
たもものを構成し、TP内の部分木TP’をこれに置き
換える(ステップ310)。
【0043】以上の処理を書換え可能な部分木TP’が
なくなるまで繰り返す。
なくなるまで繰り返す。
【0044】図4に、ルール記述の例を示す。パターン
変数は「?x」のように先頭に「?」を付けて表す。ま
た、変数のあとに「@」に続けてノード型を表す正規表
現を記述できる。
変数は「?x」のように先頭に「?」を付けて表す。ま
た、変数のあとに「@」に続けてノード型を表す正規表
現を記述できる。
【0045】例えば、「?x@stmt*」は「?x」
が「stmt型」(実行文を表すノード型)の項目の0
個以上の並びとマッチすることを表す。
が「stmt型」(実行文を表すノード型)の項目の0
個以上の並びとマッチすることを表す。
【0046】41は不定長の引数をとる関数を定義する
例である。
例である。
【0047】例えば、「foo(a,b)」という関数
呼び出しは、最初のルールに従い、「bar(a,
b)」に、「foo(a,b,c)」という関数呼び出
しは両方のルールが適用され、「bar(a,bar
(b,c))」に書換えられる。
呼び出しは、最初のルールに従い、「bar(a,
b)」に、「foo(a,b,c)」という関数呼び出
しは両方のルールが適用され、「bar(a,bar
(b,c))」に書換えられる。
【0048】42はカーニハン・リッチの(古い)仕様
のCの関数定義をANSIC対応の(新しい)仕様に基
づいた関数定義に書換える例である。
のCの関数定義をANSIC対応の(新しい)仕様に基
づいた関数定義に書換える例である。
【0049】41のルールを構文解析して構文木の書換
えルールと見做す仕方を図5および図6に示す。
えルールと見做す仕方を図5および図6に示す。
【0050】図5が最初のルール41、図6が2番目の
ルール42に対応する。
ルール42に対応する。
【0051】図7に入力「foo(a,b,c)」に対
するシステムの動作を示す。入力61は構文解析装置1
01により構文解析され、構文木63となる。システム
は指定された戦略に従い、この構文木あるいはその部分
木に適用可能なルールを捜す。
するシステムの動作を示す。入力61は構文解析装置1
01により構文解析され、構文木63となる。システム
は指定された戦略に従い、この構文木あるいはその部分
木に適用可能なルールを捜す。
【0052】この例では、図6の構文木521に「?x
=a」,「?y=b」,「?z=c」という変数束縛を
与えたものが構文木63と一致するから図6のルール5
20が適用され、構文木522にパターン変数に対する
上述の代入を行った構文木64に書き換えられる。
=a」,「?y=b」,「?z=c」という変数束縛を
与えたものが構文木63と一致するから図6のルール5
20が適用され、構文木522にパターン変数に対する
上述の代入を行った構文木64に書き換えられる。
【0053】同様にして部分木64の部分木65と部分
木511に「?x=b」,「?y=c」という変数束縛
を与えたものが一致するから図5のルール510が適用
されて、図8の構文木66に書き換えられる。
木511に「?x=b」,「?y=c」という変数束縛
を与えたものが一致するから図5のルール510が適用
されて、図8の構文木66に書き換えられる。
【0054】このようにして書き換えられた構文木は、
出力処理装置108によりプログラム109として出力
される。
出力処理装置108によりプログラム109として出力
される。
【0055】図4のルール42に対応する構文木の書換
えルールを示したのが図9である。
えルールを示したのが図9である。
【0056】ただし、簡単のためプロトタイプ宣言にあ
たる出力部は省略してある。
たる出力部は省略してある。
【0057】ルール42の入力パターン43および出力
パターン44はそれぞれ構文木71,73に解析され、
フィルタ部72による特定のノードに対する処理を伴う
構文木の書換えルールと見做される。
パターン44はそれぞれ構文木71,73に解析され、
フィルタ部72による特定のノードに対する処理を伴う
構文木の書換えルールと見做される。
【0058】このルール42の適用を示したのが図10
である。
である。
【0059】書き換えるべきプログラム81が与えられ
ると、プログラムの構文木が作成され、構文木71と比
較され、パターン変数とのマッチが行われ、「?fct
_type」には「int」82,「?fct_nam
e」には「foo」83,「?args」には「(x,
y,z)のリスト84,「?arg_decls」には
「int x,y;long y;」というリスト85,
「?fct_body」には関数定義本体86が対応づ
けられる。
ると、プログラムの構文木が作成され、構文木71と比
較され、パターン変数とのマッチが行われ、「?fct
_type」には「int」82,「?fct_nam
e」には「foo」83,「?args」には「(x,
y,z)のリスト84,「?arg_decls」には
「int x,y;long y;」というリスト85,
「?fct_body」には関数定義本体86が対応づ
けられる。
【0060】フィルタ部87により「?result_
decl」の計算が行われ、出力用構文木中72のパタ
ーン変数が対応する値88〜811に置き換えられ、変
換されたプログラム109が結果として得られる。
decl」の計算が行われ、出力用構文木中72のパタ
ーン変数が対応する値88〜811に置き換えられ、変
換されたプログラム109が結果として得られる。
【0061】このように本実施例によれば、構文木に型
階層を導入したことにより、プログラム変換ルールの記
述と変換処理を簡明にすることができる。
階層を導入したことにより、プログラム変換ルールの記
述と変換処理を簡明にすることができる。
【0062】また、構文を拡張して新しい制御構造を導
入する目的にも用いることができる。
入する目的にも用いることができる。
【0063】また、プログラムの移植、拡張に用いるこ
とができるが、変換ルールの記述も変換対象のプログラ
ムと同じ構文で記述しているので、変換ルールに対する
処理自体にプログラム変換を用いることができ、拡張性
の高い形のシステムが実現できる。
とができるが、変換ルールの記述も変換対象のプログラ
ムと同じ構文で記述しているので、変換ルールに対する
処理自体にプログラム変換を用いることができ、拡張性
の高い形のシステムが実現できる。
【0064】さらに、実施例で述べたC言語変換システ
ムの場合は、システムの実現もC言語により行われてい
るので、処理系自身に変換を適用してシステムを書き換
えることができ、特に移植性の高いシステムを構築する
ことができる。
ムの場合は、システムの実現もC言語により行われてい
るので、処理系自身に変換を適用してシステムを書き換
えることができ、特に移植性の高いシステムを構築する
ことができる。
【0065】
【発明の効果】以上説明したように、本発明によれば、
複雑な構造のプログラムを、煩雑な記述のルールを用い
ることなく別のプログラムに変換することができる。
複雑な構造のプログラムを、煩雑な記述のルールを用い
ることなく別のプログラムに変換することができる。
【0066】特に、構文木に型階層を導入したことによ
り、プログラム変換ルールの記述と変換処理を簡明にす
ることができる。
り、プログラム変換ルールの記述と変換処理を簡明にす
ることができる。
【0067】また、構文木の変換ルールとして、変換対
象となっているプログラミング言語と同じ構文を用い、
プログラム変換装置全体も対象プログラミング言語を用
いて作成すると、プログラム変換装置を自分自身に適用
することが可能となり、オペレーティングシステムが異
なる機種のプログラムへの移植、拡張を容易に行うこと
ができる。
象となっているプログラミング言語と同じ構文を用い、
プログラム変換装置全体も対象プログラミング言語を用
いて作成すると、プログラム変換装置を自分自身に適用
することが可能となり、オペレーティングシステムが異
なる機種のプログラムへの移植、拡張を容易に行うこと
ができる。
【図1】本発明の一実施例を示すブロック構成図であ
る。
る。
【図2】構文木のノードの型階層の例を示す説明図であ
る。
る。
【図3】構文木の書き換え手順を示す流れ図である。
【図4】C言語に対する変換ルールの記述例を示す説明
図である。
図である。
【図5】図4のルール41を構文解析して構文木の変換
とみる仕方を示す説明図である。
とみる仕方を示す説明図である。
【図6】図4の続きを示す説明図である。
【図7】ルール510の適用例を示す説明図である。
【図8】図7の続きを示す説明図である。
【図9】ルール42を構文解析して構文木の変換とみる
仕方を示す説明図である。
仕方を示す説明図である。
【図10】ルール42の適用例を示す説明図である。
101…構文解析装置、102…変換対象のプログラ
ム、103…変換ルール、104…構文木、105…構
文木書換えルール、106…構文木書き換え装置、10
7…書き換えられた構文木、108…出力処理装置、1
09…変換されたプログラム。
ム、103…変換ルール、104…構文木、105…構
文木書換えルール、106…構文木書き換え装置、10
7…書き換えられた構文木、108…出力処理装置、1
09…変換されたプログラム。
Claims (2)
- 【請求項1】 変換対象の入力プログラムとその変換ル
ールの構文を、構文木を構成するノードに型階層を用い
た構文解析を行い、入力プログラムの構文木および変換
ルールの構文木を作成する構文解析手段と、 前記入力プログラムの構文木を前記変換ルールの構文木
で書き換える構文木書き換え手段と、 書き換えられた入力プログラムの構文木を変換されたプ
ログラムとして出力する出力手段とを備えるプログラム
変換装置。 - 【請求項2】 前記構文解析手段は、変換対象の入力プ
ログラムの構文に一致した変換ルールの構文木を出力す
ることを特徴とする請求項1記載のプログラム変換装
置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP7076662A JPH08272622A (ja) | 1995-03-31 | 1995-03-31 | プログラム変換装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP7076662A JPH08272622A (ja) | 1995-03-31 | 1995-03-31 | プログラム変換装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH08272622A true JPH08272622A (ja) | 1996-10-18 |
Family
ID=13611630
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP7076662A Pending JPH08272622A (ja) | 1995-03-31 | 1995-03-31 | プログラム変換装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH08272622A (ja) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2008243019A (ja) * | 2007-03-28 | 2008-10-09 | Toshiba Corp | ソースコード変換装置及びソースコード変換方法 |
| WO2010047388A1 (ja) * | 2008-10-24 | 2010-04-29 | 独立行政法人情報通信研究機構 | 計算処理システム、プログラム作成方法、および、プログラム作成プログラム |
| JP2014211729A (ja) * | 2013-04-18 | 2014-11-13 | 株式会社日立製作所 | 計算機、プログラム及びデータ生成方法 |
-
1995
- 1995-03-31 JP JP7076662A patent/JPH08272622A/ja active Pending
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2008243019A (ja) * | 2007-03-28 | 2008-10-09 | Toshiba Corp | ソースコード変換装置及びソースコード変換方法 |
| WO2010047388A1 (ja) * | 2008-10-24 | 2010-04-29 | 独立行政法人情報通信研究機構 | 計算処理システム、プログラム作成方法、および、プログラム作成プログラム |
| US8984103B2 (en) | 2008-10-24 | 2015-03-17 | National Institute Of Information And Communications Technology (Niict) | Calculation processing system, program creation method, and program creation program |
| JP2014211729A (ja) * | 2013-04-18 | 2014-11-13 | 株式会社日立製作所 | 計算機、プログラム及びデータ生成方法 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Wile | Abstract syntax from concrete syntax | |
| US5671416A (en) | Apparatus and a method for searching and modifying source code of a computer program | |
| CA2078247C (en) | Source code analyzer | |
| CA2417752A1 (en) | Xml-robot | |
| US20040154009A1 (en) | Structuring program code | |
| EP0520708B1 (en) | Method and apparatus for converting high level form abstract syntaxes into an intermediate form | |
| Zhang et al. | Automated extraction of grammar optimization rule configurations for metamodel-grammar co-evolution | |
| US20030233640A1 (en) | Structuring program code | |
| EP0692115B1 (en) | System for conversion of loop functions to continuation-passing style | |
| JP2005234959A (ja) | テンプレート作成装置、プログラム、および方法 | |
| Koppel et al. | Automatically deriving control-flow graph generators from operational semantics | |
| JPH08272622A (ja) | プログラム変換装置 | |
| JP3418544B2 (ja) | プログラムのテストデータ自動生成装置 | |
| GB2420638A (en) | Method of substituting code fragments in Internal Representation | |
| CN115562649A (zh) | 一种计算机混合程序语言源代码辅助编写方法及系统 | |
| Zingaro | Modern extensible languages | |
| JP3584204B2 (ja) | 原始プログラム自動変換装置 | |
| Grov et al. | Hume box calculus: robust system development through software transformation | |
| Scheidgen | Integrating content assist into textual modelling editors | |
| JPH10154079A (ja) | プログラム変換装置および記憶媒体 | |
| JP2001005655A (ja) | アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法 | |
| US20240202522A1 (en) | Device and method for generating deep learning model graph and abstract syntax tree for integrated compiler | |
| JP3194372B2 (ja) | パーザ生成器プリプロセッサシステム、パーザ生成器用プリプロセス方法 | |
| JP2011113148A (ja) | マクロ展開方法およびプリプロセッサ | |
| JP2904112B2 (ja) | プログラム自動合成装置 |