import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* An <code>AstVisitor</code> is a {@link Dispatcher} that contains methods to
* visit nodes in an abstract syntax tree. Specializations should implement
* <code>visit</code> methods for more specific types of AST nodes.
*
* @layer<visitor>
*/
public abstract class AstVisitor extends Dispatcher {
/**
* A generic method that dispatches <code>this</code> to the list
* elements, thus implementing a pre-order visitation of the tree.
*
* @layer<visitor>
*/
public void visit( AstList list ) {
for ( AstNode n = list.arg [0] ; n != null ; n = n.right )
if ( n.arg [0] != null )
dispatch( n.arg [0] ) ;
}
/**
* A generic method that dispatches <code>this</code> to its children,
* thus implementing a pre-order visitation of the tree.
*
* @layer<visitor>
*/
public void visit( AstNode node ) {
if ( node.arg != null )
for ( int n = 0 ; n < node.arg.length ; ++n )
if ( node.arg [n] != null )
dispatch( node.arg [n] ) ;
}
/**
* A generic method that dispatches <code>this</code> on its optional
* member, thus implementing a pre-order visitation of the tree.
*
* @layer<visitor>
*/
public void visit( AstOptNode node ) {
if ( node.arg [0] != null )
dispatch( node.arg [0] ) ;
}
}