diff options
author | Morgan Deters <mdeters@gmail.com> | 2011-04-23 05:15:56 +0000 |
---|---|---|
committer | Morgan Deters <mdeters@gmail.com> | 2011-04-23 05:15:56 +0000 |
commit | 57b8c4c8581d2d3ffcf3d3a1bb228271cb4d074a (patch) | |
tree | 1c1781cc83118e4bbd2ad6939b16734c30a69f1a /src/printer | |
parent | 673d0e86b91094a58433c3ca71591fb0a0c60f84 (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')
-rw-r--r-- | src/printer/cvc/cvc_printer.cpp | 22 |
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] << ')'; } } } |