Made section identifier parsing case-insensitive.

This commit is contained in:
Patrick Lühne 2016-06-04 17:47:41 +02:00
parent 7e60631840
commit 2870bc6434
4 changed files with 22 additions and 5 deletions

View File

@ -40,6 +40,18 @@ inline std::string unescapeASP(const std::string &string)
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
inline std::string toLowerCase(const std::string &string)
{
std::string result;
result.resize(string.size());
std::transform(string.begin(), string.end(), result.begin(), ::tolower);
return result;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
} }
} }

View File

@ -8,6 +8,7 @@
#include <plasp/pddl/expressions/PredicateDeclaration.h> #include <plasp/pddl/expressions/PredicateDeclaration.h>
#include <plasp/pddl/expressions/PrimitiveType.h> #include <plasp/pddl/expressions/PrimitiveType.h>
#include <plasp/pddl/expressions/Variable.h> #include <plasp/pddl/expressions/Variable.h>
#include <plasp/utils/IO.h>
#include <plasp/utils/ParserException.h> #include <plasp/utils/ParserException.h>
namespace plasp namespace plasp
@ -104,7 +105,7 @@ void Domain::parseSection()
m_context.parser.expect<std::string>("("); m_context.parser.expect<std::string>("(");
m_context.parser.expect<std::string>(":"); m_context.parser.expect<std::string>(":");
const auto sectionIdentifier = m_context.parser.parseIdentifier(isIdentifier); const auto sectionIdentifier = utils::toLowerCase(m_context.parser.parseIdentifier(isIdentifier));
const auto skipSection = const auto skipSection =
[&]() [&]()
@ -149,6 +150,8 @@ void Domain::parseSection()
skipSection(); skipSection();
else if (sectionIdentifier == "derived") else if (sectionIdentifier == "derived")
skipSection(); skipSection();
else
throw utils::ParserException(m_context.parser, "Unknown domain section \"" + sectionIdentifier + "\"");
} }
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -9,6 +9,7 @@
#include <plasp/pddl/expressions/Predicate.h> #include <plasp/pddl/expressions/Predicate.h>
#include <plasp/pddl/expressions/PredicateDeclaration.h> #include <plasp/pddl/expressions/PredicateDeclaration.h>
#include <plasp/pddl/expressions/Reference.h> #include <plasp/pddl/expressions/Reference.h>
#include <plasp/utils/IO.h>
#include <plasp/utils/ParserException.h> #include <plasp/utils/ParserException.h>
namespace plasp namespace plasp
@ -42,7 +43,7 @@ ExpressionPointer parsePreconditionExpression(Context &context,
{ {
context.parser.expect<std::string>("("); context.parser.expect<std::string>("(");
const auto expressionIdentifier = context.parser.parseIdentifier(isIdentifier); const auto expressionIdentifier = utils::toLowerCase(context.parser.parseIdentifier(isIdentifier));
ExpressionPointer expression; ExpressionPointer expression;
@ -70,7 +71,7 @@ ExpressionPointer parseExpression(Context &context, const expressions::Variables
{ {
context.parser.expect<std::string>("("); context.parser.expect<std::string>("(");
const auto expressionIdentifier = context.parser.parseIdentifier(isIdentifier); const auto expressionIdentifier = utils::toLowerCase(context.parser.parseIdentifier(isIdentifier));
auto expression = parseExpressionContent(expressionIdentifier, context, parameters); auto expression = parseExpressionContent(expressionIdentifier, context, parameters);
@ -137,7 +138,7 @@ ExpressionPointer parseEffectExpression(Context &context, const expressions::Var
{ {
context.parser.expect<std::string>("("); context.parser.expect<std::string>("(");
const auto expressionIdentifier = context.parser.parseIdentifier(isIdentifier); const auto expressionIdentifier = utils::toLowerCase(context.parser.parseIdentifier(isIdentifier));
ExpressionPointer expression; ExpressionPointer expression;

View File

@ -5,6 +5,7 @@
#include <boost/bimap.hpp> #include <boost/bimap.hpp>
#include <plasp/pddl/Identifier.h> #include <plasp/pddl/Identifier.h>
#include <plasp/utils/IO.h>
#include <plasp/utils/ParserException.h> #include <plasp/utils/ParserException.h>
namespace plasp namespace plasp
@ -81,7 +82,7 @@ Requirement::Requirement(Requirement::Type type)
Requirement Requirement::parse(Context &context) Requirement Requirement::parse(Context &context)
{ {
const auto requirementName = context.parser.parseIdentifier(isIdentifier); const auto requirementName = utils::toLowerCase(context.parser.parseIdentifier(isIdentifier));
const auto match = requirementTypesToPDDL.right.find(requirementName); const auto match = requirementTypesToPDDL.right.find(requirementName);