diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index 5317b671915daa66728b116744718ee72fc55324..1ba11ff5fea81d052813d610e07916677aa4b5a1 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -112,10 +112,10 @@ parse_string_operator
 	res.reset(new ANTLRParserResult<Wccl::StrSet>());
 	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > op;
 }
-	: op = string_operators [*res->variables.get()] {
+	: op = string_operators [tagset, *res->variables.get()] {
 		res->op = op;
 	}
-	| op = condit_str [*res->variables.get()] {
+	| op = condit_str [tagset, *res->variables.get()] {
 		res->op = op;
 	}
 ;
@@ -130,10 +130,10 @@ parse_predicates
 	res.reset(new ANTLRParserResult<Wccl::Bool>());
 	boost::shared_ptr<Wccl::Function<Wccl::Bool> > op;
 }
-	: op = logical_predicates [*res->variables.get()] {
+	: op = logical_predicates [tagset, *res->variables.get()] {
 		res->op = op;
 	}
-	| op = condit_bool [*res->variables.get()] {
+	| op = condit_bool [tagset, *res->variables.get()] {
 		res->op = op;
 	}
 ;
@@ -148,10 +148,10 @@ parse_sym_set_operator
 	res.reset(new ANTLRParserResult<Wccl::TSet>());
 	boost::shared_ptr<Wccl::Function<Wccl::TSet> > op;
 }
-	: op = sym_set_operators [*res->variables.get()] {
+	: op = sym_set_operators [tagset, *res->variables.get()] {
 		res->op = op;
 	}
-	| op = condit_sym [*res->variables.get()] {
+	| op = condit_sym [tagset, *res->variables.get()] {
 		res->op = op;
 	}
 ;
@@ -196,33 +196,45 @@ str_set_value
 // Element of sym set. This rule, inset element into set.
 // Element may be: a or `a `
 sym_set_elem
-	[boost::shared_ptr<Wccl::TSet> &t_set]
+	[const Corpus2::Tagset& tagset, boost::shared_ptr<Wccl::TSet>& t_set]
 	: s1: SYMBOL {
-//    t_set->insert(token_ref_to_ustring(s1));
+		try {
+			t_set->insert_symbol(tagset, token_ref_to_std_string(s1));
+		}
+		catch(Corpus2::TagParseError &e) {
+			throw(ParserException(e.info()));
+		}
 	}
 	| G_MARK s2: SYMBOL G_MARK {
-//    t_set->insert(token_ref_to_ustring(s2));
+		try {
+			t_set->insert_symbol(tagset, token_ref_to_std_string(s2));
+		}
+		catch(Corpus2::TagParseError &e) {
+			throw(ParserException(e.info()));
+		}
 	}
 ;
 // sym set literal
 // {} {sym_set_elem} {sym_set_elem, ..., sym_set_elem}
 // Returns boost::shared_ptr<Wccl::TSet>
 sym_set_literal
+	[const Corpus2::Tagset& tagset]
 	returns [boost::shared_ptr<Wccl::TSet> t_set]
 {
 	t_set.reset(new Wccl::TSet());
 }
 	: LCURLY RCURLY
-	| LCURLY sym_set_elem[t_set] (COMMA sym_set_elem[t_set]) *
+	| LCURLY sym_set_elem[tagset, t_set] (COMMA sym_set_elem[tagset, t_set]) *
 ;
 // Constant symbol set
 // Returns boost::shared_ptr<Wccl::Constant<Wccl::TSet> >
 sym_set_value 
+	[const Corpus2::Tagset& tagset]
 	returns [boost::shared_ptr<Wccl::Constant<Wccl::TSet> > val]
 {
 	boost::shared_ptr<Wccl::TSet> set;
 }
-	: set = sym_set_literal {
+	: set = sym_set_literal [tagset] {
 		val.reset(new Wccl::Constant<Wccl::TSet>(*set.get()));
 	}
 ;
@@ -410,17 +422,17 @@ boolean_variable
 // Returns boost::shared_ptr<Wccl::Function<Wccl::Bool> >
 // ----------------------------------------------------------------------------
 setvar_op 
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret]
-	: ret = setvar_pos  [vars]
-	| ret = setvar_bool [vars]
-	| ret = setvar_sset [vars]
-	| ret = setvar_tset [vars]
+	: ret = setvar_pos  [tagset, vars]
+	| ret = setvar_bool [tagset, vars]
+	| ret = setvar_sset [tagset, vars]
+	| ret = setvar_tset [tagset, vars]
 ;
 // Implementations of setvar:
 // ----------------------------------------------------------------------------
 setvar_pos 
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::Position> > ret_op;
@@ -434,42 +446,42 @@ setvar_pos
 
 // ----------------------------------------------------------------------------
 setvar_bool 
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret_op;
 	boost::shared_ptr<Wccl::VariableAccessor<Wccl::Bool> > ret_acc;
 }
 	: "setvar" LPAREN ret_acc = boolean_variable_acc [vars] COMMA 
-										ret_op  = logical_predicates   [vars] RPAREN {
+										ret_op  = logical_predicates   [tagset, vars] RPAREN {
 		op.reset(new Wccl::VarSetter<Wccl::Bool>(*ret_acc.get(), ret_op));
 	}
 ;
 
 // ----------------------------------------------------------------------------
 setvar_sset
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ret_op;
 	boost::shared_ptr<Wccl::VariableAccessor<Wccl::StrSet> > ret_acc;
 }
 	: "setvar" LPAREN ret_acc = str_set_variable_acc [vars] COMMA 
-										ret_op  = string_operators     [vars] RPAREN  {
+										ret_op  = string_operators     [tagset, vars] RPAREN  {
 		op.reset(new Wccl::VarSetter<Wccl::StrSet>(*ret_acc.get(), ret_op));
 	}
 ;
 
 // ----------------------------------------------------------------------------
 setvar_tset 
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::TSet> > ret_op;
 	boost::shared_ptr<Wccl::VariableAccessor<Wccl::TSet> > ret_acc;
 }
 	: "setvar" LPAREN ret_acc = sym_set_variable_acc [vars] COMMA 
-										ret_op  = sym_set_operators    [vars] RPAREN  {
+										ret_op  = sym_set_operators    [tagset, vars] RPAREN  {
 		op.reset(new Wccl::VarSetter<Wccl::TSet>(*ret_acc.get(), ret_op));
 	}
 ;
@@ -480,33 +492,33 @@ setvar_tset
 // Returns boost::shared_ptr<Wccl::Function<Wccl::TSet> >
 // ----------------------------------------------------------------------------
 sym_set_operators
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::TSet> > ret]
-	: ret = op_sym_set [vars] 
+	: ret = op_sym_set [tagset, vars] 
 //	| ret = condit_sym [vars]
 ;
 // Implementations of symbol set operators:
 // ----------------------------------------------------------------------------
 op_sym_set
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::TSet> > op]
 	: op = sym_set_variable [vars]
-	| op = sym_set_value
+	| op = sym_set_value [tagset]
 ;
 
 // ----------------------------------------------------------------------------
 // if (Bool, TSet, TSet)
 // ? TSet ? Bool : {}
 condit_sym
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::TSet> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::Bool> > test;
 	boost::shared_ptr<Wccl::Function<Wccl::TSet> > p_true, p_false;
 }
-	: "if" LPAREN test  = logical_predicates [vars] COMMA 
-							p_true  = sym_set_operators  [vars] 
-							(COMMA p_false = sym_set_operators [vars])? 
+	: "if" LPAREN test  = logical_predicates [tagset, vars] COMMA 
+							p_true  = sym_set_operators  [tagset, vars] 
+							(COMMA p_false = sym_set_operators [tagset, vars])? 
 		{
 			if (p_false) {
 				op.reset(new Wccl::Conditional<Wccl::TSet>(test, p_true, p_false));
@@ -516,9 +528,9 @@ condit_sym
 			}
 		}
 	| Q_MARK 
-			(p_true = sym_set_operators [vars] | p_true = condit_sym [vars])
+			(p_true = sym_set_operators [tagset, vars] | p_true = condit_sym [tagset, vars])
 		Q_MARK 
-			(test = logical_predicates [vars] | test = condit_bool [vars])
+			(test = logical_predicates [tagset, vars] | test = condit_bool [tagset, vars])
 		{
 			op.reset(new Wccl::Conditional<Wccl::TSet>(test, p_true));
 		}
@@ -529,7 +541,7 @@ condit_sym
 // Returns boost::shared_ptr<Wccl::Function<Wccl::Position> >
 // ----------------------------------------------------------------------------
 position_operators
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Position> > ret]
 	: ret = op_position [vars] 
 ;
