visitor パターンは ... compiler パッケージは、Python のイントロスペクション機能を利用して visitor のために必要な大部分のインフラを省略した、visitor パターンの変種を使っています。
visit されるクラスは、visitor を受け入れるようにプログラムされている必要はありません。 visitor が必要なのはただそれがとくに興味あるクラスに対して visit メソッドを 定義することだけです。それ以外はデフォルトの visit メソッドが処理します。
XXX The magic visit() method for visitors.
tree, visitor[, verbose]) |
) |
ASTVisitor は構文木を正しい順序でわたり歩くようにします。 それぞれのノードはまず preorder() の呼び出しではじまります。 各ノードに対して、これは `visitNodeType' という名前のメソッドに対する preorder() 関数への visitor 引数をチェックします。 ここで NodeType の部分はそのノードのクラス名です。たとえば While ノードなら、visitWhile() が呼ばれるわけです。 もしそのメソッドが存在している場合、それはそのノードを第一引数として呼び出されます。
ある特定のノード型に対する visitor メソッドでは、 その子ノードをどのようにわたり歩くかが制御できます。 ASTVisitor は visitor に visit メソッドを追加することで、 その visitor 引数を修正します。特定のノード型に対する visitor が 存在しない場合、 default() メソッドが呼び出されます。
ASTVisitor オブジェクトには以下のようなメソッドがあります:
XXX 追加の引数を記述
node[, ...]) |
node[, ...]) |
tree, visitor) |
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。