質問

私は 抽象構文ツリー る必要性に対して繰り返し処理を実行する.よりASTによって発生した レポートPHP.

現在"通常"とは、思いのブランドの新しい光沢のあるサポートに対するコミットメント5.3.1)SPLクラスでのようになります:

$it = new \RecursiveIteratorIterator(
  new \RecursiveArrayIterator($ast['rule']),
  \RecursiveIteratorIterator::SELF_FIRST);

実は、私の間ですでに実施している他のコードをdeterminatesラタイプのツリー全体においてeで譲渡条件です。現在詳細は別に、重要なことは繰り返し処理を行いRecursiveIteratorIterator::SELF_FIRST、トップダウンによっている。

か問題については親権者の方の同意が必要に対して繰り返し処理を実行するのASTボトムアップ手法では、このようなものRecursiveIteratorIterator::CHILD_FIRSTるため、いくつかの置換や最適化します。

問題は、これらの操作が必要なことについて質問-コメントするさんありがとうございます。pathは現在のノードです。とらいたいのに対して繰り返し処理を実行する上できるようになっているとRecursiveIteratorIterator.

も考えています。いたいのに対して繰り返し処理を実行する以下のトップダウンのコンテキスト(スタックに現在のノードを、それぞれになります。技術的にできるので、RecursiveIteratorIterator最初のテールのツリーのための繰り返し処理を実行します。そのテール、キャッシュの現在の位置で飛び出す要素を返しますから再帰.

このキーワード: キャッシュ.そのため、被疑者の動きを他のSPLクラス:RecursiveCachingIterator.

ここでの問いはでも可能ですか?ある場合、いかがですか?

っていうパズルの一部のコードにならず、およびドキュメンテーションは少なくなってきます。本当に、本当に少ないのが現状です。

誰が最もエレガントな解決方法を使用SPL、帽子。まPHPのグルです!

PS:る場合であって、必ずしも明確ではないものの、私 いSPL(利用できる.知っていただ単に"サムネやエンジンを自分の再帰的機能のカスタムスタックを必要としないことを私に思い出させてくれています。

役に立ちましたか?

解決

私はそれが)RecursiveIteratorIteratorを継承することによって作業とに:: endChildren(スタックの管理を得ることができたとしている:: callGetChildrenをそれぞれ。多分これは誰かに役立ちます。自分自身に脱帽: - )

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top