public class FlattenVisitor extends NodeVisitor
FlattenVisitor
flattens the AST,Modifier and Type | Field and Description |
---|---|
protected static int |
count |
protected java.util.Set<Term> |
neverFlatten |
protected NodeFactory |
nf |
protected java.util.Set<Term> |
noFlatten |
protected java.util.LinkedList<java.util.List<Stmt>> |
stack |
protected TypeSystem |
ts |
Constructor and Description |
---|
FlattenVisitor(TypeSystem ts,
NodeFactory nf) |
Modifier and Type | Method and Description |
---|---|
NodeVisitor |
enter(Node parent,
Node n)
When entering a BlockStatement, place a new StatementList
onto the stack
|
Node |
leave(Node parent,
Node old,
Node n,
NodeVisitor v)
Flatten complex expressions within the AST
|
protected static java.lang.String |
newID() |
Node |
override(Node parent,
Node n)
Given a tree rooted at
n , the visitor has the option of
overriding all traversal of the children of n . |
protected TypeSystem ts
protected NodeFactory nf
protected java.util.LinkedList<java.util.List<Stmt>> stack
protected static int count
protected java.util.Set<Term> noFlatten
protected java.util.Set<Term> neverFlatten
public FlattenVisitor(TypeSystem ts, NodeFactory nf)
public Node override(Node parent, Node n)
NodeVisitor
n
, the visitor has the option of
overriding all traversal of the children of n
. If no
changes were made to n
and the visitor wishes to prevent
further traversal of the tree, then it should return n
. If
changes were made to the subtree, then the visitor should return a
copy of n
with appropriate changes. Finally, if the
visitor does not wish to override traversal of the subtree rooted at
n
, then it should return null
.
The default implementation of this method is to call
override(n)
, as most subclasses do not need to know
the parent of the node n
.
override
in class NodeVisitor
parent
- The parent of n
,
null
if n
has no parent.n
- The root of the subtree to be traversed.null
if it
is to continue.protected static java.lang.String newID()
public NodeVisitor enter(Node parent, Node n)
enter
in class NodeVisitor
parent
- The parent of n
, null
if n
has no parent.n
- The root of the subtree to be traversed.NodeVisitor
which should be used to visit the
children of n
.public Node leave(Node parent, Node old, Node n, NodeVisitor v)
leave
in class NodeVisitor
parent
- The parent of old
,
null
if old
has no parent.old
- The original state of root of the current subtree.n
- The current state of the root of the current subtree.v
- The NodeVisitor
object used to visit the children.n
.