summaryrefslogtreecommitdiff
path: root/src/printer/cvc
diff options
context:
space:
mode:
authorMorgan Deters <mdeters@gmail.com>2011-04-23 05:15:56 +0000
committerMorgan Deters <mdeters@gmail.com>2011-04-23 05:15:56 +0000
commit57b8c4c8581d2d3ffcf3d3a1bb228271cb4d074a (patch)
tree1c1781cc83118e4bbd2ad6939b16734c30a69f1a /src/printer/cvc
parent673d0e86b91094a58433c3ca71591fb0a0c60f84 (diff)
* reviewed BooleanSimplification, added documentation & unit test
* work around a lexer ambiguity in CVC grammar * add support for tracing antlr parser/lexer * add parsing support for more language features * initial parameterized types parsing work to support Andy's work
Diffstat (limited to 'src/printer/cvc')
-rw-r--r--src/printer/cvc/cvc_printer.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/printer/cvc/cvc_printer.cpp b/src/printer/cvc/cvc_printer.cpp
index b83fd42dc..77696465c 100644
--- a/src/printer/cvc/cvc_printer.cpp
+++ b/src/printer/cvc/cvc_printer.cpp
@@ -289,19 +289,31 @@ void CvcPrinter::toStream(std::ostream& out, TNode n,
// collapse NOT-over-EQUAL
out << n[0][0] << " /= " << n[0][1];
} else if(n.getNumChildren() == 2) {
- // infix operator
+ // infix binary operator
out << '(' << n[0] << ' ' << n.getOperator() << ' ' << n[1] << ')';
+ } else if(n.getKind() == kind::AND ||
+ n.getKind() == kind::OR) {
+ // infix N-ary operator
+ TNode::iterator i = n.begin();
+ out << '(' << *i++;
+ while(i != n.end()) {
+ out << ' ' << n.getOperator() << ' ' << *i++;
+ }
+ out << ')';
} else if(k == kind::BITVECTOR_NOT) {
// precedence on ~ is a little unexpected; add parens
out << "(~(" << n[0] << "))";
} else {
- // prefix operator
- out << n.getOperator() << ' ';
- if(n.getNumChildren() > 0) {
+ // prefix N-ary operator for N != 2
+ if(n.getNumChildren() == 0) {
+ // no parens or spaces
+ out << n.getOperator();
+ } else {
+ out << '(' << n.getOperator() << ' ';
if(n.getNumChildren() > 1) {
copy(n.begin(), n.end() - 1, ostream_iterator<TNode>(out, " "));
}
- out << n[n.getNumChildren() - 1];
+ out << n[n.getNumChildren() - 1] << ')';
}
}
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback