private List<ScoredPhrasePairForSentence> readBackPointers( DecoderState state, List<HashMap<DecoderState, BackPointerElement>> backPointersList, int startLength, int sentenceLength) { DecoderState curState = state; DecoderState startState = getStartState(sentenceLength); int curLength = startLength; List<ScoredPhrasePairForSentence> phrases = new ArrayList<>(); while (!curState.equals(startState)) { BackPointerElement backPointer = backPointersList.get(curLength).get(curState); phrases.add(0, backPointer.getPhrase()); curState = backPointer.getState(); curLength = decoderModel.getDecodedLength(curState); } return phrases; }