+
+ abstract String op();
+
+ String toXCQL(int level) {
+ return (indent(level) + "<triple>\n" +
+ booleanXQL(level+1) +
+ left.toXCQL(level+1) +
+ right.toXCQL(level+1) +
+ indent(level) + "</triple>\n");
+ }
+
+ String booleanXQL(int level) {
+ return(indent(level) + "<boolean>\n" +
+ indent(level+1) + "<value>" + op() + "</value>\n" +
+ indent(level) + "</boolean>\n");
+ }
+
+ String toCQL() {
+ // ### We don't always need parens around the operands
+ return "(" + left.toCQL() + ") " + op() + " (" + right.toCQL() + ")";
+ }