1 #ifndef PDDL_PLANNER_REPRESENTATION_DOMAIN 2 #define PDDL_PLANNER_REPRESENTATION_DOMAIN 14 namespace representation {
41 bool undefined()
const {
return label.empty() || type.empty(); }
62 std::vector<std::string> mKnownVariables;
63 std::vector<Label> mOperatorStack;
68 void push(
const Label&
label);
81 std::string getOperatorStackAsString()
const;
87 static std::string canonize(
const std::string& name);
93 static bool isVariable(
const std::string& name);
99 void registerVariable(
const std::string& name);
106 bool isKnownVariable(
const std::string& name)
const;
113 bool hasTypedVariable(
const TypedItemList& list,
const TypedItem& item)
const;
119 static void addTypedVariable(TypedItemList& list,
const TypedItem& item);
132 Predicate(
const Label& label,
const ArgumentList& argumentList)
134 , arguments(argumentList)
140 if(!arg0.undefined())
145 if(!arg1.undefined())
150 if(!arg2.undefined())
177 : mMin(
std::numeric_limits<uint8_t>::min() )
178 , mMax(
std::numeric_limits<uint8_t>::max() )
187 throw std::invalid_argument(
"pddl_planner::representation::Arity: min arity greater than max");
215 static Arity min(uint8_t n) {
return Arity(n,std::numeric_limits<uint8_t>::max()); }
222 static Arity max(uint8_t n) {
return Arity(std::numeric_limits<uint8_t>::min(),n); }
247 bool isOperator(
const Label& label)
const;
253 bool isQuantifier(
const Label& label)
const;
260 void validate(
const Label& label, uint8_t arity);
265 extern std::map<Quantor,std::string>
QuantorTxt;
286 Expression(
const Label& label,
const Expression& arg0,
const Expression& arg1 =
Expression(),
const Expression& arg2 =
Expression(),
const Expression& arg3 =
Expression(),
const Expression& arg4 =
Expression(),
const Expression& arg5 =
Expression(),
const Expression& arg6 =
Expression(),
const Expression& arg7 =
Expression(),
const Expression& arg8 =
Expression(),
const Expression& arg9 =
Expression(),
const Expression& arg10 =
Expression());
288 Expression(
const Label& label,
const Label& arg0,
const Label& arg1 =
"",
const Label& arg2 =
"");
295 void addParameter(
const Label& e);
298 bool isAtomic()
const {
return parameters.empty(); }
300 bool isNull()
const {
return label.empty(); }
302 static bool isQuantor(
const Label& label);
319 std::string toLISP()
const;
325 static Expression fromString(
const std::string& expressionString);
346 Action(
const Label& label,
const ArgumentList& arguments)
348 , arguments(arguments)
362 if(!arg0.undefined())
367 if(!arg1.undefined())
372 if(!arg2.undefined())
377 if(!arg3.undefined())
389 preconditions.push_back(e);
398 effects.push_back(e);
412 bool isArgument(
const Label& label);
446 Domain(
const std::string& name =
"");
452 void addType(
const Type&
type,
const Type& parentType =
"");
454 void addConstant(
const TypedItem&
type,
bool overwrite =
false);
455 void addPredicate(
const Predicate& predicate,
bool overwrite =
false);
456 void addRequirement(
const Requirement& requirement);
457 void addAction(
const Action& action,
bool overwrite =
false);
458 void addFunction(
const Function&
function,
bool overwrite =
false);
460 void removeConstant(
const Label& label);
461 void removePredicate(
const Label& label);
462 void removeAction(
const Label& label);
463 void removeFunction(
const Label& label);
465 bool isType(
const Type&
type)
const;
466 bool isConstant(
const Label& label)
const;
467 bool isPredicate(
const Label& label)
const;
468 bool isRequirement(
const Requirement& requirement)
const;
469 bool isAction(
const Label& label)
const;
470 bool isFunction(
const Label& label)
const;
472 Predicate getPredicate(
const Label& label)
const;
473 Action getAction(
const Label& label)
const;
475 std::string toLISP()
const;
481 bool hasName()
const {
return !name.empty(); }
487 bool isNull()
const {
return !hasName(); }
499 void validate()
const;
505 #endif // PDDL_PLANNER_REPRESENTATION_DOMAIN TypeList types
Definition: Domain.hpp:428
Label label
Definition: Domain.hpp:276
TypedItem typedItem
Definition: Domain.hpp:280
ConstantList constants
Definition: Domain.hpp:432
Manage variable, i.e. for PDDL description these variables start with a quotation mark...
Definition: Domain.hpp:60
Action(const Label &label, const ArgumentList &arguments)
Definition: Domain.hpp:346
std::vector< Type > TypeList
Definition: Domain.hpp:21
Type type
Definition: Domain.hpp:31
Predicate(const Label &label, const TypedItem &arg0=TypedItem(), const TypedItem &arg1=TypedItem(), const TypedItem &arg2=TypedItem())
Definition: Domain.hpp:137
Label label
Definition: Domain.hpp:129
FunctionList functions
Definition: Domain.hpp:440
TypedItemList ConstantList
Definition: Domain.hpp:51
std::map< Type, Type > type2parent
Definition: Domain.hpp:430
bool isNull() const
Definition: Domain.hpp:487
ArgumentList arguments
Definition: Domain.hpp:130
std::vector< Expression > ExpressionList
Definition: Domain.hpp:328
Representation of a predicate.
Definition: Domain.hpp:127
bool isAtomic() const
Definition: Domain.hpp:298
Representation of (LISP) expressions.
Definition: Domain.hpp:274
Action(const Label &label, const TypedItem &arg0=TypedItem(), const TypedItem &arg1=TypedItem(), const TypedItem &arg2=TypedItem(), const TypedItem &arg3=TypedItem())
Definition: Domain.hpp:359
std::vector< Label > getOperatorStack() const
Definition: Domain.hpp:75
bool operator==(const TypedItem &other) const
Definition: Domain.hpp:44
uint8_t getMax() const
Definition: Domain.hpp:201
PredicateList predicates
Definition: Domain.hpp:434
ArgumentList arguments
Definition: Domain.hpp:337
std::map< Label, Arity > ArityMap
Definition: Domain.hpp:225
void addEffect(const Expression &e)
Definition: Domain.hpp:396
TypedItem()
Definition: Domain.hpp:33
A tuple representation providing a name/label and a type.
Definition: Domain.hpp:28
std::string Requirement
Definition: Domain.hpp:19
Class to validate usage of operations against argument requirements.
Definition: Domain.hpp:231
std::string Type
Definition: Domain.hpp:18
static void addTypedVariable(TypedItemList &list, const TypedItem &item)
Definition: Domain.cpp:347
Arity represents the arity of operations allowing to define exact, minimum and maximum arity...
Definition: Domain.hpp:167
std::vector< Expression * > ExpressionPtrList
Definition: Domain.hpp:267
ExpressionList preconditions
Definition: Domain.hpp:338
TypedItemList ArgumentList
Definition: Domain.hpp:52
An internal representation of a PDDL domain description.
Definition: Domain.hpp:423
std::vector< Function > FunctionList
Definition: Domain.hpp:161
Definition: Domain.hpp:264
void addPrecondition(const Expression &e)
Definition: Domain.hpp:387
ExpressionList effects
Definition: Domain.hpp:339
std::vector< Action > ActionList
Definition: Domain.hpp:414
bool isNull() const
Definition: Domain.hpp:300
bool operator!=(const TypedItem &other) const
Definition: Domain.hpp:43
std::vector< TypedItem > TypedItemList
Definition: Domain.hpp:50
TypedItemList ParameterList
Definition: Domain.hpp:53
Arity(uint8_t min, uint8_t max)
Definition: Domain.hpp:181
static Arity exact(uint8_t n)
Definition: Domain.hpp:208
Label Operator
Definition: Domain.hpp:17
Arity()
Definition: Domain.hpp:176
Definition: PDDLPlannerInterface.cpp:18
RequirementList requirements
Definition: Domain.hpp:436
bool hasName() const
Definition: Domain.hpp:481
Quantor
Definition: Domain.hpp:264
std::vector< Predicate > PredicateList
Definition: Domain.hpp:157
Definition: Domain.hpp:264
ExpressionPtrList parameters
Definition: Domain.hpp:277
Predicate(const Label &label, const ArgumentList &argumentList)
Definition: Domain.hpp:132
uint8_t getMin() const
Definition: Domain.hpp:195
std::map< Quantor, std::string > QuantorTxt
Definition: Domain.cpp:147
static Arity min(uint8_t n)
Definition: Domain.hpp:215
static Arity max(uint8_t n)
Definition: Domain.hpp:222
bool undefined() const
Definition: Domain.hpp:41
Definition: Domain.hpp:264
ActionList actions
Definition: Domain.hpp:438
std::vector< Requirement > RequirementList
Definition: Domain.hpp:22
TypedItem Constant
Definition: Domain.hpp:48
std::string Label
Definition: Domain.hpp:16
std::string name
Definition: Domain.hpp:426
Label label
Definition: Domain.hpp:336
Label label
Definition: Domain.hpp:30
Predicate Function
Definition: Domain.hpp:160
TypedItem(const Label &label, const Type &type)
Definition: Domain.hpp:36
Definition: Domain.hpp:334