import pascal.PascalNonterminals;

import rebelsky.compiler.lexer.Identifier;
import rebelsky.compiler.misc.Checker;
import rebelsky.compiler.misc.Traverser;
import rebelsky.compiler.parser.Node;
import rebelsky.compiler.types.Type;

/**
 * Eryn is in charge of expressions.
 *
 * @author Samuel A. Rebelsky
 * @version 1.0 of April 2004
 */
public class Eryn
{
  public static void addCheckers(Traverser t)
  {
    // We just look up named variables in the symbol table.
    t.setChecker(PascalNonterminals.VARIABLE_NAME, new Checker() {
        public void check(Traverser t, Node n) 
          throws Exception
        {
          // Traverse the child, just in case.
          t.traverse(n.getChild(0));
          // Look up the type and add it to this node
          Type type = t.getType((Identifier) n.getChild(0).getSymbol());
          if (type != null)
            n.setAttribute("type", type);
        } // check(Traverser, Node)
      }); // VARIABLE_NAME

  } // addCheckers(Traverser)
} // class Eryn

