INTERFACEThis is not intended as a client interface, but as support for the implementation of various tree walk models. TheAST_WalkRep ; IMPORT AST; IMPORT AST_Iter AS Previous_View;
ASTWalk
interface
provides one such model. All AST nodes, other than leaf nodes, must
provide an implementation of the walk
method.
TYPE NODE = Previous_View.NODE OBJECT METHODS walk(handle: Handle) RAISES ANY := Null; END; REVEAL AST.NODE <: NODE; TYPE Handle <: Handle_public; Handle_public = OBJECT METHODS Visit(n: AST.NODE) RAISES ANY; END; PROCEDURE Null(n: NODE; handle: Handle) RAISES {};
returns immediately; used as default method
END AST_WalkRep.The
walk
method visits the children of self
, in some order
determined by the concrete method. The connection to the callback
interface provided by ASTWalk
is through handle
, which provides
the Visit
method. Each implementation of the walk
method should
apply Visit
to its children. The Visit
method encapsulates the
callback and the application of walk
to the child nodes.
Since the connection to ASTWalk
is decoupled by the handle
type,
it is possible to devise alternate implementations of the Visit
method without altering this interface or the implementations of
the walk
methods.