我需要一个命令行工具来从C或C++源文件中提取定义或声明(typedef、结构、枚举、变量或函数)。同时,一个替换现有定义/声明的方法也很方便(在通过用户提交的脚本转换提取的定义之后)。是否有这样通用的工具可用,或者是否有某个合理接近这样的工具?
脚本化和与用户创建的脚本或程序连接的能力在这里很重要,尽管我也对GUI程序抱有学术兴趣。Unix/Linux阵营的开源解决方案是首选(尽管我也对Windows和OS X工具很好奇)。主要语言兴趣是C和C++,但更通用的解决方案会更好(我认为我们不需要超精确的解析能力来查找、提取和替换程序源文件中的定义)。
示例用例(额外 - 对于好奇的人):
- 给定嵌套的struct和这些类型的变量(数组)初始化,假设需要通过添加或重新排序字段或以更易读的格式重写变量/数组定义来更改struct定义,而不引入手动劳动导致的错误。这将通过提取旧的初始化,然后使用脚本/程序编写新的初始化来替换旧的初始化来工作。 - 用于实现代码浏览工具 - 提取定义。 - 装饰性代码生成(例如日志功能条目/返回)。 - 脚本代码结构化(例如提取这个和那个东西并将其放在不同的地方而不改变 - 版本控制提交注释可以记录执行此操作的命令,以使显然且可验证没有更改)。
备选问题:如果有一个工具告诉定义的位置(开始和结束行就足够了 - 我们甚至可以假设我们感兴趣的所有定义/声明都在它们自己的行中),那么编写程序来提取定义、替换定义甚至是一个简单的手指灵活性练习。
脚本化和与用户创建的脚本或程序连接的能力在这里很重要,尽管我也对GUI程序抱有学术兴趣。Unix/Linux阵营的开源解决方案是首选(尽管我也对Windows和OS X工具很好奇)。主要语言兴趣是C和C++,但更通用的解决方案会更好(我认为我们不需要超精确的解析能力来查找、提取和替换程序源文件中的定义)。
示例用例(额外 - 对于好奇的人):
- 给定嵌套的struct和这些类型的变量(数组)初始化,假设需要通过添加或重新排序字段或以更易读的格式重写变量/数组定义来更改struct定义,而不引入手动劳动导致的错误。这将通过提取旧的初始化,然后使用脚本/程序编写新的初始化来替换旧的初始化来工作。 - 用于实现代码浏览工具 - 提取定义。 - 装饰性代码生成(例如日志功能条目/返回)。 - 脚本代码结构化(例如提取这个和那个东西并将其放在不同的地方而不改变 - 版本控制提交注释可以记录执行此操作的命令,以使显然且可验证没有更改)。
备选问题:如果有一个工具告诉定义的位置(开始和结束行就足够了 - 我们甚至可以假设我们感兴趣的所有定义/声明都在它们自己的行中),那么编写程序来提取定义、替换定义甚至是一个简单的手指灵活性练习。
提取定义,运行由命令行选项(或编辑器)指定的程序以
- 从
stdin
(或临时文件)接收所需的提取定义, - 执行变换(编辑),并且
- 将新的定义输出到
stdout
(或保存到给定的临时文件)
以被执行的程序替换。
因此,主要且更具挑战性的问题是找到定义的起始和结束行。
关于标签的注释:code-generation
这个标签比code-transformation
更准确,但它不存在。