2011-11-09 95 views
2

我正在做c程序的静态分析,并且我搜索antlr网站,似乎没有合适的语法文件可以为c程序生成ast。这意味着我必须做什么它从一开始就是我自己的。或者有更快的方法。我还需要一个可以遍历解析器创建的ast的树解析器。antlr为c生成ast并解析ast

+0

您希望静态分析仪能检测到什么样的条件? –

+0

@ ira,常见安全问题,例如缓冲区溢出。 – Fiary

回答

2

最难的部分是写文法。在重写规则中混合创建AST并不难,并且从发出AST的解析器语法创建树语法并不是也很难(与编写解析器语法相比)。

这里有一个之前常见& A中展示了如何创建一个适当的AST:How to output the AST built using ANTLR?

我找不到一个像样的SO-Q &一个解释如何去建立一个树文法,所以这里的链接到我的个人博客,解释了这一点:http://bkiers.blogspot.com/2011/03/6-creating-tree-grammar.html

祝你好运。

4

您表示您希望执行静态分析来检测缓冲区溢出。

首先,为C编写语法比看起来更难。标准中有所有这些东西,然后就是真正的编译器实际接受的东西。你必须决定如何处理预处理器(并且它从编译器到编译器不同!)。如果你没有完全正确地获得语法和预处理,你将无法解析真正的程序。 (如果你想玩玩具语言,那很好,但是你不需要C语法)。

要进行分析,您需要远远超过AST的以上的机器。您需要符号表,控制和数据流分析,可能包括局部和全局点分析,调用图提取以及一些类型的范围分析。

人们似乎并不明白这一点。

**获取解析器很长的路要走做任何事情与真正的语言有用**

我喊,因为我看到这个了,并且结束了,而过。

如果你想获得与特定的程序分析或改造任务,除非你想你开始你的任务之前老死的,你最好找有你最需要什么已经奠定了基础。语法错误的解析器生成器的基础不是基础。 (不要误会我的意思:ANTLR,YACC,JavaCC的无一不精解析器生成器,他们是伟大的建设分析器对新语言的他们是伟大的,当投资被提出实现真正的汉语语言解析器生产。但是,他们生产解析器,而且大多人都不做生产的一部分。而且他们不提供由一个长镜头额外的机械。)

我们DMS Software Reengineering Toolkit包含上述所有的机器,因为它几乎总是需要,这是一个令人头痛的执行。 (我的团队迄今为止投入了15年时间。)

我们还以各种方言示例说明机器是专门用于COBOL and Java, C, C++(在某种程度上,语言确实很难)的形式,以便其他人不必重复这个漫长的过程。

对于C和C++来说,GCC和Clang是非常成熟的选择。