【发布时间】:2011-06-20 08:43:51
【问题描述】:
我们想要解析我们巨大的 C++ 源代码树以获得足够的信息,以提供给另一个工具来制作类和对象关系图,识别事物的整体组织等。
到目前为止,我最好的尝试是一个 Python 脚本,它扫描所有 .cpp 和 .h 文件,运行正则表达式搜索以尝试检测类声明、方法等。我们不需要一个成熟的分析器来捕获每个细节,或者一些繁重的 UML 图生成器——有很多我们想忽略的细节,我们正在发明新类型的图。该脚本可以正常工作,但天哪,这是真的:C++ 很难解析!
所以我想知道有哪些工具可以从我们的资源中提取我们想要的信息?我不是语言专家,也不想要学习曲线陡峭的东西。我们低俗的蓝领程序员咕噜可以使用的东西:P
这里首选 Python 作为标准语言之一,但这不是必需的。
【问题讨论】:
-
C++ 是出了名的难解析,你通常需要一些重量级的工具来完成它(例如 GLR 解析器)。如果有一个很好的 C++ 解析近似值而不使用一些非常强大的解析器,我会感到非常惊讶。
-
您是否考虑过使用 GCC-XML (gccxml.org) 然后使用 python 来处理生成的 XML 文件?
-
我听说世界上不超过三个完整的C++解析器——GCC的解析器,EDG的解析器,和也许微软的解析器(微软可能会也可能会不使用 EDG)。 LLVM 的人正在研究一个,但还没有完成,你可能从上面猜到涉及多少工作; SO上还有一个人(我忘了是谁)声称在他的公司有一个,但我无法评估这种说法。可悲的是,以上都不是 Python 中的。 EDG 的解析器旨在轻松吸引新消费者,但许可并不便宜。
-
+1 我喜欢 MS 的“也许”——但也许他们都应该是“也许”?
-
@DarenW:这在很大程度上取决于您当前的工具失败的程度以及原因。如果您确定了失败和原因,那么您可以了解需要什么级别的解析,例如:它是否已经与 CRTP 一起工作,是否由于没有建模命名空间查找规则而导致失败,您需要知道哪个
#if/#else跟踪分支以获得准确的结果...?
标签: c++ python parsing code-analysis