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 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
-
-
Constructor Summary
Constructors Constructor Description PostfixTreeWalker()
-
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 nodeprotected abstract void
visit(ASTFunNode node, int nchildren, int depth1)
Visit a function nodeprotected abstract void
visit(ASTOpNode node, int nchildren, int depth1)
Visit an operator nodeprotected abstract void
visit(ASTVarNode node, int nchildren, int depth1)
Visit a variable nodeprotected void
walk(Node top)
Start transversal of the expression.protected void
walkSubEquations(Node child)
If asupressExaminingChildren(Node)
returns true, then the children of the node will not be visited by default.
-
-
-
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 asupressExaminingChildren(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 visitednchildren
- number of children of the nodedepth1
- 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 visitednchildren
- number of children of the nodedepth1
- 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 visitednchildren
- number of children of the nodedepth1
- 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 visitednchildren
- number of children of the nodedepth1
- depth of tree, root node is depth 1.- Throws:
JepException
-
-