From ca6664feb236b5460373a01dbd974c4a284a9036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20L=C3=BChne?= Date: Tue, 6 Sep 2016 16:28:38 +0200 Subject: [PATCH] Refactored parsing variable lists to reuse it with quantified expressions. --- include/plasp/pddl/expressions/Binary.h | 1 - include/plasp/pddl/expressions/NAry.h | 1 - include/plasp/pddl/expressions/Variable.h | 6 ++++-- src/plasp/pddl/Action.cpp | 2 +- src/plasp/pddl/expressions/PredicateDeclaration.cpp | 2 +- src/plasp/pddl/expressions/Variable.cpp | 13 +++++++------ 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/plasp/pddl/expressions/Binary.h b/include/plasp/pddl/expressions/Binary.h index ed57a8a..a160753 100644 --- a/include/plasp/pddl/expressions/Binary.h +++ b/include/plasp/pddl/expressions/Binary.h @@ -58,7 +58,6 @@ boost::intrusive_ptr Binary::parse(Context &context, auto expression = boost::intrusive_ptr(new Derived); - // Assume that expression identifier (imply, exists, etc.) is already parsed // Parse arguments of the expression expression->Binary::setArgument(0, parseExpression(context, expressionContext)); expression->Binary::setArgument(1, parseExpression(context, expressionContext)); diff --git a/include/plasp/pddl/expressions/NAry.h b/include/plasp/pddl/expressions/NAry.h index a23cd78..3122ef0 100644 --- a/include/plasp/pddl/expressions/NAry.h +++ b/include/plasp/pddl/expressions/NAry.h @@ -63,7 +63,6 @@ boost::intrusive_ptr NAry::parse(Context &context, parser.skipWhiteSpace(); - // Assume that expression identifier (and, or, etc.) is already parsed // Parse arguments of the expression while (parser.currentCharacter() != ')') { diff --git a/include/plasp/pddl/expressions/Variable.h b/include/plasp/pddl/expressions/Variable.h index 9a5522a..3c7ba63 100644 --- a/include/plasp/pddl/expressions/Variable.h +++ b/include/plasp/pddl/expressions/Variable.h @@ -21,8 +21,10 @@ class Variable: public ExpressionCRTP public: static const Expression::Type ExpressionType = Expression::Type::Variable; - static void parseTypedDeclaration(Context &context, ExpressionContext &expressionContext); - static void parseTypedDeclarations(Context &context, ExpressionContext &expressionContext); + static void parseTypedDeclaration(Context &context, ExpressionContext &expressionContext, + Variables &variables); + static void parseTypedDeclarations(Context &context, ExpressionContext &expressionContext, + Variables &variables); static VariablePointer parseAndFind(Context &context, const ExpressionContext &expressionContext); diff --git a/src/plasp/pddl/Action.cpp b/src/plasp/pddl/Action.cpp index e4ad3fc..2bbb7df 100644 --- a/src/plasp/pddl/Action.cpp +++ b/src/plasp/pddl/Action.cpp @@ -32,7 +32,7 @@ void Action::parseDeclaration(Context &context, Domain &domain) ExpressionContext expressionContext(domain, action->m_parameters); // Read parameters - expressions::Variable::parseTypedDeclarations(context, expressionContext); + expressions::Variable::parseTypedDeclarations(context, expressionContext, action->m_parameters); parser.expect(")"); diff --git a/src/plasp/pddl/expressions/PredicateDeclaration.cpp b/src/plasp/pddl/expressions/PredicateDeclaration.cpp index 1b20c2d..fec9d1e 100644 --- a/src/plasp/pddl/expressions/PredicateDeclaration.cpp +++ b/src/plasp/pddl/expressions/PredicateDeclaration.cpp @@ -42,7 +42,7 @@ void PredicateDeclaration::parse(Context &context, Domain &domain) ExpressionContext expressionContext(domain, predicate->m_parameters); // Parse arguments - expressions::Variable::parseTypedDeclarations(context, expressionContext); + expressions::Variable::parseTypedDeclarations(context, expressionContext, predicate->m_parameters); context.parser.expect(")"); diff --git a/src/plasp/pddl/expressions/Variable.cpp b/src/plasp/pddl/expressions/Variable.cpp index 1de1c5f..7609588 100644 --- a/src/plasp/pddl/expressions/Variable.cpp +++ b/src/plasp/pddl/expressions/Variable.cpp @@ -63,10 +63,10 @@ void Variable::parseDeclaration(Context &context, Variables ¶meters) //////////////////////////////////////////////////////////////////////////////////////////////////// -void Variable::parseTypedDeclaration(Context &context, ExpressionContext &expressionContext) +void Variable::parseTypedDeclaration(Context &context, ExpressionContext &expressionContext, + Variables &variables) { auto &parser = context.parser; - auto &variables = expressionContext.parameters; // Parse and store variable itself parseDeclaration(context, variables); @@ -108,22 +108,23 @@ void Variable::parseTypedDeclaration(Context &context, ExpressionContext &expres //////////////////////////////////////////////////////////////////////////////////////////////////// -void Variable::parseTypedDeclarations(Context &context, ExpressionContext &expressionContext) +void Variable::parseTypedDeclarations(Context &context, ExpressionContext &expressionContext, + Variables &variables) { auto &parser = context.parser; while (parser.currentCharacter() != ')') { - parseTypedDeclaration(context, expressionContext); + parseTypedDeclaration(context, expressionContext, variables); parser.skipWhiteSpace(); } - if (expressionContext.parameters.empty()) + if (variables.empty()) return; // Check correct use of typing requirement - const auto typingUsed = (expressionContext.parameters.back()->type() != nullptr); + const auto typingUsed = (variables.back()->type() != nullptr); // If types are given, check that typing is a requirement if (typingUsed)