Implemented predicate expressions.

This commit is contained in:
2016-06-02 18:31:47 +02:00
parent 7baf15d9f0
commit 7271a5e52b
9 changed files with 261 additions and 14 deletions

View File

@@ -33,6 +33,7 @@ class Expression
////////////////////////////////////////////////////////////////////////////////////////////////////
std::unique_ptr<Expression> parsePreconditionExpression(utils::Parser &parser, Context &context, const Variables &parameters);
std::unique_ptr<Expression> parseExpression(utils::Parser &parser, Context &context, const Variables &parameters);
////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -39,7 +39,7 @@ std::unique_ptr<AndExpression> AndExpression::parse(utils::Parser &parser, Conte
expression->NAryExpression::parse(parser, context, parameters, parseExpression);
if (expression->arguments().empty())
throw ConsistencyException("Expressions should not be empty");
throw ConsistencyException("\"and\" expressions should not be empty");
return expression;
}

View File

@@ -0,0 +1,53 @@
#ifndef __PLASP__PDDL__EXPRESSION__OR_EXPRESSION_H
#define __PLASP__PDDL__EXPRESSION__OR_EXPRESSION_H
#include <plasp/pddl/expressions/NAryExpression.h>
namespace plasp
{
namespace pddl
{
namespace expressions
{
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// OrExpression
//
////////////////////////////////////////////////////////////////////////////////////////////////////
class OrExpression: public NAryExpression
{
public:
template<typename ExpressionParser>
static std::unique_ptr<OrExpression> parse(utils::Parser &parser, Context &context, const Variables &parameters, ExpressionParser parseExpression);
public:
void accept(ExpressionVisitor &expressionVisitor) const override;
private:
OrExpression() = default;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
template<typename ExpressionParser>
std::unique_ptr<OrExpression> OrExpression::parse(utils::Parser &parser, Context &context, const Variables &parameters, ExpressionParser parseExpression)
{
auto expression = std::make_unique<OrExpression>(OrExpression());
expression->NAryExpression::parse(parser, context, parameters, parseExpression);
if (expression->arguments().empty())
throw ConsistencyException("\"or\" expressions should not be empty");
return expression;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
}
#endif

View File

@@ -0,0 +1,42 @@
#ifndef __PLASP__PDDL__EXPRESSION__PREDICATE_EXPRESSION_H
#define __PLASP__PDDL__EXPRESSION__PREDICATE_EXPRESSION_H
#include <plasp/pddl/Expression.h>
#include <plasp/pddl/Identifier.h>
#include <plasp/pddl/Predicate.h>
namespace plasp
{
namespace pddl
{
namespace expressions
{
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// PredicateExpression
//
////////////////////////////////////////////////////////////////////////////////////////////////////
class PredicateExpression: public Expression
{
public:
static std::unique_ptr<PredicateExpression> parse(std::string name, utils::Parser &parser, Context &context, const Variables &parameters);
public:
void accept(ExpressionVisitor &expressionVisitor) const override;
private:
PredicateExpression() = default;
std::string m_name;
Variables m_arguments;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
}
#endif