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
d1763769
Commit
d1763769
authored
14 years ago
by
Paweł Kędzia
Browse files
Options
Downloads
Patches
Plain Diff
Fixed grammar (in/equal/inter)
parent
955722de
Branches
Branches containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
libwccl/parser/grammar.g
+93
-19
93 additions, 19 deletions
libwccl/parser/grammar.g
with
93 additions
and
19 deletions
libwccl/parser/grammar.g
+
93
−
19
View file @
d1763769
...
...
@@ -38,6 +38,8 @@ header {
#include <libwccl/ops/isinside.h>
#include <libwccl/ops/isoutside.h>
#include <libwccl/ops/conditional.h>
// Unicode String
#include <unicode/uniset.h>
#include <unicode/unistr.h>
...
...
@@ -77,9 +79,9 @@ private:
}
// TODO
// - jak utworzyc TSet (dodac element do TSet)
// - nie mozna utworzy Const::Value i na tym robic specjalizowany reset?
// - base, orth
// - po dodaniu reguly condit_sym jest niejednoznacznosc w in/inter/equal!!
// - equal do bool
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
...
...
@@ -441,6 +443,7 @@ sym_set_operators
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::TSet> > ret]
: ret = op_sym_set [vars]
| ret = condit_sym [vars]
;
// Implementations of symbol set operators:
// ----------------------------------------------------------------------------
...
...
@@ -451,6 +454,28 @@ op_sym_set
| op = sym_set_value
;
// ----------------------------------------------------------------------------
// if (Bool, TSet, TSet)
// ? TSet ? Bool : {}
condit_sym
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::TSet> > op]
{
boost::shared_ptr<Wccl::Function<Wccl::Bool> > test;
boost::shared_ptr<Wccl::Function<Wccl::TSet> > p_true, p_false;
}
: "if" LPAREN test = logical_predicates [vars] COMMA
p_true = sym_set_operators [vars] COMMA
p_false = sym_set_operators [vars] {
op.reset(new Wccl::Conditional<Wccl::TSet>(test, p_true, p_false));
}
/*
| Q_MARK p_true = sym_set_operators [vars]
Q_MARK test = logical_predicates [vars] {
op.reset(new Wccl::Conditional<Wccl::TSet>(test, p_true));
}
*/
;
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Position operators
...
...
@@ -484,6 +509,7 @@ string_operators
| ret = op_upper [vars]
| ret = op_affix [vars]
| ret = op_str_set [vars]
| ret = condit_str [vars]
;
// Implementations of string operators:
// ----------------------------------------------------------------------------
...
...
@@ -548,6 +574,28 @@ op_str_set
: op = str_set_variable [vars]
| op = str_set_value
;
// ----------------------------------------------------------------------------
// if (Bool, StrSet, StrSet)
// ? StrSet ? Bool : []
condit_str
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > op]
{
boost::shared_ptr<Wccl::Function<Wccl::Bool> > test;
boost::shared_ptr<Wccl::Function<Wccl::StrSet> > p_true, p_false;
}
: "if" LPAREN test = logical_predicates [vars] COMMA
p_true = string_operators [vars] COMMA
p_false = string_operators [vars] {
op.reset(new Wccl::Conditional<Wccl::StrSet>(test, p_true, p_false));
}
/*
| Q_MARK p_true = string_operators [vars]
Q_MARK test = logical_predicates [vars] {
op.reset(new Wccl::Conditional<Wccl::StrSet>(test, p_true));
}
*/
;
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
...
...
@@ -567,6 +615,7 @@ logical_predicates
| ret = lpred_regex [vars]
| ret = setvar_op [vars]
| ret = lpred_inout [vars]
| ret = condit_bool [vars]
;
// ----------------------------------------------------------------------------
// comma-separated predicates
...
...
@@ -647,11 +696,11 @@ lpred_in
ss2 = string_operators [vars] RPAREN {
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<Wccl::TSet>(ts1, ts2));
}
/*
| "in" LPAREN p1 = position_operators [vars] COMMA
p2 = position_operators [vars] RPAREN {
// op.reset(new Wccl::IsSubsetOf(*p1.get(), *p2.get()));
...
...
@@ -666,23 +715,21 @@ lpred_inter
{
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<Wccl::StrSet>(ss1, ss2));
}
| "inter" LPAREN ts1 = sym_set_operators [vars] COMMA
ts2 = sym_set_operators [vars] RPAREN {
op.reset(new Wccl::Intersects<Wccl::TSet>(ts1, ts2));
}
/*
| "inter" LPAREN p1 = position_operators [vars] COMMA
p2 = position_operators [vars] RPAREN {
// op.reset(new Wccl::Intersects(*p1.get(), *p2.get()));
: "inter" LPAREN (
(ss1 = string_operators [vars] COMMA ss2 = string_operators [vars] RPAREN)
(ts1 = sym_set_operators [vars] COMMA ts2 = sym_set_operators [vars] RPAREN) |
) {
if (ss1) {
op.reset(new Wccl::Intersects<Wccl::StrSet>(ss1, ss2));
}
else if (ts1) {
op.reset(new Wccl::Intersects<Wccl::TSet>(ts1, ts2));
}
else {
assert(false);
}
}
*/
;
// ----------------------------------------------------------------------------
...
...
@@ -698,11 +745,11 @@ lpred_eq
ss2 = string_operators [vars] RPAREN {
op.reset(new Wccl::Equals<Wccl::StrSet>(ss1, ss2));
}
/*
| "equal" LPAREN ts1 = sym_set_operators [vars] COMMA
ts2 = sym_set_operators [vars] RPAREN {
op.reset(new Wccl::Equals<Wccl::TSet>(ts1, ts2));
}
/*
| "equal" LPAREN p1 = position_operators [vars] COMMA
p2 = position_operators [vars] RPAREN {
op.reset(new Wccl::Equals<Wccl::Position>(p1, p2));
...
...
@@ -737,6 +784,26 @@ lpred_inout
}
;
// ----------------------------------------------------------------------------
// if (Bool, Bool, Bool)
// ? Bool ? Bool : False
condit_bool
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
{
boost::shared_ptr<Wccl::Function<Wccl::Bool> > test, p_true, p_false;
}
: "if" LPAREN test = logical_predicates [vars] COMMA
p_true = logical_predicates [vars] COMMA
p_false = logical_predicates [vars] {
op.reset(new Wccl::Conditional<Wccl::Bool>(test, p_true, p_false));
}
| Q_MARK p_true = logical_predicates [vars]
Q_MARK test = logical_predicates [vars] {
op.reset(new Wccl::Conditional<Wccl::Bool>(test, p_true));
}
;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// ANTLR LEXER
...
...
@@ -821,6 +888,13 @@ options {
: "b:"
;
POS_PREFIX
options {
paraphrase = "Bool prefix";
}
: "p:"
;
LBRACKET
options {
paraphrase = "'['";
...
...
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