1

如果有人了解 Vera++ 或静态分析器,请通过。

如何将复杂的 C++ 规则验证机实现为静态分析器?我想实现复杂的规则,如基类中的虚函数,识别用户定义的变量,如类、结构等。变量范围如全局、本地、静态等。我非常了解 Vera++,根据我的理解,它只做令牌解析,语言的上下文需要通过脚本实现(如果语言像C++,实现的上下文可能太复杂);因为区分 a *b; (可能是类类型 a 的指针 b)或 a *b;(可能只是两个变量之间的乘法);

我什至觉得复杂规则的实现可能需要一些像状态机这样的编译器,这样脚本才能理解语言的上下文。

我的问题只是问:

  1. 我对静态分析器规则实施的理解是否正确。

  2. 你能否请指导我如何才能完成这项任务。

  3. 这些任务可以通过 tcl 的 REGEXP 来简化吗?

  4. 您是否可以建议任何特定的设计方法来实现 Solid C++ 代码分析器的良好实施。

4

1 回答 1

3

我建议改用成熟的 c++ 解析器。

Clang是一套完全理解 C++ 的库,因为可用于分析的库正是编译器使用的库(谈论狗食)。您可以访问几个“层”:抽象语法树、控制流图。并且已经有一个静态分析器框架,您可以为其实施通行证。

最后,也许是最有趣的事情,您可以从 C++ 或 C 进行交互,甚至在 C 接口之上还有 Python 绑定(尽管很不完整)。

老实说,鉴于 C++ 语法的复杂性令人敬畏,如今,受虐狂会使用任何没有真正语义解析器的东西。

其他解析器(由Ira Baxter提供)包括:

  • 艾尔莎(开源)
  • DMS(商业)
  • EDG(用于实现编译器的商业、C++ 前端)
于 2012-11-21T09:07:27.680 回答