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.