diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index cbf43f49d2ecd41f58f7beebc5eaadb66b22750e..c6937c0e867135d84567961abcd9a18c985ffe98 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -849,6 +849,8 @@ bool_operator
 	// agreement
 	| ret = bool_agreement  [tagset, vars]
 	//
+	| ret = bool_phrase     [tagset, vars]
+	//
 	| LPAREN ret = bool_operator [tagset, vars] RPAREN
 ;
 
@@ -1167,6 +1169,78 @@ bool_agreement
 		}
 ;
 
+// ----------------------------------------------------------------------------
+// Parse operator on L1 level
+bool_phrase
+	[const Corpus2::Tagset& tagset, Variables& vars]
+	returns [boost::shared_ptr<Function<Bool> > ret]
+	: ret = bool_phrase_annotation [tagset, vars]
+	| ret = bool_phrase_iteration  [tagset, vars]
+;
+
+// ----------------------------------------------------------------------------
+// Annotation operator: phrase, phrase_beg, phrase_end, phrase_whole, phrase_pp
+bool_phrase_annotation
+	[const Corpus2::Tagset& tagset, Variables& vars]
+	returns [boost::shared_ptr<Function<Bool> > ret]
+{
+	boost::shared_ptr<Function<Position> > lpos, rpos;
+}
+	: "phrase" LPAREN 
+			lpos = position_operator [tagset, vars] COMMA n1: STRING 
+		RPAREN {
+			// TODO
+		}
+	| "phrase_beg" LPAREN 
+			lpos = position_operator [tagset, vars] COMMA n2: STRING 
+		RPAREN {
+			// TODO
+		}
+	| "phrase_end" LPAREN 
+			lpos = position_operator [tagset, vars] COMMA n3: STRING 
+		RPAREN {
+			// TODO
+		}
+	| "phrase_whole" LPAREN 
+			lpos = position_operator [tagset, vars] COMMA 
+			rpos = position_operator [tagset, vars] COMMA n4: STRING 
+		RPAREN {
+			// TODO
+		}
+	| "phrase_pp" LPAREN 
+			lpos = position_operator [tagset, vars] COMMA 
+			rpos = position_operator [tagset, vars] COMMA n5: STRING 
+		RPAREN {
+			// TODO
+		}
+;
+
+// ----------------------------------------------------------------------------
+// Phrase iteration operator: lphrase, rphrase
+bool_phrase_iteration
+	[const Corpus2::Tagset& tagset, Variables& vars]
+	returns [boost::shared_ptr<Function<Bool> > ret]
+{
+	boost::shared_ptr<Function<Position> > position;
+	boost::shared_ptr<VarGetter<Position> > var_position;
+}
+	: "lphrase" LPAREN
+			position     = position_operator [tagset, vars] COMMA
+			var_position = position_variable [vars]         COMMA
+			n1: STRING
+		RPAREN {
+			// TODO
+		}
+	| "rphrase" LPAREN 
+			position     = position_operator [tagset, vars] COMMA
+			var_position = position_variable [vars]         COMMA
+			n2: STRING
+		RPAREN {
+			// TODO
+		}
+;
+
+
 // ----------------------------------------------------------------------------
 // Setvar operator
 // Returns boost::shared_ptr<Function<Bool> >