@@ -548,20 +560,20 @@ op_position
 // Returns boost::shared_ptr<Wccl::Function<Wccl::StrSet> >
 // ----------------------------------------------------------------------------
 string_operators 
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ret]
-	: ret = op_orth    [vars] 
-	| ret = op_base    [vars]
-	| ret = op_lower   [vars] 
-	| ret = op_upper   [vars]
-	| ret = op_affix   [vars] 
-	| ret = op_str_set [vars] 
+	: ret = op_orth    [tagset, vars] 
+	| ret = op_base    [tagset, vars]
+	| ret = op_lower   [tagset, vars] 
+	| ret = op_upper   [tagset, vars]
+	| ret = op_affix   [tagset, vars] 
+	| ret = op_str_set [tagset, vars] 
 //	| ret = condit_str [vars]
 ;
 // Implementations of string operators:
 // ----------------------------------------------------------------------------
 op_orth 
-	[Wccl::Variables& vars] 
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ret]
 {
 	boost::shared_ptr<Wccl::VarGetter<Wccl::Position> > pos;
@@ -572,7 +584,7 @@ op_orth
 ;
 // ----------------------------------------------------------------------------
 op_base 
-	[Wccl::Variables& vars] 
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ret]
 {
 	boost::shared_ptr<Wccl::VarGetter<Wccl::Position> > pos;
@@ -583,40 +595,40 @@ op_base
 ;
 // ----------------------------------------------------------------------------
 op_lower 
-	[Wccl::Variables& vars] 
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ret]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > o_ret;
 }
