import pascal.PascalNonterminals;

import rebelsky.compiler.misc.Checker;
import rebelsky.compiler.misc.Traverser;
import rebelsky.compiler.parser.Node;

/**
 * A traverser that prints the tree.
 *
 * @author Samuel A. Rebelsky
 * @version 1.0 of April 2004
 */
public class TraverseAndPrint
  extends Traverser
{
  String indent = "";

  public TraverseAndPrint()
  {
    this.setDefault(new Checker() {
      public void check(Traverser t, Node n) 
        throws Exception
      {
        if (n == null)
          System.out.println(indent + "<>");
        else {
          System.out.println(indent + n.getSymbol());
          indent = indent + "  ";
          int numchildren = n.numChildren();
          for (int i = 0; i < numchildren; i++)
            t.traverse(n.getChild(i));
          indent = indent.substring(2);
        } // not null
      } // check(Traverser, Node)
    });
  } // TraverseAndPrint()
} // class TraverseAndPrint

