Relaxing white space requirements.
This commit is contained in:
parent
8817a3f226
commit
50315f5fae
@ -64,7 +64,8 @@ void Description::parseContent(utils::Parser &parser)
|
|||||||
{
|
{
|
||||||
std::cout << "Parsing file content" << std::endl;
|
std::cout << "Parsing file content" << std::endl;
|
||||||
|
|
||||||
parser.expect<std::string>("(define");
|
parser.expect<std::string>("(");
|
||||||
|
parser.expect<std::string>("define");
|
||||||
parseSection(parser);
|
parseSection(parser);
|
||||||
parser.expect<std::string>(")");
|
parser.expect<std::string>(")");
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,8 @@ const std::vector<std::unique_ptr<Action>> &Domain::actions() const
|
|||||||
|
|
||||||
void Domain::parseSection(utils::Parser &parser)
|
void Domain::parseSection(utils::Parser &parser)
|
||||||
{
|
{
|
||||||
parser.expect<std::string>("(:");
|
parser.expect<std::string>("(");
|
||||||
|
parser.expect<std::string>(":");
|
||||||
|
|
||||||
const auto sectionIdentifier = parser.parseIdentifier(isIdentifier);
|
const auto sectionIdentifier = parser.parseIdentifier(isIdentifier);
|
||||||
|
|
||||||
|
@ -39,8 +39,12 @@ Predicate &Predicate::parseDeclaration(utils::Parser &parser, Context &context)
|
|||||||
|
|
||||||
// Parse arguments
|
// Parse arguments
|
||||||
while (parser.currentCharacter() != ')')
|
while (parser.currentCharacter() != ')')
|
||||||
|
{
|
||||||
Variable::parseTyped(parser, context, predicate->m_arguments);
|
Variable::parseTyped(parser, context, predicate->m_arguments);
|
||||||
|
|
||||||
|
parser.skipWhiteSpace();
|
||||||
|
}
|
||||||
|
|
||||||
parser.expect<std::string>(")");
|
parser.expect<std::string>(")");
|
||||||
|
|
||||||
const auto predicateArity = predicate->m_arguments.size();
|
const auto predicateArity = predicate->m_arguments.size();
|
||||||
|
@ -15,6 +15,7 @@ class PDDLParserTests : public ::testing::Test
|
|||||||
PDDLParserTests()
|
PDDLParserTests()
|
||||||
: m_blocksworldDomainFile(readFile("data/blocksworld-domain.pddl")),
|
: m_blocksworldDomainFile(readFile("data/blocksworld-domain.pddl")),
|
||||||
m_storageDomainFile(readFile("data/storage-domain.pddl")),
|
m_storageDomainFile(readFile("data/storage-domain.pddl")),
|
||||||
|
m_whiteSpaceTestFile(readFile("data/white-space-test.pddl")),
|
||||||
m_woodworkingDomainFile(readFile("data/woodworking-domain.pddl"))
|
m_woodworkingDomainFile(readFile("data/woodworking-domain.pddl"))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -35,6 +36,7 @@ class PDDLParserTests : public ::testing::Test
|
|||||||
|
|
||||||
std::stringstream m_blocksworldDomainFile;
|
std::stringstream m_blocksworldDomainFile;
|
||||||
std::stringstream m_storageDomainFile;
|
std::stringstream m_storageDomainFile;
|
||||||
|
std::stringstream m_whiteSpaceTestFile;
|
||||||
std::stringstream m_woodworkingDomainFile;
|
std::stringstream m_woodworkingDomainFile;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -191,3 +193,17 @@ TEST_F(PDDLParserTests, ParseConstants)
|
|||||||
FAIL() << e.what();
|
FAIL() << e.what();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
TEST_F(PDDLParserTests, ParseWithWhiteSpace)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ASSERT_NO_THROW(plasp::pddl::Description::fromStream(m_whiteSpaceTestFile));
|
||||||
|
}
|
||||||
|
catch (const std::exception &e)
|
||||||
|
{
|
||||||
|
FAIL() << e.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
215
tests/data/white-space-test.pddl
Normal file
215
tests/data/white-space-test.pddl
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
(define (domain woodworking)
|
||||||
|
(:requirements :typing :durative-actions :numeric-fluents)
|
||||||
|
(:types
|
||||||
|
acolour awood woodobj machine
|
||||||
|
surface treatmentstatus - object
|
||||||
|
highspeed-saw glazer grinder immersion-varnisher
|
||||||
|
planer saw spray-varnisher - machine
|
||||||
|
board part - woodobj)
|
||||||
|
|
||||||
|
(:constants
|
||||||
|
verysmooth smooth rough - surface
|
||||||
|
varnished glazed untreated colourfragments - treatmentstatus
|
||||||
|
natural - acolour)
|
||||||
|
|
||||||
|
(:predicates
|
||||||
|
(idle ?machine - machine)
|
||||||
|
(unused ?obj - part)
|
||||||
|
(available ?obj - woodobj)
|
||||||
|
|
||||||
|
(surface-condition ?obj - woodobj ?surface - surface)
|
||||||
|
(treatment ?obj - part ?treatment - treatmentstatus)
|
||||||
|
(colour ?obj - part ?colour - acolour)
|
||||||
|
(wood ?obj - woodobj ?wood - awood)
|
||||||
|
|
||||||
|
(in-highspeed-saw ?b - board ?m - highspeed-saw)
|
||||||
|
(empty ?m - highspeed-saw)
|
||||||
|
(has-colour ?machine - machine ?colour - acolour)
|
||||||
|
(grind-treatment-change ?old ?new - treatmentstatus)
|
||||||
|
(is-smooth ?surface - surface))
|
||||||
|
|
||||||
|
(:functions
|
||||||
|
(board-size ?board - board)
|
||||||
|
(goal-size ?obj - part))
|
||||||
|
|
||||||
|
(:durative-action do-immersion-varnish
|
||||||
|
:parameters (?x - part ?m - immersion-varnisher
|
||||||
|
?newcolour - acolour ?surface - surface)
|
||||||
|
:duration (= ?duration 10)
|
||||||
|
:condition (and
|
||||||
|
(at start (idle ?m))
|
||||||
|
(at start (available ?x))
|
||||||
|
(at start (surface-condition ?x ?surface))
|
||||||
|
(at start (is-smooth ?surface))
|
||||||
|
(at start (has-colour ?m ?newcolour))
|
||||||
|
(at start (treatment ?x untreated)))
|
||||||
|
:effect (and
|
||||||
|
(at start (not (idle ?m)))
|
||||||
|
(at start (not (available ?x)))
|
||||||
|
(at start (not (treatment ?x untreated)))
|
||||||
|
(at start (not (colour ?x natural)))
|
||||||
|
(at end (idle ?m))
|
||||||
|
(at end (available ?x))
|
||||||
|
(at end (treatment ?x varnished))
|
||||||
|
(at end (colour ?x ?newcolour))))
|
||||||
|
|
||||||
|
(:durative-action do-spray-varnish
|
||||||
|
:parameters (?x - part ?m - spray-varnisher
|
||||||
|
?newcolour - acolour ?surface - surface)
|
||||||
|
:duration (= ?duration (goal-size ?x))
|
||||||
|
:condition (and
|
||||||
|
(at start (idle ?m))
|
||||||
|
(at start (available ?x))
|
||||||
|
(at start (surface-condition ?x ?surface))
|
||||||
|
(at start (is-smooth ?surface))
|
||||||
|
(at start (has-colour ?m ?newcolour))
|
||||||
|
(at start (treatment ?x untreated)))
|
||||||
|
:effect (and
|
||||||
|
(at start (not (idle ?m)))
|
||||||
|
(at start (not (available ?x)))
|
||||||
|
(at start (not (treatment ?x untreated)))
|
||||||
|
(at start (not (colour ?x natural)))
|
||||||
|
(at end (idle ?m))
|
||||||
|
(at end (available ?x))
|
||||||
|
(at end (treatment ?x varnished))
|
||||||
|
(at end (colour ?x ?newcolour))))
|
||||||
|
|
||||||
|
(:durative-action do-glaze
|
||||||
|
:parameters (?x - part ?m - glazer
|
||||||
|
?newcolour - acolour)
|
||||||
|
:duration (= ?duration (+ (goal-size ?x) 5))
|
||||||
|
:condition (and
|
||||||
|
(at start (idle ?m))
|
||||||
|
(at start (available ?x))
|
||||||
|
(at start (has-colour ?m ?newcolour))
|
||||||
|
(at start (treatment ?x untreated)))
|
||||||
|
:effect (and
|
||||||
|
(at start (not (idle ?m)))
|
||||||
|
(at start (not (available ?x)))
|
||||||
|
(at start (not (treatment ?x untreated)))
|
||||||
|
(at start (not (colour ?x natural)))
|
||||||
|
(at end (idle ?m))
|
||||||
|
(at end (available ?x))
|
||||||
|
(at end (treatment ?x glazed))
|
||||||
|
(at end (colour ?x ?newcolour))))
|
||||||
|
|
||||||
|
(:durative-action do-grind
|
||||||
|
:parameters (?x - part ?m - grinder ?oldsurface - surface
|
||||||
|
?oldcolour - acolour
|
||||||
|
?oldtreatment ?newtreatment - treatmentstatus)
|
||||||
|
:duration (= ?duration (* 3 (goal-size ?x)))
|
||||||
|
:condition (and
|
||||||
|
(at start (idle ?m))
|
||||||
|
(at start (available ?x))
|
||||||
|
(at start (surface-condition ?x ?oldsurface))
|
||||||
|
(at start (is-smooth ?oldsurface))
|
||||||
|
(at start (colour ?x ?oldcolour))
|
||||||
|
(at start (treatment ?x ?oldtreatment))
|
||||||
|
(at start (grind-treatment-change ?oldtreatment ?newtreatment)))
|
||||||
|
:effect (and
|
||||||
|
(at start (not (idle ?m)))
|
||||||
|
(at start (not (available ?x)))
|
||||||
|
(at start (not (surface-condition ?x ?oldsurface)))
|
||||||
|
(at start (not (treatment ?x ?oldtreatment)))
|
||||||
|
(at start (not (colour ?x ?oldcolour)))
|
||||||
|
(at end (idle ?m))
|
||||||
|
(at end (available ?x))
|
||||||
|
(at end (surface-condition ?x verysmooth))
|
||||||
|
(at end (treatment ?x ?newtreatment))
|
||||||
|
(at end (colour ?x natural))))
|
||||||
|
|
||||||
|
(:durative-action do-plane
|
||||||
|
:parameters (?x - part ?m - planer ?oldsurface - surface
|
||||||
|
?oldcolour - acolour ?oldtreatment - treatmentstatus)
|
||||||
|
:duration (= ?duration (* 2 (goal-size ?x)))
|
||||||
|
:condition (and
|
||||||
|
(at start (idle ?m))
|
||||||
|
(at start (available ?x))
|
||||||
|
(at start (surface-condition ?x ?oldsurface))
|
||||||
|
(at start (treatment ?x ?oldtreatment))
|
||||||
|
(at start (colour ?x ?oldcolour)))
|
||||||
|
:effect (and
|
||||||
|
(at start (not (idle ?m)))
|
||||||
|
(at start (not (available ?x)))
|
||||||
|
(at start (not (surface-condition ?x ?oldsurface)))
|
||||||
|
(at start (not (treatment ?x ?oldtreatment)))
|
||||||
|
(at start (not (colour ?x ?oldcolour)))
|
||||||
|
(at end (idle ?m))
|
||||||
|
(at end (available ?x))
|
||||||
|
(at end (surface-condition ?x smooth))
|
||||||
|
(at end (treatment ?x untreated))
|
||||||
|
(at end (colour ?x natural))))
|
||||||
|
|
||||||
|
(:durative-action load-highspeed-saw
|
||||||
|
:parameters (?b - board ?m - highspeed-saw)
|
||||||
|
:duration (= ?duration 30)
|
||||||
|
:condition (and
|
||||||
|
(at start (idle ?m))
|
||||||
|
(at start (empty ?m))
|
||||||
|
(at start (available ?b)))
|
||||||
|
:effect (and
|
||||||
|
(at start (not (idle ?m)))
|
||||||
|
(at start (not (available ?b)))
|
||||||
|
(at start (not (empty ?m)))
|
||||||
|
(at end (idle ?m))
|
||||||
|
(at end (in-highspeed-saw ?b ?m))))
|
||||||
|
|
||||||
|
(:durative-action unload-highspeed-saw
|
||||||
|
:parameters (?b - board ?m - highspeed-saw)
|
||||||
|
:duration (= ?duration 10)
|
||||||
|
:condition (and
|
||||||
|
(at start (idle ?m))
|
||||||
|
(at start (in-highspeed-saw ?b ?m)))
|
||||||
|
:effect (and
|
||||||
|
(at start (not (idle ?m)))
|
||||||
|
(at end (available ?b))
|
||||||
|
(at end (not (in-highspeed-saw ?b ?m)))
|
||||||
|
(at end (empty ?m))
|
||||||
|
(at end (idle ?m))))
|
||||||
|
|
||||||
|
(:durative-action cut-board
|
||||||
|
:parameters (?b - board ?p - part ?m - highspeed-saw ?w - awood
|
||||||
|
?surface - surface)
|
||||||
|
:duration (= ?duration 10)
|
||||||
|
:condition (and
|
||||||
|
(at start (idle ?m))
|
||||||
|
(at start (unused ?p))
|
||||||
|
(at start (in-highspeed-saw ?b ?m))
|
||||||
|
(at start (wood ?b ?w))
|
||||||
|
(at start (surface-condition ?b ?surface))
|
||||||
|
(at start (>= (board-size ?b) (goal-size ?p))))
|
||||||
|
:effect (and
|
||||||
|
(at start (not (idle ?m)))
|
||||||
|
(at start (not (unused ?p)))
|
||||||
|
(at start (decrease (board-size ?b) (goal-size ?p)))
|
||||||
|
(at end (idle ?m))
|
||||||
|
(at end (available ?p))
|
||||||
|
(at end (wood ?p ?w))
|
||||||
|
(at end (surface-condition ?p ?surface))
|
||||||
|
(at end (colour ?p natural))
|
||||||
|
(at end (treatment ?p untreated))))
|
||||||
|
|
||||||
|
(:durative-action do-saw
|
||||||
|
:parameters (?b - board ?p - part ?m - saw ?w - awood
|
||||||
|
?surface - surface)
|
||||||
|
:duration (= ?duration 30)
|
||||||
|
:condition (and
|
||||||
|
(at start (idle ?m))
|
||||||
|
(at start (unused ?p))
|
||||||
|
(at start (available ?b))
|
||||||
|
(at start (wood ?b ?w))
|
||||||
|
(at start (surface-condition ?b ?surface))
|
||||||
|
(at start (>= (board-size ?b) (goal-size ?p))))
|
||||||
|
:effect (and
|
||||||
|
(at start (not (idle ?m)))
|
||||||
|
(at start (not (unused ?p)))
|
||||||
|
(at start (not (available ?b)))
|
||||||
|
(at end (decrease (board-size ?b) (goal-size ?p)))
|
||||||
|
(at end (idle ?m))
|
||||||
|
(at end (available ?p))
|
||||||
|
(at end (available ?b))
|
||||||
|
(at end (wood ?p ?w))
|
||||||
|
(at end (surface-condition ?p ?surface))
|
||||||
|
(at end (colour ?p natural))
|
||||||
|
(at end (treatment ?p untreated))))
|
||||||
|
)
|
Reference in New Issue
Block a user