2

グループプロジェクトの一環として、簡略化された言語用のコンパイラを作成しています。オプション機能の1つとして、のぞき穴オプティマイザーを追加して、codegenの出力Intelアセンブリコードを調べて最適化すると思いました。

私たちのコンパイラはJavaで実行されており、これまでに学んだJavaを使用してこののぞき穴オプティマイザを作成するのは大変な作業になると思われます。パターンマッチング文字列はJavaの良いアプローチのように聞こえないので、これを可能にするために使用する必要があるある種のツールはありますか?

ありがとう

4

3 に答える 3

3

ピープホールの最適化は、アセンブラへの入力として意図されたテキストではなく、解析ツリーのバイナリ表現で行う必要があります。

于 2011-12-14T18:12:46.007 に答える
3

コンパイラの設計を見ずに言うのは難しいですが、通常、コードの生成と発行の間に中間ステップがあります。たとえば、コード生成フェーズの出力を命令のリンク リストにすることを考えることができます。各命令オブジェクトには、命令の種類、引数、ラベル/分岐先などが格納されます。次に、各パターンは現在のノードとその直後の後続ノードを検査します (たとえばif (curr.isMov() && curr.next.isPush() && ...)、それに応じてリストを変更します。次に、ピープホール オプティマイザは codegen 出力から開始し、その上で各パターンを実行し、リストが変化しなくなるまでこれを繰り返します。次に、この命令のリストを取得して実際のアセンブリを出力する別のフェーズがあります。

于 2011-12-14T18:15:50.923 に答える
2

私は間違いなくこれに文字列を使用しません。lex/とその同類 (たとえば、Jack は Java 用のものですが、私は使用していませyaccん) を見て、アセンブリの AST を生成し、AST で最適化を実行し、アセンブリを再度書き出すことができます。これは難しいことですよね?:-)

于 2011-12-14T18:14:50.630 に答える