Implemented variable stack for parsing nested variable lists (as within quantified expressions).

This commit is contained in:
2016-09-06 17:34:07 +02:00
parent f4f0e07bc1
commit eb28ed3938
10 changed files with 111 additions and 47 deletions

View File

@@ -3,6 +3,7 @@
#include <plasp/pddl/Expression.h>
#include <plasp/pddl/Requirement.h>
#include <plasp/pddl/VariableStack.h>
namespace plasp
{
@@ -18,8 +19,8 @@ namespace pddl
class ExpressionContext
{
public:
ExpressionContext(Domain &domain, expressions::Variables &parameters);
ExpressionContext(Domain &domain, Problem *problem, expressions::Variables &parameters);
ExpressionContext(Domain &domain);
ExpressionContext(Domain &domain, Problem *problem);
bool hasRequirement(Requirement::Type requirementType) const;
void checkRequirement(Requirement::Type requirementType) const;
@@ -27,7 +28,7 @@ class ExpressionContext
Domain &domain;
Problem *problem;
expressions::Variables &parameters;
VariableStack variables;
};
////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,34 @@
#ifndef __PLASP__PDDL__VARIABLE_STACK_H
#define __PLASP__PDDL__VARIABLE_STACK_H
#include <plasp/pddl/expressions/Variable.h>
namespace plasp
{
namespace pddl
{
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// VariableStack
//
////////////////////////////////////////////////////////////////////////////////////////////////////
class VariableStack
{
public:
void push(expressions::Variables *variables);
void pop();
expressions::VariablePointer parseAndFind(Context &context);
private:
std::vector<expressions::Variables *> m_variableStack;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
#endif

View File

@@ -26,9 +26,6 @@ class Variable: public ExpressionCRTP<Variable>
static void parseTypedDeclarations(Context &context, ExpressionContext &expressionContext,
Variables &variables);
static VariablePointer parseAndFind(Context &context,
const ExpressionContext &expressionContext);
public:
void setName(std::string name);
const std::string &name() const;