c++ - HSP 到 C++ : Language conversion of a large codebase

标签 c++ converters

我有一个用 HSP 编写的大型代码库(wikipedia article - 想想“BASIC”,但是日语)。

我所说的“大”是指它有 151352 行代码,60 个源文件,总代码大小为 4.5 MB。此外,它有大量意大利面条式代码,没有注释,并且急需重构。好处是它有很多文本消息,因此并非所有这些行都代表实际的程序逻辑。

我想将此代码库转换为 C++,同时保持理智。 “我愿意”意味着我没有被要求这样做,但我强烈希望找到一种方法来做到这一点。

有什么好的方法吗?显然,我不能只用 C++ 重写它(嗯,理论上我可以这样做,但这需要长达 2 年的时间,而且我会在过程中引入许多错误),所以(我认为)一个合理的决定是实现代码重新编译器/预处理器,它允许我将源代码转换为困惑的 C++(HSP 比 C++ 简单得多,所以应该是可能的),然后开始重构/记录结果。

不幸的是,我不完全确定如何有效地构建重新编译器。虽然我知道有 Lex/Yacc/Bison/Boost::spirit,但我个人没有使用过它们。

那么您能推荐一种执行此类转换的好方法吗? 任何Windows平台上可用的免费工具(“免费”如“免费啤酒”)都是允许的,只要它不影响原始源代码的许可。

最佳答案

Yacc 的目标是高效处理更复杂的任务,而且学习起来很复杂,我认为这是大材小用。

Spirit 应该是一个更好的选择,如果你已经知道了,我个人会使用 Prolog 来完成这个任务。

Prolog 具有内置语法分析功能,即 DCG。对于像Basic这样简单的语言,我很确定语法上没有实际问题,而现代Prologs(我认为SWI-Prolog,有效)可以很好地处理源代码中的复杂字符编码。

此外,在 Prolog 中,您可以尝试应用一些天真来展开意大利面条式代码。一般来说,这是一项复杂的任务,但如果您只有少量重复多次的模式,则可能会很容易。

模式匹配是此类问题的关键......

关于c++ - HSP 到 C++ : Language conversion of a large codebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10665402/

相关文章:

python - 将 `AMPL` 或 `GAMS` 文件转换为 `Python`

java - gb mb kb 和 X 字节中的字节数,java

Python 转换器 - 我被困住了

c++将类成员函数添加到Map中

c++ - 删除重复项:如何为 boost::geometry::box 编写排序谓词?

c++ - 您遇到过的最出色的模板用法是什么?

excelcnv 命令行选项

c# - 在 ConverterParameter 中使用枚举

c++ - c++ 中数据类型的动态更改?

c++ - cpp中宏的条件导数用法