gpt4 book ai didi

c++ - 如何清除包含 C 函数声明的字符串中的注释和中间空格?

转载 作者:太空宇宙 更新时间:2023-11-04 16:30:06 25 4
gpt4 key购买 nike

在我用 C++ 编写的程序中,我需要获取一组字符串,每个字符串都包含一个 C 函数的声明,并对它们执行一些操作。

其中一个操作是比较一个函数是否等于另一个函数。为此,我计划删除对函数语义没有影响的注释和中间空格,然后进行字符串比较。但是,我想在字符串中保留空格,因为删除它会改变函数产生的输出。

我可以编写一些代码来遍历字符串字符并在遇到引号 (") 时进入“字符串模式”并识别转义引号,但我想知道是否有更好的方法这样做。一个想法是使用成熟的 C 解析器,在函数字符串上运行它,忽略所有注释和过多的空格,然后再次将 AST 转换回字符串。但是环顾一些 C 解析器,我得到了感觉大多数人都无法与我的源代码集成(如果我是,请证明我错了)。也许我可以尝试使用 yacc 或其他东西并使用现有的 C 语法并自己实现解析器。 .

那么,关于执行此操作的最佳方法有什么想法吗?

编辑:

我正在编写的程序采用抽象模型并将其转换为 C 代码。该模型由一个图组成,其中节点可能包含也可能不包含 C 代码段(更准确地说,C 函数定义,其执行必须完全确定(即没有全局状态)并且不允许内存操作)。该程序在图上进行模式匹配,并合并和拆分遵守这些模式的某些节点。然而,这些操作只有在节点表现出相同的功能时才能执行(即如果它们的 C 函数定义相同)。这种“检查它们是否相同”将通过简单地比较包含 C 函数声明的字符串来完成。如果它们逐个字符相同,则它们相等。

由于模型生成方式的性质,这是一种非常合理的比较方法,前提是删除注释和多余的空格,因为这是唯一可能不同的因素。这就是我面临的问题 - 如何以最少的实现工作量做到这一点?

最佳答案

比较一个函数是否等于另一个函数是什么意思?具有适当精确的含义,已知该问题是不可判定的!

你没有说出你的程序真正在做什么。正确解析所有真实的 C 程序并非易事(因为 C 语言的语法和语义并不那么简单!)。

您是否考虑过使用现有的工具或库来帮助您? LLVM Clang是一种可能性,或者扩展GCC通过插件,或者使用 MELT 中编码的扩展更好.

但如果不了解您的真正目标,我们就无法为您提供更多帮助。解析 C 代码可能比您想象的要复杂。

关于c++ - 如何清除包含 C 函数声明的字符串中的注释和中间空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8026402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com