// Generated by re2java
// re2java $INPUT -o $OUTPUT

class Main {
    // Expects a null-terminated string.
    static int lex(String yyinput) {
        int yycursor = 0;
        int yymarker = 0;
        int yylimit = yyinput.length() - 1; // yylimit points at the terminating null
        int count = 0;

        loop: while (true) {
            
{
    char yych = 0;
    int yystate = 0;
    yyl: while (true) {
        switch (yystate) {
            case 0:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x20:
                        yycursor += 1;
                        yystate = 3;
                        continue yyl;
                    case 0x27:
                        yycursor += 1;
                        yystate = 5;
                        continue yyl;
                    default:
                        if (yylimit <= yycursor) {
                            yystate = 10;
                            continue yyl;
                        }
                        yycursor += 1;
                        yystate = 1;
                        continue yyl;
                }
            case 1:
                yystate = 2;
                continue yyl;
            case 2:
                { return -1; }
            case 3:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x20:
                        yycursor += 1;
                        yystate = 3;
                        continue yyl;
                    default:
                        yystate = 4;
                        continue yyl;
                }
            case 4:
                { continue loop; }
            case 5:
                yymarker = yycursor;
                yych = yyinput.charAt(yycursor);
                if (yych >= 0x01) {
                    yystate = 7;
                    continue yyl;
                }
                if (yylimit <= yycursor) {
                    yystate = 2;
                    continue yyl;
                }
                yycursor += 1;
                yystate = 6;
                continue yyl;
            case 6:
                yych = yyinput.charAt(yycursor);
                yystate = 7;
                continue yyl;
            case 7:
                switch (yych) {
                    case 0x27:
                        yycursor += 1;
                        yystate = 8;
                        continue yyl;
                    case 0x5C:
                        yycursor += 1;
                        yystate = 9;
                        continue yyl;
                    default:
                        if (yylimit <= yycursor) {
                            yystate = 11;
                            continue yyl;
                        }
                        yycursor += 1;
                        yystate = 6;
                        continue yyl;
                }
            case 8:
                { count += 1; continue loop; }
            case 9:
                yych = yyinput.charAt(yycursor);
                if (yych <= 0x00) {
                    if (yylimit <= yycursor) {
                        yystate = 11;
                        continue yyl;
                    }
                    yycursor += 1;
                    yystate = 6;
                    continue yyl;
                }
                yycursor += 1;
                yystate = 6;
                continue yyl;
            case 10:
                { return count; }
            case 11:
                yycursor = yymarker;
                yystate = 2;
                continue yyl;
            default:
                throw new IllegalStateException("internal lexer error");
        }
    }
}

        }
    }

    public static void main(String []args) {
        assert lex("\0") == 0;
        assert lex("'qu\0tes' 'are' 'fine: \\'' \0") == 3;
        assert lex("'unterminated\\'\0") == -1;
    }
};
