24

Cソースコードにいくつかの変換を実行したいと思います。Linuxで、ソースコードから完全なASTを生成するツールが必要です。これにより、このASTに変換を適用して、Cソースコードに変換し直すことができます。ELSAを試しましたが、コンパイルされません。(私はUbuntu 8.4を使用しています)。誰かがより良いツール/アプリケーションを提案できますか?

4

11 に答える 11

19

clangをお勧めします。ほとんどの gcc 拡張機能を備えたかなり完全な C 実装があり、コードは非常に理解しやすいものです。彼らの C++ 実装は不完全ですが、C コードから AST を生成することのみを考えているのであれば、問題ありません。やりたいことに応じて、clang をライブラリとして使用して AST を直接操作するか、clang をコンソールにダンプさせることができます。

于 2008-10-30T07:23:55.950 に答える
14

C 用の純粋な Python AST ジェネレーターであるpycparserを参照してください。

于 2009-02-14T10:34:30.387 に答える
5

私が知っていて、役に立つと思われるプロジェクトが 2 つあります。

どちらも標準 C ソース コードを解析して、さらなる分析と変換を可能にします。私はそれらを使用していないので、自分のニーズに合っているかどうかを自分で確認する必要があります.

もちろん、GCC を使用するという提案も有効です。ただし、gcc のこの側面に関するドキュメントはあまりありません。

于 2008-10-27T14:15:48.677 に答える
4

AST XML 出力を取得するには、 MarpaX::Languages::C::ASTからcscanを使用してみてください。出力は次のようになります。

xml <cscan> <typedef_hash> <typedef id="GLenum" before="unsigned int" after="" file="/usr/include/GL/gl.h"/> ...

于 2015-01-07T16:31:24.263 に答える
2

www.antlr.org

于 2008-10-27T12:58:30.643 に答える
2

当社のDMS ソフトウェア リエンジニアリング ツールキットは、巨大な C システムで使用され、C コードの解析、分析、変換、および再生成を行ってきました。Windows 上で実行され、Wine の下の Linux でも実行されますが、Linux スタイル (GCC) の C コードを処理します。

C ソース コードを往復する機能、つまり、構文解析、ツリーの構築、変換、コンパイル可能な C コードの再生成を強調してもしきれません。コメントとプリティプリントまたは元のプログラマーのインデントを使用します。ここでの他の回答のほとんどは、それを確実に実行できるシステムを示唆しています。

DMS がプログラム変換を実行するように設計されているという事実 (ここでの回答で提案されている他のシステムとは対照的に) も大きな利点です。DMS は、ツリー パターンの一致と書き換えを提供します。これは、一致させたい条件を拡張するために使用される完全な制御とデータ フロー分析でこれを強化します。コンパイラであることを意図したツールはまさにそれであり、OPが要求したように、コンパイラではなく、代わりに変換エンジンであることを説得するのは非常に困難です。

DMS によって生成される AST の例については、 https: //stackoverflow.com/a/2173477/120163を参照してください。

于 2009-07-12T10:12:36.937 に答える
2

http://ctool.sourceforge.net/

于 2009-07-12T10:32:34.010 に答える
1

私は、ソースからソースへの変換に関して少量の作業を行ってきましたが、CILがこの作業に非常に強力であることがわかりました。CIL には、静的ソースの分析と変換専用に設計されたフレームワークであるという利点があります。また、醜い GCC 固有の拡張機能をいくらでも使用してコードを処理することもできます (一例として、Linux カーネルを処理するために使用されています)。これは、使用したことがない場合に問題になる可能性があります。

あるいは、clangは比較的簡単にハッキングできるコードベースを持っていると考えられており、C AST を生成するために確実に使用できます。

于 2009-07-12T11:20:09.373 に答える
0

「ELSA を試しましたが、コンパイルされません。(Ubuntu 8.4 を使用しています)」

scottmcpeak.com/elkhound/ の Elkhound と Elsa のソース コード、バージョン 2005.08.22b は古くなっています (古い C++ スタイルの .h ヘッダー ファイル)。

Elsa は動作しており、Oink の一部です: http://www.cubewano.org/oink/#Gettingthecode Ubuntu 9.10 で動作するようになりました。

于 2010-02-19T16:37:15.473 に答える
0

Linux で Lexx と Yacc を使用して、AST (Abstract Syntax Tree) の生成を試すことができます。

lex と yacc

lex と yacc から ast へ

于 2008-10-27T14:19:47.280 に答える
-1

gccを取得して、そのカスタムバックエンドを作成するのはどうですか?私はそれをやったことも、gccソースコードに取り組んだこともないので、それがどれほど難しいかはわかりません。

于 2008-10-27T12:54:51.820 に答える