首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HSP到C++:大型代码库的语言转换

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

Stack Overflow用户
提问于 2012-05-19 12:58:44
回答 3查看 268关注 0票数 2

我有用热休克编写的大型代码库(维基百科文章--想想"BASIC",但是是日语)。

我的意思是,它有151352行代码,60个源文件,总代码大小为4.5MB。此外,它有大量的意大利面代码,没有评论和迫切需要重构。好的是它有大量的文本消息,所以并不是所有的行都代表实际的程序逻辑。

我想将这个代码基转换为C++,同时保持我的理智。“我想要”意味着我不是所要求的来做它,但我强烈希望找到一种方法来做它。

什么是好办法?显然,我不能仅仅用C++重写它(理论上我可以这样做,但需要两年时间,我会在过程中引入许多but ),所以(我认为)一个合理的决定是实现代码重新编译/预处理器,这将允许我将源代码转换为混乱的C++ (HSP比C++简单得多,因此应该是可能的),然后开始重构/记录结果。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-23 23:31:21

根据代码库的原始所有者,从版本3开始的HSP包括HSP到C代码转换器。由于时间不够,没有对信息进行验证,但是这个博客文章文档记录了名为hspcnv的工具,该工具应该将hspcnv代码转换为C代码。这篇文章是日文的。

票数 0
EN

Stack Overflow用户

发布于 2012-05-19 13:44:18

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

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

Prolog有内置语法分析,即DCG。对于作为基本语言的简单语言,我确信语法上没有实际问题,而现代Prolog(我认为simple有效地)可以很好地处理源中的复杂字符编码。

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-05-19 13:50:00

好吧,如果您真的想这样做,忘记注释中的建议,那么您可能应该好好看看openhsp编译器,主要是codegen文件:

  • http://dev.onionsoft.net/trac/browser/trunk/hspcmp/codegen.cpp

在你的眼皮底下也有记号:

  • http://dev.onionsoft.net/trac/browser/trunk/hspcmp/token.h
  • http://dev.onionsoft.net/trac/browser/trunk/hspcmp/token.cpp

看来HSP并没有那么复杂,您可以跳过AST步骤。不过,您可以从中获得很好的优化。不要忘记准备一个C++库来嵌入您生成的代码,这样您就可以管理HSP (比如globals和动态类型)。

如果你能破解其中的一些东西,你也将不得不删除这个编译器所做的大部分工作(创建可执行文件,链接等等)。别忘了,这是一项非常漫长而艰巨的任务,它可能不会比完全重写更快或更容易。但是,如果你准备好了,你会发现它很难找到:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10665402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档