我有一个用 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/