From 7cbbe38a8601072d1a2cc234ce9f44ec6b6beb3f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20K=C4=99dzia?= <pawel.kedzia@pwr.wroc.pl>
Date: Thu, 21 Apr 2011 23:14:14 +0200
Subject: [PATCH] Added longest() operator to the grammar

---
 libwccl/parser/grammar.g | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index 87f0574..628410a 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -86,6 +86,7 @@ header {
 	#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/conditions/longest.h>
 	#include <libwccl/ops/match/actions/markmatch.h>
 	#include <libwccl/ops/match/actions/unmarkmatch.h>
 	#include <libwccl/ops/functions/match/submatch.h>
@@ -2023,6 +2024,8 @@ match_cond_all
 	: ret = match_cond_optional [tagset, vars]
 	| ret = match_cond_repeate  [tagset, vars]
 	| ret = match_cond_token    [tagset, vars]
+	| ret = match_cond_oneof    [tagset, vars]
+	| ret = match_cond_longest  [tagset, vars]
 	| ret = match_cond_is
 	| ret = match_cond_text
 ;
@@ -2098,6 +2101,19 @@ match_cond_oneof
 	}
 ;
 
+// Match condition - longest(variant1(v1), variant(v2), ...)
+// Returns boost::shared_ptr<Longest>
+match_cond_longest
+	[const Corpus2::Tagset& tagset, Variables& vars]
+	returns [boost::shared_ptr<Longest> lng]
+{
+	boost::shared_ptr<std::vector<ConjConditions> > variants;
+}
+	: "longest" LPAREN variants = match_variants [tagset, vars] RPAREN {
+		lng.reset(new Longest(variants));
+	}
+;
+
 // ----------------------------------------------------------------------------
 
 // Match actions. Match action can be mark or unmark
-- 
GitLab