Package com.singularsys.jep.walkers

# Class PostfixTreeWalker

java.lang.Object
com.singularsys.jep.walkers.PostfixTreeWalker

Direct Known Subclasses:
  `HookRemover`, `PostfixEvaluator`, `SerializableExpression`, `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:
  - `PrefixTreeWalker`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PostfixTreeWalker()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected boolean`
  `suppressExaminingChildren(Node node)`
  Whether to examine the children of `this` nodes.
  `protected abstract void`
  `visit(ASTConstant node, int nchildren, int depth1)`
  Visit a constant node
  `protected abstract void`
  `visit(ASTFunNode node, int nchildren, int depth1)`
  Visit a function node
  `protected abstract void`
  `visit(ASTOpNode node, int nchildren, int depth1)`
  Visit an operator node
  `protected abstract void`
  `visit(ASTVarNode node, int nchildren, int depth1)`
  Visit a variable node
  `protected final void`
  `walk(Node top)`
  Start transversal of the expression.
  `protected final void`
  `walkSubEquations(Node child)`
  If a `suppressExaminingChildren(Node)` returns true, then the children of the node will not be visited by default.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## 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`