HSP到C ++:大型代码库的语言转换

时间:2012-05-19 12:58:44

标签: c++ converter

我有用HSP编写的大型代码库(wikipedia article - 认为“BASIC”,但是日文)。

“大”我的意思是它有151352行代码,60个源文件,总代码大小为4.5兆字节。此外,它有很多意大利面条代码,没有评论和急需重构。好消息是它有很多文本消息,因此并非所有这些行都代表实际的程序逻辑。

我想将此代码库转换为C ++,同时保持我的理智。 “我想”意味着我不是必需这样做,但我更倾向于找到一种方法来实现它。

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

不幸的是,我不完全确定如何有效地构建重编译器。虽然我知道有Lex / Yacc / Bison / Boost ::精神,但我还没有亲自使用它们。

那么你能推荐一种很好的方式进行这样的转换吗? 允许在Windows平台上提供的任何免费工具(“免费”,如“免费啤酒”),只要它不影响原始源代码的许可。

3 个答案:

答案 0 :(得分:1)

Yacc它的目标是有效地处理更复杂的任务,而且学习起来很复杂,我认为这太过分了。

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

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

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

模式匹配是这些问题的关键...

答案 1 :(得分:1)

好吧,如果你真的想这样做而忘记评论中的建议,你应该好好看看openhsp编译器,主要是codegen文件:

并且还有你眼睛下的代币:

似乎HSP并不复杂,你可以跳过AST步骤。不过,你可以从中获得很好的优化。不要忘记准备一个C ++ lib来嵌入你生成的代码,这样你就可以管理HSP的怪异性(比如全局变量和动态类型)。

如果你可以解决这个问题,你还必须删除这个编译器所做的大部分工作(创建可执行文件,链接和东西)。不要忘记,这是一项非常漫长而艰巨的任务,可能不会比完全重写更快或更容易。但如果你准备好了,你会发现它很难:)

答案 2 :(得分:0)

根据代码库的原始所有者,从版本3开始的HSP包括HSP到C代码转换器。由于时间不足,未验证信息,但此blog article文档称为hspcnv,它应该将HSP代码转换为C代码。这篇文章是日文。