以编程方式解析和编辑 C++ 源文件

2024-07-01

我想以编程方式解析和编辑 C++ 源文件。我需要更改/添加代码的某些部分(即函数、类块等)中的代码。我也(最好)能够得到评论。

我想做的部分事情可以用下面的代码来解释:

CPlusPlusSourceParser cp = new CPlusPlusSourceParser(“x.cpp”);  // Create C++ Source Parser Object
CPlusPlusSourceFunction[] funcs = cp.getFunctions();  // Get all the functions

for (int i = 0; i &lt funcs.length; i++) {  // Loop through all functions
    funcs[i].append(/* … code I want to append …*/);  // Append some code to function 
}
cp.save(); // Save new source
cp.close(); // Close file

我怎样才能做到这一点?

我希望能够最好地使用 Java、C++、Perl、Python 或 C# 来完成此操作。不过,我对其他语言的 API 持开放态度。


这类似于来自 C 代码的 AST https://stackoverflow.com/questions/239722/ast-from-c-code

如果您熟悉 Java,antlr 可以轻松地将您的代码解析为抽象语法树,然后对该树应用转换。默认的 AST 转换只是简单地打印出原始源代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式解析和编辑 C++ 源文件 的相关文章

  • C++11 中的延迟初始化顺序

    考虑以下代码 分为三个编译单元 a h struct A void Register const char s const char m s 10 int m i 0 A GetA a cpp include a h include
  • C++ 相当于 fscanf()?

    请不要说它是 fscanf P 我正在尝试替换这一行 if fscanf fp P c n ch 1 如果我理解正确的话 它会尝试读取 char 并将其存储到 ch 前提是它位于 P 和 n 之间 是对的吗 如果成功 它会返回1 它读取的字
  • 类内枚举前向声明是否可能? [复制]

    这个问题在这里已经有答案了 我知道在 C 11 中可以转发声明枚举类型 如果提供了存储类型 例如 enum E short void foo E e enum E short VALUE 1 VALUE 2 但我想转发声明一个类中定义的枚举
  • IDeserializationCallback 与 OnDeserializedAttribute

    据我了解 当对象在反序列化后需要执行某些任务时 可以使用 IDeserializationCallback 接口和 OnDeserialized 事件 IDeserializationCallback Serializable public
  • WPF PasswordBox 中的密码不可绑定的安全优势?

    我只是偶然发现一个事实PasswordWPF 的属性PasswordBoxes 不可绑定安全原因 这使得在 MVVM 上下文中使用它们相当麻烦 答案如https stackoverflow com a 1493330 3198247 htt
  • 泛型类中可空的泛型字段

    我正在尝试做这样的事情 public class MySuperCoolClass
  • 启动离线 ClickOnce 应用程序并等待退出

    我已经部署了 ClickOnce Windows 窗体应用程序 应用程序 A 另一个应用程序 应用程序 B 以文件名作为参数启动应用程序 A 我用这段代码做到这一点 var basePath Environment GetFolderPat
  • 无锁“如果不为零则递减”

    我目前正在用 C 重新发明线程池的轮子 我已经消除了代码中的几乎所有锁 除了以下构造的多个实例之外 std atomic size t counter void produce counter void try consume if cou
  • 将 wav 文件存储在数组中

    我需要一种快速方法来将 wav 文件的所有样本存储在数组中 我目前正在通过播放音乐并存储来自示例提供程序的值来解决这个问题 但这不是很优雅 从 NAudio 演示中 我有带有此方法的 Audioplayer 类 private ISampl
  • 使用迭代器与索引访问向量元素有什么区别?

    使用迭代器与索引访问向量元素有什么优点 为什么迭代器比索引更好 在索引不可用的情况下 例如 std list 对于 例子 在通用函数接受迭代器的情况下 叫做 编写应该使用的函数模板时 不止一种容器类型 他们的存在是为了创造均匀性在所有容器和
  • 将“列表”项附加到 StringBuilder

    我尝试将项目附加到List
  • 仅仅“抛出”一次捕获有好处吗?

    与一位同事就他将大部分功能包装在 try catch 中的做法进行了 激烈辩论 但 catch 中只有一个 抛出 例如 Private sub foo try Do something catch throw And nothing els
  • C# 我可以访问没有完整限定名称的枚举吗

    我有一个 C 枚举类型 它以非常长的限定名称结尾 例如 DataSet1 ContactLogTypeValues ReminderToFollowupOverdueInvoice 为了便于阅读 如果我可以告诉一个特定的函数只使用名称的最后
  • 在 C++ 中调用函数有多少开销?

    许多文献都谈到使用内联函数来 避免函数调用的开销 但我还没有看到可量化的数据 函数调用的实际开销是多少 即通过内联函数我们可以实现什么样的性能提升 在大多数架构上 成本包括将所有 或部分 或没有 寄存器保存到堆栈 将函数参数推送到堆栈 或将
  • 将 HTML 渲染为图像

    我正在基于动态输入和裁剪图像生成优惠券 并且现在使用 ntml 和 css 显示优惠券 问题是 打印这已成为一个问题 因为打印时背景如何消失以及其他问题 所以我认为最好的解决方案是能够基于html生成图像 或者设置某种接受字符串和图像的模板
  • 如何确保 IsInRole 检查不使用缓存的凭据

    我有一个连接到 WCF 服务的 WPF 客户端 我想锁定某些功能 以便只有某些用户可以执行某些操作 WCF 服务在执行服务方法时模拟客户端用户 操作系统是Windows XP 我正在读书这个问题 https stackoverflow co
  • “auto_ptr”和 STL 容器:编写错误用法的示例

    读完本教程后提出这个问题 http www cprogramming com tutorial auto ptr html http www cprogramming com tutorial auto ptr html 在那里你可以找到以
  • 为什么不允许静态常量浮点数? [复制]

    这个问题在这里已经有答案了 我有一个类 它本质上只是保存了我的应用程序中使用的一堆常量定义 但由于某种原因 longs 编译但是float不 class MY CONSTS public static const long LONG CON
  • 如何使用 gcc 的 -I 命令添加递归文件夹

    有没有办法使用 gcc 的 I 命令并通过给出 a 将所有路径添加到搜索路径root目录 我正在尝试使用 gcc E myfile c查看宏展开式 但是myfile c包含不同目录中的一大堆其他头文件 并且因为我在 vim 中执行此命令 所
  • 如何将特殊字符 (0x80..0x9F) 写入 Windows 控制台?

    我想要这段代码 System Console Out WriteLine il display il代替oil正如我的测试程序中所做的那样 The Console OutputEncoding默认设置为Western European DO

