2011-11-09 34 views
2

私はCプログラムの静的解析を行っています。antlrのWebサイトを検索していますが、Cプログラムのastを生成する適切な文法ファイルがないようです。それは非常に最初からです。または、より速いメソッドがあります。また、パーサによって作成されたastをトラバースできるツリーパーサが必要です。antlrはCのastを生成し、astを解析します

+0

スタティックアナライザで検出する条件はどのようなものがありますか? –

+0

@ ira、バッファオーバーフローなどの一般的なセキュリティ上の問題。 – Fiary

答えて

2

最も難しいのは文法を書くことです。 ASTを作成するために書き換えルールを混ぜることはそれほど難しくはなく、ASTを出すパーサー文法からツリー文法を作成するのはであり、それもではありません(パーサ文法を書くことに比べて)。ここで

は、適切なASTを作成する方法を示し、前のQ & Aです:How to output the AST built using ANTLR?

そして私はまともなSO-Q & Aを見つけることができませんでしたツリー文法の作成に取り掛かるする方法を説明しますので、ここだという私の個人的なブログへのリンクはこれを説明する:http://bkiers.blogspot.com/2011/03/6-creating-tree-grammar.html

幸運。

4

バッファオーバーフローを検出する静的解析を行いたいと指示しました。

まず、Cの文法を書くことは、見た目よりも難しいです。標準にはすべてのものがあり、実際のコンパイラが実際に受け入れるものがあります。そして、プリプロセッサについて何をすべきかを決める必要があります(コンパイラごとに異なります)。文法と前処理がまったく正しくない場合、実際のプログラムを解析することはできません。 (おもちゃの言語をやりたいのであれば、それでいいですが、Cの文法は必要ありません)。

解析を行うには、から遠くにはが必要です。シンボルテーブル、制御およびデータフロー解析、ローカルおよびグローバルポイント - 分析、コールグラフ抽出、およびある種の範囲分析が必要です。

人々はこれを理解していないようです。

は**パーサを得ることがREAL言語と便利な何もしてからの長い方法です**

私はオーバーこれを見るために叫び、そしてオーバー、およびオーバーしています。

特定のプログラム分析または変換タスクを実行したい場合は、タスクを開始する前に老齢で死ぬことを望んでいない場合を除き、必要なものをほとんど持っている基盤を見つけることをお勧めします。奇妙な文法を持つパーサジェネレータの基礎は基礎ではありません。 (ANTLR、YACC、JavaCCはすべてパーサーであり、新しい言語のパーサーを構築するのに最適です。投資が行われたときに実際のランゲージ用のパーサーを実装するのに最適です。しかし、彼らはパーサを生産し、主に人々は、製造部品を行いません。そして、彼らはロングショットで追加の機械を提供していません。)

それはほとんど常に必要とされているので、私たちのDMS Software Reengineering Toolkitは、上記のすべての機械が含まれています、それは実装する王冠の頭痛です。

また、この機械は、COBOL and Java, C, C++(多少の程度は少ないが、言語は本当に難しい)、さまざまな方言で特に有用な形式であることを実証しました。この長いプロセスを繰り返す必要はありません。

GCCとClangは、CとC++の代替として非常に成熟しています。