diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g index 53df7907d181bd8c6c1fd95fecf4ea4e47a28e24..ed4ad958ed7ed08944498b5199c15515b6d8c77a 100644 --- a/libwccl/parser/grammar.g +++ b/libwccl/parser/grammar.g @@ -1944,7 +1944,23 @@ match_action match_mark_action [const Corpus2::Tagset& tagset, Variables& vars] returns [boost::shared_ptr<MarkMatch> m_act] - : "mark" LPAREN /* TODO */ RPAREN +{ + boost::shared_ptr<Function<Match> > match_to; + boost::shared_ptr<Function<Match> > match_from; +} + : "mark" LPAREN + match_from = match_fit[tagset, vars] COMMA + match_to = match_fit[tagset, vars] COMMA + annotation_name : STRING + RPAREN { + m_act.reset( + new MarkMatch( + match_from, + match_to, + ((antlr::Token*)annotation_name)->getText() + ) + ); + } ; // Match unmark action @@ -1977,6 +1993,18 @@ match_action_comma_sep )* ; +// Function<Match> is wrapper for Constant<Match> and Function<Match> +// Returns boost::shared_ptr<Function<Match> > +match_fit + [const Corpus2::Tagset& tagset, Variables& vars] + returns [boost::shared_ptr<Function<Match> > ret] +{ + // +} + : ret = match_vector_variable [vars] + | ret = match_value_const +; + /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // ANTLR LEXER