diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index 14ebc986f2aba5e088ef2f6ad50f5089e351e0bb..e354413c8682082a69c0a5a1224258bbc910110e 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -198,8 +198,8 @@ parse_position_operator
 //   'a' "a" [] ['a'] ['a', 'b'] ["a"] ["a", "b"] ['a', "b"]
 // Parsing strset literal and returning plain strset value.
 // Returns boost::shared_ptr<StrSet> 
-strset_literal returns 
-	[boost::shared_ptr<StrSet> s_set]
+strset_literal 
+	returns [boost::shared_ptr<StrSet> s_set]
 {
 	s_set.reset(new StrSet());
 }
@@ -488,7 +488,8 @@ symset_operator
 	returns [boost::shared_ptr<Function<TSet> > ret]
 	: ret = symset_var_val   [tagset, vars] 
 	| ret = symset_condition [tagset, vars]
-
+	//
+	| LPAREN ret = symset_operator [tagset, vars] RPAREN
 ;
 
 // ----------------------------------------------------------------------------
@@ -540,6 +541,8 @@ position_operator
 	: ret = position_var_val   [vars]
 	| ret = position_relpos    [tagset, vars]
 	| ret = position_condition [tagset, vars]
+	//
+	| LPAREN ret = position_operator [tagset, vars] RPAREN
 ;
 
 // ----------------------------------------------------------------------------
@@ -609,6 +612,8 @@ string_operator [const Corpus2::Tagset& tagset, Variables& vars]
 	| ret = strset_affix     [tagset, vars] 
 	| ret = strset_var_val   [tagset, vars] 
 	| ret = strset_condition [tagset, vars]
+	//
+	| LPAREN ret = string_operator [tagset, vars] RPAREN
 ;
 
 // ----------------------------------------------------------------------------
@@ -738,6 +743,8 @@ bool_operator
 	| ret = equal_operator  [tagset, vars]
 	| ret = in_operator     [tagset, vars]
 	| ret = inter_operator  [tagset, vars]
+	//
+	| LPAREN ret = bool_operator [tagset, vars] RPAREN
 ;
 
 // ----------------------------------------------------------------------------