19.4 Visitor を使って AST をわたり歩く

visitor パターンは ... compiler パッケージは、Python のイントロスペクション機能を利用して visitor のために必要な大部分のインフラを省略した、visitor パターンの変種を使っています。

visit されるクラスは、visitor を受け入れるようにプログラムされている必要はありません。 visitor が必要なのはただそれがとくに興味あるクラスに対して visit メソッドを 定義することだけです。それ以外はデフォルトの visit メソッドが処理します。

XXX The magic visit() method for visitors.

walk( tree, visitor[, verbose])

クラス ASTVisitor( )

ASTVisitor は構文木を正しい順序でわたり歩くようにします。 それぞれのノードはまず preorder() の呼び出しではじまります。 各ノードに対して、これは `visitNodeType' という名前のメソッドに対する preorder() 関数への visitor 引数をチェックします。 ここで NodeType の部分はそのノードのクラス名です。たとえば While ノードなら、visitWhile() が呼ばれるわけです。 もしそのメソッドが存在している場合、それはそのノードを第一引数として呼び出されます。

ある特定のノード型に対する visitor メソッドでは、 その子ノードをどのようにわたり歩くかが制御できます。 ASTVisitor は visitor に visit メソッドを追加することで、 その visitor 引数を修正します。特定のノード型に対する visitor が 存在しない場合、 default() メソッドが呼び出されます。

ASTVisitor オブジェクトには以下のようなメソッドがあります:

XXX 追加の引数を記述

default( node[, ...])

dispatch( node[, ...])

preorder( tree, visitor)

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。