@Override
    public void run() {
        do {
            try {
                getNextChar();

                if (isEndOfStream())
                    closeRemainingStreams();
                else if (isSeperatorMet())
                    checkSeparator();
                else if (shouldCheck)
                    checkMatching();
                else
                    passChar();
            } catch (IOException e) {
                // TODO: handle this situation
            }
        } while (!isEndOfStream());
    }