From 9c30e2787538d17ffc661e6f9ec57555084d8bc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20L=C3=BChne?= Date: Sat, 17 Jun 2017 18:47:40 +0200 Subject: [PATCH] =?UTF-8?q?Fixed=20incorrect=20parsing=20method=20for=20?= =?UTF-8?q?=E2=80=9Cwhen=E2=80=9D=20expressions.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pddlparse/detail/parsing/Expressions.h | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/pddlparse/include/pddlparse/detail/parsing/Expressions.h b/lib/pddlparse/include/pddlparse/detail/parsing/Expressions.h index e98a644..eb95854 100644 --- a/lib/pddlparse/include/pddlparse/detail/parsing/Expressions.h +++ b/lib/pddlparse/include/pddlparse/detail/parsing/Expressions.h @@ -35,16 +35,17 @@ template std::experimental::optional> parseNot(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); template std::experimental::optional> parseOr(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); -template -std::experimental::optional> parseWhen(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument); +template +std::experimental::optional> parseWhen(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight); //////////////////////////////////////////////////////////////////////////////////////////////////// // Expressions: Base Classes //////////////////////////////////////////////////////////////////////////////////////////////////// -template +template std::experimental::optional> parseBinary(Context &context, - ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) + ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, + ArgumentRightParser parseArgumentRight) { auto &tokenizer = context.tokenizer; @@ -60,12 +61,12 @@ std::experimental::optional> parseBinary(Context &conte tokenizer.skipWhiteSpace(); // Parse arguments of the expression - auto argumentLeft = parseArgument(context, astContext, variableStack); + auto argumentLeft = parseArgumentLeft(context, astContext, variableStack); if (!argumentLeft) throw ParserException(tokenizer.location(), "could not parse argument of “" + std::string(Derived::Identifier) + "” expression"); - auto argumentRight = parseArgument(context, astContext, variableStack); + auto argumentRight = parseArgumentRight(context, astContext, variableStack); if (!argumentRight) throw ParserException(tokenizer.location(), "could not parse argument of “" + std::string(Derived::Identifier) + "” expression"); @@ -195,7 +196,7 @@ std::experimental::optional> parseForAll(Context &c template std::experimental::optional> parseImply(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) { - return parseBinary, ArgumentParser>(context, astContext, variableStack, parseArgument); + return parseBinary, ArgumentParser, ArgumentParser>(context, astContext, variableStack, parseArgument, parseArgument); } //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -237,10 +238,10 @@ std::experimental::optional> parseOr(Context &context, //////////////////////////////////////////////////////////////////////////////////////////////////// -template -std::experimental::optional> parseImply(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentParser parseArgument) +template +std::experimental::optional> parseWhen(Context &context, ASTContext &astContext, VariableStack &variableStack, ArgumentLeftParser parseArgumentLeft, ArgumentRightParser parseArgumentRight) { - return parseBinary, ArgumentParser>(context, astContext, variableStack, parseArgument); + return parseBinary, ArgumentLeftParser, ArgumentRightParser>(context, astContext, variableStack, parseArgumentLeft, parseArgumentRight); } ////////////////////////////////////////////////////////////////////////////////////////////////////