Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
W
WCCL
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Redmine
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Analysers
WCCL
Commits
9b51ebe7
Commit
9b51ebe7
authored
Nov 22, 2010
by
Paweł Kędzia
Browse files
Options
Downloads
Patches
Plain Diff
New operators: in, equal, inter, setvar
parent
75026b88
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
libwccl/ops/equals.h
+1
-1
1 addition, 1 deletion
libwccl/ops/equals.h
libwccl/ops/intersects.h
+5
-2
5 additions, 2 deletions
libwccl/ops/intersects.h
libwccl/ops/issubsetof.h
+3
-2
3 additions, 2 deletions
libwccl/ops/issubsetof.h
libwccl/parser/grammar.g
+112
-70
112 additions, 70 deletions
libwccl/parser/grammar.g
with
121 additions
and
75 deletions
libwccl/ops/equals.h
+
1
−
1
View file @
9b51ebe7
...
...
@@ -83,7 +83,7 @@ public:
* @returns Name of the function: "equals".
*/
std
::
string
raw_name
()
const
{
return
"equal
s
"
;
return
"equal"
;
}
protected
:
...
...
This diff is collapsed.
Click to expand it.
libwccl/ops/intersects.h
+
5
−
2
View file @
9b51ebe7
...
...
@@ -12,6 +12,8 @@ template <class T>
class
Intersects
:
public
SetPredicate
<
T
>
{
public:
typedef
typename
SetPredicate
<
T
>::
SetFunctionPtr
SetFunctionPtr
;
Intersects
(
const
SetFunctionPtr
&
set1_expr
,
const
SetFunctionPtr
&
set2_expr
)
:
SetPredicate
<
T
>
(
set1_expr
,
set2_expr
)
{
...
...
@@ -25,13 +27,14 @@ public:
}
protected
:
typedef
FunctionBase
::
BaseRetValPtr
BaseRetValPtr
;
/**
* Take values for both sets and return True if they intersect,
* False otherwise.
*/
BaseRetValPtr
apply_internal
(
const
FunExecContext
&
context
)
const
{
boost
::
shared_ptr
<
T
>
set1
=
this
->
set1_expr_
->
apply
(
context
);
boost
::
shared_ptr
<
T
>
set2
=
this
->
set2_expr_
->
apply
(
context
);
const
boost
::
shared_ptr
<
const
T
>
&
set1
=
this
->
set1_expr_
->
apply
(
context
);
const
boost
::
shared_ptr
<
const
T
>
&
set2
=
this
->
set2_expr_
->
apply
(
context
);
return
Predicate
::
evaluate
(
set1
->
intersects
(
*
set2
),
context
);
}
...
...
This diff is collapsed.
Click to expand it.
libwccl/ops/issubsetof.h
+
3
−
2
View file @
9b51ebe7
...
...
@@ -28,6 +28,7 @@ public:
}
protected
:
typedef
FunctionBase
::
BaseRetValPtr
BaseRetValPtr
;
/**
* Take value of possible subset in question. If it is an empty set, return False.
* Otherwise, take value of the set that is being compared to.
...
...
@@ -36,10 +37,10 @@ protected:
* set is considered not to be "in" any other set so False is returned.
*/
BaseRetValPtr
apply_internal
(
const
FunExecContext
&
context
)
const
{
boost
::
shared_ptr
<
T
>
possible_subset
=
this
->
set1_expr_
->
apply
(
context
);
const
boost
::
shared_ptr
<
const
T
>
&
possible_subset
=
this
->
set1_expr_
->
apply
(
context
);
if
(
!
possible_subset
->
empty
())
{
boost
::
shared_ptr
<
T
>
set_compared_to
=
this
->
set2_expr_
->
apply
(
context
);
const
boost
::
shared_ptr
<
const
T
>
&
set_compared_to
=
this
->
set2_expr_
->
apply
(
context
);
return
Predicate
::
evaluate
(
possible_subset
->
is_subset_of
(
*
set_compared_to
),
context
);
}
return
Predicate
::
False
(
context
);
...
...
This diff is collapsed.
Click to expand it.
libwccl/parser/grammar.g
+
112
−
70
View file @
9b51ebe7
...
...
@@ -29,10 +29,15 @@ header {
#include <libwccl/ops/functions.h>
#include <libwccl/ops/vargetter.h>
#include <libwccl/ops/varsetter.h>
// #include <libwccl/ops/intersects.h>
// #include <libwccl/ops/issubsetof.h>
#include <libwccl/ops/logicalpredicate.h>
#include <libwccl/ops/intersects.h>
#include <libwccl/ops/issubsetof.h>
#include <libwccl/ops/setpredicate.h>
#include <libwccl/ops/isinside.h>
#include <libwccl/ops/isoutside.h>
// Unicode String
#include <unicode/uniset.h>
#include <unicode/unistr.h>
...
...
@@ -72,15 +77,10 @@ private:
}
// TODO
// - nie mozna utworzyc in/inter/equal z operatorem?
// - jak utworzyc TSet (dodac element do TSet)
// - nie mozna utworzy Const::Value i na tym robic specjalizowany reset?
// - base, orth
// -> Dodac do regul _variable podregule zwracajaca accessor, a nadregula
// powinna zwracac VarGetter. I wlasnie reguly zwracajace accessor podpiac
// do setvara
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// "GLOBAL" RULES
...
...
@@ -241,16 +241,28 @@ position_value
///////////////////////////////////////////////////////////////////////////////
// Position: $name
// ----------------------------------------------------------------------------
position_variable
// returns accessor
position_variable_acc
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Var
Gette
r<Wccl::Position> >
o
p]
returns [boost::shared_ptr<Wccl::Var
iableAcceso
r<Wccl::Position> > p
os_acc
]
: DOLLAR n: SYMBOL {
vars.get_put<Wccl::Position>(token_ref_to_std_string(n));
Wccl::VariableAccesor<Wccl::Position> acc =
vars.create_accesor<Wccl::Position>(token_ref_to_std_string(n));
op.reset(new Wccl::VarGetter<Wccl::Position>(acc));
pos_acc.reset(new Wccl::VariableAccesor<Wccl::Position>(acc));
}
;
// returs vargetter
position_variable
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::VarGetter<Wccl::Position> > op]
{
boost::shared_ptr<Wccl::VariableAccesor<Wccl::Position> > pos_acc;
}
: pos_acc = position_variable_acc [vars] {
op.reset(new Wccl::VarGetter<Wccl::Position>(*pos_acc.get()));
}
;
// ----------------------------------------------------------------------------
...
...
@@ -265,10 +277,10 @@ position_ref_variable
// ----------------------------------------------------------------------------
// String set, call examples: $name, $sName, $s_name, $s_Name etc.
// This expression gets variable of tyme StrSet from string-named variable
//
R
eturns
Wccl::VarGetter<Wccl::StrSet> from Set-variables
str_set_variable
//
r
eturns
accessor
str_set_variable
_acc
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Var
Gette
r<Wccl::StrSet> >
op
]
returns [boost::shared_ptr<Wccl::Var
iableAcceso
r<Wccl::StrSet> >
strset_acc
]
: DOLLAR STR_PREFIX n: SYMBOL {
// get/put variable to variables
vars.get_put<Wccl::StrSet>(token_ref_to_std_string(n));
...
...
@@ -277,35 +289,70 @@ str_set_variable
Wccl::VariableAccesor<Wccl::StrSet> acc =
vars.create_accesor<Wccl::StrSet>(token_ref_to_std_string(n));
op.reset(new Wccl::VarGetter<Wccl::StrSet>(acc));
strset_acc.reset(new Wccl::VariableAccesor<Wccl::StrSet>(acc));
}
;
// vargetter
str_set_variable
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::VarGetter<Wccl::StrSet> > op]
{
boost::shared_ptr<Wccl::VariableAccesor<Wccl::StrSet> > strset_acc;
}
: strset_acc = str_set_variable_acc [vars] {
op.reset(new Wccl::VarGetter<Wccl::StrSet>(*strset_acc.get()));
}
;
// ----------------------------------------------------------------------------
// Symbol set: $tName
sym_set_variable
// returns accessor
sym_set_variable_acc
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Var
Gette
r<Wccl::TSet> >
op
]
returns [boost::shared_ptr<Wccl::Var
iableAcceso
r<Wccl::TSet> >
symset_acc
]
: DOLLAR TST_PREFIX n: SYMBOL {
vars.get_put<Wccl::TSet>(token_ref_to_std_string(n));
Wccl::VariableAccesor<Wccl::TSet> acc =
vars.create_accesor<Wccl::TSet>(token_ref_to_std_string(n));
op.reset(new Wccl::VarGetter<Wccl::TSet>(acc));
symset_acc.reset(new Wccl::VariableAccesor<Wccl::TSet>(acc));
}
;
// returns vargetter
sym_set_variable
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::VarGetter<Wccl::TSet> > op]
{
boost::shared_ptr<Wccl::VariableAccesor<Wccl::TSet> > symset_acc;
}
: symset_acc = sym_set_variable_acc [vars] {
op.reset(new Wccl::VarGetter<Wccl::TSet>(*symset_acc.get()));
}
;
// ----------------------------------------------------------------------------
// Bool: $bName
boolean_variable
// returns accessor
boolean_variable_acc
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Var
Gette
r<Wccl::Bool> >
op
]
returns [boost::shared_ptr<Wccl::Var
iableAcceso
r<Wccl::Bool> >
bool_acc
]
: DOLLAR BOOL_PREFIX n: SYMBOL {
vars.get_put<Wccl::Bool>(token_ref_to_std_string(n));
Wccl::VariableAccesor<Wccl::Bool> acc =
vars.create_accesor<Wccl::Bool>(token_ref_to_std_string(n));
op.reset(new Wccl::VarGetter<Wccl::Bool>(acc));
bool_acc.reset(new Wccl::VariableAccesor<Wccl::Bool>(acc));
}
;
// returns vargetter
boolean_variable
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::VarGetter<Wccl::Bool> > op]
{
boost::shared_ptr<Wccl::VariableAccesor<Wccl::Bool> > bool_acc;
}
: bool_acc = boolean_variable_acc [vars] {
op.reset(new Wccl::VarGetter<Wccl::Bool>(*bool_acc.get()));
}
;
...
...
@@ -335,73 +382,53 @@ setvar_pos
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
{
boost::shared_ptr<Wccl::Function<Wccl::Position> > ret_op;
boost::shared_ptr<Wccl::Var
Gette
r<Wccl::Position> > ret_
var
;
boost::shared_ptr<Wccl::Var
iableAcceso
r<Wccl::Position> > ret_
acc
;
}
: "setvar" LPAREN ret_
var
= position_variable [vars] COMMA
: "setvar" LPAREN ret_
acc
= position_variable
_acc
[vars] COMMA
ret_op = op_position [vars] RPAREN {
/*
Wccl::VariableAccesor<Wccl::Position> acc =
vars.create_accesor<Wccl::Position>(ret_var->acc_name());
op.reset(new Wccl::VarSetter<Wccl::Position>(acc, ret_op));
*/
op.reset(new Wccl::VarSetter<Wccl::Position>(*ret_acc.get(), ret_op));
}
;
// ----------------------------------------------------------------------------
setvar_bool
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
{
boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret_op;
boost::shared_ptr<Wccl::Var
Gette
r<Wccl::Bool> > ret_
var
;
boost::shared_ptr<Wccl::Var
iableAcceso
r<Wccl::Bool> > ret_
acc
;
}
: "setvar" LPAREN ret_
var
= boolean_variable
[vars] COMMA
: "setvar" LPAREN ret_
acc
= boolean_variable
_acc
[vars] COMMA
ret_op = logical_predicates [vars] RPAREN {
/*
Wccl::VariableAccesor<Wccl::Bool> acc =
vars.create_accesor<Wccl::Bool>(ret_var->acc_name());
op.reset(new Wccl::VarSetter<Wccl::Bool>(acc, ret_op));
*/
op.reset(new Wccl::VarSetter<Wccl::Bool>(*ret_acc.get(), ret_op));
}
;
// ----------------------------------------------------------------------------
setvar_sset
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
{
boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ret_op;
boost::shared_ptr<Wccl::Var
Gette
r<Wccl::StrSet> > ret_
var
;
boost::shared_ptr<Wccl::Var
iableAcceso
r<Wccl::StrSet> > ret_
acc
;
}
: "setvar" LPAREN ret_
var
= str_set_variable [vars] COMMA
: "setvar" LPAREN ret_
acc
= str_set_variable
_acc
[vars] COMMA
ret_op = string_operators [vars] RPAREN {
/*
Wccl::VariableAccesor<Wccl::StrSet> acc =
vars.create_accesor<Wccl::StrSet>(ret_var->acc_name());
op.reset(new Wccl::VarSetter<Wccl::StrSet>(acc, ret_op));
*/
op.reset(new Wccl::VarSetter<Wccl::StrSet>(*ret_acc.get(), ret_op));
}
;
// ----------------------------------------------------------------------------
setvar_tset
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
{
boost::shared_ptr<Wccl::Function<Wccl::TSet> > ret_op;
boost::shared_ptr<Wccl::Var
Gette
r<Wccl::TSet> > ret_
var
;
boost::shared_ptr<Wccl::Var
iableAcceso
r<Wccl::TSet> > ret_
acc
;
}
: "setvar" LPAREN ret_
var
= sym_set_variable
[vars] COMMA
: "setvar" LPAREN ret_
acc
= sym_set_variable
_acc
[vars] COMMA
ret_op = sym_set_operators [vars] RPAREN {
/*
Wccl::VariableAccesor<Wccl::TSet> acc =
vars.create_accesor<Wccl::TSet>(ret_var->acc_name());
op.reset(new Wccl::VarSetter<Wccl::TSet>(acc, ret_op));
*/
op.reset(new Wccl::VarSetter<Wccl::TSet>(*ret_acc.get(), ret_op));
}
;
...
...
@@ -539,6 +566,7 @@ logical_predicates
| ret = lpred_eq [vars]
| ret = lpred_regex [vars]
| ret = setvar_op [vars]
| ret = lpred_inout [vars]
;
// ----------------------------------------------------------------------------
// comma-separated predicates
...
...
@@ -614,17 +642,14 @@ lpred_in
boost::shared_ptr<Wccl::Function<Wccl::TSet> > ts1, ts2;
boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ss1, ss2;
boost::shared_ptr<Wccl::Function<Wccl::Position> > p1, p2;
boost::shared_ptr<Wccl::Function<Wccl::StrSet> > expr;
}
: "in" LPAREN ss1 = string_operators [vars] COMMA
ss2 = string_operators [vars] RPAREN {
op.reset(
// new Wccl::IsSubsetOf<Wccl::StrSet>(ss1, ss2)
);
op.reset(new Wccl::IsSubsetOf<Wccl::StrSet>(ss1, ss2));
}
| "in" LPAREN ts1 = sym_set_operators [vars] COMMA
ts2 = sym_set_operators [vars] RPAREN {
//
op.reset(new Wccl::IsSubsetOf
(*ts1.get()
,
*
ts2
.get()
));
op.reset(new Wccl::IsSubsetOf
<Wccl::TSet>(ts1
, ts2));
}
/*
| "in" LPAREN p1 = position_operators [vars] COMMA
...
...
@@ -633,23 +658,24 @@ lpred_in
}
*/
;
// ----------------------------------------------------------------------------
lpred_inter
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
{
boost::shared_ptr<Wccl::Function<Wccl::TSet> > ts1, ts2;
boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ss1, ss2;
boost::shared_ptr<Wccl::Function<Wccl::TSet> > ts1, ts2;
boost::shared_ptr<Wccl::Function<Wccl::Position> > p1, p2;
}
: "inter" LPAREN ss1 = string_operators [vars] COMMA
ss2 = string_operators [vars] RPAREN {
//
op.reset(new Wccl::Intersects
(*ss1.get()
,
*
ss2
.get()
));
op.reset(new Wccl::Intersects
<Wccl::StrSet>(ss1
, ss2));
}
| "inter" LPAREN ts1 = sym_set_operators [vars] COMMA
ts2 = sym_set_operators [vars] RPAREN {
//
op.reset(new Wccl::Intersects
(*ts1.get()
,
*
ts2
.get()
));
op.reset(new Wccl::Intersects
<Wccl::TSet>(ts1
, ts2));
}
/*
| "inter" LPAREN p1 = position_operators [vars] COMMA
...
...
@@ -658,6 +684,7 @@ lpred_inter
}
*/
;
// ----------------------------------------------------------------------------
lpred_eq
[Wccl::Variables& vars]
...
...
@@ -695,6 +722,21 @@ lpred_regex
}
;
// ----------------------------------------------------------------------------
lpred_inout
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
{
boost::shared_ptr<Wccl::Function<Wccl::Position> > ret_pos;
}
: "inside" LPAREN ret_pos = position_operators [vars] RPAREN {
op.reset(new Wccl::IsInside(ret_pos));
}
| "outside" LPAREN ret_pos = position_operators [vars] RPAREN {
op.reset(new Wccl::IsOutside(ret_pos));
}
;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// ANTLR LEXER
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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