diff --git a/lib/pddl/src/pddl/detail/parsing/Predicate.cpp b/lib/pddl/src/pddl/detail/parsing/Predicate.cpp index 4e0f7fc..2de02c3 100644 --- a/lib/pddl/src/pddl/detail/parsing/Predicate.cpp +++ b/lib/pddl/src/pddl/detail/parsing/Predicate.cpp @@ -3,9 +3,7 @@ #include #include #include -#include -#include -#include +#include namespace pddl { @@ -39,29 +37,17 @@ std::experimental::optional parsePredicate(Context &conte // Parse arguments while (tokenizer.currentCharacter() != ')') { - // Parse argument if it is a variable - auto variable = testParsingVariable(context, variableStack); + auto term = parseTerm(context, astContext, variableStack); - if (variable) + if (term) { - arguments.emplace_back(std::move(variable.value())); + arguments.emplace_back(std::move(term.value())); tokenizer.skipWhiteSpace(); continue; } - // Parse argument if it is a constant - auto constant = testParsingConstant(context, astContext); - - if (constant) - { - arguments.emplace_back(std::move(constant.value())); - - tokenizer.skipWhiteSpace(); - continue; - } - - // If argument is neither variable nor constant, this is not a valid predicate + // If the term couldn’t be parsed, this is not a valid predicate tokenizer.seek(previousPosition); return std::experimental::nullopt; }