From 592ba56443734e54c76180be68b03b890e09ea1d Mon Sep 17 00:00:00 2001 From: Adam Wardynski <award@.(win7-laptop)> Date: Thu, 21 Apr 2011 15:47:10 +0200 Subject: [PATCH] Adding first() & last() ops to the grammar. --- libwccl/parser/grammar.g | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g index 2cdb3bc..9590548 100644 --- a/libwccl/parser/grammar.g +++ b/libwccl/parser/grammar.g @@ -53,6 +53,8 @@ header { #include <libwccl/ops/functions/tset/getsymbolsinrange.h> #include <libwccl/ops/functions/position/relativeposition.h> + #include <libwccl/ops/functions/position/lasttoken.h> + #include <libwccl/ops/functions/position/firsttoken.h> #include <libwccl/ops/functions/bool/iterations/only.h> #include <libwccl/ops/functions/bool/iterations/atleast.h> @@ -830,8 +832,10 @@ position_operator [const Corpus2::Tagset& tagset, Variables& vars] returns [boost::shared_ptr<Function<Position> > ret] : - ( ret = position_var_val [vars] - | ret = position_condition [tagset, vars] + ( ret = position_var_val [vars] + | ret = position_condition [tagset, vars] + | ret = position_first_token [tagset, vars] + | ret = position_last_token [tagset, vars] | LPAREN ret = position_operator [tagset, vars] RPAREN ) ( // if there is SIGNED_INT after the position, it is actually a relative position @@ -880,6 +884,32 @@ position_condition } ; +// ---------------------------------------------------------------------------- +// Taking position of a first token in a match +// first(Match) +position_first_token [const Corpus2::Tagset& tagset, Variables& vars] + returns [boost::shared_ptr<Function<Position> > ret] +{ + boost::shared_ptr<Function<Match> > m; +} + : "first" LPAREN m = match_fit [tagset, vars] RPAREN { + ret.reset(new FirstToken(m)); + } +; + +// ---------------------------------------------------------------------------- +// Taking position of a first token in a match +// last(Match) +position_last_token [const Corpus2::Tagset& tagset, Variables& vars] + returns [boost::shared_ptr<Function<Position> > ret] +{ + boost::shared_ptr<Function<Match> > m; +} + : "last" LPAREN m = match_fit [tagset, vars] RPAREN { + ret.reset(new LastToken(m)); + } +; + /////////////////////////////////////////////////////////////////////////////// // Stiring operator // Returns boost::shared_ptr<Function<StrSet> > -- GitLab