我猜我错过了这个问题。因此,您只想找到指向 A、B、C 等类型的任何指针的所有实例,其中该指针通过比较在条件表达式中使用...
所以你知道所有的类型名称。这意味着有有限数量的类型和有限数量的比较,例如 == != <= >= < > 对吗?
因此,对于所有类型创建的指针的每个实例,构建一个表。这为您提供了您正在寻找的每个指针的编码名称。
弗雷德 *myfred, *yourfred, *thefred;
帐户 *primaryacct, *secondacct; ... 等等...
您的表将是:
myfred
yourfred
thefred
primaryacct
secondacct
现在对于每个实例的每个实例 - 从第一个 'myfred' 开始找到 myfred 然后是 == 然后是 != 等等(吸收任何空格),当你找到第一个(comaprison 的左侧,例如
第二个帐户<=
然后获取右侧)并将其与您构建的表中的每个指针编码名称进行比较。当你有一个像 myfred!=primaryacct 这样的比赛时,你可以随心所欲。假设为了参数,您想对给定的比较或比较列表执行全局搜索和替换,您可以通过打开一个附加文件进行输出来随时执行此操作,并在您阅读并找到每个发生时,您可以将其输出到新的源代码文件中。
基本上只要找到每一个比较,看看它的每一面,看看两边是否有一个在你的表中的编码名称。本质上,您只是在比较字符串的有限组合的任一侧使用相同的标识符表解析代码 - 它们也是: [ == != <= >= < > ]
我不知道有什么软件工具可以做到这一点,但你可以很快地编写代码。当然,它只能达到这一目的,但它可以快速完成工作。
我当然假设您的源代码是文本形式的,并且您可以打开文件并读入以执行此操作。如果是这样,那么你可以得到你喜欢的结果,例如每个文件的列表和为每个表达的比较找到出现的行。
在读入时抓取一整行代码 -
在 C 中 - 只需使用 fgets
在 C++ 中 - 使用 getline
然后只需使用上述逻辑解析您读入的缓冲区。
-------------- 已编辑 --------------- 关于以下评论
@YusufRamazanKaragöz - 橡树 - 我为过度概括而道歉。您是否有机会提供包含其中一些问题的代码示例 - 例如,如果它涵盖多行怎么办?我的思考过程基于您所写的“必须在我们的源代码中找到所有比较,如 if (pa == pa2) 或 if (pa != pb)”,仅此而已,所以我没有扩展到函数返回,等至于构建表格 - 你知道类型正确吗?因此,对于声明了这些类型的变量的每一行都是您构建它的方式。例如,如果我想要一个包含程序所有文件的每一行代码中每个 char 定义变量的表 - 我会在所有行中搜索单词 char。然后在那行之后我会寻找逗号分隔的字符串,直到没有逗号或分号(可以继续到下一行,所以使用 fgetc 代替 fgets)。其中一些声明是直接的,一些可能是 *char,一些 char[] - 等等。然后我会有一个 char 类型的每个变量的列表。我的意思是,如果当您搜索您正在谈论的类型名称时,您看不到它所在的行以及在它之后声明的所有内容吗?如果可以,那么您可以构建索引表。或者有什么原因我不明白为什么不能这样做?查找强制转换的值会完全创建另一组解析规则,并进一步使任务复杂化,就像模板与对象的比较一样。直到现在,我才真正从最初的问题中理解您的困境。我真的很想帮忙,但也许涵盖每个解析范式的代码块可以帮助我确定是否可以。实际上,如果你能给我一个关于你为什么要这样做的想法,那会让我有一个更好的思考过程。你想全局改变一些东西吗?如果您认为努力是徒劳的,我当然会听从您的决定并停止尝试。感谢您的耐心等待,但我希望您能找到解决方案。