c++ - 如何在运行时计算 C++ 表达式类型?

标签 c++ parsing types runtime expression

我需要编写一个 C++ 代码覆盖率程序,该程序接受另一个 C++ 程序(在文件中给出),并在其每个语句下面增强或添加对增加计数器的函数的调用。但是,我需要为每种类型的表达式使用不同的计数器(即我需要计算每种类型有多少个表达式)。为此,我需要计算每个 C++ 表达式的类型。 IMO 我需要使用解析器 API 来解析每一行以获取其类型。 您看到更好的解决方案吗? 不然哪里可以找到解析API?

谢谢

最佳答案

“解析器”API 不会为您提供类型信息。它最多只能让您访问 AST。

您需要一个完整的 C++ 前端,它可以解析 C++ 代码、进行名称和类型解析,并且可以按字面意思计算每个表达式的类型。最重要的是,您需要插入所需的工具,然后吐出可编译的源代码。

我们的DMS Software Reengineering Toolkit及其C++ Front End拥有执行此操作所需的所有功能。

DMS 已用于构建 C++(以及许多其他语言)的测试覆盖率和分析器工具;您甚至可以下载并尝试一下,看看它们是什么样的。您可以在 building test coverage tools with DMS 上找到这篇论文有趣的作为你想做的事情的基线。您的变体需要类型推断,但除此之外它并没有太大不同。

关于c++ - 如何在运行时计算 C++ 表达式类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11023187/

相关文章:

c - 在 C 中使用 malloc 时是否需要类型转换?

c++ - 如何为其他目录中的所有 C++ 文件生成标签文件?

parsing - 如何用 Rebol PARSE 方言表达分支?

c# - value is ushort 对于 0、100 等值返回 false,即使它是 ushort

Python:使用 mplayer 解析流标题

python - 解析字符串中整数和实数类型的数字

types - 在 Go 中调用嵌入式类型的重载方法的正确方法

c++ - 如何在 C++ 中循环读取 .txt 文件中的字符串

c++ - 将 boost 的缓冲流转换为 istream

c++ - 在 Ubuntu 上运行 Qt 创建的可执行文件时出错