Built initial AST for normalized PDDL.
This commit is contained in:
parent
834209d506
commit
480da6ff09
161
lib/pddlparse/include/pddlparse/NormalizedAST.h
Normal file
161
lib/pddlparse/include/pddlparse/NormalizedAST.h
Normal file
@ -0,0 +1,161 @@
|
||||
#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
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Compounds
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
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(std::string &&name, VariableDeclarations &¶meters)
|
||||
: name{std::move(name)},
|
||||
parameters{std::move(parameters)}
|
||||
{
|
||||
}
|
||||
|
||||
DerivedPredicateDeclaration(const DerivedPredicateDeclaration &other) = delete;
|
||||
DerivedPredicateDeclaration &operator=(const DerivedPredicateDeclaration &&other) = delete;
|
||||
DerivedPredicateDeclaration(DerivedPredicateDeclaration &&other) = default;
|
||||
DerivedPredicateDeclaration &operator=(DerivedPredicateDeclaration &&other) = default;
|
||||
|
||||
std::string name;
|
||||
VariableDeclarations parameters;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 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 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;
|
||||
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
|
196
lib/pddlparse/include/pddlparse/NormalizedASTForward.h
Normal file
196
lib/pddlparse/include/pddlparse/NormalizedASTForward.h
Normal file
@ -0,0 +1,196 @@
|
||||
#ifndef __PDDL_PARSE__NORMALIZED_AST_FORWARD_H
|
||||
#define __PDDL_PARSE__NORMALIZED_AST_FORWARD_H
|
||||
|
||||
#include <pddlparse/AST.h>
|
||||
|
||||
namespace pddl
|
||||
{
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Normalized AST Forward Declarations
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace normalizedAST
|
||||
{
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Primitives
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
using ast::Constant;
|
||||
using ast::ConstantPointer;
|
||||
using ast::ConstantDeclaration;
|
||||
using ast::ConstantDeclarationPointer;
|
||||
using ast::ConstantDeclarations;
|
||||
using ast::PrimitiveTypePointer;
|
||||
using ast::PrimitiveType;
|
||||
using ast::PrimitiveTypePointer;
|
||||
using ast::PrimitiveTypes;
|
||||
using ast::PrimitiveTypeDeclaration;
|
||||
using ast::PrimitiveTypeDeclarationPointer;
|
||||
using ast::PrimitiveTypeDeclarations;
|
||||
using ast::Variable;
|
||||
using ast::VariablePointer;
|
||||
using ast::Variables;
|
||||
using ast::VariableDeclaration;
|
||||
using ast::VariableDeclarationPointer;
|
||||
using ast::VariableDeclarations;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Compounds
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct DerivedPredicate;
|
||||
using DerivedPredicatePointer = std::unique_ptr<DerivedPredicate>;
|
||||
using DerivedPredicates = std::vector<DerivedPredicatePointer>;
|
||||
struct DerivedPredicateDeclaration;
|
||||
using DerivedPredicateDeclarationPointer = std::unique_ptr<DerivedPredicateDeclaration>;
|
||||
using DerivedPredicateDeclarations = std::vector<DerivedPredicateDeclarationPointer>;
|
||||
using ast::Predicate;
|
||||
using ast::PredicatePointer;
|
||||
using ast::Predicates;
|
||||
using ast::PredicateDeclaration;
|
||||
using ast::PredicateDeclarationPointer;
|
||||
using ast::PredicateDeclarations;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Expressions
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
using ast::And;
|
||||
using ast::AndPointer;
|
||||
using ast::At;
|
||||
using ast::AtPointer;
|
||||
using ast::Either;
|
||||
using ast::EitherPointer;
|
||||
using ast::Exists;
|
||||
using ast::Not;
|
||||
using ast::NotPointer;
|
||||
using ast::When;
|
||||
using ast::WhenPointer;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// PDDL Structure
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct Action;
|
||||
using ActionPointer = std::unique_ptr<Action>;
|
||||
using Actions = std::vector<ActionPointer>;
|
||||
struct Description;
|
||||
using DescriptionPointer = std::unique_ptr<Description>;
|
||||
struct Domain;
|
||||
using DomainPointer = std::unique_ptr<Domain>;
|
||||
struct Problem;
|
||||
using ProblemPointer = std::unique_ptr<Problem>;
|
||||
enum class Requirement;
|
||||
using Requirements = std::vector<Requirement>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Variants
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
using ast::Term;
|
||||
using ast::Terms;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace detail
|
||||
{
|
||||
using AtomicFormulaT = Variant<
|
||||
DerivedPredicatePointer,
|
||||
PredicatePointer>;
|
||||
}
|
||||
|
||||
class AtomicFormula : public detail::AtomicFormulaT
|
||||
{
|
||||
using detail::AtomicFormulaT::AtomicFormulaT;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace detail
|
||||
{
|
||||
using LiteralT = Variant<
|
||||
AtomicFormula,
|
||||
NotPointer<AtomicFormula>>;
|
||||
}
|
||||
|
||||
class Literal : public detail::LiteralT
|
||||
{
|
||||
using detail::LiteralT::LiteralT;
|
||||
};
|
||||
|
||||
using Literals = std::vector<Literal>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class Precondition;
|
||||
|
||||
namespace detail
|
||||
{
|
||||
using PreconditionT = Variant<
|
||||
Literal,
|
||||
AndPointer<Literal>>;
|
||||
}
|
||||
|
||||
class Precondition : public detail::PreconditionT
|
||||
{
|
||||
using detail::PreconditionT::PreconditionT;
|
||||
};
|
||||
|
||||
using Preconditions = std::vector<Precondition>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class ConditionalEffect;
|
||||
|
||||
namespace detail
|
||||
{
|
||||
using ConditionalEffectT = Variant<
|
||||
Literal,
|
||||
AndPointer<Literal>,
|
||||
NotPointer<ConditionalEffect>>;
|
||||
}
|
||||
|
||||
class ConditionalEffect : public detail::ConditionalEffectT
|
||||
{
|
||||
using detail::ConditionalEffectT::ConditionalEffectT;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TODO: support effects appropriately
|
||||
class Effect;
|
||||
|
||||
namespace detail
|
||||
{
|
||||
using EffectT = Variant<
|
||||
AtomicFormula,
|
||||
AndPointer<Effect>,
|
||||
ast::ForAllPointer<Effect>,
|
||||
NotPointer<Effect>,
|
||||
WhenPointer<Precondition, ConditionalEffect>>;
|
||||
}
|
||||
|
||||
class Effect : public detail::EffectT
|
||||
{
|
||||
using detail::EffectT::EffectT;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
using Fact = Literal;
|
||||
using Facts = std::vector<Fact>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
using Goal = Precondition;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user