public Result run(Reader expressionReader) throws GeneralException, ExceptionWithPosition {
        TransitionMatrix trMatrix = getTransitionMatrix();
        States state = trMatrix.getStartState();

        while (!expressionReader.isEnd()) {
            state =evaluateState(state, expressionReader);
            if (null == state) {
                stateException(expressionReader);
            }
        }
        return getResult();
    }