diff --git a/transition_machine/src/Oracle.cpp b/transition_machine/src/Oracle.cpp index 8838de4a121dd259c8b3b87bf2e21db66cd214a6..7d1b27f060321d174e7b29dc393fca7ec11a7fc3 100644 --- a/transition_machine/src/Oracle.cpp +++ b/transition_machine/src/Oracle.cpp @@ -245,6 +245,12 @@ void Oracle::createDatabase() if (action == "ADDCHARTOWORD" && currentWordRef.size() > currentWordHyp.size()) { + if (c.hasTape("ID") && c.getTape("ID").getRef(0).empty()) + { + fprintf(stderr, "ERROR (%s) : ID.getRef(0) is empty. Aborting.\n", ERRINFO); + exit(1); + } + if (c.hasTape("ID") && util::split(c.getTape("ID").getRef(0), '-').size() > 1) return 1; @@ -968,17 +974,28 @@ void Oracle::createDatabase() auto & eos = c.getTape(ProgramParameters::sequenceDelimiterTape); int head = c.getHead(); + int stackHead = c.stackEmpty() ? 0 : c.stackTop(); if (head >= eos.size()) return action == "EOS" ? 0 : 1; + if (ids.getRef(0).empty()) + { + fprintf(stderr, "ERROR (%s) : ID.getRef(0) is empty. Aborting.\n", ERRINFO); + exit(1); + } + if (ids.getRef(stackHead-head).empty()) + { + fprintf(stderr, "ERROR (%s) : ID.getRef(stackHead-head) is empty. Aborting.\n", ERRINFO); + exit(1); + } + bool headIsMultiword = util::split(ids.getRef(0), '-').size() > 1; bool headIsEmptyNode = util::split(ids.getRef(0), '.').size() > 1; int headGov = -1; try {headGov = head + std::stoi(govs.getRef(0));} catch (std::exception &) {headGov = -1;} - int stackHead = c.stackEmpty() ? 0 : c.stackTop(); bool stackHeadIsMultiword = util::split(ids.getRef(stackHead-head), '-').size() > 1; bool stackHeadIsEmptyNode = util::split(ids.getRef(stackHead-head), '.').size() > 1; int stackGov = -1;