随机推荐

  • 如何将复杂属性从父作用域继承到指令的隔离作用域中

    在查看了 AngularJS 和相关 文档以及有关指令中隔离范围的其他 stackoverflow 问题后 我仍然有点困惑 为什么我不能在父作用域和指令隔离作用域之间进行双向绑定 其中父作用域属性是对象而不是属性 我应该只使用所需的属性吗s
  • 对于 Android 开发,我可以在图像视图上使用 JPG 图像而不是 PNG 图像吗?

    这个问题的主要目的是了解考虑以下场景 在 Android 开发中选择 PNG 和 JPG 的最佳选择是什么 1 使用jpg图像作为背景是一个好的选择吗 2 与 png 相比 jpg 图像的加载时间会更长吗 3 与 png 相比 jpg 会花
  • 当用户使用 Internet Explorer 时重定向到新页面

    我使用下面的代码将使用 Internet Explorer 的用户重定向到新页面 但显然代码有问题 因为当我使用 Internet Explorer 时该网站不再加载 这是代码 由于我不知道我做错了什么 如果有人可以发布使用正确编码的正确方
  • 为什么我收到 TypeError: array[i] is undefined? [复制]

    这个问题在这里已经有答案了 因此 在我的程序中 我有一个包含值的字典 散列的数组 当我循环遍历该数组时 我得到了我需要的值 但 for 循环之后的任何代码都不会执行 因为控制台输出 TypeError array i is undefine
  • 使用 Python 映射字母数字字符串

    我有一个姓名数据集 根据名称的字母数字字符串 我需要将它们映射到子名称 如下所示 Name Subname 9 AIF 09 9A09 980 PD Z09A 980P09 15 KIC 12 15K12 PIA 110H P 110 IC
  • 跨三个表的 LEFT JOIN(带有连接表)

    在Postgres中 有没有办法执行left join在由联结表链接的表之间 并在链接表上进行一些过滤 比如说 我有两张桌子 humans and pets 我想执行一个查询 其中包含人类 ID 和宠物名称 如果人类 ID 存在 但他们没有
  • Angular 5:表内的动态表单验证

    我正在尝试使用表单组验证表内的输入字段 但无法实现相同的目标 我使用 ngFor 来迭代数据 因为我必须在表的第一列中显示该数据 而其他列只是输入文本字段 我必须在其中添加表单验证 因此 我添加了该字段的唯一表单控件名称的索引 HTML代码
  • 有关堆栈大小的警告消息

    I use Visual Studio 2010 with Code Analysis活性 在我的代码中 有一行在函数中分配一些内存 TCHAR someString 40000 代码分析抛出警告信息 警告 C6262 函数使用 40000
  • Firebase 和 Google Play 服务之间要使用哪些依赖项?

    我最近开始使用 Firebase 但我无法完全理解它与 Google Play Services 的关系 我知道Firebase是一个移动平台 在Android上它是基于Google Play Services的 但是为什么有一些模块与Go
  • 如何在JNA中填充结构体数组?

    我正在尝试在 JNA 中使用以下 Windows API UINT WINAPI GetRawInputDeviceList Out opt PRAWINPUTDEVICELIST pRawInputDeviceList Inout PUI
  • Java 中的简单 Kerberos 客户端?

    Google Chrome 和 IE 等应用程序可以透明地处理 Kerberos 身份验证 但是我找不到一个 简单 的 Java 解决方案来匹配这种透明度 我发现的所有解决方案都需要存在 krb5 conf 文件和 login conf 文
  • 找不到 PHPUnit 的 TextUI/command.php

    我为我的 symfony2 项目安装了 phpunit 如下所示 如何使用从composer安装的phpunit https stackoverflow com questions 13764309 how to use phpunit i
  • 使用 PHP 解析 XML 导航站点地图

    我正在从 XML 文件实现 PHP 站点地图解析器 我做得相对不错 但是 我需要解析器更加动态 我需要实现一个递归函数 它将继续循环找到的每个 child node 一个节点可以在另一个 child node 中包含许多 child nod
  • 与 ADO.NET、SQLite 和 TSQL 的只读连接

    我的代码通过一个连接读取并通过另一个连接写入 我不想意外地使用读取连接进行写入 我怎样才能使连接只读 我正在使用 SQLite ATM 并将在原型结束时将代码部分转换为 tsql 您可以将 Read Only True 添加到只读连接 Da
  • WTL 子窗口事件处理

    我正在开发窗口应用程序 因为我在左侧和右侧有 2 个子窗口 我想分别处理两个窗口的输入事件 如何实现 My code class EditorWindow public DxWindow public CSplitterWindow m v
  • 模块化应用程序堆栈中的虚拟数据和单元测试策略

    如何管理用于测试的虚拟数据 将它们保留在各自的实体中 在一个单独的测试项目中 使用外部资源的序列化程序加载它们 或者只是在需要的地方重新创建它们 我们有一个应用程序堆栈 其中包含多个模块 这些模块依赖于另一个模块 每个模块都包含实体 每个模
  • 如何在另一个 php 脚本的后台运行 php 脚本(如更新按钮)

    当我按下 更新 按钮时 我将如何运行一个 php 脚本 然后它将运行脚本 x1 php 没有回显或其他输出 成功或失败 然后更新当前页面 我知道更新部分可以使用 ajax 完成 但我不确定如何以及如何让 x1 php 脚本在后台运行并在完成
  • 创建类路径资源 META-INF/cxf/cxf.xml 中定义的名为“cxf”的 bean 时出错

    我只是尝试使用 Apache CXF 和 Spring by Maven 运行一个简单的 Web 服务应用程序 但是在启动 Tomcat 时出现以下错误 org springframework beans factory BeanCreat
  • 使用 PyQt5/Pyside2 设置重复的 SVG 图案作为主窗口/Qwidget 背景

    我已经通过生成了 SVG css 代码http www heropatterns com http www heropatterns com 我正在尝试使用它作为我的主窗口 Qwidget 的背景 我希望背景随着窗口变大或缩小而调整大小 我
  • 以编程方式解析和编辑 C++ 源文件

    我想以编程方式解析和编辑 C 源文件 我需要更改 添加代码的某些部分 即函数 类块等 中的代码 我也 最好 能够得到评论 我想做的部分事情可以用下面的代码来解释 CPlusPlusSourceParser cp new CPlusPlusS