ast-walking インタープリターでは、コードはノードごとに実行されます。goto、break、continue などの機能を実装するにはどうすればよいですか? 現在の実行を停止し、別のノードにジャンプしますか? ベストプラクティスはありますか?
質問する
1020 次
1 に答える
4
ベスト プラクティスは、「goto を含む言語の AST を解釈しない」ことです。
基本的に、言語が主にスカラーを処理している場合、ツリー ウォークのあらゆる種類の不連続が深刻な速度低下を引き起こします。(配列言語の APL のように、主に複雑な値を処理する言語であれば問題ありません)。
期待できる最善の方法は、ツリーを事前に調べて goto が実際に AST のどこに行くのかを判断し、それを横の連想キャッシュに記録することです。次に、goto に遭遇したときは、ツリーを検索するのではなく、単にキャッシュを調べます。
しかし、これはコンパイルへの道のりの最初のステップです。たとえば、実行する前にできることを事前に計算します。
于 2012-12-20T09:16:13.747 に答える