Cフロントエンドを備えたDMSソフトウェアリエンジニアリングツールキットが適切な場合があります。
DMSは、一般的な解析/ AST構築、シンボルテーブル構築、制御およびデータフロー分析機能、AST変更のための手続き型APIと表面構文書き換えルール、およびASTからコンパイル可能なテキスト再生(コメント再生を含む)を提供します。フロントエンドはDMSを特定の言語に特化しています(たとえば、C; DMSは他の多くの言語をサポートしています)。フロントエンドはBNFによって駆動されます。すべてがその上に構築されます(属性文法などを使用)。方言管理により、言語フロントエンドを特定の方言(Cの場合、現在GCC2 / 3/4、MS Visual C、ANSI C、GreenHills C、C99などが含まれます)に特化できます。
OPのタスクを実行するために、彼は自分のバージョンのCの方言を定義し、フロントエンドに付属のシンボルテーブル機構を変更してポインターの新しいプロパティをキャプチャし、タイプチェックを変更して新しいポインタータイプが誤用されていないことを確認しました。彼の定義による。型チェックの邪魔にならないように、彼はソースからソースへの変換を記述して、shared-ptrCをバニラCに変換し、実行可能なコードを取得することができました。
別の方法としてClangまたはGCCを使用することもできますが、どちらにも文法がないため、パーサーへの変更をコードとして実装する必要があると理解しています。どちらもソースからソースへの書き換えを提供していません。Clangはソースパッチを提供していると思いますが、パッチが適用された場所に一連の書き換えを適用できるかどうかはわかりません。GCC ASTを手続き的に変更できると思いますが、ソースコードを再生成することはできません。
これらのソリューションはすべて、前処理に問題があります。ClangとGCCはプリプロセッサディレクティブを拡張する必要があると思います。DMSは、非構造化ディレクティブを拡張する必要があります。