public void process(StringReader reader) throws StringReader.EOFException {
        char ch;
        switch (state) {
            case Init:
                ch = reader.read();
                if (ch == 'a') {
                    state = State.AfterA;
                    accum.append(ch);
                }
                break;
            case AfterA:
                ch = reader.read();
                if (ch == 'b') {
                    accum.append(ch);
                    state = State.AfterB;
                } else {
                    state = State.Accept;
                }
                break;
            case AfterB:
                ch = reader.read();
                if (ch == 'b') {
                    accum.append(ch);
                    state = State.AfterB;
                } else {
                    state = State.Accept;
                }
                break;
            case Accept:
                System.out.println("find " + accum.toString());
                accum = new StringBuilder();
                state = State.Init;
                reader.unread();
                break;
        }
    }