- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
正如我已经指出的 - here - 似乎 clang 的 libclang 应该非常适合执行 C/C++ 代码分析和修改这一艰巨任务(check out video presentation and slides)。
你知道任何基于 libclang 的 C/C++ 重构工具吗?
“Any”甚至包括简单的 alpha 状态项目,支持一种重构技术。它可以没有预处理器支持。作为我正在谈论的功能示例:更改方法名称,它是否支持多个文件或一次只支持一个文件。您可能想知道要求即使是小的工作示例的目标是什么我的想法是在一个地方创建一个代码示例和小工具列表将提供更好的资源来学习如何使用 libclang 实现重构。我相信从简单的项目可能会发展成更大的项目——以适当的开源方式:)。
最佳答案
Clang 包含一个名为“CIndex”的库,我相信它是为在 IDE 中完成代码而开发的。它也可用于解析 C++ 和遍历 AST,但没有任何重构方式。参见 Eli Bendersky 的文章 here .
我最近开始了这样一个项目:cmonster .它是一个基于 Python 的 API,用于解析 C++(使用 libclang)、分析 AST,以及用于“重写”(即插入/删除/修改源范围)的接口(interface)。 (目前)还没有很好的方法来修改函数名称并将其转换为源代码修改,但这样做并不难。
我尚未创建具有此功能的版本(尽管它位于 github 存储库中),因为我正在等待 llvm/clang 3.0 的发布。
另外,我要指出几点:
适当调整预期。
更新: cmonster 0.2 已发布,其中包含所描述的功能。看看on Github .
关于c++ - 任何基于 libclang 的 C/C++ 重构工具? (甚至最简单的 "toy example"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7969109/
有一个 Person 类,它包含以下内容: 智力玩具 列出 child SumToys() SumToys() 返回直接对象中的所有“玩具”(调用 SumToys)及其直接子对象(不是子对象的子对象)
*Pastebin 的完整日志:* http://pastebin.com/QJyzzxNA 每当我尝试编译The Powder Toy时,它给了我一个链接器错误,说该库与 x86_64 不兼容。我该
基本上我正在制作一款类似于 The Powder Toy 的游戏。在一个给定的帧中,世界最多可以有 256,000 个粒子。在我旧的 Javascript 实现中,我遍历了每个像素,这导致了严重的延迟
我想按两个FromX和ToY字段的值构成的范围内的指定值进行查询,并通过Title查询将text作为query_string字段进行搜索。 这个例子显示了我的目标: Id | FromX | ToY
想象这样的谜题: puzzle 我有几种形状,例如: 10圈 8个三角形 9个正方形 我也有一些盘子用来放形状,例如: A板:2个圆孔,3个三角孔,1个方孔 B板:1个圆孔,0个三角孔,3个方孔 C板
我正在尝试使用行为框架、python 通过 BDD 测试来覆盖项目。问题是所有 BDD Material 都使用不真实的玩具示例。我的项目相当大,我遇到了以下问题 在不同的 .feature 文件中,
这是我正在开发的一个非常简单的模块。它只是将 sys_ni_syscall 替换为我的新系统调用 log_message。这里是源文件template_syscall_hacking.c: #incl
在 Redux+Immutable js 新手中,我发现 toJS 方法存在一些性能问题,但在我的用例中我找不到任何替代方案。那么如何将列表转换为对象数组。 我的初始状态 const initialS
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是无关紧要的,
请考虑以下简单的MWE:。最佳解决方案是使所有参数相等,而不是介于4和6之间。例如,全部为3。这给出的函数值为0。对于不同的Scipy优化器,优化的成功程度各不相同,但使用DIRECT几乎立即失败。它
请考虑以下简单的MWE:。最佳解决方案是使所有参数相等,而不是介于4和6之间。例如,全部为3。这给出的函数值为0。对于不同的Scipy优化器,优化的成功程度各不相同,但使用DIRECT几乎立即失败。它
我正在使用 exec() 语句来设置一个值,如下所示: foo = 3 def return_4(): return 4 instruction = 'foo = return_4()' ex
我是一名优秀的程序员,十分优秀!