c++ - 如何在代码中获取函数名称

标签 c++ parsing

我将 C++ 方法的主体作为字符串获取,并希望获取此代码中使用的所有方法的列表。 哪种工具最适合进行此类解析?

它必须支持所有情况:

opSomeMethod();
someObject.someMethod();
someObject->someMethod();

最好是使用 Java,但也可以是从控制台运行的小 C++ 程序。

最佳答案

您可以使用 LEX 和 YACC 工具来定义语法和解析字符串。 Lex 和 Yacc 可以读取源程序并发现其结构。

再次发现源结构的任务分解为子任务:

  • 将源文件拆分为标记 (Lex)。
  • 找到程序的层次结构 (Yacc)。

Lex 帮助编写程序,其控制流由输入流中的正则表达式实例引导。它非常适合编辑器脚本类型转换和分段输入以准备解析例程。 Lex 源代码是一个正则表达式表和相应的程序片段。该表被翻译成一个程序,该程序读取输入流,将其复制到输出流并将输入划分为与给定表达式匹配的字符串。当识别出每个这样的字符串时,就会执行相应的程序片段。表达式的识别由 Lex 生成的确定性有限自动机执行。用户编写的程序片段按照相应的正则表达式在输入流中出现的顺序执行。

See the online manual for LEX for more details .

Yacc 提供了一个通用工具来描述计算机程序的输入。 Yacc 用户指定其输入的结构,以及识别每个此类结构时要调用的代码。 Yacc 将这样的规范转换为处理输入过程的子例程;通常,由该子例程处理用户应用程序中的大部分控制流是方便和合适的。

See the online manual for YACC for more details .

关于c++ - 如何在代码中获取函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13119054/

相关文章:

c++ - 对列表中的每个对象调用成员函数,改变对象所在的列表

java - 如何从带括号的解析树中提取推导规则?

java - 解析文本文件中的输入

json - Scala:将 JSON 直接解析为案例类

c - 如何在最后一次出现的点(.) 和字符串末尾之间获取字符串,并将其与 C 中的另一个字符串连接?

C++在Windows中更改规范模式

javascript - 在 QML 中加入 2 个字符串

c++ - map 键没有可行的重载 '=' 错误

c++ - C++ 中的默认传递引用语义

C#:如何只返回字符串中的第一组大写字母单词?