Implemented parsing conditional effects.

This commit is contained in:
2016-09-08 15:56:30 +02:00
parent 4fc9b35c13
commit 9cccba42e0
4 changed files with 111 additions and 1 deletions

View File

@@ -13,6 +13,7 @@
#include <plasp/pddl/expressions/Predicate.h>
#include <plasp/pddl/expressions/PredicateDeclaration.h>
#include <plasp/pddl/expressions/Unsupported.h>
#include <plasp/pddl/expressions/When.h>
#include <plasp/utils/ParserException.h>
namespace plasp
@@ -230,7 +231,8 @@ ExpressionPointer parseEffectExpression(Context &context, ExpressionContext &exp
ExpressionPointer expression;
if ((expression = expressions::And::parse(context, expressionContext, parseEffectExpression))
|| (expression = expressions::ForAll::parse(context, expressionContext, parseEffectExpression)))
|| (expression = expressions::ForAll::parse(context, expressionContext, parseEffectExpression))
|| (expression = expressions::When::parse(context, expressionContext, parseExpression, parseConditionalEffectExpression)))
{
return expression;
}
@@ -297,6 +299,18 @@ ExpressionPointer parseEffectBodyExpression(Context &context, ExpressionContext
////////////////////////////////////////////////////////////////////////////////////////////////////
ExpressionPointer parseConditionalEffectExpression(Context &context, ExpressionContext &expressionContext)
{
ExpressionPointer expression;
if ((expression = expressions::And::parse(context, expressionContext, parseEffectBodyExpression)))
return expression;
return parseEffectBodyExpression(context, expressionContext);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
ExpressionPointer parsePredicate(Context &context, ExpressionContext &expressionContext)
{
auto &parser = context.parser;

View File

@@ -0,0 +1,22 @@
#include <plasp/pddl/expressions/When.h>
namespace plasp
{
namespace pddl
{
namespace expressions
{
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// When
//
////////////////////////////////////////////////////////////////////////////////////////////////////
const std::string When::Identifier = "when";
////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
}