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
9b51ebe7
Commit
9b51ebe7
authored
14 years ago
by
Paweł Kędzia
Browse files
Options
Downloads
Patches
Plain Diff
New operators: in, equal, inter, setvar
parent
75026b88
Branches
Branches containing commit
No related merge requests found
Changes
4
Hide 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,9 +29,14 @@ 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>
...
...
@@ -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));
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
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));
*/
: "setvar" LPAREN ret_acc = position_variable_acc [vars] COMMA
ret_op = op_position [vars] RPAREN {
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
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));
*/
: "setvar" LPAREN ret_acc = boolean_variable_acc [vars] COMMA
ret_op = logical_predicates [vars] RPAREN {
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
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));
*/
: "setvar" LPAREN ret_acc = str_set_variable_acc [vars] COMMA
ret_op = string_operators [vars] RPAREN {
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
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));
*/
: "setvar" LPAREN ret_acc = sym_set_variable_acc [vars] COMMA
ret_op = sym_set_operators [vars] RPAREN {
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::
T
Set> >
t
s1,
t
s2;
boost::shared_ptr<Wccl::Function<Wccl::
Str
Set> >
s
s1,
s
s2;
boost::shared_ptr<Wccl::Function<Wccl::Position> > p1, p2;
boost::shared_ptr<Wccl::Function<Wccl::
Str
Set> >
s
s1,
s
s2;
boost::shared_ptr<Wccl::Function<Wccl::
T
Set> >
t
s1,
t
s2;
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%
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