Skip to content
Snippets Groups Projects
Commit e6e9d975 authored by Paweł Kędzia's avatar Paweł Kędzia
Browse files

Added rules for parsing wccl rules: single and sequence

parent 3e93e203
Branches
No related merge requests found
......@@ -58,7 +58,10 @@ header {
#include <libwccl/ops/functions/bool/iterations/leftlook.h>
#include <libwccl/ops/functions/bool/iterations/rightlook.h>
// actions
// Rules, actions
#include <libwccl/ops/rule.h>
#include <libwccl/ops/rulesequence.h>
//
#include <libwccl/ops/actions/unify.h>
#include <libwccl/ops/actions/delete.h>
#include <libwccl/ops/actions/select.h>
......@@ -204,6 +207,30 @@ parse_position_operator
EOF
;
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Rule for parsing single WCCL Rule
// Returns boost::shared_ptr<Rule>
parse_single_rule
[const Corpus2::Tagset &tagset]
returns [boost::shared_ptr<Rule> rle]
{
Variables vars;
}
: rle = rule [tagset, vars]
;
// Rule for parsing rules section in the wccl file
// Returns boost::shared_ptr<RuleSequence>
parse_rule_sequence
[const Corpus2::Tagset& tagset]
returns [boost::shared_ptr<RuleSequence> rule_seq]
{
Variables vars;
}
: rule_seq = rules[tagset, vars]
;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// VALUES
......@@ -1331,19 +1358,104 @@ symset_setvar
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Tagging rules:
// Tagging actions and rules:
// ----------------------------------------------------------------------------
rule_action
// ----------------------------------------------------------------------------
// Single action such as select, delete, relabel or unify
action
[const Corpus2::Tagset& tagset, Variables& vars]
returns [boost::shared_ptr<Action> action]
: action = action_select [tagset, vars]
| action = action_delete [tagset, vars]
| action = action_relabel [tagset, vars]
returns [boost::shared_ptr<Action> act]
: act = action_select [tagset, vars]
| act = action_delete [tagset, vars]
| act = action_relabel [tagset, vars]
//
| action = action_unify [tagset, vars]
| act = action_unify [tagset, vars]
//
;
// Action sequence - the actions are separated with commas:
// select(...), select(...), delete(...)
action_sequence
[const Corpus2::Tagset& tagset, Variables& vars]
returns [boost::shared_ptr<std::vector<boost::shared_ptr<Action> > > v_act]
{
boost::shared_ptr<Action> act;
v_act.reset(new std::vector<boost::shared_ptr<Action> >);
}
: act = action[tagset, vars] {
v_act->push_back(act);
}
(
COMMA act = action[tagset, vars] {
v_act->push_back(act);
}
)*
;
// ----------------------------------------------------------------------------
// Single rule:
// rule(NAME, ACTIONS) or rule(NAME, COND, ACTIONS)
rule
[const Corpus2::Tagset& tagset, Variables& vars]
returns [boost::shared_ptr<Rule> rle]
{
boost::shared_ptr<Function<Bool> > condition;
boost::shared_ptr<std::vector<boost::shared_ptr<Action> > > actions;
}
: "rule" LPAREN name: STRING COMMA
(
(bool_operator[tagset, vars]) =>
(
condition = bool_operator [tagset, vars] COMMA
actions = action_sequence [tagset, vars] {
// rule(NAME, COND, ACTIONS)
rle.reset(
new Rule(token_ref_to_std_string(name), vars, actions, condition));
}
)
|
(
actions = action_sequence [tagset, vars] {
// rule(NAME, ACTIONS)
rle.reset(new Rule(token_ref_to_std_string(name), vars, actions));
}
)
)
RPAREN
;
// Rule sequence
rule_sequence
[const Corpus2::Tagset& tagset, Variables& vars]
returns [boost::shared_ptr<RuleSequence> rule_seq]
{
// FIXME czy tutaj przypadkiem nie powinno byc shared_ptr?
std::vector<Rule> rls;
boost::shared_ptr<Rule> rle;
rule_seq.reset(new RuleSequence(rls));
}
: rle = rule [tagset, vars] {
rls.push_back(*rle);
}
(
COMMA rle = rule [tagset, vars] {
rls.push_back(*rle);
}
)*
;
// Temporary name.
// This is wrapper for rule_sequence in rules section in the wccl file
rules
[const Corpus2::Tagset& tagset, Variables& vars]
returns [boost::shared_ptr<RuleSequence> rule_seq]
: "rules" LPAREN rule_seq = rule_sequence [tagset, vars] RPAREN {
//
}
;
// ----------------------------------------------------------------------------
// Select action:
// select(position, predicate) or select(predicate);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment