diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index ffebe4ef1cd0994e5f241c1137eee3f5d76d1156..f9e9f5f6e50739d6b506056283c7cfd5aa294775 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -85,6 +85,7 @@ header {
 	#include <libwccl/ops/match/conditions/matchtext.h>
 	#include <libwccl/ops/match/conditions/conjconditions.h>
 	#include <libwccl/ops/match/conditions/tokencondition.h>
+	#include <libwccl/ops/match/conditions/oneof.h>
 	#include <libwccl/ops/match/actions/markmatch.h>
 	#include <libwccl/ops/match/actions/unmarkmatch.h>
 	#include <libwccl/ops/functions/match/submatch.h>
@@ -1992,6 +1993,28 @@ match_condition_in
 	)*
 ;
 
+// Match variants variant(v1), variant(v2), ...
+// Retutns boost::shared_ptr<std::vector<ConjConditions> >
+match_variants
+	[const Corpus2::Tagset& tagset, Variables& vars]
+	returns [boost::shared_ptr<std::vector<ConjConditions> > variants]
+{
+	variants.reset(new std::vector<ConjConditions>());
+
+	boost::shared_ptr<ConjConditions> variant;
+}
+	: "variant" LPAREN variant = match_condition [tagset, vars] RPAREN {
+		// TODO
+		// variants->push_back(variant);
+	} 
+	(
+		COMMA "variant" LPAREN variant = match_condition [tagset, vars] RPAREN {
+			// TODO
+			// variants->push_back(variant);
+		}
+	)*
+;
+
 // One of the match condition
 // Returns boost::shared_ptr<const MatchCondition>
 match_cond_all