Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
perception
imagine-planner
Commits
66343065
Commit
66343065
authored
Apr 04, 2018
by
Alejandro Suarez Hernandez
Browse files
some modifications in parsing to support total effects
parent
a0bcd273
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/examples/parsing_test.cpp
View file @
66343065
...
...
@@ -41,7 +41,7 @@ BOOST_AUTO_TEST_CASE(spaces)
BOOST_AUTO_TEST_CASE
(
test_parse_predicate
)
{
std
::
string
str
(
"at(lettuce,east), cost(2.5), r(), s("
);
std
::
string
str
(
"at(lettuce,east), cost(2.5), r(), s(
-> forall
"
);
TokenV
tokens
=
decompose
(
str
);
INFO
(
tokens
);
std
::
size_t
cursor
=
0
;
...
...
src/parsing.cpp
View file @
66343065
...
...
@@ -47,6 +47,11 @@ TokenV decompose(const std::string& in)
tokens
.
push_back
({
"NOT"
,
""
});
cursor
+=
2
;
}
else
if
(
in_clean
.
compare
(
cursor
,
2
,
"->"
)
==
0
)
{
tokens
.
push_back
({
"RIGHTARROW"
,
""
});
cursor
+=
2
;
}
else
if
(
in_clean
[
cursor
]
==
'('
)
{
tokens
.
push_back
({
"PAR_OPEN"
,
""
});
...
...
@@ -69,12 +74,19 @@ TokenV decompose(const std::string& in)
}
else
{
std
::
size_t
end
=
in_clean
.
find_first_of
(
",()
\\
"
,
cursor
);
std
::
size_t
end
=
in_clean
.
find_first_of
(
",()
\\
-
"
,
cursor
);
if
(
end
==
std
::
string
::
npos
)
end
=
in_clean
.
length
();
std
::
size_t
len
=
end
-
cursor
;
std
::
string
substr
=
in_clean
.
substr
(
cursor
,
len
);
std
::
string
type
=
is_number
(
substr
)
?
"NUMBER"
:
"SYMBOL"
;
tokens
.
push_back
({
type
,
substr
});
if
(
substr
==
"forall"
)
{
tokens
.
push_back
({
"FUNCTIONAL"
,
"FORALL"
});
}
else
{
std
::
string
type
=
is_number
(
substr
)
?
"NUMBER"
:
"SYMBOL"
;
tokens
.
push_back
({
type
,
substr
});
}
cursor
=
end
;
}
}
...
...
@@ -255,10 +267,16 @@ Query::Ptr parse_query(const std::string& str)
return
parse_query
(
tokens
,
cursor
);
}
//Effect::Ptr parse_functional(const TokenV& tokens, std::size_t& cursor)
//{
//enum State { };
//return nullptr;
//}
Effect
::
Ptr
parse_next_effect
(
const
TokenV
&
tokens
,
std
::
size_t
&
cursor
)
{
enum
State
{
EXPECTING_
ADD_OR_DEL
,
OK
,
KO
};
State
state
=
EXPECTING_
ADD_OR_DEL
;
enum
State
{
EXPECTING_
EFFECT
,
OK
,
KO
};
State
state
=
EXPECTING_
EFFECT
;
bool
delete_effect
=
false
;
Effect
::
Ptr
effect
=
nullptr
;
std
::
size_t
idx
=
cursor
;
...
...
@@ -267,7 +285,12 @@ Effect::Ptr parse_next_effect(const TokenV& tokens, std::size_t& cursor)
const
Token
&
token
=
tokens
[
idx
];
switch
(
state
)
{
case
EXPECTING_ADD_OR_DEL
:
case
EXPECTING_EFFECT
:
//if (token.first == "FUNCTIONAL")
//{
//effect = parse_functional(tokens, idx);
//state = effect? OK : KO;
//}
if
(
token
.
first
==
"NOT"
)
{
delete_effect
=
not
delete_effect
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment