Refactored parsing variable lists to reuse it with quantified expressions.
This commit is contained in:
@@ -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<std::string>(")");
|
||||
|
||||
|
@@ -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<std::string>(")");
|
||||
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user