2

私はHSPで書かれた大きなコードベースを持っています(ウィキペディアの記事-「BASIC」と思いますが、日本語です)。

「大」とは、151352行のコード、合計コードサイズが4.5メガバイトの60のソースファイルがあることを意味します。また、スパゲッティコードがたくさんあり、コメントはなく、リファクタリングがひどく必要です。良い点は、テキストメッセージがたくさんあるため、これらの行のすべてが実際のプログラムロジックを表すわけではないことです。

正気を保ちながら、このコードベースをC++に変換したいと思います。「欲しい」とは、義務付けられていないという意味ですが、その方法を見つけたいと強く思っています。

それを行うための良い方法は何ですか?もちろん、すべてをC ++で書き直すことはできません(理論的にはできますが、最大2年かかり、多くのバグが発生します)。したがって、(私は)合理的な決定を下すでしょう。ソースコードを厄介なC++に変換できるコードリコンパイラ/プリプロセッサを実装し(HSPはC ++よりもはるかに単純なので、可能であるはずです)、結果のリファクタリング/文書化を開始します。

残念ながら、リコンパイラを効率的に構築する方法が完全にはわかりません。Lex / Yacc / Bison / Boost :: spiritがあることは知っていますが、個人的には使用していません。

それで、あなたはそのような変換を実行する良い方法を勧めることができますか?元のソースコードのライセンスに影響を与えない限り、Windowsプラットフォームで利用可能なすべての無料ツール(「無料ビール」のように「無料」)が許可されます。

4

3 に答える 3

1

Yaccは、より複雑なタスクを効率的に処理することを目的としており、学習するのは複雑です。やり過ぎだと思います。

スピリットはより良い選択であるはずです、もしあなたがすでにそれと一緒に行くことを知っているなら、私は個人的にこのタスクのためにプロローグを使うでしょう。

Prologには、DCGと呼ばれる構文解析が組み込まれています。Basicのように単純な言語の場合、文法に実際的な問題はないと確信しており、最新のProlog(SWI-Prologに効果的だと思います)は、ソースでエンコードされた複雑な文字を非常にうまく処理できます。

また、Prologでは、スパゲッティコードを展開するためにいくつかの素朴さを適用しようとすることができます。一般的に行うのは複雑な作業ですが、パターンの数が少なく、何度も繰り返される場合は簡単です。

このような問題では、パターンマッチングが重要です...

于 2012-05-19T13:44:18.147 に答える
1

さて、あなたが本当にこのように行きたいと思っていて、コメントのアドバイスを忘れたいのなら、あなたはおそらくopenhspコンパイラとほとんどのcodegenファイルをよく見るべきです:

そしてまたあなたの目の下にトークンを持っています:

HSPはそれほど複雑ではないようで、ASTステップをスキップできます。ただし、それから優れた最適化を得ることができます。生成されたコードを埋め込むためのC++libも準備することを忘れないでください。そうすれば、HSPの奇妙な点(グローバルや動的型付けなど)を管理できます。

それから何かをハックできる場合は、このコンパイラが行うことのほとんどを削除する必要もあります(実行可能ファイル、リンケージなどを作成します)。完全な書き直しよりも速くも簡単でもないかもしれない、本当に長くて難しい作業であることを忘れないでください。しかし、準備ができているなら、あなたはそれを難し​​い方法で見つけるでしょう:)

于 2012-05-19T13:50:00.647 に答える
0

コードベースの元の所有者によると、バージョン3以降のHSPには、HSPからCへのコードコンバーターが含まれています。時間不足のため情報は確認されていませんが、このブログ記事では、HSPコードをCコードに変換することになっているhspcnvというツールについて説明しています。記事は日本語です。

于 2012-05-23T23:31:21.607 に答える