diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index c98b8501d9d03e337c65385fd0ed7357089b0ea7..cfca8cf9318b51372c624199f448ac401cbb965e 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -520,6 +520,12 @@ condit_sym
 				op.reset(new Wccl::Conditional<Wccl::TSet>(test, p_true));
 			}
 		}
+	| Q_MARK 
+			(p_true = sym_set_operators [tagset, vars])
+		Q_MARK 
+			(test = logical_predicates [tagset, vars]) {
+			op.reset(new Wccl::Conditional<Wccl::TSet>(test, p_true));
+		}
 ;
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
@@ -642,6 +648,12 @@ condit_str
 			op.reset(new Wccl::Conditional<Wccl::StrSet>(test, p_true));
 		}
 	}
+	| Q_MARK 
+			p_true = string_operators [tagset, vars]
+		Q_MARK 
+			test = logical_predicates [tagset, vars] {
+			op.reset(new Wccl::Conditional<Wccl::StrSet>(test, p_true));
+		}
 ;
 
 // ----------------------------------------------------------------------------
@@ -881,6 +893,12 @@ condit_bool
 			op.reset(new Wccl::Conditional<Wccl::Bool>(test, p_true));
 		}
 	}
+	| Q_MARK 
+			p_true = logical_predicates [tagset, vars]
+		Q_MARK 
+			test = logical_predicates [tagset, vars] {
+			op.reset(new Wccl::Conditional<Wccl::Bool>(test, p_true));
+		}
 ;
 
 ///////////////////////////////////////////////////////////////////////////////