Added support for Imply expression.
This commit is contained in:
parent
30b4a1f614
commit
4ae37603f4
@ -37,6 +37,9 @@ using Constants = std::vector<ConstantPointer>;
|
|||||||
class Either;
|
class Either;
|
||||||
using EitherPointer = std::unique_ptr<Either>;
|
using EitherPointer = std::unique_ptr<Either>;
|
||||||
|
|
||||||
|
class Imply;
|
||||||
|
using ImplyPointer = std::unique_ptr<Imply>;
|
||||||
|
|
||||||
class Not;
|
class Not;
|
||||||
using NotPointer = std::unique_ptr<Not>;
|
using NotPointer = std::unique_ptr<Not>;
|
||||||
|
|
||||||
|
54
include/plasp/pddl/expressions/Binary.h
Normal file
54
include/plasp/pddl/expressions/Binary.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#ifndef __PLASP__PDDL__EXPRESSIONS__BINARY_H
|
||||||
|
#define __PLASP__PDDL__EXPRESSIONS__BINARY_H
|
||||||
|
|
||||||
|
#include <plasp/pddl/ConsistencyException.h>
|
||||||
|
#include <plasp/pddl/Context.h>
|
||||||
|
#include <plasp/pddl/Expression.h>
|
||||||
|
#include <plasp/pddl/expressions/Variable.h>
|
||||||
|
|
||||||
|
namespace plasp
|
||||||
|
{
|
||||||
|
namespace pddl
|
||||||
|
{
|
||||||
|
namespace expressions
|
||||||
|
{
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Binary
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class Binary: public Expression
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const Expression *leftArgument() const;
|
||||||
|
const Expression *rightArgument() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
template<typename ExpressionParser>
|
||||||
|
void parse(Context &context, const Variables ¶meters, ExpressionParser parseExpression);
|
||||||
|
|
||||||
|
private:
|
||||||
|
ExpressionPointer m_leftArgument;
|
||||||
|
ExpressionPointer m_rightArgument;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
template<typename ExpressionParser>
|
||||||
|
void Binary::parse(Context &context, const Variables ¶meters, ExpressionParser parseExpression)
|
||||||
|
{
|
||||||
|
// Assume that expression identifier (imply, exists, etc.) is already parsed
|
||||||
|
// Parse arguments of the expression
|
||||||
|
m_leftArgument = parseExpression(context, parameters);
|
||||||
|
m_rightArgument = parseExpression(context, parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
52
include/plasp/pddl/expressions/Imply.h
Normal file
52
include/plasp/pddl/expressions/Imply.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#ifndef __PLASP__PDDL__EXPRESSIONS__IMPLY_H
|
||||||
|
#define __PLASP__PDDL__EXPRESSIONS__IMPLY_H
|
||||||
|
|
||||||
|
#include <plasp/pddl/expressions/Binary.h>
|
||||||
|
|
||||||
|
namespace plasp
|
||||||
|
{
|
||||||
|
namespace pddl
|
||||||
|
{
|
||||||
|
namespace expressions
|
||||||
|
{
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Imply
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class Imply: public Binary
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
template<typename ExpressionParser>
|
||||||
|
static ImplyPointer parse(Context &context, const Variables ¶meters,
|
||||||
|
ExpressionParser parseExpression);
|
||||||
|
|
||||||
|
public:
|
||||||
|
void accept(ExpressionVisitor &expressionVisitor) const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Imply() = default;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
template<typename ExpressionParser>
|
||||||
|
ImplyPointer Imply::parse(Context &context, const Variables ¶meters,
|
||||||
|
ExpressionParser parseExpression)
|
||||||
|
{
|
||||||
|
auto expression = std::make_unique<Imply>(Imply());
|
||||||
|
|
||||||
|
expression->Binary::parse(context, parameters, parseExpression);
|
||||||
|
|
||||||
|
return expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -3,6 +3,7 @@
|
|||||||
#include <plasp/pddl/Context.h>
|
#include <plasp/pddl/Context.h>
|
||||||
#include <plasp/pddl/Identifier.h>
|
#include <plasp/pddl/Identifier.h>
|
||||||
#include <plasp/pddl/expressions/And.h>
|
#include <plasp/pddl/expressions/And.h>
|
||||||
|
#include <plasp/pddl/expressions/Imply.h>
|
||||||
#include <plasp/pddl/expressions/Not.h>
|
#include <plasp/pddl/expressions/Not.h>
|
||||||
#include <plasp/pddl/expressions/Or.h>
|
#include <plasp/pddl/expressions/Or.h>
|
||||||
#include <plasp/pddl/expressions/Predicate.h>
|
#include <plasp/pddl/expressions/Predicate.h>
|
||||||
@ -93,8 +94,9 @@ ExpressionPointer parseExpressionContent(const std::string &expressionIdentifier
|
|||||||
expression = expressions::Or::parse(context, parameters, parseExpression);
|
expression = expressions::Or::parse(context, parameters, parseExpression);
|
||||||
else if (expressionIdentifier == "not")
|
else if (expressionIdentifier == "not")
|
||||||
expression = expressions::Not::parse(context, parameters, parseExpression);
|
expression = expressions::Not::parse(context, parameters, parseExpression);
|
||||||
else if (expressionIdentifier == "imply"
|
else if (expressionIdentifier == "imply")
|
||||||
|| expressionIdentifier == "exists"
|
expression = expressions::Imply::parse(context, parameters, parseExpression);
|
||||||
|
else if (expressionIdentifier == "exists"
|
||||||
|| expressionIdentifier == "forall"
|
|| expressionIdentifier == "forall"
|
||||||
|| expressionIdentifier == "-"
|
|| expressionIdentifier == "-"
|
||||||
|| expressionIdentifier == "="
|
|| expressionIdentifier == "="
|
||||||
|
38
src/plasp/pddl/expressions/Binary.cpp
Normal file
38
src/plasp/pddl/expressions/Binary.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#include <plasp/pddl/expressions/Binary.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include <plasp/pddl/Context.h>
|
||||||
|
#include <plasp/pddl/ExpressionVisitor.h>
|
||||||
|
#include <plasp/pddl/Identifier.h>
|
||||||
|
|
||||||
|
namespace plasp
|
||||||
|
{
|
||||||
|
namespace pddl
|
||||||
|
{
|
||||||
|
namespace expressions
|
||||||
|
{
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Binary
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
const Expression *Binary::leftArgument() const
|
||||||
|
{
|
||||||
|
return m_leftArgument.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
const Expression *Binary::rightArgument() const
|
||||||
|
{
|
||||||
|
return m_rightArgument.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
27
src/plasp/pddl/expressions/Imply.cpp
Normal file
27
src/plasp/pddl/expressions/Imply.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include <plasp/pddl/expressions/Imply.h>
|
||||||
|
|
||||||
|
#include <plasp/pddl/ExpressionVisitor.h>
|
||||||
|
|
||||||
|
namespace plasp
|
||||||
|
{
|
||||||
|
namespace pddl
|
||||||
|
{
|
||||||
|
namespace expressions
|
||||||
|
{
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Imply
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void Imply::accept(plasp::pddl::ExpressionVisitor &expressionVisitor) const
|
||||||
|
{
|
||||||
|
expressionVisitor.visit(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user