我正在开发一个程序,它会加载自己的 .cpp 文件并找到一些指定的关键字。问题是,如果字符串较长,我不知道如何识别字符串中的单词。 具体例子: 我们正在寻找一个 int,但是如果有这样写的函数怎么办:
int main(int argc, char* argv[])
?如果我将它作为字符串加载,它将是 s1 = "int"、s2 = "main(int"等等,但是当我比较 keywordInt = "int"和 s2 = "main(int"时,它们是不相等。我尝试了 string::find 函数,但是有人可以编写代码“int countSheep(int,int)”,但它再次只能找到一个 int。
你能帮帮我吗?
更新:嗯,我觉得很愚蠢,但是请...我有点找不到或无法理解任何这些词法分析器/解析器/语法高亮显示...我什至不知道要寻找什么。我试图找到一些有人做过的可以完成这项工作的类(class)——标记字符串并识别它是什么类型,但我仍然失败了。你能再给我一条线索吗?
最佳答案
解析(任何)编程语言语法与仅仅“匹配单词”有很大不同,但它是实际定位您在代码中寻找的信息所必需的,例如:
int internalClass::interestingFunc(int arg1,
internalClass::typeId intId, unsigned int b); // int fun arg, intId unused
在此规范中,语言 keyword int
出现了 3 次,子字符串 int
出现了 9 次,空格分隔的单词int
你会找到两次,空格/方括号/逗号分隔的单词 int
你会找到四次。
所有这些都必须加以区分,而这不会通过简单的字符串拆分来实现。需要理解 C/C++ 结构的源代码解析器。
以下 stackoverflow 条目提供了一些线索:https://stackoverflow.com/questions/2318347
关于c++ - 计算文件中的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4448450/