public class FlattenVisitor extends Object implements net.sourceforge.czt.base.visitor.TermVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.AndPredVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.OrPredVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.ImpliesPredVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.IffPredVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.NegPredVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.MemPredVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.FalsePredVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.TruePredVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.ExistsPredVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.ForallPredVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.NumExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.ApplExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.BindSelExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.TupleSelExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.RefExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.PowerExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.SetExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.SetCompExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.MuExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.ProdExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.TupleExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.BindExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.LetExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.ZNameVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.SchExprVisitor<net.sourceforge.czt.z.ast.ZName>, net.sourceforge.czt.z.visitor.CondExprVisitor<net.sourceforge.czt.z.ast.ZName>
The ZLive parameter to the constructor is used to access the section manager (to get the current context of the expr/pred).
TODO: could look for common subexpressions. Eg. keep track of all expressions translated so far in a Map<Expr,ZName>.
| Constructor and Description |
|---|
FlattenVisitor(ZLive zlive,
FlatPredList destination,
DefinitionTable defns) |
| Modifier and Type | Method and Description |
|---|---|
protected String |
binaryRelation(net.sourceforge.czt.z.ast.Expr e)
Extracts the names of known binary relations.
|
protected net.sourceforge.czt.z.ast.ZName |
createBoundName()
Creates a fresh ZName and sets it (by default)
to be a bound variable of the current FlatPredList.
|
protected ArrayList<net.sourceforge.czt.z.ast.ZName> |
flattenExprList(List<net.sourceforge.czt.z.ast.Expr> elements)
An auxiliary method for visiting a list of Expr.
|
static RelSet |
getRelSet(net.sourceforge.czt.z.ast.LetExpr e)
Non-null result means this LET encodes a relation/function space.
|
boolean |
isGivenSet(net.sourceforge.czt.z.ast.RefExpr expr)
True if expr is a given set.
|
boolean |
isGivenValue(net.sourceforge.czt.z.ast.RefExpr expr)
True if expr is a member of a given set.
|
protected net.sourceforge.czt.z.ast.ZName |
notYet(net.sourceforge.czt.base.ast.Term t)
Throws a 'not yet implemented' exception.
|
protected net.sourceforge.czt.z.ast.ZName |
notYet(net.sourceforge.czt.base.ast.Term t,
String msg)
Throws a 'not yet implemented' exception.
|
net.sourceforge.czt.z.ast.ZName |
visitAndPred(net.sourceforge.czt.z.ast.AndPred p)
Adds both conjuncts to the flatten list.
|
net.sourceforge.czt.z.ast.ZName |
visitApplExpr(net.sourceforge.czt.z.ast.ApplExpr e)
Each ApplExpr is flattened into a different kind of FlatPred.
|
net.sourceforge.czt.z.ast.ZName |
visitBindExpr(net.sourceforge.czt.z.ast.BindExpr e) |
net.sourceforge.czt.z.ast.ZName |
visitBindSelExpr(net.sourceforge.czt.z.ast.BindSelExpr e) |
net.sourceforge.czt.z.ast.ZName |
visitCondExpr(net.sourceforge.czt.z.ast.CondExpr cond) |
net.sourceforge.czt.z.ast.ZName |
visitExistsPred(net.sourceforge.czt.z.ast.ExistsPred p)
TODO: see if we can optimize more aggressively here.
|
net.sourceforge.czt.z.ast.ZName |
visitFalsePred(net.sourceforge.czt.z.ast.FalsePred p) |
net.sourceforge.czt.z.ast.ZName |
visitForallPred(net.sourceforge.czt.z.ast.ForallPred p) |
net.sourceforge.czt.z.ast.ZName |
visitIffPred(net.sourceforge.czt.z.ast.IffPred p) |
net.sourceforge.czt.z.ast.ZName |
visitImpliesPred(net.sourceforge.czt.z.ast.ImpliesPred p) |
net.sourceforge.czt.z.ast.ZName |
visitLetExpr(net.sourceforge.czt.z.ast.LetExpr e)
This translates our special LET isFun==1;...
|
net.sourceforge.czt.z.ast.ZName |
visitMemPred(net.sourceforge.czt.z.ast.MemPred p) |
net.sourceforge.czt.z.ast.ZName |
visitMuExpr(net.sourceforge.czt.z.ast.MuExpr e) |
net.sourceforge.czt.z.ast.ZName |
visitNegPred(net.sourceforge.czt.z.ast.NegPred p) |
net.sourceforge.czt.z.ast.ZName |
visitNumExpr(net.sourceforge.czt.z.ast.NumExpr e)
NumExpr objects are converted into tmp = Num.
|
net.sourceforge.czt.z.ast.ZName |
visitOrPred(net.sourceforge.czt.z.ast.OrPred p) |
net.sourceforge.czt.z.ast.ZName |
visitPowerExpr(net.sourceforge.czt.z.ast.PowerExpr e) |
net.sourceforge.czt.z.ast.ZName |
visitProdExpr(net.sourceforge.czt.z.ast.ProdExpr e) |
net.sourceforge.czt.z.ast.ZName |
visitRefExpr(net.sourceforge.czt.z.ast.RefExpr e)
Simple RefExpr objects are returned unchanged.
|
net.sourceforge.czt.z.ast.ZName |
visitSchExpr(net.sourceforge.czt.z.ast.SchExpr sch)
This does [D | P] = \{ D | P @ \theta [D | true] \}
because this is currently hard to do in preprocess.tex.
|
net.sourceforge.czt.z.ast.ZName |
visitSetCompExpr(net.sourceforge.czt.z.ast.SetCompExpr e) |
net.sourceforge.czt.z.ast.ZName |
visitSetExpr(net.sourceforge.czt.z.ast.SetExpr e) |
net.sourceforge.czt.z.ast.ZName |
visitTerm(net.sourceforge.czt.base.ast.Term term)
We throw an error if we reach a kind of term that we do not handle.
|
net.sourceforge.czt.z.ast.ZName |
visitTruePred(net.sourceforge.czt.z.ast.TruePred p) |
net.sourceforge.czt.z.ast.ZName |
visitTupleExpr(net.sourceforge.czt.z.ast.TupleExpr e) |
net.sourceforge.czt.z.ast.ZName |
visitTupleSelExpr(net.sourceforge.czt.z.ast.TupleSelExpr e) |
net.sourceforge.czt.z.ast.ZName |
visitZName(net.sourceforge.czt.z.ast.ZName e)
Name objects are returned unchanged,
except for \emptyset, which is unfolded into {}.
|
public FlattenVisitor(ZLive zlive, FlatPredList destination, DefinitionTable defns)
public boolean isGivenSet(net.sourceforge.czt.z.ast.RefExpr expr)
protected net.sourceforge.czt.z.ast.ZName createBoundName()
public boolean isGivenValue(net.sourceforge.czt.z.ast.RefExpr expr)
protected net.sourceforge.czt.z.ast.ZName notYet(net.sourceforge.czt.base.ast.Term t)
protected net.sourceforge.czt.z.ast.ZName notYet(net.sourceforge.czt.base.ast.Term t,
String msg)
protected String binaryRelation(net.sourceforge.czt.z.ast.Expr e)
protected ArrayList<net.sourceforge.czt.z.ast.ZName> flattenExprList(List<net.sourceforge.czt.z.ast.Expr> elements)
elements - a list of Expr.public net.sourceforge.czt.z.ast.ZName visitTerm(net.sourceforge.czt.base.ast.Term term)
visitTerm in interface net.sourceforge.czt.base.visitor.TermVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitAndPred(net.sourceforge.czt.z.ast.AndPred p)
visitAndPred in interface net.sourceforge.czt.z.visitor.AndPredVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitOrPred(net.sourceforge.czt.z.ast.OrPred p)
visitOrPred in interface net.sourceforge.czt.z.visitor.OrPredVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitImpliesPred(net.sourceforge.czt.z.ast.ImpliesPred p)
visitImpliesPred in interface net.sourceforge.czt.z.visitor.ImpliesPredVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitIffPred(net.sourceforge.czt.z.ast.IffPred p)
visitIffPred in interface net.sourceforge.czt.z.visitor.IffPredVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitNegPred(net.sourceforge.czt.z.ast.NegPred p)
visitNegPred in interface net.sourceforge.czt.z.visitor.NegPredVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitMemPred(net.sourceforge.czt.z.ast.MemPred p)
visitMemPred in interface net.sourceforge.czt.z.visitor.MemPredVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitFalsePred(net.sourceforge.czt.z.ast.FalsePred p)
visitFalsePred in interface net.sourceforge.czt.z.visitor.FalsePredVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitTruePred(net.sourceforge.czt.z.ast.TruePred p)
visitTruePred in interface net.sourceforge.czt.z.visitor.TruePredVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitExistsPred(net.sourceforge.czt.z.ast.ExistsPred p)
visitExistsPred in interface net.sourceforge.czt.z.visitor.ExistsPredVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitForallPred(net.sourceforge.czt.z.ast.ForallPred p)
visitForallPred in interface net.sourceforge.czt.z.visitor.ForallPredVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitZName(net.sourceforge.czt.z.ast.ZName e)
visitZName in interface net.sourceforge.czt.z.visitor.ZNameVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitRefExpr(net.sourceforge.czt.z.ast.RefExpr e)
visitRefExpr in interface net.sourceforge.czt.z.visitor.RefExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitNumExpr(net.sourceforge.czt.z.ast.NumExpr e)
visitNumExpr in interface net.sourceforge.czt.z.visitor.NumExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitApplExpr(net.sourceforge.czt.z.ast.ApplExpr e)
visitApplExpr in interface net.sourceforge.czt.z.visitor.ApplExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitBindSelExpr(net.sourceforge.czt.z.ast.BindSelExpr e)
visitBindSelExpr in interface net.sourceforge.czt.z.visitor.BindSelExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitTupleSelExpr(net.sourceforge.czt.z.ast.TupleSelExpr e)
visitTupleSelExpr in interface net.sourceforge.czt.z.visitor.TupleSelExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitPowerExpr(net.sourceforge.czt.z.ast.PowerExpr e)
visitPowerExpr in interface net.sourceforge.czt.z.visitor.PowerExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitSetExpr(net.sourceforge.czt.z.ast.SetExpr e)
visitSetExpr in interface net.sourceforge.czt.z.visitor.SetExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitSetCompExpr(net.sourceforge.czt.z.ast.SetCompExpr e)
visitSetCompExpr in interface net.sourceforge.czt.z.visitor.SetCompExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitMuExpr(net.sourceforge.czt.z.ast.MuExpr e)
visitMuExpr in interface net.sourceforge.czt.z.visitor.MuExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitProdExpr(net.sourceforge.czt.z.ast.ProdExpr e)
visitProdExpr in interface net.sourceforge.czt.z.visitor.ProdExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitTupleExpr(net.sourceforge.czt.z.ast.TupleExpr e)
visitTupleExpr in interface net.sourceforge.czt.z.visitor.TupleExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitBindExpr(net.sourceforge.czt.z.ast.BindExpr e)
visitBindExpr in interface net.sourceforge.czt.z.visitor.BindExprVisitor<net.sourceforge.czt.z.ast.ZName>public static RelSet getRelSet(net.sourceforge.czt.z.ast.LetExpr e)
public net.sourceforge.czt.z.ast.ZName visitLetExpr(net.sourceforge.czt.z.ast.LetExpr e)
visitLetExpr in interface net.sourceforge.czt.z.visitor.LetExprVisitor<net.sourceforge.czt.z.ast.ZName>public net.sourceforge.czt.z.ast.ZName visitSchExpr(net.sourceforge.czt.z.ast.SchExpr sch)
visitSchExpr in interface net.sourceforge.czt.z.visitor.SchExprVisitor<net.sourceforge.czt.z.ast.ZName>zedObject - public net.sourceforge.czt.z.ast.ZName visitCondExpr(net.sourceforge.czt.z.ast.CondExpr cond)
visitCondExpr in interface net.sourceforge.czt.z.visitor.CondExprVisitor<net.sourceforge.czt.z.ast.ZName>Copyright © 2003–2016 Community Z Tools Project. All rights reserved.