【问题标题】:Parse C++ functions using C++?使用 C++ 解析 C++ 函数?
【发布时间】:2015-03-19 09:17:46
【问题描述】:

我听说有一些用 C++ 编写的类/库可用于解析 C/C++ 代码。我需要的是从源文件中读取所有函数并进行比较,以了解它们之间的区别。我真的不知道我怎么能做到这一点。我能用的只有头文件/库/类,没有软件解决方案。

【问题讨论】:

  • 不完全是,但是是的,非常接近。我需要编写自己的工具。我需要的是从 2 个源文件中获取函数名称并比较它们之间是否有变化。但我真的不知道如何正确地做到这一点。
  • 只是为了确定,您实际上是指在您自己的 C++ 代码中执行此操作,而不仅仅是一般意义上的? (因为那里有相当不错的差异工具......)
  • 不能只用grepdiff来解析比较吧?如果您只需要查看更改的位置,而不是对这些更改的解释,那么如果使用得当,这些实用程序应该可以完成这项工作。
  • clang 提供转储 AST 的功能:clang.llvm.org/docs/IntroductionToTheClangAST.html

标签: c++ parsing lexer


【解决方案1】:

【讨论】:

  • 看起来不错,但是否可以将 clang 作为头文件包含在我的项目中使用?我在 MSVS 2008 左右没有找到如何做到这一点。
  • @user3416803:不行。你还需要链接libclang。
  • @user3416803 问题仍然是,你想做什么,为什么,你真的需要这样做吗?你想通过区分 C++ 源代码来达到什么目的?
  • 我有两个版本的项目(新旧)的源文件。我需要 C++ 程序,它将比较文件、查找函数并打印修改了哪些函数以及修改了什么。我希望现在看起来更清楚了。
  • 这是一项相当复杂的任务。你可以开一家公司来开发这种软件并赚大钱。顺便说一句,python 绑定将是您开发的更好选择,并且应该使用 diffing library 结合源解析中的信息进行差异
【解决方案2】:

解析 C++ 语法并非易事。但是,不要重新发明轮子(解析 C++ 语法工具必须已经完成了对吗?)您可以将 lex 和 bison 与已经定义的 C++ 解析器一起使用,例如:http://www.computing.surrey.ac.uk/research/dsrg/fog/CxxGrammar.y 然后根据您的需要对其进行修改。我想您还需要 lex 和 bison 基础知识。从例如开始这: http://aquamentus.com/flex_bison.html

祝你好运!

【讨论】:

  • 考虑到当今 C++ 的复杂性,它不太可能取得成功。 + 见c++faq
  • @DmitryLedentsov 你可能是对的,另一方面,据我所知,C++ 可以被视为一种上下文无关的语法,因此可以创建 yacc-able C++ 语法,如果有迟早没有一个开源协会会提供它。
  • “据我所知,C++ 可以被视为一种上下文无关的语法”没有。
  • @Poldie:很好,仍然没有改变在这里使用 yacc-able 解析器的感觉 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多