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

Fixed grammar (in/equal/inter)

parent 955722de
Branches
No related merge requests found
......@@ -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 = "'['";
......
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