Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
W
WCCL
Manage
Activity
Members
Labels
Plan
Issues
4
Issue boards
Milestones
Wiki
Redmine
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Analysers
WCCL
Commits
2fddc450
Commit
2fddc450
authored
13 years ago
by
Paweł Kędzia
Browse files
Options
Downloads
Plain Diff
Merge branch 'master' of nlp.pwr.wroc.pl:wccl
parents
2131e3e5
bcbd29c4
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
libwccl/ops/match/applyoperator.cpp
+19
-21
19 additions, 21 deletions
libwccl/ops/match/applyoperator.cpp
libwccl/ops/match/applyoperator.h
+8
-9
8 additions, 9 deletions
libwccl/ops/match/applyoperator.h
with
27 additions
and
30 deletions
libwccl/ops/match/applyoperator.cpp
+
19
−
21
View file @
2fddc450
...
...
@@ -5,26 +5,24 @@
namespace
Wccl
{
ApplyOperator
::
ApplyOperator
(
const
VariableAccessor
<
Position
>&
cur_iter_pos
,
const
VariableAccessor
<
Match
>&
matches
,
const
boost
::
shared_ptr
<
const
MatchOperator
>&
match_op
,
const
std
::
vector
<
boost
::
shared_ptr
<
const
MatchAction
>
>&
actions
,
const
std
::
vector
<
boost
::
shared_ptr
<
const
Function
<
Bool
>
>
>&
conditions
)
:
_cur_iter_pos
(
cur_iter_pos
),
_matches
(
matches
),
const
boost
::
shared_ptr
<
const
std
::
vector
<
boost
::
shared_ptr
<
MatchAction
>
>
>&
actions
,
const
boost
::
shared_ptr
<
const
std
::
vector
<
boost
::
shared_ptr
<
Function
<
Bool
>
>
>
>&
conditions
)
:
_matches
(
matches
),
_match_op
(
match_op
),
_actions
(
actions
),
_conditions
(
conditions
)
{
BOOST_ASSERT
(
_match_op
);
BOOST_ASSERT
(
actions
.
size
()
>
0
);
BOOST_ASSERT
(
actions
->
size
()
>
0
);
}
void
ApplyOperator
::
execute
(
const
ActionExecContext
&
context
)
const
{
boost
::
shared_ptr
<
Position
>
iter_pos
=
context
.
variables
()
->
get_fast
(
_cur_iter_pos
);
boost
::
shared_ptr
<
Position
>
iter_pos
(
new
Position
(
0
)
);
boost
::
shared_ptr
<
MatchVector
>
matches
=
boost
::
dynamic_pointer_cast
<
MatchVector
>
(
context
.
variables
()
->
get_fast
(
_matches
));
boost
::
dynamic_pointer_cast
<
MatchVector
>
(
context
.
variables
()
->
get_fast
(
_matches
));
while
(
context
.
sentence_context
().
is_current_inside
())
{
// Set initial values of $_ and $m:_M variables for this iteration and launch the match:
iter_pos
->
set_value
(
0
);
...
...
@@ -32,12 +30,12 @@ void ApplyOperator::execute(const ActionExecContext &context) const
boost
::
shared_ptr
<
Match
>
match
=
_match_op
->
apply
(
iter_pos
,
context
);
// Execute the actions only if match isn't empty and all post-conditions are met:
bool
should_act
=
!
match
->
empty
();
for
(
size_t
i
=
0
;
should_act
&&
i
<
_conditions
.
size
();
++
i
)
{
should_act
=
_conditions
[
i
]
->
apply
(
context
)
->
get_value
();
for
(
size_t
i
=
0
;
should_act
&&
i
<
_conditions
->
size
();
++
i
)
{
should_act
=
(
*
_conditions
)
[
i
]
->
apply
(
context
)
->
get_value
();
}
if
(
should_act
)
{
matches
->
append
(
match
);
// the match goes to $m:_M[0]
foreach
(
const
boost
::
shared_ptr
<
const
MatchAction
>&
action
,
_actions
)
{
foreach
(
const
boost
::
shared_ptr
<
MatchAction
>&
action
,
*
_actions
)
{
action
->
execute
(
context
);
}
}
...
...
@@ -55,22 +53,22 @@ std::string ApplyOperator::to_string(const Corpus2::Tagset& tagset) const
{
std
::
ostringstream
ostream
;
ostream
<<
name
()
<<
"("
<<
_match_op
->
to_string
(
tagset
)
<<
", "
;
if
(
!
_conditions
.
empty
())
{
if
(
!
_conditions
->
empty
())
{
ostream
<<
"cond("
;
for
(
size_t
i
=
0
;
i
<
_conditions
.
size
();
++
i
)
{
for
(
size_t
i
=
0
;
i
<
_conditions
->
size
();
++
i
)
{
if
(
i
!=
0
)
{
ostream
<<
", "
;
}
ostream
<<
_conditions
[
i
]
->
to_string
(
tagset
);
ostream
<<
(
*
_conditions
)
[
i
]
->
to_string
(
tagset
);
}
ostream
<<
"), "
;
}
ostream
<<
"actions("
;
for
(
size_t
i
=
0
;
i
<
_actions
.
size
();
++
i
)
{
for
(
size_t
i
=
0
;
i
<
_actions
->
size
();
++
i
)
{
if
(
i
!=
0
)
{
ostream
<<
", "
;
}
ostream
<<
_actions
[
i
]
->
to_string
(
tagset
);
ostream
<<
(
*
_actions
)
[
i
]
->
to_string
(
tagset
);
}
ostream
<<
"))"
;
return
ostream
.
str
();
...
...
@@ -79,22 +77,22 @@ std::string ApplyOperator::to_string(const Corpus2::Tagset& tagset) const
std
::
ostream
&
ApplyOperator
::
write_to
(
std
::
ostream
&
ostream
)
const
{
ostream
<<
name
()
<<
"("
<<
*
_match_op
<<
", "
;
if
(
!
_conditions
.
empty
())
{
if
(
!
_conditions
->
empty
())
{
ostream
<<
"cond("
;
for
(
size_t
i
=
0
;
i
<
_conditions
.
size
();
++
i
)
{
for
(
size_t
i
=
0
;
i
<
_conditions
->
size
();
++
i
)
{
if
(
i
!=
0
)
{
ostream
<<
", "
;
}
ostream
<<
*
_conditions
[
i
];
ostream
<<
*
(
*
_conditions
)
[
i
];
}
ostream
<<
"), "
;
}
ostream
<<
"actions("
;
for
(
size_t
i
=
0
;
i
<
_actions
.
size
();
++
i
)
{
for
(
size_t
i
=
0
;
i
<
(
*
_actions
)
.
size
();
++
i
)
{
if
(
i
!=
0
)
{
ostream
<<
", "
;
}
ostream
<<
*
_actions
[
i
];
ostream
<<
*
(
*
_actions
)
[
i
];
}
ostream
<<
"))"
;
return
ostream
;
...
...
This diff is collapsed.
Click to expand it.
libwccl/ops/match/applyoperator.h
+
8
−
9
View file @
2fddc450
#ifndef LIBWCCL_OPS_MATCH_APPLYOPERATOR_H
#define LIBWCCL_OPS_MATCH_APPLYOPERATOR_H
#include
<libwccl/ops/function.h>
#include
<libwccl/ops/function
s/bool/predicates/logicalpredicate
.h>
#include
<libwccl/ops/match/matchoperator.h>
#include
<libwccl/ops/match/matchaction.h>
namespace
Wccl
{
/**
...
...
@@ -14,20 +15,19 @@ namespace Wccl {
class
ApplyOperator
:
public
Expression
{
public:
typedef
LogicalPredicate
::
BoolFunctionPtrVector
BoolFunctionPtrVector
;
/**
* @param cur_iter_pos Accessor to the "$_" variable
* @param matches Accessor to the "$m:_M" variable
* @param match_op "match" operator for apply
* @param actions "actions" section of apply, should not be empty
* @param conditions "cond" section of apply, empty by default
*/
ApplyOperator
(
const
VariableAccessor
<
Position
>&
cur_iter_pos
,
const
VariableAccessor
<
Match
>&
matches
,
const
boost
::
shared_ptr
<
const
MatchOperator
>&
match_op
,
const
std
::
vector
<
boost
::
shared_ptr
<
const
MatchAction
>
>&
actions
,
const
std
::
vector
<
boost
::
shared_ptr
<
const
Function
<
Bool
>
>
>&
conditions
=
(
std
::
vector
<
boost
::
shared_ptr
<
const
Function
<
Bool
>
>
>
()));
const
boost
::
shared_ptr
<
const
std
::
vector
<
boost
::
shared_ptr
<
MatchAction
>
>
>&
actions
,
const
boost
::
shared_ptr
<
const
BoolFunctionPtrVector
>&
conditions
=
boost
::
shared_ptr
<
const
BoolFunctionPtrVector
>
(
new
BoolFunctionPtrVector
()));
/**
* @returns Name of the operator.
...
...
@@ -58,11 +58,10 @@ protected:
virtual
void
execute
(
const
ActionExecContext
&
context
)
const
;
private
:
const
VariableAccessor
<
Position
>
_cur_iter_pos
;
const
VariableAccessor
<
Match
>
_matches
;
const
boost
::
shared_ptr
<
const
MatchOperator
>
_match_op
;
const
std
::
vector
<
boost
::
shared_ptr
<
const
MatchAction
>
>
_actions
;
const
std
::
vector
<
boost
::
shared_ptr
<
const
Function
<
Bool
>
>
>
_conditions
;
const
boost
::
shared_ptr
<
const
std
::
vector
<
boost
::
shared_ptr
<
MatchAction
>
>
>
_actions
;
const
boost
::
shared_ptr
<
const
std
::
vector
<
boost
::
shared_ptr
<
Function
<
Bool
>
>
>
>
_conditions
;
};
}
/* end ns Wccl */
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment