Class PostfixTreeWalker

  • Direct Known Subclasses:
    HookRemover, PostfixEvaluator, SerializableExpression, TreeAnalyzer

    public abstract class PostfixTreeWalker
    extends java.lang.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
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      protected boolean supressExaminingChildren​(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 void walk​(Node top)
      Start transversal of the expression.
      protected void walkSubEquations​(Node child)
      If a supressExaminingChildren(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 Detail

      • PostfixTreeWalker

        public PostfixTreeWalker()
    • Method Detail

      • walk

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

        protected boolean supressExaminingChildren​(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 supressExaminingChildren(Node) returns true, then the children of the node will not be visited by default. This method allows a sub-class 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 sub class will call this method when needed from it's 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