-	: "lower" LPAREN o_ret = string_operators[vars] RPAREN {
+	: "lower" LPAREN o_ret = string_operators[tagset, vars] RPAREN {
 		ret.reset(new Wccl::ToLower(o_ret));
 	}
 ;
 // ----------------------------------------------------------------------------
 op_upper 
-	[Wccl::Variables& vars] 
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ret]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > o_ret;
 }
-	: "upper" LPAREN o_ret = string_operators[vars] RPAREN {
+	: "upper" LPAREN o_ret = string_operators[tagset, vars] RPAREN {
 		ret.reset(new Wccl::ToUpper(o_ret));
 	}
 ;
 // ----------------------------------------------------------------------------
 op_affix 
-	[Wccl::Variables& vars] 
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ret]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > o_ret;
 }
-	: "affix" LPAREN o_ret = string_operators[vars] COMMA offset: INT RPAREN {
+	: "affix" LPAREN o_ret = string_operators[tagset, vars] COMMA offset: INT RPAREN {
 		ret.reset(new Wccl::Affix(o_ret, token_ref_to_int(offset)));
 	}
 ;
 // ----------------------------------------------------------------------------
 op_str_set
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > op]
 	: op = str_set_variable [vars]
 	| op = str_set_value 
@@ -625,15 +637,15 @@ op_str_set
 // if (Bool, StrSet, StrSet)
 // ? StrSet ? Bool : []
 condit_str
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::Bool> > test;
 	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > p_true, p_false;
 }
-	: "if" LPAREN test  = logical_predicates [vars] COMMA 
-							p_true  = string_operators   [vars] 
-							(COMMA p_false = string_operators [vars])? 
+	: "if" LPAREN test  = logical_predicates [tagset, vars] COMMA 
+							p_true  = string_operators   [tagset, vars] 
+							(COMMA p_false = string_operators [tagset, vars])? 
 	{
 		if (p_false) {
 			op.reset(new Wccl::Conditional<Wccl::StrSet>(test, p_true, p_false));
@@ -643,9 +655,9 @@ condit_str
 		}
 	}
 	| Q_MARK 
-			(p_true = string_operators [vars] | p_true = condit_str [vars])
+			(p_true = string_operators [tagset, vars] | p_true = condit_str [tagset, vars])
 		Q_MARK 
-			(test = logical_predicates [vars] | test = condit_bool [vars])
+			(test = logical_predicates [tagset, vars] | test = condit_bool [tagset, vars])
 		{
 			op.reset(new Wccl::Conditional<Wccl::StrSet>(test, p_true));
 		}
