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
57440040
Commit
57440040
authored
14 years ago
by
Paweł Kędzia
Browse files
Options
Downloads
Patches
Plain Diff
Modified grammar for new langauage structures.
parent
02427176
Branches
Branches containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
libwccl/parser/grammar.g
+116
-114
116 additions, 114 deletions
libwccl/parser/grammar.g
wcclparser/CMakeLists.txt
+12
-5
12 additions, 5 deletions
wcclparser/CMakeLists.txt
wcclparser/bool_main.cpp
+6
-0
6 additions, 0 deletions
wcclparser/bool_main.cpp
with
134 additions
and
119 deletions
libwccl/parser/grammar.g
+
116
−
114
View file @
57440040
...
...
@@ -50,7 +50,7 @@ options {
// ----------------------------------------------------------------------------
class ANTLRParser extends Parser;
options {
k =
6
;
k =
4
;
exportVocab = ANTLRExpr;
buildAST = false;
defaultErrorHandler = false;
...
...
@@ -77,9 +77,6 @@ private:
// - nie mozna utworzy Const::Value i na tym robic specjalizowany reset?
// - base, orth
// Bylo boolean_v TRUE_VALUE. FALSE_VALE, a jest "True", "False" - bylo z
// regula lexera, a teraz jest wstawione na "sztywno" do gramatyki
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// "GLOBAL" RULES
...
...
@@ -108,23 +105,11 @@ parse_predicates
res.reset(new ANTLRParserResult<Wccl::Bool>());
boost::shared_ptr<Wccl::Function<Wccl::Bool> > op;
}
: op = predicates [*res->variables.get()] {
: op =
logical_
predicates [*res->variables.get()] {
res->op = op;
}
;
// ----------------------------------------------------------------------------
// Rules for parsing values in scope (variables).
// Returns boost::shared_ptr<Wccl::Function<Wccl::Value> >
/*
parse_values
returns [boost::shared_ptr<Wccl::Function<Wccl::Value> > res]
{
Wccl::Variables vars;
}
: res = values [vars]
;
*/
// ----------------------------------------------------------------------------
// Rules for parsing tagset (symbol set) operators
// Returns boost::shared_ptr<Wccl::Function<Wccl::TSet> >
...
...
@@ -138,26 +123,7 @@ parse_sym_set_operator
res->op = op;
}
;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// All values:
// Values can be use for setvar(...,..)
// ----------------------------------------------------------------------------
/*
values
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Value> > res]
{
boost::shared_ptr<Wccl::Constant<Wccl::StrSet> > r_StrSet;
boost::shared_ptr<Wccl::Constant<Wccl::TSet> > r_TSet;
boost::shared_ptr<Wccl::Constant<Wccl::Bool> > r_Bool;
boost::shared_ptr<Wccl::Constant<Wccl::Position> > r_Pos;
}
: r_Pos = position [vars] // TODO { res = r_Pos; }
| r_TSet = sym_set [vars]
| r_Bool = boolean [vars]
;
*/
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// VALUES
...
...
@@ -165,18 +131,18 @@ values
///////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// Single or muliple values in string set
str_set_v_in
str_set_v
alue
_in
[boost::shared_ptr<Wccl::StrSet>& s_set]
: v1: STRING {
s_set->insert(token_ref_to_ustring(v1));
}
| v2: STRING COMMA str_set_v_in [s_set] {
| v2: STRING COMMA str_set_v
alue
_in [s_set] {
s_set->insert(token_ref_to_ustring(v2));
}
;
// string set, called as unnamed (temporary) StrSet:
// calls: [] ['a'] ['a', 'b'] ["a"] ["a", "b"] ['a', "b"] or variable $A
str_set_v
str_set_v
alue
returns [boost::shared_ptr<Wccl::Constant<Wccl::StrSet> > val]
{
boost::shared_ptr<Wccl::StrSet> set(new Wccl::StrSet);
...
...
@@ -184,7 +150,7 @@ str_set_v
: LBRACKET RBRACKET {
val.reset(new Wccl::Constant<Wccl::StrSet>(*set.get()));
}
| LBRACKET str_set_v_in [set] RBRACKET {
| LBRACKET str_set_v
alue
_in [set] RBRACKET {
val.reset(new Wccl::Constant<Wccl::StrSet>(*set.get()));
}
;
...
...
@@ -208,12 +174,12 @@ sym_set_elem
;
// sym set in
sym_set_in
sym_set_
value_
in
[boost::shared_ptr<Wccl::TSet> &set]
: sym_set_elem [set]
;
// sym set {} {a} {a, b}
sym_set_v
sym_set_v
alue
returns [boost::shared_ptr<Wccl::Constant<Wccl::TSet> > val]
{
boost::shared_ptr<Wccl::TSet> set(new Wccl::TSet);
...
...
@@ -221,20 +187,20 @@ sym_set_v
: LCURLY RCURLY {
val.reset(new Wccl::Constant<Wccl::TSet>(*set.get()));
}
| LCURLY sym_set_in [set] RCURLY {
| LCURLY sym_set_
value_
in [set] RCURLY {
val.reset(new Wccl::Constant<Wccl::TSet>(*set.get()));
}
;
// ----------------------------------------------------------------------------
// boolean value:
boolean_v
boolean_v
alue
returns [boost::shared_ptr<Wccl::Constant<Wccl::Bool> > val]
:
TRUE_VALUE
{ val.reset(new Wccl::Constant<Wccl::Bool>(Wccl::Bool(true ))); }
|
FALSE_VALUE
{ val.reset(new Wccl::Constant<Wccl::Bool>(Wccl::Bool(false))); }
:
"True"
{ val.reset(new Wccl::Constant<Wccl::Bool>(Wccl::Bool(true ))); }
|
"False"
{ val.reset(new Wccl::Constant<Wccl::Bool>(Wccl::Bool(false))); }
;
// ----------------------------------------------------------------------------
// position value:
position_v
position_v
alue
returns [boost::shared_ptr<Wccl::Constant<Wccl::Position> > val]
: i: INT {
val.reset(
...
...
@@ -271,10 +237,10 @@ position_v
///////////////////////////////////////////////////////////////////////////////
// Position: $name
// ----------------------------------------------------------------------------
position
position
_variable
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::VarGetter<Wccl::Position> > op]
: DOLLAR n:
VAR_NAME
{
: DOLLAR n:
SYMBOL
{
vars.get_put<Wccl::Position>(token_ref_to_std_string(n));
Wccl::VariableAccesor<Wccl::Position> acc =
...
...
@@ -286,9 +252,9 @@ position
// ----------------------------------------------------------------------------
// Position reference: $(0-9)+name
// !! Cannot use for setvar(...,...) !!
position_ref
position_ref
_variable
[Wccl::Variables& vars]
: DOLLAR p_ref: INT n:
VAR_NAME
{
: DOLLAR p_ref: INT n:
SYMBOL
{
// TODO
}
;
...
...
@@ -296,13 +262,13 @@ position_ref
// String set, call examples: $name, $sName, $s_name, $s_Name etc.
// This expression gets variable of tyme StrSet from string-named variable
// Returns Wccl::VarGetter<Wccl::StrSet> from Set-variables
str_set
str_set
_variable
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::VarGetter<Wccl::StrSet> > op]
: DOLLAR STR_PREFIX n:
VAR_NAME
{
: DOLLAR STR_PREFIX n:
SYMBOL
{
// get/put variable to variables
vars.get_put<Wccl::StrSet>(token_ref_to_std_string(n));
// makes accesor for value
Wccl::VariableAccesor<Wccl::StrSet> acc =
vars.create_accesor<Wccl::StrSet>(token_ref_to_std_string(n));
...
...
@@ -312,10 +278,10 @@ str_set
;
// ----------------------------------------------------------------------------
// Symbol set: $tName
sym_set
sym_set
_variable
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::VarGetter<Wccl::TSet> > op]
: DOLLAR TST_PREFIX n:
VAR_NAME
{
: DOLLAR TST_PREFIX n:
SYMBOL
{
vars.get_put<Wccl::TSet>(token_ref_to_std_string(n));
Wccl::VariableAccesor<Wccl::TSet> acc =
...
...
@@ -326,10 +292,10 @@ sym_set
;
// ----------------------------------------------------------------------------
// Bool: $bName
boolean
boolean
_variable
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::
Function
<Wccl::Bool> > op]
: DOLLAR BOOL_PREFIX n:
VAR_NAME
{
returns [boost::shared_ptr<Wccl::
VarGetter
<Wccl::Bool> > op]
: DOLLAR BOOL_PREFIX n:
SYMBOL
{
vars.get_put<Wccl::Bool>(token_ref_to_std_string(n));
Wccl::VariableAccesor<Wccl::Bool> acc =
...
...
@@ -348,53 +314,86 @@ boolean
// ----------------------------------------------------------------------------
// Setvar operator
// ----------------------------------------------------------------------------
/*
setvar_op
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret]
: setvar_pos [va
lue
]
| setvar_bool [va
lue
]
:
ret = setvar_sset [vars]
| setvar_tset [va
lue
]
:
ret =
setvar_pos [va
rs
]
|
ret =
setvar_bool [va
rs
]
|
ret = setvar_sset [vars]
|
ret =
setvar_tset [va
rs
]
;
*/
// Implementations of setvar:
// ----------------------------------------------------------------------------
// setvar dla position przyjmuje position_ref -> TODO sprawdzic dlaczego
// gramatyka nie pokrywa "setvar" LPAREN position COMMA position_v RPAREN
/*
setvar_pos [std::string& value]
: "setvar" LPAREN position_ref [value] COMMA position_v [value] RPAREN
// : "setvar" LPAREN position [value] COMMA position_v [value] RPAREN
;
*/
/*
setvar_bool [std::string& value]
: "setvar" LPAREN boolean [value] COMMA boolean_v [value] RPAREN
// setvar dla position przyjmuje position_ref_variable -> TODO sprawdzic dlaczego
// gramatyka nie pokrywa "setvar" LPAREN position COMMA position_value RPAREN
setvar_pos
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
{
boost::shared_ptr<Wccl::Function<Wccl::Position> > ret_op;
boost::shared_ptr<Wccl::VarGetter<Wccl::Position> > ret_var;
}
: "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_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::VarGetter<Wccl::Bool> > ret_var;
}
: "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_sset
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::
VarSetter
<Wccl::Bool> > op]
returns [boost::shared_ptr<Wccl::
Function
<Wccl::Bool> > op]
{
boost::shared_ptr<Wccl::
VarGetter
<Wccl::StrSet> > ret_
str_var
;
boost::shared_ptr<Wccl::
Function
<Wccl::StrSet> > ret_
str_op
;
boost::shared_ptr<Wccl::
Function
<Wccl::StrSet> > ret_
op
;
boost::shared_ptr<Wccl::
VarGetter
<Wccl::StrSet> > ret_
var
;
}
: "setvar" LPAREN ret_str_var = str_set [vars] COMMA
ret_str_op = string_operators [vars] RPAREN {
// VariableAccesor<Bool> acc_t = cx.variables()->create_accesor<Bool>("True_bool");
// VarSetter<Bool> var_setter(acc_t, false_constant);
// Wccl::VariableAccesor<Wccl::StrSet> acc_t = vars->create_accesor<Wccl::StrSet>("True_bool");
: "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_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::VarGetter<Wccl::TSet> > ret_var;
}
: "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_tset [std::string& value]
: "setvar" LPAREN sym_set [value] COMMA sym_set_v [value] RPAREN
;
*/
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
...
...
@@ -411,8 +410,8 @@ sym_set_operators
op_sym_set
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::TSet> > op]
: op = sym_set [vars]
| op = sym_set_v
: op = sym_set
_variable
[vars]
| op = sym_set_v
alue
;
// ----------------------------------------------------------------------------
...
...
@@ -430,8 +429,8 @@ position_operators
op_position
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Position> > op]
: op = position [vars]
| op = position_v
: op = position
_variable
[vars]
| op = position_v
alue
;
// ----------------------------------------------------------------------------
...
...
@@ -457,7 +456,7 @@ op_orth
{
// TODO
}
: "orth" LBRACKET position_ref [vars] RBRACKET {
: "orth" LBRACKET position_ref
_variable
[vars] RBRACKET {
// ret = TODO
}
;
...
...
@@ -468,7 +467,7 @@ op_base
{
// TODO
}
: "base" LBRACKET position_ref [vars] RBRACKET {
: "base" LBRACKET position_ref
_variable
[vars] RBRACKET {
// ret = TODO
}
;
...
...
@@ -509,8 +508,8 @@ op_affix
op_str_set
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > op]
: op = str_set
[vars]
| op = str_set_v
: op = str_set
_variable
[vars]
| op = str_set_v
alue
;
// ----------------------------------------------------------------------------
...
...
@@ -518,13 +517,6 @@ op_str_set
// Logical predicates
// Returns boost::shared_ptr<Wccl::Function<Wccl::Bool> >
// ----------------------------------------------------------------------------
predicates
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret]
: ret = logical_predicates [vars]
;
// Implementations of predicates:
// ----------------------------------------------------------------------------
logical_predicates
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret]
...
...
@@ -536,7 +528,7 @@ logical_predicates
| ret = lpred_inter [vars]
| ret = lpred_eq [vars]
| ret = lpred_regex [vars]
//
| ret = setvar_op [vars]
| ret = setvar_op [vars]
;
// ----------------------------------------------------------------------------
// comma-separated predicates
...
...
@@ -601,8 +593,8 @@ lpred_nor
lpred_bool
[Wccl::Variables& vars]
returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
: op = boolean
[vars]
| op = boolean_v
: op = boolean
_variable
[vars]
| op = boolean_v
alue
;
// ----------------------------------------------------------------------------
lpred_in
...
...
@@ -617,17 +609,19 @@ lpred_in
: "in" LPAREN ss1 = string_operators [vars] COMMA
ss2 = string_operators [vars] RPAREN {
op.reset(
// new Wccl::IsSubsetOf
(*ss1.get()
,
*
ss2
.get()
)
// 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()));
}
/*
| "in" LPAREN p1 = position_operators [vars] COMMA
p2 = position_operators [vars] RPAREN {
// op.reset(new Wccl::IsSubsetOf(*p1.get(), *p2.get()));
}
*/
;
// ----------------------------------------------------------------------------
lpred_inter
...
...
@@ -647,10 +641,12 @@ lpred_inter
ts2 = sym_set_operators [vars] RPAREN {
// op.reset(new Wccl::Intersects(*ts1.get(), *ts2.get()));
}
/*
| "inter" LPAREN p1 = position_operators [vars] COMMA
p2 = position_operators [vars] RPAREN {
// op.reset(new Wccl::Intersects(*p1.get(), *p2.get()));
}
*/
;
// ----------------------------------------------------------------------------
lpred_eq
...
...
@@ -669,10 +665,12 @@ lpred_eq
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));
}
*/
;
// ----------------------------------------------------------------------------
...
...
@@ -839,17 +837,20 @@ options {
paraphrase = "Symbol";
testLiterals = true;
}
//
: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
: ('a'..'z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
//
: ('a'..'z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
;
/*
VAR_NAME
options {
paraphrase = "Variable name";
}
: ('A'..'Z') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
;
*/
/*
TRUE_VALUE
options {
paraphrase = "True value";
...
...
@@ -863,6 +864,7 @@ options {
}
: "False"
;
*/
WS
: ( ' '
...
...
This diff is collapsed.
Click to expand it.
wcclparser/CMakeLists.txt
+
12
−
5
View file @
57440040
...
...
@@ -4,19 +4,26 @@ include_directories( ${CMAKE_SOURCE_DIR} )
add_definitions
(
-DLIBWCCL_WCCLPARSER_DATA_DIR=
"
${
PROJECT_SOURCE_DIR
}
/"
)
# String operator
add_executable
(
parser-strop
strop_main.cpp
strop_main.cpp
)
target_link_libraries
(
parser-strop wccl
${
Boost_LIBRARIES
}
antlr
)
add_executable
(
parser-val
val_main.cpp
# Bool operator
add_executable
(
parser-boolop
bool_main.cpp
)
target_link_libraries
(
parser-val wccl
${
Boost_LIBRARIES
}
antlr
)
target_link_libraries
(
parser-boolop wccl
${
Boost_LIBRARIES
}
antlr
)
# Tagset operator
add_executable
(
parser-tagop
tagset_main.cpp
)
target_link_libraries
(
parser-tagop wccl
${
Boost_LIBRARIES
}
antlr
)
include_directories
(
${
Boost_INCLUDE_DIR
}
)
link_directories
(
${
Boost_LIBRARY_DIRS
}
)
#add_custom_target(test tests)
#add_custom_target(test-verbose ./tests --log_level=message)
This diff is collapsed.
Click to expand it.
wcclparser/bool_main.cpp
+
6
−
0
View file @
57440040
...
...
@@ -66,6 +66,12 @@ int main()
catch
(
antlr
::
MismatchedTokenException
&
e
)
{
std
::
cerr
<<
e
.
getMessage
()
<<
std
::
endl
;
}
catch
(
Wccl
::
InvalidVariableName
&
e
)
{
std
::
cerr
<<
"Wccl::InvalidVariableName"
<<
std
::
endl
;
}
catch
(
Wccl
::
VariableTypeMismatch
&
e
)
{
std
::
cerr
<<
"Wccl::VariableTypeMismatch"
<<
std
::
endl
;
}
catch
(...)
{
std
::
cerr
<<
"[N] Syntax error!"
<<
std
::
endl
;
}
...
...
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