我需要检查函数是否使用了某些常量字符串,在我的示例中,我将其称为SpecialFunc
,但这变得非常复杂,超出了一般情况。你知道吗
假设我们有两个文件:
食物:
class Foo {
public:
void RandomFunc();
private:
static constexpr auto SomeConst {"Buzz"};
};
你知道吗Foo.cpp文件地址:
#include "Foo.h"
#include <string>
void Foo::RandomFunc() {
SpecialFunc("Fizz");
SpecialFunc(SomeConst);
const std::string otherConst = "Bar";
SpecialFunc(otherConst);
}
我希望得到Fizz
、Buzz
、Bar
作为我的输出。你知道吗
目前,我已经尝试在Python中使用正则表达式来实现这一点,以查找SpecialFunc
,但是当您必须开始搜索常量时,这个实现变得非常混乱,并且很难处理,并且在范围界定问题上变得更加混乱。叮当声是我下一个尝试解析一切的选项,但我不确定是否有更好的方法。你知道吗
最好的办法是什么?Python是目前我一直在尝试使用的语言,但我也愿意跳到另一种语言。你知道吗
好吧,既然你不想使用RegEx,你的问题就像你想在深层代码分析中做的那样,我现在建议你使用(部分)编译器来做词法分析。这种方法很费时费力。但是你可以分析几乎所有关于你的代码的东西。你会学到很多。你知道吗
基本的想法是编译器采用C/C++代码,首先把它引入一个叫做AST(抽象语法树)的图形。在该图中,您可以找到表示程序不同“部分”的所谓标记。你知道吗想法很简单:如果在lexer构建AST之前告诉编译器您不希望进行优化,那么您将找到字符串或包含字符串的变量。所以你必须采取AST,寻找所有相关的函数,然后检查参数是否是字符串或字符串的变量。你知道吗
几年前,我对python包“pycparser”做了类似的工作。你知道吗
不过,我必须警告你,这将是一个很大的工作。我强烈建议你首先问问自己为什么要这么做,并检查是否有可用的工具来做你想做的事情。你知道吗
相关问题 更多 >
编程相关推荐