summaryrefslogtreecommitdiff
path: root/src/printer
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2021-09-14 15:43:47 -0500
committerGitHub <noreply@github.com>2021-09-14 20:43:47 +0000
commitd34e563fe48c42aa06eea44191a21dcf29772339 (patch)
tree24d25263b80045c98fe0d65f251ea2f56b6d4cbe /src/printer
parent1014428633ca233aa0c51818d995acaca6ebfda6 (diff)
Utilities in preparation for print benchmark utility (#7190)
This adds a few utilities in preparation for the print benchmark utility, which will replace our own dumping infrastructure.
Diffstat (limited to 'src/printer')
-rw-r--r--src/printer/printer.cpp52
-rw-r--r--src/printer/printer.h8
2 files changed, 60 insertions, 0 deletions
diff --git a/src/printer/printer.cpp b/src/printer/printer.cpp
index e038952c4..9bd68e697 100644
--- a/src/printer/printer.cpp
+++ b/src/printer/printer.cpp
@@ -204,6 +204,13 @@ void Printer::toStreamCmdDeclareFunction(std::ostream& out,
printUnknownCommand(out, "declare-fun");
}
+void Printer::toStreamCmdDeclareFunction(std::ostream& out, const Node& v) const
+{
+ std::stringstream vs;
+ vs << v;
+ toStreamCmdDeclareFunction(out, vs.str(), v.getType());
+}
+
void Printer::toStreamCmdDeclarePool(std::ostream& out,
const std::string& id,
TypeNode type,
@@ -235,6 +242,25 @@ void Printer::toStreamCmdDefineFunction(std::ostream& out,
printUnknownCommand(out, "define-fun");
}
+void Printer::toStreamCmdDefineFunction(std::ostream& out,
+ Node v,
+ Node lambda) const
+{
+ std::stringstream vs;
+ vs << v;
+ std::vector<Node> formals;
+ Node body = lambda;
+ TypeNode rangeType = v.getType();
+ if (body.getKind() == kind::LAMBDA)
+ {
+ formals.insert(formals.end(), lambda[0].begin(), lambda[0].end());
+ body = lambda[1];
+ Assert(rangeType.isFunction());
+ rangeType = rangeType.getRangeType();
+ }
+ toStreamCmdDefineFunction(out, vs.str(), formals, rangeType, body);
+}
+
void Printer::toStreamCmdDefineFunctionRec(
std::ostream& out,
const std::vector<Node>& funcs,
@@ -244,6 +270,32 @@ void Printer::toStreamCmdDefineFunctionRec(
printUnknownCommand(out, "define-fun-rec");
}
+void Printer::toStreamCmdDefineFunctionRec(
+ std::ostream& out,
+ const std::vector<Node>& funcs,
+ const std::vector<Node>& lambdas) const
+{
+ std::vector<std::vector<Node>> formals;
+ std::vector<Node> formulas;
+ for (const Node& l : lambdas)
+ {
+ std::vector<Node> formalsVec;
+ Node formula;
+ if (l.getKind() == kind::LAMBDA)
+ {
+ formalsVec.insert(formalsVec.end(), l[0].begin(), l[0].end());
+ formula = l[1];
+ }
+ else
+ {
+ formula = l;
+ }
+ formals.emplace_back(formalsVec);
+ formulas.emplace_back(formula);
+ }
+ toStreamCmdDefineFunctionRec(out, funcs, formals, formulas);
+}
+
void Printer::toStreamCmdSetUserAttribute(std::ostream& out,
const std::string& attr,
Node n) const
diff --git a/src/printer/printer.h b/src/printer/printer.h
index 5e141fe8f..5ffe07f77 100644
--- a/src/printer/printer.h
+++ b/src/printer/printer.h
@@ -87,6 +87,8 @@ class Printer
virtual void toStreamCmdDeclareFunction(std::ostream& out,
const std::string& id,
TypeNode type) const;
+ /** Variant of above for a pre-existing variable */
+ void toStreamCmdDeclareFunction(std::ostream& out, const Node& v) const;
/** Print declare-pool command */
virtual void toStreamCmdDeclarePool(std::ostream& out,
const std::string& id,
@@ -109,6 +111,8 @@ class Printer
const std::vector<Node>& formals,
TypeNode range,
Node formula) const;
+ /** Variant of above that takes the definition */
+ void toStreamCmdDefineFunction(std::ostream& out, Node v, Node lambda) const;
/** Print define-fun-rec command */
virtual void toStreamCmdDefineFunctionRec(
@@ -116,6 +120,10 @@ class Printer
const std::vector<Node>& funcs,
const std::vector<std::vector<Node>>& formals,
const std::vector<Node>& formulas) const;
+ /** Variant of above that takes the definition */
+ void toStreamCmdDefineFunctionRec(std::ostream& out,
+ const std::vector<Node>& funcs,
+ const std::vector<Node>& lambdas) const;
/** Print set-user-attribute command */
void toStreamCmdSetUserAttribute(std::ostream& out,
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback