从C ++代码中提取算术运算信息[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从C ++代码中提取算术运算信息[关闭]相关的知识,希望对你有一定的参考价值。
我面临从C ++源代码中提取算术运算信息的问题。例如,我想解析一个C ++代码,这样我就可以找到所有进行算术运算的代码的行号,以及操作中涉及的变量或文字的名称以及相应的操作类型。我对内置类型感兴趣,例如int和double以及用户定义的类,其中算术运算符(如operator +,operator *)被重载。
知道如何实现这一目标吗?
编辑:我希望一些编译器可能会产生一些我可以用来实现这个目标的中间结果。我做了一些搜索,似乎libclang可以生成一些有用的中间结果,但我只想在花费太多时间进行挖掘之前得到一些建议。
答案
您可以使用clang-query来执行此操作。获得恰到好处的查询有点棘手,但llvm ast matcher docs非常有用,为每个匹配器提供示例。它还会打印匹配结果的行/列号。
示例代码:
struct complex { float r, i; };
int operator*(int a, complex b)
{
return 0;
}
int main()
{
int a = 0;
complex b;
return (a * a) + (a * b);
}
返回已重载的数学表达式的示例查询:
match cxxOperatorCallExpr(anyOf(hasOverloadedOperatorName(“ - ”),hasOverloadedOperatorName(“+”),hasOverloadedOperatorName(“*”),hasOverloadedOperatorName(“/”)))
输出:
return (a * a) + (a * b); ^~~~~
以上是关于从C ++代码中提取算术运算信息[关闭]的主要内容,如果未能解决你的问题,请参考以下文章