プログラム変換とは、コンピュータプログラムを受け取り、別のプログラムを生成するあらゆる操作のことである。多くの場合、変換されたプログラムは、特定の形式意味論に関して、元のプログラムと意味的に同等であることが求められるが、変換によって生成されるプログラムが、予測可能な方法で元のプログラムと意味的に異なる場合も少ない。[ 1 ]
変換は手動でも実行できますが、必要な変換の仕様を適用するプログラム変換システムを使用する方が実用的であることが多いです。プログラム変換は、プログラムテキストを表すコンパイラデータ構造(抽象構文木など)を変更する自動化された手順として指定することも、パラメータ化されたソースコード断片を表すパターンやテンプレートを使用してより便利に指定することもできます。[ 2 ]
ソースコード変換システムの実際的な要件は、プログラミング言語で書かれたプログラムを効果的に処理できることです。通常、これには、ソースコードの解析、コード構造の内部プログラム表現の構築、プログラムシンボルの意味、有用な静的解析、変換されたプログラム表現からの有効なソースコードの再生成など、対象となるプログラミング言語の完全なフロントエンドの統合が必要です。従来の言語( Java、C++、PHPなど)の適切なフロントエンドを構築して統合する問題は、これらの言語の複雑さのために、プログラム変換システム自体を構築するのと同じくらい難しい場合があります。広く役立つためには、変換システムは多くのターゲットプログラミング言語を処理でき、そのような言語固有のフロントエンドを指定する手段を提供する必要があります。[ 3 ] Spoon [ 4 ]は、 Java専用のプログラム変換ライブラリの例であり、Javaの完全なフロントエンドを提供し、 Javaソースコードの解析と変換を実装するためのASTベースのAPIを公開することで、この課題に対処しています。
意味的等価性の一般化として、プログラムの洗練という概念があります。あるプログラムが別のプログラムの洗練であるとは、元のプログラムが終了するすべての初期状態で終了し、かつ、それぞれの初期状態において、元のプログラムの可能な最終状態で必ず終了する場合を指します。言い換えれば、プログラムの洗練は、元のプログラムよりも明確で決定論的です。2つのプログラムが互いに洗練である場合、それらのプログラムは等価です。
{{cite book}}: CS1メンテナンス: 場所の発行元が見つかりません (リンク)