我将 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 将这样的规范转换为处理输入过程的子例程;通常,由该子例程处理用户应用程序中的大部分控制流是方便和合适的。
关于c++ - 如何在代码中获取函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13119054/