在C中为C构建静态分析器的资源是什么?

时间:2011-02-07 01:29:50

标签: c parsing static-analysis

我有一个学校项目,用C开发一个C的静态分析器。

我应该从哪里开始?有哪些资源可以帮助我?

我假设我需要解析C,那么什么是C的好解析器或构建C解析器的工具?

4 个答案:

答案 0 :(得分:2)

我首先将自己带到antlr,查看它的getting started guide,它有很多关于解析等的信息。我个人使用antlr,因为它可以选择{{3} }}。

要使用antlr,您需要code generation targets,选择这些并开始播放。

无论如何都喜欢它..

答案 1 :(得分:1)

可能你的最佳出发点是Clang(条件是它已经有一个静态分析器,所以除非你想为自己编写一个,你可能最好使用/增强现有的一个)。

答案 2 :(得分:1)

您确定要在C中编写分析器吗?

如果您使用的是现代语言(例如C#,Java,Python),那么我会第二次提出解析器的ANTLR建议。

如果在C中编写分析器是必需的,那么你就会遇到lex和yacc(flex和bison)或者手工制作的解析器。

看起来Uno接近您想要做的事情。它使用lex / yacc并包含语法文件。然而,分析部分是用C ++编写的。

也许您可以从SpinRoot列出的工具的方法和内容中获得更多想法。维基百科也有一些很好的信息。

答案 3 :(得分:1)

解析是静态分析器中最简单,最不重要的部分。已经提出过Antlr,它应该足以解析普通的C(但不是C ++)。只是一点提示 - 不要实现自己的预处理器,更好地重用gcc -E的输出。

至于其他方面,您可以查看一些现有的分析器来源,即Clang和CIL,阅读有关SSA表示和abstract interpretation的内容。为代码选择正确的中间表示是关键。

我怀疑它在普通C中是一个简单的任务,所以你可能最终会在它上面实现某种类型的DSL来处理AST和转换。听起来比典型的学校项目大得多。