2012-11-21 20 views
1

如果有人了解Vera ++或静态分析器,请仔细阅读。Vera ++ Rules Implementaion

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

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

我的问题就是要问:

  1. 处于静态分析规则执行方面我的理解是否正确。

  2. 你能否引导我一点点我该如何着手这项任务的成就。

  3. 这些任务可以通过tcl的REGEXP简化。

  4. 是否有任何具体的设计方法可以建议良好实施Solid C++代码分析器。

感谢

+1

也许这有助于:http://stackoverflow.com/questions/13139556/vera-tcl-rule-list-all-local-variables/13143067#13143067 –

+0

您可以在令牌级别(Vera提供)收集有关C++的一些启发式信息,但是任何类型的严重语义分析都需要真正的解析和符号表构造。否则,你会如何知道像“X * Y”这样简单的事情?手段?请参阅http://stackoverflow.com/questions/243383/why-cant-c-be-parsed-with-a-lr1-parser/1004737#1004737 –

回答

2

我建议使用一个成熟的C++解析器来代替。

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

最后,也许是最有趣的事情,你可以从C++或C进行交互,甚至在C接口上还有Python绑定(尽管显然不完整)。老实说,考虑到C++语法复杂的上帝的复杂性,现在需要一个受虐狂使用任何短的真正的语义解析器。

其它解析器(的Ira Baxter提供)包括:

  • Elsa(开源)
  • DMS(商业)
  • EDG(商用,C++前端用于实现编译器)
+0

同意。还有Elsa(开源),DMS和EDG(商业)。 –

+0

@IraBaxter:啊,谢谢!我记不起你的名字,但我知道你会有其他选择。我会编辑它们。 –

相关问题