4

ast-walking インタープリターでは、コードはノードごとに実行されます。goto、break、continue などの機能を実装するにはどうすればよいですか? 現在の実行を停止し、別のノードにジャンプしますか? ベストプラクティスはありますか?

4

1 に答える 1

4

ベスト プラクティスは、「goto を含む言語の AST を解釈しない」ことです。

基本的に、言語が主にスカラーを処理している場合、ツリー ウォークのあらゆる種類の不連続が深刻な速度低下を引き起こします。(配列言語の APL のように、主に複雑な値を処理する言語であれば問題ありません)。

期待できる最善の方法は、ツリーを事前に調べて goto が実際に AST のどこに行くのかを判断し、それを横の連想キャッシュに記録することです。次に、goto に遭遇したときは、ツリーを検索するのではなく、単にキャッシュを調べます。

しかし、これはコンパイルへの道のりの最初のステップです。たとえば、実行する前にできることを事前に計算します。

于 2012-12-20T09:16:13.747 に答える