【发布时间】:2016-02-03 22:30:38
【问题描述】:
我正在尝试制作一个可以检测对 C 源代码的更改影响的工具。 受影响的变量、函数或接口,我正在考虑使用基于不同形式影响的语言语法规则(分配、通过引用传递...)制作我自己的静态代码分析器。
经过一些谷歌搜索,我发现 Flex 和 Bison 可能是合适的,但是 GCC 已经停止使用这些工具并转而使用手写解析器大约十年的事实让我重新思考。 ANTLR4、Boost Spirit 或 Boost Axe 会是一个不错的选择吗?
【问题讨论】:
-
如果您想分析 C/C++,那么您最好的选择可能是使用现有的解析器,例如 clang 甚至 gcc。但我看不出“gcc 用手写解析器替换了工具 A,所以我将使用工具 B”背后的原因;如果工具 B 更合适,gcc 可能会切换到它而不是手写解析器,不是吗?底线是 c++ 很难解析。 c 不是很多,但仍然很棘手。如果您编写自己的语法,您可能会学到很多关于解析的知识,但它可能无法帮助您生成分析工具。
-
其实静态分析是比code-metrics更合适的标签,但是OP也应该回复rici的评论。
-
感谢您的 cmets,我忘了提到我想解析 C 源代码,没错,rici,但是手写解析器使用了很多可以有效改进句法错误诊断的 hack,我想要在验证生产规则时使用我自己的操作,这就是我可以使用解析器生成器做的事情。
-
你没有多大意义。如果您必须提出问题,那么您显然 不应该在这里编写 C 解析器。因为这个问题太广泛了,无法回答。最有价值的提示在第一个 cmets 中。
-
你不知道构建一个可以工作的 C 解析器需要做多少工作(是的,没有 C++ 解析器那么多,但仍然惊人地多;m 委员会和编译器的人搞得一团糟)。如果您真的想构建一个分析 C 程序的任何属性的工具,并希望在合理的时间内完成,请获得一个已经工作的 C 解析器,这样您就可以专注于您的分析。坦率地说,要进行分析器,您需要更多而不仅仅是解析器。请参阅我关于“解析后的生活”的文章semdesigns.com/Products/DMS/…
标签: parsing antlr4 static-analysis yacc lex