あなたが興味を持っているのは、「ソースからソースへの」プログラム変換システムです。
パーサーは必要ですが、十分ではありません。(実際、使用している言語の方言用のパーサーが必要です...人々が非常に多くの「プログラミング」言語を使用していることを考えると、これは多くのパーサーが必要です)。また、解析結果を(通常はツリーとして)キャプチャし、そのツリーを何らかの方法で操作できるようにしてから、ツリーから有効なソースコードを再生成する必要があります。そのソースコードを手動でプログラムされたソースへの永続的な変更にしたい場合、パーサー/ツリー/アンパーサーの組み合わせは、コードのフォーマットとコメントを可能な限り維持する必要があります。
多くの場合、識別子の意味が明確でない限り、コードを実際に変換することはできません。したがって、実際には、シンボルテーブルを解析するだけでなく、構築する必要があります(この時点で、パーサーではなく、コンパイラのフロントエンドに相当するものがあります)。多くの変換では、情報フローの追跡が必要です(制御フロー、データフロー、ポイントツー、誰が呼び出すかなど)。これらの機能がなければ、これらのツールは、ソースコードの大部分を構成する手続き型/オブジェクト指向言語にはあまり効果的ではありません。(すべてが式であるため、関数型言語の人はより少ないフロー分析でうまくいくことができますが、書かれたほとんどのコードは機能的ではないので、これは実際的な意味では重要ではありません)。
多くのソースからソースへの変換システムがあり、いくつかの言語固有のものがあります(たとえば、JackPot forJava)。いくつかは言語定義(TXL、Stratego、DMS)によってパラメーター化されています。
言語固有のもののいくつかは、シンボルテーブルとフロー分析を提供します。多くのプログラミング言語にこれらの機能を提供する変換を1つだけ知っています。それが、DMS SoftwareReengineeringToolkitです。
DMSは、おもちゃではなく、多くの実際のプログラミング言語とその一般的な方言(C、Java、COBOL)にこれを提供します。
DMSは、C++用の数少ないソースからソースへのプログラム変換システムの1つです。これは、大規模なC++プログラムに変更を加えるために怒りで使用されてきました。 Clangはかなり近いと思いますが、確かに野心的です。Roseコンパイラは、主にスーパーコンピューティングサークルで使用される別のコンパイラですが、どちらもC ++(おそらくCがスローされている)固有のものです。