Put generic Type parsing in separate function.
This commit is contained in:
parent
25cf7c8ae8
commit
b249e1cbf8
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include <plasp/pddl/EitherType.h>
|
#include <plasp/pddl/EitherType.h>
|
||||||
#include <plasp/pddl/PrimitiveType.h>
|
#include <plasp/pddl/PrimitiveType.h>
|
||||||
|
#include <plasp/utils/Parser.h>
|
||||||
|
|
||||||
namespace plasp
|
namespace plasp
|
||||||
{
|
{
|
||||||
@ -17,8 +18,14 @@ namespace pddl
|
|||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class Context;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
using TypePtr = boost::variant<const PrimitiveType *, const EitherType *>;
|
using TypePtr = boost::variant<const PrimitiveType *, const EitherType *>;
|
||||||
|
|
||||||
|
TypePtr parseType(utils::Parser &parser, Context &context);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -48,19 +48,8 @@ Predicate &Predicate::parseDeclaration(utils::Parser &parser, Context &context)
|
|||||||
if (!parser.advanceIf('-'))
|
if (!parser.advanceIf('-'))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto parseType =
|
|
||||||
[&]() -> TypePtr
|
|
||||||
{
|
|
||||||
parser.skipWhiteSpace();
|
|
||||||
|
|
||||||
if (parser.currentCharacter() == '(')
|
|
||||||
return TypePtr(&EitherType::parse(parser, context));
|
|
||||||
|
|
||||||
return TypePtr(&PrimitiveType::parse(parser, context));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Parse argument type
|
// Parse argument type
|
||||||
const auto type = parseType();
|
const auto type = parseType(parser, context);
|
||||||
|
|
||||||
// Set the argument type for all previously flagged arguments
|
// Set the argument type for all previously flagged arguments
|
||||||
std::for_each(predicate->m_arguments.begin(), predicate->m_arguments.end(),
|
std::for_each(predicate->m_arguments.begin(), predicate->m_arguments.end(),
|
||||||
|
29
src/plasp/pddl/Type.cpp
Normal file
29
src/plasp/pddl/Type.cpp
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include <plasp/pddl/Type.h>
|
||||||
|
|
||||||
|
#include <plasp/pddl/Context.h>
|
||||||
|
|
||||||
|
namespace plasp
|
||||||
|
{
|
||||||
|
namespace pddl
|
||||||
|
{
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Type
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
TypePtr parseType(utils::Parser &parser, Context &context)
|
||||||
|
{
|
||||||
|
parser.skipWhiteSpace();
|
||||||
|
|
||||||
|
if (parser.currentCharacter() == '(')
|
||||||
|
return &EitherType::parse(parser, context);
|
||||||
|
|
||||||
|
return &PrimitiveType::parse(parser, context);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user