@@ -657,24 +669,24 @@ condit_str
 // Returns boost::shared_ptr<Wccl::Function<Wccl::Bool> >
 // ----------------------------------------------------------------------------
 logical_predicates
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret]
-	: ret = lpred_and   [vars]  
-	| ret = lpred_or    [vars]  
-	| ret = lpred_nor   [vars]  
-	| ret = lpred_bool  [vars]	
-	| ret = lpred_in    [vars]
-	|	ret = lpred_inter [vars]
-	| ret = lpred_eq    [vars]
-	| ret = lpred_regex [vars]
-	| ret = setvar_op   [vars]
-	| ret = lpred_inout [vars]
+	: ret = lpred_and   [tagset, vars]  
+	| ret = lpred_or    [tagset, vars]  
+	| ret = lpred_nor   [tagset, vars]  
+	| ret = lpred_bool  [tagset, vars]	
+	| ret = lpred_in    [tagset, vars]
+	|	ret = lpred_inter [tagset, vars]
+	| ret = lpred_eq    [tagset, vars]
+	| ret = lpred_regex [tagset, vars]
+	| ret = setvar_op   [tagset, vars]
+	| ret = lpred_inout [tagset, vars]
 //	| ret = condit_bool [vars]
 ;
 // ----------------------------------------------------------------------------
 // comma-separated predicates
 logical_predicates_comma_sep 
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<
 			std::vector<boost::shared_ptr<Wccl::Function<Wccl::Bool> > > 
 	> ret_v]
@@ -684,98 +696,98 @@ logical_predicates_comma_sep
 		new std::vector<boost::shared_ptr<Wccl::Function<Wccl::Bool> > >
 	);
 }
