#ifndef __PLASP__PDDL__EXPRESSION_H #define __PLASP__PDDL__EXPRESSION_H #include #include #include #include namespace plasp { namespace pddl { //////////////////////////////////////////////////////////////////////////////////////////////////// // // Expression // //////////////////////////////////////////////////////////////////////////////////////////////////// class Context; class ExpressionVisitor; class Expression; using ExpressionPointer = std::unique_ptr; using Expressions = std::vector; namespace expressions { class AndExpression; using AndExpressionPointer = std::unique_ptr; class NotExpression; using NotExpressionPointer = std::unique_ptr; class OrExpression; using OrExpressionPointer = std::unique_ptr; class PredicateExpression; using PredicateExpressionPointer = std::unique_ptr; class VariableExpression; using VariableExpressionPointer = std::unique_ptr; using VariableExpressions = std::vector; } //////////////////////////////////////////////////////////////////////////////////////////////////// class Expression { public: virtual void accept(ExpressionVisitor &expressionVisitor) const = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////////// ExpressionPointer parsePreconditionExpression(utils::Parser &parser, Context &context, const expressions::VariableExpressions ¶meters); ExpressionPointer parseExpression(utils::Parser &parser, Context &context, const expressions::VariableExpressions ¶meters); ExpressionPointer parseEffectExpression(utils::Parser &parser, Context &context, const expressions::VariableExpressions ¶meters); //////////////////////////////////////////////////////////////////////////////////////////////////// } } #endif