From ddad3ba4ea5e7dd59430e4e2e6e0153e8d7adec8 Mon Sep 17 00:00:00 2001 From: Franck Dary <franck.dary@lis-lab.fr> Date: Thu, 13 Feb 2020 18:53:26 +0100 Subject: [PATCH] Fixed costs functions of transitions : if a stack element is out of bound, ignore it --- reading_machine/src/Transition.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/reading_machine/src/Transition.cpp b/reading_machine/src/Transition.cpp index 856475f..bf35c0a 100644 --- a/reading_machine/src/Transition.cpp +++ b/reading_machine/src/Transition.cpp @@ -93,6 +93,9 @@ void Transition::initShift() int cost = 0; for (int i = 0; config.hasStack(i); ++i) { + if (!config.has(0, config.getStack(i), 0)) + continue; + auto stackIndex = config.getStack(i); auto stackId = config.getConst(Config::idColName, stackIndex, 0); auto stackGov = config.getConst(Config::headColName, stackIndex, 0); @@ -184,6 +187,9 @@ void Transition::initRight(std::string label) for (int i = 1; config.hasStack(i); ++i) { + if (!config.has(0, config.getStack(i), 0)) + continue; + auto otherStackIndex = config.getStack(i); auto stackId = config.getConst(Config::idColName, otherStackIndex, 0); auto stackGov = config.getConst(Config::headColName, otherStackIndex, 0); @@ -209,7 +215,10 @@ void Transition::initReduce() cost = [](const Config & config) { - if (!config.isToken(config.getWordIndex())) + if (!config.has(0, config.getStack(0), 0)) + return 0; + + if (!config.isToken(config.getStack(0))) return 0; int cost = 0; -- GitLab