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

// This example shows how to combine reusable re2c blocks: two blocks
// ('colors' and 'fish') are merged into one. The 'salmon' rule occurs
// in both blocks; the 'fish' block takes priority because it is used
// earlier. Default rule * occurs in all three blocks; the local (not
// inherited) definition takes priority.





class Main {
    enum Ans {COLOR, FISH, DUNNO};

    static Ans lex(String yyinput) { // no-throw, as '*' rules are overridden
        int yycursor = 0;
        int yymarker = 0;

        
{
    char yych = 0;
    int yystate = 0;
    yyl: while (true) {
        switch (yystate) {
            case 0:
                yych = yyinput.charAt(yycursor);
                yycursor += 1;
                switch (yych) {
                    case 0x65:
                        yystate = 3;
                        continue yyl;
                    case 0x68:
                        yystate = 4;
                        continue yyl;
                    case 0x6D:
                        yystate = 5;
                        continue yyl;
                    case 0x72:
                        yystate = 6;
                        continue yyl;
                    case 0x73:
                        yystate = 7;
                        continue yyl;
                    default:
                        yystate = 1;
                        continue yyl;
                }
            case 1:
                yystate = 2;
                continue yyl;
            case 2:
                { return Ans.DUNNO; }
            case 3:
                yymarker = yycursor;
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x65:
                        yycursor += 1;
                        yystate = 8;
                        continue yyl;
                    default:
                        yystate = 2;
                        continue yyl;
                }
            case 4:
                yymarker = yycursor;
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x61:
                        yycursor += 1;
                        yystate = 10;
                        continue yyl;
                    default:
                        yystate = 2;
                        continue yyl;
                }
            case 5:
                yymarker = yycursor;
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x61:
                        yycursor += 1;
                        yystate = 11;
                        continue yyl;
                    default:
                        yystate = 2;
                        continue yyl;
                }
            case 6:
                yymarker = yycursor;
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x65:
                        yycursor += 1;
                        yystate = 12;
                        continue yyl;
                    default:
                        yystate = 2;
                        continue yyl;
                }
            case 7:
                yymarker = yycursor;
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x61:
                        yycursor += 1;
                        yystate = 13;
                        continue yyl;
                    default:
                        yystate = 2;
                        continue yyl;
                }
            case 8:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x6C:
                        yycursor += 1;
                        yystate = 14;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 9:
                yycursor = yymarker;
                yystate = 2;
                continue yyl;
            case 10:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x64:
                        yycursor += 1;
                        yystate = 15;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 11:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x67:
                        yycursor += 1;
                        yystate = 16;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 12:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x64:
                        yycursor += 1;
                        yystate = 17;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 13:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x6C:
                        yycursor += 1;
                        yystate = 18;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 14:
                { return Ans.FISH; }
            case 15:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x64:
                        yycursor += 1;
                        yystate = 19;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 16:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x65:
                        yycursor += 1;
                        yystate = 20;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 17:
                { return Ans.COLOR; }
            case 18:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x6D:
                        yycursor += 1;
                        yystate = 21;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 19:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x6F:
                        yycursor += 1;
                        yystate = 22;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 20:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x6E:
                        yycursor += 1;
                        yystate = 23;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 21:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x6F:
                        yycursor += 1;
                        yystate = 24;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 22:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x63:
                        yycursor += 1;
                        yystate = 25;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 23:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x74:
                        yycursor += 1;
                        yystate = 26;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 24:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x6E:
                        yycursor += 1;
                        yystate = 14;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 25:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x6B:
                        yycursor += 1;
                        yystate = 14;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            case 26:
                yych = yyinput.charAt(yycursor);
                switch (yych) {
                    case 0x61:
                        yycursor += 1;
                        yystate = 17;
                        continue yyl;
                    default:
                        yystate = 9;
                        continue yyl;
                }
            default:
                throw new IllegalStateException("internal lexer error");
        }
    }
}

    }

    public static void main(String []args) {
        assert lex("salmon") == Ans.FISH;
        assert lex("what?") == Ans.DUNNO;
    }
};