-	: pred = logical_predicates [vars] { 
+	: pred = logical_predicates [tagset, vars] { 
 		ret_v->push_back(pred);
 	} (
-		COMMA pred = logical_predicates [vars] {
+		COMMA pred = logical_predicates [tagset, vars] {
 		ret_v->push_back(pred);
 	})*
 ;
 // ----------------------------------------------------------------------------
 lpred_and 
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<
 		std::vector<boost::shared_ptr<Wccl::Function<Wccl::Bool> > > 
 	> ret_v;
 }
-	: "and" LPAREN ret_v = logical_predicates_comma_sep [vars] RPAREN {
+	: "and" LPAREN ret_v = logical_predicates_comma_sep [tagset, vars] RPAREN {
 			op.reset(new Wccl::And(ret_v));
 	}
 ;
 // ----------------------------------------------------------------------------
 lpred_or
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<
 		std::vector<boost::shared_ptr<Wccl::Function<Wccl::Bool> > > 
 	> ret_v;
 }
-	: "or" LPAREN ret_v = logical_predicates_comma_sep [vars] RPAREN {
+	: "or" LPAREN ret_v = logical_predicates_comma_sep [tagset, vars] RPAREN {
 			op.reset(new Wccl::Or(ret_v));
 	}
 ;
 // ----------------------------------------------------------------------------
 lpred_nor
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<
 		std::vector<boost::shared_ptr<Wccl::Function<Wccl::Bool> > > 
 	> ret_v;
 }
-	: "nor" LPAREN ret_v = logical_predicates_comma_sep [vars] RPAREN {
+	: "nor" LPAREN ret_v = logical_predicates_comma_sep [tagset, vars] RPAREN {
 			op.reset(new Wccl::Nor(ret_v));
 	}
 ;
 // ----------------------------------------------------------------------------
 lpred_bool
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 	: op = boolean_variable [vars]
 	| op = boolean_value 
 ;
 // ----------------------------------------------------------------------------
 lpred_in
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::TSet> > t1, t2;
 	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > s1, s2;
 }
-	: "in" LPAREN t1 = sym_set_operators [vars] COMMA 
-	              t2 = sym_set_operators [vars] RPAREN {
+	: "in" LPAREN t1 = sym_set_operators [tagset, vars] COMMA 
+	              t2 = sym_set_operators [tagset, vars] RPAREN {
 		op.reset(new Wccl::IsSubsetOf<Wccl::TSet>(t1, t2));
 	}
-	| "in" LPAREN s1 = string_operators [vars] COMMA 
-	              s2 = string_operators [vars] RPAREN {
+	| "in" LPAREN s1 = string_operators [tagset, vars] COMMA 
+	              s2 = string_operators [tagset, vars] RPAREN {
 		op.reset(new Wccl::IsSubsetOf<Wccl::StrSet>(s1, s2));
 	}
 ;
 
 // ----------------------------------------------------------------------------
 lpred_inter
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::TSet> > t1, t2;
 	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > s1, s2;
 }
-	: "inter" LPAREN s1 = string_operators  [vars] COMMA  
-									 s2 = string_operators  [vars] RPAREN {
+	: "inter" LPAREN s1 = string_operators  [tagset, vars] COMMA  
+									 s2 = string_operators  [tagset, vars] RPAREN {
 			op.reset(new Wccl::Intersects<Wccl::StrSet>(s1, s2));
 	}
-	| "inter" LPAREN t1 = sym_set_operators [vars] COMMA  
-									 t2 = sym_set_operators [vars] RPAREN {
+	| "inter" LPAREN t1 = sym_set_operators [tagset, vars] COMMA  
+									 t2 = sym_set_operators [tagset, vars] RPAREN {
 			op.reset(new Wccl::Intersects<Wccl::TSet>(t1, t2));
 	}
 ;
 
 // ----------------------------------------------------------------------------
 lpred_eq
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::TSet> > t1, t2;
@@ -783,47 +795,47 @@ lpred_eq
 	boost::shared_ptr<Wccl::Function<Wccl::StrSet>  > s1, s2;
 	boost::shared_ptr<Wccl::Function<Wccl::Position> > p1, p2;
 }
-	: "equal" LPAREN s1 = string_operators  [vars] COMMA  
-									 s2 = string_operators  [vars] RPAREN {
+	: "equal" LPAREN s1 = string_operators  [tagset, vars] COMMA  
+									 s2 = string_operators  [tagset, vars] RPAREN {
 			op.reset(new Wccl::Equals<Wccl::StrSet>(s1, s2));
 	}
-	| "equal" LPAREN t1 = sym_set_operators [vars] COMMA  
-									 t2 = sym_set_operators [vars] RPAREN {
+	| "equal" LPAREN t1 = sym_set_operators [tagset, vars] COMMA  
+									 t2 = sym_set_operators [tagset, vars] RPAREN {
 			op.reset(new Wccl::Equals<Wccl::TSet>(t1, t2));
 	}
-	| "equal" LPAREN p1 = position_operators [vars] COMMA 
-	                 p2 = position_operators [vars] RPAREN {
+	| "equal" LPAREN p1 = position_operators [tagset, vars] COMMA 
+	                 p2 = position_operators [tagset, vars] RPAREN {
 		op.reset(new Wccl::Equals<Wccl::Position>(p1, p2));
 	}
-	| "equal" LPAREN b1 = logical_predicates [vars] COMMA
-								   b2 = logical_predicates [vars] RPAREN {
+	| "equal" LPAREN b1 = logical_predicates [tagset, vars] COMMA
+								   b2 = logical_predicates [tagset, vars] RPAREN {
 		op.reset(new Wccl::Equals<Wccl::Bool>(b1, b2));
 	}
 ;
 
 // ----------------------------------------------------------------------------
 lpred_regex
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > expr;
 }
-	: "regex" LPAREN expr = string_operators [vars] COMMA reg: STRING RPAREN {
+	: "regex" LPAREN expr = string_operators [tagset, vars] COMMA reg: STRING RPAREN {
 		op.reset(new Wccl::Regex(expr, token_ref_to_ustring(reg)));
 	}
 ;
 
 // ----------------------------------------------------------------------------
 lpred_inout
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::Position> > ret_pos;
 }
-	: "inside"  LPAREN ret_pos = position_operators [vars] RPAREN {
+	: "inside"  LPAREN ret_pos = position_operators [tagset, vars] RPAREN {
 		op.reset(new Wccl::IsInside(ret_pos));
 	}
-	| "outside" LPAREN ret_pos = position_operators [vars] RPAREN {
+	| "outside" LPAREN ret_pos = position_operators [tagset, vars] RPAREN {
 		op.reset(new Wccl::IsOutside(ret_pos));
 	}
 ;
@@ -832,14 +844,14 @@ lpred_inout
 // if (Bool, Bool, Bool)
 // ? Bool ? Bool : False
 condit_bool
-	[Wccl::Variables& vars]
+	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::Bool> > test, p_true, p_false;
 }
-	: "if" LPAREN test  = logical_predicates [vars] COMMA 
-							p_true  = logical_predicates [vars] 
-							(COMMA p_false = logical_predicates [vars])? 
+	: "if" LPAREN test  = logical_predicates [tagset, vars] COMMA 
+							p_true  = logical_predicates [tagset, vars] 
+							(COMMA p_false = logical_predicates [tagset, vars])? 
 	{
 		if (p_false) {
 			op.reset(new Wccl::Conditional<Wccl::Bool>(test, p_true, p_false));
@@ -849,9 +861,9 @@ condit_bool
 		}
 	}
 	| Q_MARK 
-			(p_true = logical_predicates [vars] | p_true = condit_bool [vars])
+			(p_true = logical_predicates [tagset, vars] | p_true = condit_bool [tagset, vars])
 		Q_MARK 
-			(test = logical_predicates [vars] | test = condit_bool [vars])
+			(test = logical_predicates [tagset, vars] | test = condit_bool [tagset, vars])
 		{
 			op.reset(new Wccl::Conditional<Wccl::Bool>(test, p_true));
 		}