From f669bcfa7e085dab88d771607801c032e842346a Mon Sep 17 00:00:00 2001 From: Franck Dary <franck.dary@lis-lab.fr> Date: Mon, 17 Feb 2020 10:27:57 +0100 Subject: [PATCH] Avoiding loops at end of decoding --- reading_machine/include/Config.hpp | 2 ++ reading_machine/include/TransitionSet.hpp | 1 - reading_machine/src/Action.cpp | 7 +++++-- reading_machine/src/Config.cpp | 6 ++++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/reading_machine/include/Config.hpp b/reading_machine/include/Config.hpp index daaeae1..b18bc88 100644 --- a/reading_machine/include/Config.hpp +++ b/reading_machine/include/Config.hpp @@ -32,6 +32,7 @@ class Config std::vector<String> lines; std::set<std::string> predicted; + int lastPoppedStack{-1}; protected : @@ -109,6 +110,7 @@ class Config std::vector<long> extractContext(int leftBorder, int rightBorder, Dict & dict) const; void addPredicted(const std::set<std::string> & predicted); bool isPredicted(const std::string & colName) const; + int getLastPoppedStack() const; }; #endif diff --git a/reading_machine/include/TransitionSet.hpp b/reading_machine/include/TransitionSet.hpp index 4263ba4..2daaa2e 100644 --- a/reading_machine/include/TransitionSet.hpp +++ b/reading_machine/include/TransitionSet.hpp @@ -11,7 +11,6 @@ class TransitionSet private : std::vector<Transition> transitions; - std::optional<std::size_t> defaultAction; public : diff --git a/reading_machine/src/Action.cpp b/reading_machine/src/Action.cpp index 427ec98..b24d547 100644 --- a/reading_machine/src/Action.cpp +++ b/reading_machine/src/Action.cpp @@ -139,9 +139,12 @@ Action Action::pushWordIndexOnStack() config.popStack(); }; - auto appliable = [](const Config &, const Action &) + auto appliable = [](const Config & config, const Action &) { - return true; + if (config.hasStack(0) and config.getStack(0) == config.getWordIndex()) + return false; + + return (int)config.getWordIndex() != config.getLastPoppedStack(); }; return {Type::Push, apply, undo, appliable}; diff --git a/reading_machine/src/Config.cpp b/reading_machine/src/Config.cpp index 49ad509..286386a 100644 --- a/reading_machine/src/Config.cpp +++ b/reading_machine/src/Config.cpp @@ -309,6 +309,7 @@ void Config::addToStack(std::size_t index) void Config::popStack() { + lastPoppedStack = getStack(0); stack.pop_back(); } @@ -491,3 +492,8 @@ bool Config::isPredicted(const std::string & colName) const return predicted.count(colName); } +int Config::getLastPoppedStack() const +{ + return lastPoppedStack; +} + -- GitLab