Class PostfixTreeWalker

java.lang.Object
com.singularsys.jep.walkers.PostfixTreeWalker
Direct Known Subclasses:
HookRemover, PostfixEvaluator, TreeAnalyzer

public abstract class PostfixTreeWalker extends Object
Base class for routines which use a non-recursive tree walker strategy. The typical recursive strategy can use a lot of stack frames for very large expressions these can cause a stack overflow exception. Subclasses should implement the visit methods. to traverse the various nodes. In general these methods should not recursively walk the child nodes. This class uses a postfix traversal scheme hence the nodes of '1+2' will be visited in the order 1,2,+.
Since:
3.2 depth of root node is now 1 not 0
Author:
Richard Morris
See Also:
  • Constructor Details

    • PostfixTreeWalker

      public PostfixTreeWalker()
  • Method Details

    • walk

      protected final void walk(Node top) throws JepException
      Start transversal of the expression.
      Parameters:
      top - top node for the expression
      Throws:
      JepException
    • suppressExaminingChildren

      protected boolean suppressExaminingChildren(Node node)
      Whether to examine the children of this nodes. In some cases it is necessary to jump out of traversal strategy to process a node.
      Parameters:
      node -
      Returns:
      false unless overridden by sub-class
    • walkSubEquations

      protected final void walkSubEquations(Node child) throws JepException
      If a suppressExaminingChildren(Node) returns true, then the children of the node will not be visited by default. This method allows a subclass to visit the children of such a node if needed.

      For example an evaluator which wants to implement lazy evaluation for the logical AND operator the subclass will call this method when needed from its implementation of visit(ASTOpNode, int, int).

      Parameters:
      child - child of a node to start traversing from
      Throws:
      JepException
    • visit

      protected abstract void visit(ASTFunNode node, int nchildren, int depth1) throws JepException
      Visit a function node
      Parameters:
      node - the current node being visited
      nchildren - number of children of the node
      depth1 - depth of tree, root node is depth 1.
      Throws:
      JepException
    • visit

      protected abstract void visit(ASTOpNode node, int nchildren, int depth1) throws JepException
      Visit an operator node
      Parameters:
      node - the current node being visited
      nchildren - number of children of the node
      depth1 - depth of tree, root node is depth 1.
      Throws:
      JepException
    • visit

      protected abstract void visit(ASTVarNode node, int nchildren, int depth1) throws JepException
      Visit a variable node
      Parameters:
      node - the current node being visited
      nchildren - number of children of the node
      depth1 - depth of tree, root node is depth 1.
      Throws:
      JepException
    • visit

      protected abstract void visit(ASTConstant node, int nchildren, int depth1) throws JepException
      Visit a constant node
      Parameters:
      node - the current node being visited
      nchildren - number of children of the node
      depth1 - depth of tree, root node is depth 1.
      Throws:
      JepException