![]() |
1
4
cppcheck 太棒了。 |
![]() |
2
1
谷歌有一个有趣的工具和它的风格指南。。。叫cpplint。这可能有助于生成更干净的代码。看一看。 http://code.google.com/p/google-styleguide/source/browse/trunk/cpplint/cpplint.py?r=15 |
![]() |
3
1
clang 可以做静态分析。 |
![]() |
4
0
关于寻找常数,我们 SD Source Code Search Engine (SCSE) 可以直接做。SCSE提供了GUI接口,用于跨大型混合编程语言文件的搜索,使用查询语言准确地理解每种语言的词汇句法。 一个典型的问题:
会发现 对于 近旁关键字 我 其名称必须以序列开头的标识符 指数 紧接着是 = 运算符后跟 N个 数值小于10的数字。因为SCSE理解语言结构,所以它不受空白或格式限制的影响。它还将匹配N的十六进制值;它理解文本的不同格式,并根据数字的实际值(而不是字符串)提供查询。 给定这样一个查询,GUI将在所有文件中找到所有匹配项,并显示一组点击;点击点击一个点击,就会得到高亮显示点击行的源代码。 要查找不为零的所有常量,请编写以下非常简单的查询:
你真正想要的是所有的常量,而不是在某种常量定义中定义的。所以您想从命中列表中删除任何常量定义 通过使用“query subtract”运算符完成:
这将查找非零常量,并删除也由const声明匹配的任何常量。 你的其他梦想需要一个更复杂的引擎。本质上,您要分析C++代码(三的规则)或扩展C++语言的一些新特性,然后使用标准C++能力实现这些特性。你可以用一个 program transformation system 它可以操纵C++。 我们的 DMS Software Reengineering Tookit 可以做到这一点。它有一个完整的 C++ front end 它将C++解析为内部编译器数据结构并建立完整的符号表(并且可以从内部结构中重新生成C++源代码)。使用前端和DMS内置的模式匹配功能,您可以实现三检规则。 对于语言扩展,可以通过修改语法来修改DMS C++前端,以包括您认为理想的额外结构。然后,您可以编写寻找此类构造的程序转换,并将它们转换为所需的代码。(这个想法被称为 intentional programming 作者查尔斯·西米尼(Charles Simyoni),她是微软的名人,但这只是程序转换的一个特例。) DMS已经被用于对真实的C++应用程序进行大规模的自动化转换。从技术角度看,它可以相当容易地完成您的任务。 然而,理解C++的定义以及如何组合在一起,以及DMS如何支持转换,需要相当大的编译器风格复杂度。你建议做的不是一个下午或一周的工作。这将需要在教育和努力方面进行重大投资。 但比仅仅从YACC开始做要少得多。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 5 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 5 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 5 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |