2011-01-04 15 views
8

C/C++インターフェイス(Cが望ましい)を使用するには、安定した、多分、使いやすいC++パーサーライブラリが必要です。
私はCintが良いC++インタプリタだと聞いています。この目的のためにそれを使用することはできますか?
提案がありますか?C++パーサーが必要です

+1

実際の質問は「あなたの目的は何ですか?」です。非常に簡単な作業では、cintが役立つかもしれません。洗練された分析のためには、完全なC++コンパイラフロントエンド(C++の名前解決は雌犬です)と同等のものが必要です。 *コードを変換*しようとすると、ソースを巡ることができるツールが必要になります。これらのツールはごくわずかです。 –

+0

@Ira: 'cint' *は完全なC++コンパイラです。ネイティブコード生成モードと解釈が可能です。それがArtemのニーズのためにうまく構成されているかどうか、私はあなたに伝えることができませんでした。 – dmckee

+0

@dmckee:それで、Cintはフルネーム/タイプの解像度を持つように思えますが、これはArtemにとっては十分かもしれないし、そうでないかもしれません。彼はまだ彼の本当の解決策が何であるかについて誰かが明確になる前に、彼の目的について明確にする必要があります。 –

答えて

10

参照:http://clang.llvm.org/ C++とCの両方のインターフェイス(libclang)があります。

+0

残念ながら、ASTへのプレーンなCアクセスはまだありません(それを実装する予定はありません)。 –

+0

私はASTをlibclangを通して歩くことが可能であるべきだと思います。例えば、 。 – kbjorklu

+0

ありがとう、私は今clangをテストするつもりです。それは解決策になるかもしれません... – Artem

1

私はcintについてはわかりませんが、人々はこれにgcc-xmlを使用していると聞いています。

私は良いスタンドアロンのライブラリも探していましたが、何も見つかりませんでした。

9

C++の解析は非常に難しいです。 AFAIKには、今日の標準で受け入れられるパーサーが3つしかありません:EDG(一般的なC++コンパイラのフロントエンドとして広く使用されています)、GCCとMicrosoftのものです。そして明らかに、MicrosoftはIntellisense用のVS2010でEDGのパーサを使用し始めました。

あなたが無料のオプションを見ているとき、あなたはかなりGCCに固執しています。 XMLを生成することができるので、簡単な部分がそこにあります。 (C++の解析標準によって簡単に)

+2

CLangはかなりの作業をしています。欠落している詳細がそれを考慮するにはあまりにも多すぎるかどうかは、読者のための練習として残されています:) –

+2

"Parses Boost"は私の個人的な基準です。私はClangがまだそこにいないことを理解しています。 – MSalters

+0

@MSalters、clangプロジェクトはBoostをコンパイルすることができると主張していますが、Qtを部分的にしかコンパイルできないので、そこには入っていますが、私はそれを使ってプロダクションコードをコンパイルしようとしません。 http://clang.llvm.org/cxx_status.html – Glen

2

Clangは最新の成熟したオプションであり、まともなC++ API(プレーンCはありません)を備えています。 Elsaは少し古いですが維持されていませんが、まだまだ使える選択肢です。どちらも、スタンドアロンのXMLフロントエンドだけでなく、ライブラリとしても使用できます。

+0

"Clangは現在、 'export'(C++ '0xドラフトから削除されている)を除いて、ISO C++ 1998標準(ISO C++ 2003標準で扱われている欠陥を含む)をすべて実装しており、プロダクション品質のC++コンパイラ"日付:2011-07-27 clang.llvm.org/cxx_status.html - Grzegorz Wierzowiecki –

1

is there a yacc-able C++ grammar?」の回答のリンクが役立つかもしれません。 Gcc-xmlとclangは既に提案されており、達成しようとしているものによっては適切であるかもしれないSwig also has an XML outputがあります。

+3

"勇気を感じる "という言葉は間違っています。あなたは完全なC + +パーサーのような仕事をするためにオリンピックを感じる必要があります。 –

2

あなたがCまたはC++のコードを解析したい場合は、いくつかのオプションがあります。 http://bellard.org/tcc/ http://students.ceid.upatras.gr/~sxanth/ncc/

あなたはパーサを作成する場合C/C++を使用して、あなたが試すことができます: http://boost-spirit.com/home/ http://dinosaur.compilertools.net/ LexとYaccの http://www.codeguru.com/csharp/.net/net_general/patterns/article.php/c12805 Flexとバイソンは

1

私はそれを試していないが、私は最良の選択は、モジュールを取得することになると思いますC++の場合はgccのような一般的なオープンソースコンパイラから解析します。

たぶん、あなたはここに何か面白いものを見つけることができますhttp://www.nobugs.org/developer/parsingcpp/

2

当社C++ Front Endは、C++の方言(ANSI、GCC、MSVS)の様々なを解析することができますが、自動的にそのノードの正確な源位置でマークされ、装飾されてのASTを構築します近くにあるコメントテキストを使用して、完全なシンボルテーブルを構築します。 (2013年1月EDIT:C++フロントエンドはC++ 11をかなり長い間処理できました)。

C++フロントエンドは、カスタムツール構築をサポートするように設計された、プログラム解析と変換のための一般化されたコンパイラ技術であるDMS Software Reengineering Toolkitの上に構築されています。 C++のフロントエンドにはプリプロセッサ命令が含まれています。このプリプロセッサ命令は、タスクに応じて、まとめて、または個別に展開することができます。それはまた、すべての厄介なKoenigルックアップのもので完全なシンボル構築を含んでいます。

DMSは明示的な言語定義を受け入れています(これはC++を理解する方法であり、C、C#、Java、COBOL、およびその他のさまざまな言語のfron終了もあります)。DMSは、一般的な構文解析、シンボルテーブル構築、フロー解析機械、ツリーナビゲーション/検査/修正のための手続き型API、ソースからソースへの変換、元のコメント、数の基数などを含むASTからソースへのテキスト再生成を提供する。これらの機能はC++フロントエンドで使用できます。

DMSもまた、深刻な作業に必要な規模に対応するように設計されています。多くの場合、1つのコンパイルユニット(これはGCCが最高のものを提供します)ではなく、セット全体にアクセスする必要があります。 DMSは何千ものC++コンパイル単位、言い換えれば何万というCコンパイル単位(2500万行アプリケーション)を分析/変換するために使用されています。

"使いやすいライブラリ"は、プログラム操作ツールの場合の擬似語です。 langauges自体は複雑です(C++はC++ 0Xで最も難しく、悪化しています)、質問できる質問の性質や答えがどのようなものかを複雑にします(例えば、 "クラスCのメソッドYのローカル変数Xを任意の名前空間N?で変更できます。質問自体は難しいです。

のライブラリが必要なのは、あなたの仕事を遂行するために必要なの複雑さです。 DMSは過去15年間、必要な複雑性を提供するために継続的に開発されてきました。あなたが深刻なプログラムの処理をしたいのであれば、私はあなたがその情報を必要とすると主張します。

DMSは、ボーイングのC++ベースのミッションアビオニクスソフトウェアの大規模な自動リエンジニアリングを実行するために使用されています。私はこれを行うことができる他のツールがあるとは思わない。 (Clangが試しているように見えますが、C++のためだけです。YMMV)。

+0

あなたの商品の価格は? – Artem

+0

これはエンタープライズ製品です。価格設定は、構成と計画された展開によって異なります。セールスチームに連絡してください。 –

関連する問題