2016-07-29 2 views
1

私はシンプルなCエディタを作成しています。セミコロンの欠落、存在しない関数/変数/メソッドの使用、ifの条件などを強調するコードを検証する必要があります。CDTクラスを使用してCコードを検証する

Cの解析と検証は非常に複雑な問題で、私はCDTを使用することに決めました。しかし、私はそうする方法を知らない。 メソッドorg.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage.getASTTranslationUnit(...)についての情報しか見つかりませんでしたが、基本的な構文エラーのみを検索できるため、これはあまり役に立ちません。 (私は正しいのですか?)

CコードやクラスIASTTranslationUnitのオブジェクトを取得する関数が必要です。すべての問題(エラーと警告)のリストを返さなければなりません。 CDT APIを使って、どうすればいいですか?

+0

パースエラーの場合にASTを取得するとは思わないので、この方法は動作しません。 – qrdl

+0

Cコードの検証は、1)すべての警告を有効にしてコンパイラを実行し、ソースコード上のvalgrindなどのツール – user3629249

+0

@ user3629249私はこれを最後の手段と考えます。しかし、私はポータブルなソリューションを探しています。コードが他の奇妙なマシン上のサーバーで実行されている可能性があります。たとえそうでなくても、すべてのユーザーにコンパイラーのインストールと構成を強制したくはありません。 –

答えて

1

多くのカテゴリのエラーは、ASTで見つかった名前(IASTName.resolveBinding())を解決し、結果のバインディングがIProblemBindingかどうかを調べることで確認できます。

CDTのProblemBindingCheckerがこれを実行して、エディタに多くのエラーが表示されるのを見てください。

これはすべてのエラーを捕まえることはできません。 CDTのother checkersを見れば、他のカテゴリのエラーを捕らえる方法について知ることができます(チェッカーの中には警告も出ます)。

しかし、すべてのCDTのチェッカーを組み合わせても、コンパイラが行うすべてのエラーと警告は診断されません。それが要件であれば、私はlibclangのような実際のコンパイラの内部を使うことを提案します。

関連する問題