Started refactoring Variables as expressions.
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include <plasp/pddl/Expression.h>
|
||||
#include <plasp/pddl/Variable.h>
|
||||
#include <plasp/pddl/expressions/VariableExpression.h>
|
||||
#include <plasp/utils/Parser.h>
|
||||
|
||||
namespace plasp
|
||||
@@ -26,7 +26,7 @@ class Action
|
||||
public:
|
||||
const std::string &name() const;
|
||||
|
||||
const Variables ¶meters() const;
|
||||
const expressions::VariableExpressions ¶meters() const;
|
||||
const Expression &precondition() const;
|
||||
const Expression &effect() const;
|
||||
|
||||
@@ -35,7 +35,7 @@ class Action
|
||||
|
||||
std::string m_name;
|
||||
|
||||
Variables m_parameters;
|
||||
expressions::VariableExpressions m_parameters;
|
||||
std::unique_ptr<Expression> m_precondition;
|
||||
std::unique_ptr<Expression> m_effect;
|
||||
};
|
||||
|
@@ -22,6 +22,29 @@ namespace pddl
|
||||
class Context;
|
||||
class ExpressionVisitor;
|
||||
|
||||
class Expression;
|
||||
using ExpressionPointer = std::unique_ptr<Expression>;
|
||||
using Expressions = std::vector<ExpressionPointer>;
|
||||
|
||||
namespace expressions
|
||||
{
|
||||
class AndExpression;
|
||||
using AndExpressionPointer = std::unique_ptr<AndExpression>;
|
||||
|
||||
class NotExpression;
|
||||
using NotExpressionPointer = std::unique_ptr<NotExpression>;
|
||||
|
||||
class OrExpression;
|
||||
using OrExpressionPointer = std::unique_ptr<OrExpression>;
|
||||
|
||||
class PredicateExpression;
|
||||
using PredicateExpressionPointer = std::unique_ptr<PredicateExpression>;
|
||||
|
||||
class VariableExpression;
|
||||
using VariableExpressionPointer = std::unique_ptr<VariableExpression>;
|
||||
using VariableExpressions = std::vector<VariableExpressionPointer>;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class Expression
|
||||
@@ -32,10 +55,13 @@ class Expression
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
std::unique_ptr<Expression> parsePreconditionExpression(utils::Parser &parser, Context &context, const Variables ¶meters);
|
||||
std::unique_ptr<Expression> parseExpression(utils::Parser &parser, Context &context, const Variables ¶meters);
|
||||
ExpressionPointer parsePreconditionExpression(utils::Parser &parser, Context &context,
|
||||
const expressions::VariableExpressions ¶meters);
|
||||
ExpressionPointer parseExpression(utils::Parser &parser, Context &context,
|
||||
const expressions::VariableExpressions ¶meters);
|
||||
|
||||
std::unique_ptr<Expression> parseEffectExpression(utils::Parser &parser, Context &context, const Variables ¶meters);
|
||||
ExpressionPointer parseEffectExpression(utils::Parser &parser, Context &context,
|
||||
const expressions::VariableExpressions ¶meters);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
@@ -20,7 +20,8 @@ class AndExpression: public NAryExpression
|
||||
{
|
||||
public:
|
||||
template<typename ExpressionParser>
|
||||
static std::unique_ptr<AndExpression> parse(utils::Parser &parser, Context &context, const Variables ¶meters, ExpressionParser parseExpression);
|
||||
static AndExpressionPointer parse(utils::Parser &parser, Context &context,
|
||||
const VariableExpressions ¶meters, ExpressionParser parseExpression);
|
||||
|
||||
public:
|
||||
void accept(ExpressionVisitor &expressionVisitor) const override;
|
||||
@@ -32,7 +33,8 @@ class AndExpression: public NAryExpression
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template<typename ExpressionParser>
|
||||
std::unique_ptr<AndExpression> AndExpression::parse(utils::Parser &parser, Context &context, const Variables ¶meters, ExpressionParser parseExpression)
|
||||
AndExpressionPointer AndExpression::parse(utils::Parser &parser, Context &context,
|
||||
const VariableExpressions ¶meters, ExpressionParser parseExpression)
|
||||
{
|
||||
auto expression = std::make_unique<AndExpression>(AndExpression());
|
||||
|
||||
|
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <plasp/pddl/ConsistencyException.h>
|
||||
#include <plasp/pddl/Expression.h>
|
||||
#include <plasp/pddl/expressions/VariableExpression.h>
|
||||
#include <plasp/utils/Parser.h>
|
||||
|
||||
namespace plasp
|
||||
@@ -25,20 +26,22 @@ namespace expressions
|
||||
class NAryExpression: public Expression
|
||||
{
|
||||
public:
|
||||
const std::vector<std::unique_ptr<Expression>> &arguments() const;
|
||||
const Expressions &arguments() const;
|
||||
|
||||
protected:
|
||||
template<typename ExpressionParser>
|
||||
void parse(utils::Parser &parser, Context &context, const Variables ¶meters, ExpressionParser parseExpression);
|
||||
void parse(utils::Parser &parser, Context &context, const VariableExpressions ¶meters,
|
||||
ExpressionParser parseExpression);
|
||||
|
||||
private:
|
||||
std::vector<std::unique_ptr<Expression>> m_arguments;
|
||||
Expressions m_arguments;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template<typename ExpressionParser>
|
||||
void NAryExpression::parse(utils::Parser &parser, Context &context, const Variables ¶meters, ExpressionParser parseExpression)
|
||||
void NAryExpression::parse(utils::Parser &parser, Context &context,
|
||||
const VariableExpressions ¶meters, ExpressionParser parseExpression)
|
||||
{
|
||||
parser.skipWhiteSpace();
|
||||
|
||||
|
@@ -21,7 +21,8 @@ class NotExpression: public Expression
|
||||
{
|
||||
public:
|
||||
template<typename ExpressionParser>
|
||||
static std::unique_ptr<NotExpression> parse(utils::Parser &parser, Context &context, const Variables ¶meters, ExpressionParser parseExpression);
|
||||
static NotExpressionPointer parse(utils::Parser &parser, Context &context,
|
||||
const VariableExpressions ¶meters, ExpressionParser parseExpression);
|
||||
|
||||
public:
|
||||
void accept(ExpressionVisitor &expressionVisitor) const override;
|
||||
@@ -31,13 +32,14 @@ class NotExpression: public Expression
|
||||
private:
|
||||
NotExpression() = default;
|
||||
|
||||
std::unique_ptr<Expression> m_argument;
|
||||
ExpressionPointer m_argument;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template<typename ExpressionParser>
|
||||
std::unique_ptr<NotExpression> NotExpression::parse(utils::Parser &parser, Context &context, const Variables ¶meters, ExpressionParser parseExpression)
|
||||
NotExpressionPointer NotExpression::parse(utils::Parser &parser, Context &context,
|
||||
const VariableExpressions ¶meters, ExpressionParser parseExpression)
|
||||
{
|
||||
auto expression = std::make_unique<NotExpression>(NotExpression());
|
||||
|
||||
|
@@ -20,7 +20,8 @@ class OrExpression: public NAryExpression
|
||||
{
|
||||
public:
|
||||
template<typename ExpressionParser>
|
||||
static std::unique_ptr<OrExpression> parse(utils::Parser &parser, Context &context, const Variables ¶meters, ExpressionParser parseExpression);
|
||||
static OrExpressionPointer parse(utils::Parser &parser, Context &context,
|
||||
const VariableExpressions ¶meters, ExpressionParser parseExpression);
|
||||
|
||||
public:
|
||||
void accept(ExpressionVisitor &expressionVisitor) const override;
|
||||
@@ -32,7 +33,8 @@ class OrExpression: public NAryExpression
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template<typename ExpressionParser>
|
||||
std::unique_ptr<OrExpression> OrExpression::parse(utils::Parser &parser, Context &context, const Variables ¶meters, ExpressionParser parseExpression)
|
||||
OrExpressionPointer OrExpression::parse(utils::Parser &parser, Context &context,
|
||||
const VariableExpressions ¶meters, ExpressionParser parseExpression)
|
||||
{
|
||||
auto expression = std::make_unique<OrExpression>(OrExpression());
|
||||
|
||||
|
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <plasp/pddl/Expression.h>
|
||||
#include <plasp/pddl/Predicate.h>
|
||||
#include <plasp/pddl/expressions/VariableExpression.h>
|
||||
|
||||
namespace plasp
|
||||
{
|
||||
@@ -20,16 +21,19 @@ namespace expressions
|
||||
class PredicateExpression: public Expression
|
||||
{
|
||||
public:
|
||||
static std::unique_ptr<PredicateExpression> parse(std::string name, utils::Parser &parser, Context &context, const Variables ¶meters);
|
||||
static PredicateExpressionPointer parse(std::string name, utils::Parser &parser,
|
||||
Context &context, const VariableExpressions ¶meters);
|
||||
|
||||
public:
|
||||
void accept(ExpressionVisitor &expressionVisitor) const override;
|
||||
|
||||
const std::vector<const VariableExpression *> &arguments() const;
|
||||
|
||||
private:
|
||||
PredicateExpression() = default;
|
||||
|
||||
std::string m_name;
|
||||
Variables m_arguments;
|
||||
std::vector<const VariableExpression *> m_arguments;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
56
include/plasp/pddl/expressions/VariableExpression.h
Normal file
56
include/plasp/pddl/expressions/VariableExpression.h
Normal file
@@ -0,0 +1,56 @@
|
||||
#ifndef __PLASP__PDDL__EXPRESSION__VARIABLE_EXPRESSION_H
|
||||
#define __PLASP__PDDL__EXPRESSION__VARIABLE_EXPRESSION_H
|
||||
|
||||
#include <plasp/pddl/Expression.h>
|
||||
|
||||
namespace plasp
|
||||
{
|
||||
namespace pddl
|
||||
{
|
||||
namespace expressions
|
||||
{
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// VariableExpression
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class VariableExpression: public Expression
|
||||
{
|
||||
public:
|
||||
static VariableExpressionPointer parseDeclaration(utils::Parser &parser);
|
||||
static void parseTypedDeclaration(utils::Parser &parser, Context &context,
|
||||
VariableExpressions &variableExpressions);
|
||||
|
||||
static const VariableExpression *parse(utils::Parser &parser,
|
||||
const VariableExpressions &variableExpressions);
|
||||
|
||||
public:
|
||||
void accept(ExpressionVisitor &expressionVisitor) const override;
|
||||
|
||||
const std::string &name() const;
|
||||
TypePtr type() const;
|
||||
|
||||
void setDirty(bool isDirty = true);
|
||||
bool isDirty() const;
|
||||
|
||||
void setType(TypePtr type);
|
||||
|
||||
private:
|
||||
VariableExpression();
|
||||
|
||||
bool m_isDirty;
|
||||
|
||||
std::string m_name;
|
||||
|
||||
TypePtr m_type;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user