4

gccでacプログラムの抽象構文ツリーを取得するにはどうすればよいですか?
OpenMP プラグマを入力 C プログラムに自動的に挿入しようとしています。
ネストされたforループを分析して依存関係を見つけ、適切な OpenMP プラグマを挿入できるようにする必要があります。
つまり、基本的に私がやりたいことは、入力された C プログラムの抽象構文ツリーをトラバースして分析することです。
どうすればこれを達成できますか?

4

2 に答える 2

1

「依存関係」を見つけるには完全なデータフローが必要です。次に、実際に OpenMP 呼び出しを挿入する必要があります。

あなたが望むのは、プログラム変換システムです。GCC にはおそらく依存関係情報がありますが、カスタム プロジェクトでの作業が難しいことはよく知られています。他の人は、Clang と Rose について言及しています。Clang は適切な選択かもしれませんが、カスタム分析/変換はその主な目的ではありません。Rose はカスタム ツールをサポートするように設計されていますが、IMHO は、変換をサポートするように設計されていない EDG フロント エンドを使用するため、実際に使用するにはかなり複雑なスキームです。

[次のテキストはモデレーターによって削除されました。このタスクに有効な変換システムの 1 つであるため、元に戻しました。私が責任を負っているという事実は、OP に対する有用な回答としての価値を損なうものではありません。]

C フロント エンドを備えた DMS ソフトウェア リエンジニアリング ツールキットは、プログラム変換システムとして明示的に設計されています。これには、合理的な方法で AST に関連付けられた完全なデータ フロー分析 (ポイント ツー分析、コール グラフの構築、および範囲分析を含む) があります。これは、表面の構文形式で表現された AST への変更を可能にするソースからソースへの書き換え規則を提供します。一連の手続き型コードを検査するのではなく、変換を読み取ることができます。変更された AST を使用すると、DMS はコメントを含むソース コードをコンパイル可能な形式で再生成できます。

于 2013-02-28T17:02:39.613 に答える
0

正確にはASTではありませんが、GCCXMLがhttp://linux.die.net/man/1/gccxmlに役立つ可能性があります

編集:Ira Baxterが述べているように、gccxmlは関数/メソッド本体に関する情報を出力しません。これは、 http: //sourceforge.net/projects/gccxml-bodies/が不足している問題を修正しているように見えるフォークです。

于 2013-02-28T11:03:32.903 に答える