160 lines
4.4 KiB
C++
160 lines
4.4 KiB
C++
#ifndef __PDDL_PARSE__NORMALIZED_AST_H
|
|
#define __PDDL_PARSE__NORMALIZED_AST_H
|
|
|
|
#include <limits>
|
|
#include <experimental/optional>
|
|
#include <set>
|
|
#include <type_traits>
|
|
#include <vector>
|
|
|
|
#include <pddlparse/NormalizedASTForward.h>
|
|
|
|
namespace pddl
|
|
{
|
|
namespace normalizedAST
|
|
{
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Normalized AST
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// PDDL Structure
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct Action
|
|
{
|
|
Action() = default;
|
|
|
|
Action(const Action &other) = delete;
|
|
Action &operator=(const Action &&other) = delete;
|
|
Action(Action &&other) = default;
|
|
Action &operator=(Action &&other) = default;
|
|
|
|
std::string name;
|
|
|
|
VariableDeclarations parameters;
|
|
std::experimental::optional<Precondition> precondition;
|
|
std::experimental::optional<Effect> effect;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct Domain
|
|
{
|
|
Domain() = default;
|
|
|
|
Domain(const Domain &other) = delete;
|
|
Domain &operator=(const Domain &&other) = delete;
|
|
Domain(Domain &&other) = delete;
|
|
Domain &operator=(Domain &&other) = delete;
|
|
|
|
std::string name;
|
|
PrimitiveTypeDeclarations types;
|
|
ConstantDeclarations constants;
|
|
PredicateDeclarations predicates;
|
|
DerivedPredicateDeclarations derivedPredicates;
|
|
Actions actions;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct DerivedPredicate
|
|
{
|
|
using Arguments = Terms;
|
|
|
|
explicit DerivedPredicate(Arguments &&arguments, DerivedPredicateDeclaration *declaration)
|
|
: arguments{std::move(arguments)},
|
|
declaration{declaration}
|
|
{
|
|
}
|
|
|
|
DerivedPredicate(const DerivedPredicate &other) = delete;
|
|
DerivedPredicate &operator=(const DerivedPredicate &&other) = delete;
|
|
DerivedPredicate(DerivedPredicate &&other) = default;
|
|
DerivedPredicate &operator=(DerivedPredicate &&other) = default;
|
|
|
|
Arguments arguments;
|
|
DerivedPredicateDeclaration *declaration;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct DerivedPredicateDeclaration
|
|
{
|
|
explicit DerivedPredicateDeclaration() = default;
|
|
|
|
DerivedPredicateDeclaration(const DerivedPredicateDeclaration &other) = delete;
|
|
DerivedPredicateDeclaration &operator=(const DerivedPredicateDeclaration &&other) = delete;
|
|
DerivedPredicateDeclaration(DerivedPredicateDeclaration &&other) = default;
|
|
DerivedPredicateDeclaration &operator=(DerivedPredicateDeclaration &&other) = default;
|
|
|
|
std::string name;
|
|
|
|
std::vector<VariableDeclaration *> parameters;
|
|
VariableDeclarations existentialParameters;
|
|
std::experimental::optional<DerivedPredicatePrecondition> precondition;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct InitialState
|
|
{
|
|
InitialState() = default;
|
|
|
|
InitialState(const InitialState &other) = delete;
|
|
InitialState &operator=(const InitialState &&other) = delete;
|
|
InitialState(InitialState &&other) = default;
|
|
InitialState &operator=(InitialState &&other) = default;
|
|
|
|
Facts facts;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct Problem
|
|
{
|
|
Problem() = default;
|
|
|
|
Problem(Domain *domain)
|
|
: domain{domain}
|
|
{
|
|
}
|
|
|
|
Problem(const Problem &other) = delete;
|
|
Problem &operator=(const Problem &&other) = delete;
|
|
Problem(Problem &&other) = default;
|
|
Problem &operator=(Problem &&other) = default;
|
|
|
|
Domain *domain;
|
|
std::string name;
|
|
DerivedPredicateDeclarations derivedPredicates;
|
|
ConstantDeclarations objects;
|
|
InitialState initialState;
|
|
std::experimental::optional<Goal> goal;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct Description
|
|
{
|
|
Description() = default;
|
|
|
|
Description(const Description &other) = delete;
|
|
Description &operator=(const Description &&other) = delete;
|
|
Description(Description &&other) = default;
|
|
Description &operator=(Description &&other) = default;
|
|
|
|
DomainPointer domain;
|
|
std::experimental::optional<ProblemPointer> problem;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
}
|
|
}
|
|
|
|
#endif
|