我有一个学校项目,用C开发一个C的静态分析器。
我应该从哪里开始?有哪些资源可以帮助我?
我假设我需要解析C,那么什么是C的好解析器或构建C解析器的工具?
答案 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和转换。听起来比典型的学校项目大得多。