/* Generated by re2c 3.1 */
#line 1 "src/lexer.re"
#include "rbs/lexer.h"

rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
    rbs_lexer_t backup;

    backup = *lexer;

#line 12 "src/lexer.c"
    {
        unsigned int yych;
        unsigned int yyaccept = 0;
        yych = rbs_peek(lexer);
        switch (yych) {
        case 0x00000000:
            goto yy1;
        case '\t':
        case ' ':
            goto yy4;
        case '\n':
        case '\r':
            goto yy6;
        case '!':
            goto yy7;
        case '"':
            goto yy9;
        case '#':
            goto yy10;
        case '$':
            goto yy12;
        case '%':
            goto yy13;
        case '&':
            goto yy14;
        case '\'':
            goto yy15;
        case '(':
            goto yy16;
        case ')':
            goto yy17;
        case '*':
            goto yy18;
        case '+':
            goto yy19;
        case ',':
            goto yy20;
        case '-':
            goto yy21;
        case '.':
            goto yy22;
        case '/':
        case '~':
            goto yy24;
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            goto yy25;
        case ':':
            goto yy27;
        case '<':
            goto yy29;
        case '=':
            goto yy31;
        case '>':
            goto yy33;
        case '?':
            goto yy34;
        case '@':
            goto yy35;
        case 'A':
        case 'B':
        case 'C':
        case 'D':
        case 'E':
        case 'F':
        case 'G':
        case 'H':
        case 'I':
        case 'J':
        case 'K':
        case 'L':
        case 'M':
        case 'N':
        case 'O':
        case 'P':
        case 'Q':
        case 'R':
        case 'S':
        case 'T':
        case 'U':
        case 'V':
        case 'W':
        case 'X':
        case 'Y':
        case 'Z':
            goto yy36;
        case '[':
            goto yy38;
        case ']':
            goto yy39;
        case '^':
            goto yy40;
        case '_':
            goto yy41;
        case '`':
            goto yy43;
        case 'a':
            goto yy45;
        case 'b':
            goto yy47;
        case 'c':
            goto yy48;
        case 'd':
            goto yy49;
        case 'e':
            goto yy50;
        case 'f':
            goto yy51;
        case 'g':
        case 'h':
        case 'j':
        case 'k':
        case 'l':
        case 'q':
        case 'w':
        case 'x':
        case 'y':
        case 'z':
            goto yy52;
        case 'i':
            goto yy54;
        case 'm':
            goto yy55;
        case 'n':
            goto yy56;
        case 'o':
            goto yy57;
        case 'p':
            goto yy58;
        case 'r':
            goto yy59;
        case 's':
            goto yy60;
        case 't':
            goto yy61;
        case 'u':
            goto yy62;
        case 'v':
            goto yy63;
        case '{':
            goto yy64;
        case '|':
            goto yy65;
        case '}':
            goto yy66;
        default:
            goto yy2;
        }
    yy1:
        rbs_skip(lexer);
#line 148 "src/lexer.re"
        {
            return rbs_next_eof_token(lexer);
        }
#line 121 "src/lexer.c"
    yy2:
        rbs_skip(lexer);
    yy3:
#line 149 "src/lexer.re"
    {
        return rbs_next_token(lexer, ErrorToken);
    }
#line 127 "src/lexer.c"
    yy4:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '\t') goto yy4;
        if (yych == ' ') goto yy4;
    yy5:
#line 147 "src/lexer.re"
    {
        return rbs_next_token(lexer, tTRIVIA);
    }
#line 136 "src/lexer.c"
    yy6:
        rbs_skip(lexer);
        goto yy5;
    yy7:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy24;
        if (yych == '~') goto yy24;
    yy8:
#line 48 "src/lexer.re"
    {
        return rbs_next_token(lexer, tOPERATOR);
    }
#line 148 "src/lexer.c"
    yy9:
        yyaccept = 0;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy3;
        goto yy68;
    yy10:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy11;
        if (yych != '\n') goto yy10;
    yy11:
#line 60 "src/lexer.re"
    {
        return rbs_next_token(
            lexer,
            lexer->first_token_of_line ? tLINECOMMENT : tCOMMENT
        );
    }
#line 169 "src/lexer.c"
    yy12:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ')') {
            if (yych <= 0x0000001F) {
                if (yych <= '\n') {
                    if (yych <= 0x00000000) goto yy3;
                    if (yych <= 0x00000008) goto yy72;
                    goto yy3;
                } else {
                    if (yych == '\r') goto yy3;
                    goto yy72;
                }
            } else {
                if (yych <= '#') {
                    if (yych <= ' ') goto yy3;
                    if (yych <= '"') goto yy74;
                    goto yy72;
                } else {
                    if (yych == '%') goto yy3;
                    if (yych <= '\'') goto yy74;
                    goto yy3;
                }
            }
        } else {
            if (yych <= 'Z') {
                if (yych <= '/') {
                    if (yych == '-') goto yy72;
                    goto yy74;
                } else {
                    if (yych <= '9') goto yy72;
                    if (yych <= '>') goto yy74;
                    goto yy72;
                }
            } else {
                if (yych <= '^') {
                    if (yych == '\\') goto yy74;
                    goto yy3;
                } else {
                    if (yych <= 'z') goto yy72;
                    if (yych <= '}') goto yy3;
                    if (yych <= '~') goto yy74;
                    goto yy72;
                }
            }
        }
    yy13:
        yyaccept = 1;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy75;
        goto yy8;
    yy14:
        rbs_skip(lexer);
#line 33 "src/lexer.re"
        {
            return rbs_next_token(lexer, pAMP);
        }
#line 227 "src/lexer.c"
    yy15:
        yyaccept = 0;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy3;
        goto yy77;
    yy16:
        rbs_skip(lexer);
#line 24 "src/lexer.re"
        {
            return rbs_next_token(lexer, pLPAREN);
        }
#line 239 "src/lexer.c"
    yy17:
        rbs_skip(lexer);
#line 25 "src/lexer.re"
        {
            return rbs_next_token(lexer, pRPAREN);
        }
#line 244 "src/lexer.c"
    yy18:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '*') goto yy81;
#line 35 "src/lexer.re"
        {
            return rbs_next_token(lexer, pSTAR);
        }
#line 251 "src/lexer.c"
    yy19:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '/') goto yy8;
        if (yych <= '9') goto yy25;
        if (yych == '@') goto yy24;
        goto yy8;
    yy20:
        rbs_skip(lexer);
#line 30 "src/lexer.re"
        {
            return rbs_next_token(lexer, pCOMMA);
        }
#line 263 "src/lexer.c"
    yy21:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        switch (yych) {
        case '-':
            goto yy82;
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            goto yy25;
        case '>':
            goto yy83;
        case '@':
            goto yy24;
        default:
            goto yy8;
        }
    yy22:
        yyaccept = 2;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych == '.') goto yy84;
    yy23:
#line 37 "src/lexer.re"
    {
        return rbs_next_token(lexer, pDOT);
    }
#line 292 "src/lexer.c"
    yy24:
        rbs_skip(lexer);
        goto yy8;
    yy25:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '/') goto yy26;
        if (yych <= '9') goto yy25;
        if (yych == '_') goto yy25;
    yy26:
#line 52 "src/lexer.re"
    {
        return rbs_next_token(lexer, tINTEGER);
    }
#line 305 "src/lexer.c"
    yy27:
        yyaccept = 3;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        switch (yych) {
        case '!':
            goto yy85;
        case '"':
            goto yy87;
        case '$':
            goto yy88;
        case '%':
        case '&':
        case '/':
        case '^':
        case '`':
        case '|':
        case '~':
            goto yy89;
        case '\'':
            goto yy90;
        case '*':
            goto yy91;
        case '+':
        case '-':
            goto yy92;
        case ':':
            goto yy93;
        case '<':
            goto yy94;
        case '=':
            goto yy95;
        case '>':
            goto yy96;
        case '@':
            goto yy97;
        case 'A':
        case 'B':
        case 'C':
        case 'D':
        case 'E':
        case 'F':
        case 'G':
        case 'H':
        case 'I':
        case 'J':
        case 'K':
        case 'L':
        case 'M':
        case 'N':
        case 'O':
        case 'P':
        case 'Q':
        case 'R':
        case 'S':
        case 'T':
        case 'U':
        case 'V':
        case 'W':
        case 'X':
        case 'Y':
        case 'Z':
        case '_':
        case 'a':
        case 'b':
        case 'c':
        case 'd':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'u':
        case 'v':
        case 'w':
        case 'x':
        case 'y':
        case 'z':
            goto yy98;
        case '[':
            goto yy100;
        default:
            goto yy28;
        }
    yy28:
#line 44 "src/lexer.re"
    {
        return rbs_next_token(lexer, pCOLON);
    }
#line 390 "src/lexer.c"
    yy29:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ';') goto yy30;
        if (yych <= '<') goto yy24;
        if (yych <= '=') goto yy101;
    yy30:
#line 46 "src/lexer.re"
    {
        return rbs_next_token(lexer, pLT);
    }
#line 400 "src/lexer.c"
    yy31:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '<') goto yy32;
            if (yych <= '=') goto yy102;
            goto yy103;
        } else {
            if (yych == '~') goto yy24;
        }
    yy32:
#line 43 "src/lexer.re"
    {
        return rbs_next_token(lexer, pEQ);
    }
#line 414 "src/lexer.c"
    yy33:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '<') goto yy8;
        if (yych <= '>') goto yy24;
        goto yy8;
    yy34:
        rbs_skip(lexer);
#line 34 "src/lexer.re"
        {
            return rbs_next_token(lexer, pQUESTION);
        }
#line 425 "src/lexer.c"
    yy35:
        yyaccept = 0;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '_') {
            if (yych <= '@') {
                if (yych <= '?') goto yy3;
                goto yy104;
            } else {
                if (yych <= 'Z') goto yy105;
                if (yych <= '^') goto yy3;
                goto yy105;
            }
        } else {
            if (yych <= 'q') {
                if (yych <= '`') goto yy3;
                goto yy105;
            } else {
                if (yych <= 'r') goto yy108;
                if (yych <= 'z') goto yy105;
                goto yy3;
            }
        }
    yy36:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy36;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy37;
                if (yych <= 'Z') goto yy36;
            } else {
                if (yych == '`') goto yy37;
                if (yych <= 'z') goto yy36;
            }
        }
    yy37:
#line 133 "src/lexer.re"
    {
        return rbs_next_token(lexer, tUIDENT);
    }
#line 472 "src/lexer.c"
    yy38:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == ']') goto yy111;
#line 26 "src/lexer.re"
        {
            return rbs_next_token(lexer, pLBRACKET);
        }
#line 479 "src/lexer.c"
    yy39:
        rbs_skip(lexer);
#line 27 "src/lexer.re"
        {
            return rbs_next_token(lexer, pRBRACKET);
        }
#line 484 "src/lexer.c"
    yy40:
        rbs_skip(lexer);
#line 32 "src/lexer.re"
        {
            return rbs_next_token(lexer, pHAT);
        }
#line 489 "src/lexer.c"
    yy41:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy112;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy42;
                if (yych <= 'Z') goto yy115;
            } else {
                if (yych <= '_') goto yy117;
                if (yych <= '`') goto yy42;
                if (yych <= 'z') goto yy112;
            }
        }
    yy42:
#line 136 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULLIDENT);
    }
#line 513 "src/lexer.c"
    yy43:
        yyaccept = 4;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= ' ') {
            if (yych <= 0x00000000) goto yy44;
            if (yych <= 0x0000001F) goto yy118;
        } else {
            if (yych != ':') goto yy118;
        }
    yy44:
#line 39 "src/lexer.re"
    {
        return rbs_next_token(lexer, tOPERATOR);
    }
#line 528 "src/lexer.c"
    yy45:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'r') {
            if (yych == 'l') goto yy119;
            goto yy53;
        } else {
            if (yych <= 's') goto yy120;
            if (yych <= 't') goto yy122;
            goto yy53;
        }
    yy46:
#line 132 "src/lexer.re"
    {
        return rbs_next_token(lexer, tLIDENT);
    }
#line 543 "src/lexer.c"
    yy47:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy123;
        goto yy53;
    yy48:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy124;
        goto yy53;
    yy49:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy125;
        goto yy53;
    yy50:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy126;
        if (yych == 'x') goto yy127;
        goto yy53;
    yy51:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy128;
        goto yy53;
    yy52:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy53:
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
                goto yy46;
            } else {
                if (yych <= '9') goto yy52;
                if (yych <= '<') goto yy46;
                goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy46;
                if (yych <= 'Z') goto yy52;
                goto yy46;
            } else {
                if (yych == '`') goto yy46;
                if (yych <= 'z') goto yy52;
                goto yy46;
            }
        }
    yy54:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy129;
        goto yy53;
    yy55:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy131;
        goto yy53;
    yy56:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy132;
        goto yy53;
    yy57:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy133;
        goto yy53;
    yy58:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy134;
        if (yych == 'u') goto yy135;
        goto yy53;
    yy59:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy136;
        goto yy53;
    yy60:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'h') {
            if (yych == 'e') goto yy137;
            goto yy53;
        } else {
            if (yych <= 'i') goto yy138;
            if (yych == 'k') goto yy139;
            goto yy53;
        }
    yy61:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'q') {
            if (yych == 'o') goto yy140;
            goto yy53;
        } else {
            if (yych <= 'r') goto yy141;
            if (yych == 'y') goto yy142;
            goto yy53;
        }
    yy62:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy143;
        if (yych == 's') goto yy144;
        goto yy53;
    yy63:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy145;
        goto yy53;
    yy64:
        rbs_skip(lexer);
#line 28 "src/lexer.re"
        {
            return rbs_next_token(lexer, pLBRACE);
        }
#line 662 "src/lexer.c"
    yy65:
        rbs_skip(lexer);
#line 31 "src/lexer.re"
        {
            return rbs_next_token(lexer, pBAR);
        }
#line 667 "src/lexer.c"
    yy66:
        rbs_skip(lexer);
#line 29 "src/lexer.re"
        {
            return rbs_next_token(lexer, pRBRACE);
        }
#line 672 "src/lexer.c"
    yy67:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy68:
        if (yych <= '"') {
            if (yych <= 0x00000000) goto yy69;
            if (yych <= '!') goto yy67;
            goto yy70;
        } else {
            if (yych == '\\') goto yy71;
            goto yy67;
        }
    yy69:
        *lexer = backup;
        if (yyaccept <= 3) {
            if (yyaccept <= 1) {
                if (yyaccept == 0) {
                    goto yy3;
                } else {
                    goto yy8;
                }
            } else {
                if (yyaccept == 2) {
                    goto yy23;
                } else {
                    goto yy28;
                }
            }
        } else {
            if (yyaccept <= 5) {
                if (yyaccept == 4) {
                    goto yy44;
                } else {
                    goto yy79;
                }
            } else {
                goto yy161;
            }
        }
    yy70:
        rbs_skip(lexer);
#line 110 "src/lexer.re"
        {
            return rbs_next_token(lexer, tDQSTRING);
        }
#line 716 "src/lexer.c"
    yy71:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy146;
        if (yych == 'x') goto yy147;
        goto yy67;
    yy72:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ',') {
            if (yych <= '\f') {
                if (yych <= 0x00000000) goto yy73;
                if (yych <= 0x00000008) goto yy72;
                if (yych >= '\v') goto yy72;
            } else {
                if (yych <= 0x0000001F) {
                    if (yych >= 0x0000000E) goto yy72;
                } else {
                    if (yych == '#') goto yy72;
                }
            }
        } else {
            if (yych <= '>') {
                if (yych <= '-') goto yy72;
                if (yych <= '/') goto yy73;
                if (yych <= '9') goto yy72;
            } else {
                if (yych <= '^') {
                    if (yych <= 'Z') goto yy72;
                } else {
                    if (yych <= 'z') goto yy72;
                    if (yych >= 0x0000007F) goto yy72;
                }
            }
        }
    yy73:
#line 143 "src/lexer.re"
    {
        return rbs_next_token(lexer, tGIDENT);
    }
#line 755 "src/lexer.c"
    yy74:
        rbs_skip(lexer);
        goto yy73;
    yy75:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '(') {
                if (yych <= '\'') goto yy69;
                goto yy148;
            } else {
                if (yych == '<') goto yy149;
                goto yy69;
            }
        } else {
            if (yych <= 'z') {
                if (yych <= '[') goto yy150;
                goto yy69;
            } else {
                if (yych <= '{') goto yy151;
                if (yych <= '|') goto yy152;
                goto yy69;
            }
        }
    yy76:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy77:
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy69;
            if (yych <= '&') goto yy76;
        } else {
            if (yych == '\\') goto yy80;
            goto yy76;
        }
    yy78:
        rbs_skip(lexer);
    yy79:
#line 111 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSQSTRING);
    }
#line 796 "src/lexer.c"
    yy80:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy69;
            if (yych <= '&') goto yy76;
            goto yy153;
        } else {
            if (yych == '\\') goto yy80;
            goto yy76;
        }
    yy81:
        rbs_skip(lexer);
#line 36 "src/lexer.re"
        {
            return rbs_next_token(lexer, pSTAR2);
        }
#line 812 "src/lexer.c"
    yy82:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych >= 0x00000001) goto yy82;
#line 49 "src/lexer.re"
        {
            return rbs_next_token(lexer, tINLINECOMMENT);
        }
#line 819 "src/lexer.c"
    yy83:
        rbs_skip(lexer);
#line 41 "src/lexer.re"
        {
            return rbs_next_token(lexer, pARROW);
        }
#line 824 "src/lexer.c"
    yy84:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '.') goto yy154;
        goto yy69;
    yy85:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy89;
        if (yych == '~') goto yy89;
    yy86:
#line 130 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 838 "src/lexer.c"
    yy87:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '"') {
            if (yych <= 0x00000000) goto yy69;
            if (yych <= '!') goto yy87;
            goto yy155;
        } else {
            if (yych == '\\') goto yy156;
            goto yy87;
        }
    yy88:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ')') {
            if (yych <= 0x0000001F) {
                if (yych <= '\n') {
                    if (yych <= 0x00000000) goto yy69;
                    if (yych <= 0x00000008) goto yy157;
                    goto yy69;
                } else {
                    if (yych == '\r') goto yy69;
                    goto yy157;
                }
            } else {
                if (yych <= '#') {
                    if (yych <= ' ') goto yy69;
                    if (yych <= '"') goto yy159;
                    goto yy157;
                } else {
                    if (yych == '%') goto yy69;
                    if (yych <= '\'') goto yy159;
                    goto yy69;
                }
            }
        } else {
            if (yych <= 'Z') {
                if (yych <= '/') {
                    if (yych == '-') goto yy157;
                    goto yy159;
                } else {
                    if (yych <= '9') goto yy157;
                    if (yych <= '>') goto yy159;
                    goto yy157;
                }
            } else {
                if (yych <= '^') {
                    if (yych == '\\') goto yy159;
                    goto yy69;
                } else {
                    if (yych <= 'z') goto yy157;
                    if (yych <= '}') goto yy69;
                    if (yych <= '~') goto yy159;
                    goto yy157;
                }
            }
        }
    yy89:
        rbs_skip(lexer);
        goto yy86;
    yy90:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy69;
            if (yych <= '&') goto yy90;
            goto yy160;
        } else {
            if (yych == '\\') goto yy162;
            goto yy90;
        }
    yy91:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '*') goto yy89;
        goto yy86;
    yy92:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '@') goto yy89;
        goto yy86;
    yy93:
        rbs_skip(lexer);
#line 45 "src/lexer.re"
        {
            return rbs_next_token(lexer, pCOLON2);
        }
#line 924 "src/lexer.c"
    yy94:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ';') goto yy86;
        if (yych <= '<') goto yy89;
        if (yych <= '=') goto yy163;
        goto yy86;
    yy95:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy164;
        if (yych == '~') goto yy89;
        goto yy69;
    yy96:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '<') goto yy86;
        if (yych <= '>') goto yy89;
        goto yy86;
    yy97:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '?') goto yy69;
            if (yych <= '@') goto yy165;
            if (yych <= 'Z') goto yy166;
            goto yy69;
        } else {
            if (yych == '`') goto yy69;
            if (yych <= 'z') goto yy166;
            goto yy69;
        }
    yy98:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '/') {
                if (yych == '!') goto yy168;
            } else {
                if (yych <= '9') goto yy98;
                if (yych == '=') goto yy168;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '?') goto yy168;
                if (yych <= '@') goto yy99;
                if (yych <= 'Z') goto yy98;
            } else {
                if (yych == '`') goto yy99;
                if (yych <= 'z') goto yy98;
            }
        }
    yy99:
#line 126 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 980 "src/lexer.c"
    yy100:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == ']') goto yy164;
        goto yy69;
    yy101:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '>') goto yy24;
        goto yy8;
    yy102:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy24;
        goto yy8;
    yy103:
        rbs_skip(lexer);
#line 42 "src/lexer.re"
        {
            return rbs_next_token(lexer, pFATARROW);
        }
#line 1000 "src/lexer.c"
    yy104:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '@') goto yy69;
            if (yych <= 'Z') goto yy169;
            goto yy69;
        } else {
            if (yych == '`') goto yy69;
            if (yych <= 'z') goto yy169;
            goto yy69;
        }
    yy105:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy106:
        if (yych <= 'Z') {
            if (yych <= '/') goto yy107;
            if (yych <= '9') goto yy105;
            if (yych >= 'A') goto yy105;
        } else {
            if (yych <= '_') {
                if (yych >= '_') goto yy105;
            } else {
                if (yych <= '`') goto yy107;
                if (yych <= 'z') goto yy105;
            }
        }
    yy107:
#line 140 "src/lexer.re"
    {
        return rbs_next_token(lexer, tAIDENT);
    }
#line 1032 "src/lexer.c"
    yy108:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'b') goto yy171;
        goto yy106;
    yy109:
        rbs_skip(lexer);
#line 137 "src/lexer.re"
        {
            return rbs_next_token(lexer, tBANGIDENT);
        }
#line 1042 "src/lexer.c"
    yy110:
        rbs_skip(lexer);
#line 138 "src/lexer.re"
        {
            return rbs_next_token(lexer, tEQIDENT);
        }
#line 1047 "src/lexer.c"
    yy111:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy24;
#line 47 "src/lexer.re"
        {
            return rbs_next_token(lexer, pAREF_OPR);
        }
#line 1054 "src/lexer.c"
    yy112:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy113:
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy112;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy114;
                if (yych <= 'Z') goto yy112;
            } else {
                if (yych == '`') goto yy114;
                if (yych <= 'z') goto yy112;
            }
        }
    yy114:
#line 134 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULLIDENT);
    }
#line 1078 "src/lexer.c"
    yy115:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy115;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy116;
                if (yych <= 'Z') goto yy115;
            } else {
                if (yych == '`') goto yy116;
                if (yych <= 'z') goto yy115;
            }
        }
    yy116:
#line 135 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULIDENT);
    }
#line 1101 "src/lexer.c"
    yy117:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy172;
        goto yy113;
    yy118:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy69;
        if (yych == '`') goto yy173;
        goto yy118;
    yy119:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy174;
        goto yy53;
    yy120:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy121;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy121;
                if (yych <= 'z') goto yy52;
            }
        }
    yy121:
#line 97 "src/lexer.re"
    {
        return rbs_next_token(lexer, kAS);
    }
#line 1140 "src/lexer.c"
    yy122:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy175;
        goto yy53;
    yy123:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy176;
        if (yych == 't') goto yy177;
        goto yy53;
    yy124:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy179;
        goto yy53;
    yy125:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy180;
        goto yy53;
    yy126:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy182;
        goto yy53;
    yy127:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy184;
        goto yy53;
    yy128:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy185;
        goto yy53;
    yy129:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '9') {
                if (yych == '!') goto yy109;
                if (yych >= '0') goto yy52;
            } else {
                if (yych <= '=') {
                    if (yych >= '=') goto yy110;
                } else {
                    if (yych <= '@') goto yy130;
                    if (yych <= 'Z') goto yy52;
                }
            }
        } else {
            if (yych <= 'c') {
                if (yych == '`') goto yy130;
                if (yych <= 'b') goto yy52;
                goto yy186;
            } else {
                if (yych <= 's') {
                    if (yych <= 'r') goto yy52;
                    goto yy187;
                } else {
                    if (yych <= 't') goto yy188;
                    if (yych <= 'z') goto yy52;
                }
            }
        }
    yy130:
#line 78 "src/lexer.re"
    {
        return rbs_next_token(lexer, kIN);
    }
#line 1210 "src/lexer.c"
    yy131:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy189;
        goto yy53;
    yy132:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy190;
        goto yy53;
    yy133:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy192;
        goto yy53;
    yy134:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy194;
        if (yych == 'i') goto yy195;
        goto yy53;
    yy135:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'b') goto yy196;
        goto yy53;
    yy136:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy197;
        goto yy53;
    yy137:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy198;
        goto yy53;
    yy138:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy199;
        goto yy53;
    yy139:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy200;
        goto yy53;
    yy140:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy201;
        goto yy53;
    yy141:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy203;
        goto yy53;
    yy142:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy204;
        goto yy53;
    yy143:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy205;
        if (yych == 't') goto yy206;
        goto yy53;
    yy144:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy207;
        goto yy53;
    yy145:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy209;
        goto yy53;
    yy146:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy69;
            if (yych <= '9') goto yy210;
            goto yy69;
        } else {
            if (yych <= 'F') goto yy210;
            if (yych <= '`') goto yy69;
            if (yych <= 'f') goto yy210;
            goto yy69;
        }
    yy147:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '/') goto yy69;
        if (yych <= '9') goto yy67;
        if (yych <= '`') goto yy69;
        if (yych <= 'f') goto yy67;
        goto yy69;
    yy148:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy69;
        if (yych == ')') goto yy211;
        goto yy148;
    yy149:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy69;
        if (yych == '>') goto yy212;
        goto yy149;
    yy150:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy69;
        if (yych == ']') goto yy213;
        goto yy150;
    yy151:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy69;
        if (yych == '}') goto yy214;
        goto yy151;
    yy152:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy69;
        if (yych == '|') goto yy215;
        goto yy152;
    yy153:
        yyaccept = 5;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy79;
            if (yych <= '&') goto yy76;
            goto yy78;
        } else {
            if (yych == '\\') goto yy80;
            goto yy76;
        }
    yy154:
        rbs_skip(lexer);
#line 38 "src/lexer.re"
        {
            return rbs_next_token(lexer, pDOT3);
        }
#line 1356 "src/lexer.c"
    yy155:
        rbs_skip(lexer);
#line 112 "src/lexer.re"
        {
            return rbs_next_token(lexer, tDQSYMBOL);
        }
#line 1361 "src/lexer.c"
    yy156:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy216;
        if (yych == 'x') goto yy217;
        goto yy87;
    yy157:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ',') {
            if (yych <= '\f') {
                if (yych <= 0x00000000) goto yy158;
                if (yych <= 0x00000008) goto yy157;
                if (yych >= '\v') goto yy157;
            } else {
                if (yych <= 0x0000001F) {
                    if (yych >= 0x0000000E) goto yy157;
                } else {
                    if (yych == '#') goto yy157;
                }
            }
        } else {
            if (yych <= '>') {
                if (yych <= '-') goto yy157;
                if (yych <= '/') goto yy158;
                if (yych <= '9') goto yy157;
            } else {
                if (yych <= '^') {
                    if (yych <= 'Z') goto yy157;
                } else {
                    if (yych <= 'z') goto yy157;
                    if (yych >= 0x0000007F) goto yy157;
                }
            }
        }
    yy158:
#line 129 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1400 "src/lexer.c"
    yy159:
        rbs_skip(lexer);
        goto yy158;
    yy160:
        rbs_skip(lexer);
    yy161:
#line 113 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSQSYMBOL);
    }
#line 1409 "src/lexer.c"
    yy162:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy69;
            if (yych <= '&') goto yy90;
            goto yy218;
        } else {
            if (yych == '\\') goto yy162;
            goto yy90;
        }
    yy163:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '>') goto yy89;
        goto yy86;
    yy164:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy89;
        goto yy86;
    yy165:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '@') goto yy69;
            if (yych <= 'Z') goto yy219;
            goto yy69;
        } else {
            if (yych == '`') goto yy69;
            if (yych <= 'z') goto yy219;
            goto yy69;
        }
    yy166:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '/') {
                if (yych == '!') goto yy221;
            } else {
                if (yych <= '9') goto yy166;
                if (yych == '=') goto yy221;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '?') goto yy221;
                if (yych <= '@') goto yy167;
                if (yych <= 'Z') goto yy166;
            } else {
                if (yych == '`') goto yy167;
                if (yych <= 'z') goto yy166;
            }
        }
    yy167:
#line 127 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1466 "src/lexer.c"
    yy168:
        rbs_skip(lexer);
        goto yy99;
    yy169:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '/') goto yy170;
            if (yych <= '9') goto yy169;
            if (yych >= 'A') goto yy169;
        } else {
            if (yych <= '_') {
                if (yych >= '_') goto yy169;
            } else {
                if (yych <= '`') goto yy170;
                if (yych <= 'z') goto yy169;
            }
        }
    yy170:
#line 141 "src/lexer.re"
    {
        return rbs_next_token(lexer, tA2IDENT);
    }
#line 1488 "src/lexer.c"
    yy171:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy222;
        goto yy106;
    yy172:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy224;
        goto yy113;
    yy173:
        rbs_skip(lexer);
#line 40 "src/lexer.re"
        {
            return rbs_next_token(lexer, tQIDENT);
        }
#line 1503 "src/lexer.c"
    yy174:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy225;
        goto yy53;
    yy175:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy226;
        goto yy53;
    yy176:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy227;
        goto yy53;
    yy177:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy178;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy178;
                if (yych <= 'z') goto yy52;
            }
        }
    yy178:
#line 72 "src/lexer.re"
    {
        return rbs_next_token(lexer, kBOT);
    }
#line 1541 "src/lexer.c"
    yy179:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy229;
        goto yy53;
    yy180:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy181;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy181;
                if (yych <= 'z') goto yy52;
            }
        }
    yy181:
#line 74 "src/lexer.re"
    {
        return rbs_next_token(lexer, kDEF);
    }
#line 1569 "src/lexer.c"
    yy182:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy183;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy183;
                if (yych <= 'z') goto yy52;
            }
        }
    yy183:
#line 75 "src/lexer.re"
    {
        return rbs_next_token(lexer, kEND);
    }
#line 1592 "src/lexer.c"
    yy184:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy230;
        goto yy53;
    yy185:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy231;
        goto yy53;
    yy186:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy232;
        goto yy53;
    yy187:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy233;
        goto yy53;
    yy188:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy234;
        goto yy53;
    yy189:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy235;
        goto yy53;
    yy190:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy191;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy191;
                if (yych <= 'z') goto yy52;
            }
        }
    yy191:
#line 83 "src/lexer.re"
    {
        return rbs_next_token(lexer, kNIL);
    }
#line 1645 "src/lexer.c"
    yy192:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy193;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy193;
                if (yych <= 'z') goto yy52;
            }
        }
    yy193:
#line 84 "src/lexer.re"
    {
        return rbs_next_token(lexer, kOUT);
    }
#line 1668 "src/lexer.c"
    yy194:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy236;
        goto yy53;
    yy195:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'v') goto yy237;
        goto yy53;
    yy196:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy238;
        goto yy53;
    yy197:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy239;
        goto yy53;
    yy198:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy240;
        goto yy53;
    yy199:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'g') goto yy242;
        goto yy53;
    yy200:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy243;
        goto yy53;
    yy201:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy202;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy202;
                if (yych <= 'z') goto yy52;
            }
        }
    yy202:
#line 90 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTOP);
    }
#line 1726 "src/lexer.c"
    yy203:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy245;
        goto yy53;
    yy204:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy247;
        goto yy53;
    yy205:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'h') goto yy249;
        goto yy53;
    yy206:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'y') goto yy250;
        goto yy53;
    yy207:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy208;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy208;
                if (yych <= 'z') goto yy52;
            }
        }
    yy208:
#line 96 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUSE);
    }
#line 1769 "src/lexer.c"
    yy209:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy251;
        goto yy53;
    yy210:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy69;
            if (yych <= '9') goto yy253;
            goto yy69;
        } else {
            if (yych <= 'F') goto yy253;
            if (yych <= '`') goto yy69;
            if (yych <= 'f') goto yy253;
            goto yy69;
        }
    yy211:
        rbs_skip(lexer);
#line 55 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1792 "src/lexer.c"
    yy212:
        rbs_skip(lexer);
#line 58 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1797 "src/lexer.c"
    yy213:
        rbs_skip(lexer);
#line 56 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1802 "src/lexer.c"
    yy214:
        rbs_skip(lexer);
#line 54 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1807 "src/lexer.c"
    yy215:
        rbs_skip(lexer);
#line 57 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1812 "src/lexer.c"
    yy216:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy69;
            if (yych <= '9') goto yy254;
            goto yy69;
        } else {
            if (yych <= 'F') goto yy254;
            if (yych <= '`') goto yy69;
            if (yych <= 'f') goto yy254;
            goto yy69;
        }
    yy217:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '/') goto yy69;
        if (yych <= '9') goto yy87;
        if (yych <= '`') goto yy69;
        if (yych <= 'f') goto yy87;
        goto yy69;
    yy218:
        yyaccept = 6;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy161;
            if (yych <= '&') goto yy90;
            goto yy160;
        } else {
            if (yych == '\\') goto yy162;
            goto yy90;
        }
    yy219:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '/') {
                if (yych == '!') goto yy255;
            } else {
                if (yych <= '9') goto yy219;
                if (yych == '=') goto yy255;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '?') goto yy255;
                if (yych <= '@') goto yy220;
                if (yych <= 'Z') goto yy219;
            } else {
                if (yych == '`') goto yy220;
                if (yych <= 'z') goto yy219;
            }
        }
    yy220:
#line 128 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1870 "src/lexer.c"
    yy221:
        rbs_skip(lexer);
        goto yy167;
    yy222:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '/') goto yy223;
            if (yych <= '9') goto yy105;
            if (yych >= 'A') goto yy105;
        } else {
            if (yych <= '_') {
                if (yych >= '_') goto yy105;
            } else {
                if (yych <= '`') goto yy223;
                if (yych <= 'z') goto yy105;
            }
        }
    yy223:
#line 99 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATRBS);
    }
#line 1892 "src/lexer.c"
    yy224:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy256;
        goto yy113;
    yy225:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy257;
        goto yy53;
    yy226:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy259;
        goto yy53;
    yy227:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy228;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy228;
                if (yych <= 'z') goto yy52;
            }
        }
    yy228:
#line 71 "src/lexer.re"
    {
        return rbs_next_token(lexer, kBOOL);
    }
#line 1930 "src/lexer.c"
    yy229:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy260;
        goto yy53;
    yy230:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy262;
        goto yy53;
    yy231:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy263;
        goto yy53;
    yy232:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy265;
        goto yy53;
    yy233:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy266;
        goto yy53;
    yy234:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy267;
        goto yy53;
    yy235:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy268;
        goto yy53;
    yy236:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy269;
        goto yy53;
    yy237:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy270;
        goto yy53;
    yy238:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy271;
        goto yy53;
    yy239:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy272;
        goto yy53;
    yy240:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy241;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy241;
                if (yych <= 'z') goto yy52;
            }
        }
    yy241:
#line 88 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSELF);
    }
#line 2008 "src/lexer.c"
    yy242:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy273;
        goto yy53;
    yy243:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy244;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy244;
                if (yych <= 'z') goto yy52;
            }
        }
    yy244:
#line 100 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSKIP);
    }
#line 2036 "src/lexer.c"
    yy245:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy246;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy246;
                if (yych <= 'z') goto yy52;
            }
        }
    yy246:
#line 91 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTRUE);
    }
#line 2059 "src/lexer.c"
    yy247:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy248;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy248;
                if (yych <= 'z') goto yy52;
            }
        }
    yy248:
#line 92 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTYPE);
    }
#line 2082 "src/lexer.c"
    yy249:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy274;
        goto yy53;
    yy250:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy275;
        goto yy53;
    yy251:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy252;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy252;
                if (yych <= 'z') goto yy52;
            }
        }
    yy252:
#line 95 "src/lexer.re"
    {
        return rbs_next_token(lexer, kVOID);
    }
#line 2115 "src/lexer.c"
    yy253:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy69;
            if (yych <= '9') goto yy276;
            goto yy69;
        } else {
            if (yych <= 'F') goto yy276;
            if (yych <= '`') goto yy69;
            if (yych <= 'f') goto yy276;
            goto yy69;
        }
    yy254:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy69;
            if (yych <= '9') goto yy277;
            goto yy69;
        } else {
            if (yych <= 'F') goto yy277;
            if (yych <= '`') goto yy69;
            if (yych <= 'f') goto yy277;
            goto yy69;
        }
    yy255:
        rbs_skip(lexer);
        goto yy220;
    yy256:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy278;
        goto yy113;
    yy257:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy258;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy258;
                if (yych <= 'z') goto yy52;
            }
        }
    yy258:
#line 67 "src/lexer.re"
    {
        return rbs_next_token(lexer, kALIAS);
    }
#line 2172 "src/lexer.c"
    yy259:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'q') {
            if (yych == 'a') goto yy279;
            goto yy53;
        } else {
            if (yych <= 'r') goto yy280;
            if (yych == 'w') goto yy281;
            goto yy53;
        }
    yy260:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy261;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy261;
                if (yych <= 'z') goto yy52;
            }
        }
    yy261:
#line 73 "src/lexer.re"
    {
        return rbs_next_token(lexer, kCLASS);
    }
#line 2206 "src/lexer.c"
    yy262:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy282;
        goto yy53;
    yy263:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy264;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy264;
                if (yych <= 'z') goto yy52;
            }
        }
    yy264:
#line 77 "src/lexer.re"
    {
        return rbs_next_token(lexer, kFALSE);
    }
#line 2234 "src/lexer.c"
    yy265:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy284;
        goto yy53;
    yy266:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy285;
        goto yy53;
    yy267:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy286;
        goto yy53;
    yy268:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy287;
        goto yy53;
    yy269:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy289;
        goto yy53;
    yy270:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy290;
        goto yy53;
    yy271:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy291;
        goto yy53;
    yy272:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy293;
        goto yy53;
    yy273:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy295;
        goto yy53;
    yy274:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy296;
        goto yy53;
    yy275:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy297;
        goto yy53;
    yy276:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy69;
            if (yych <= '9') goto yy67;
            goto yy69;
        } else {
            if (yych <= 'F') goto yy67;
            if (yych <= '`') goto yy69;
            if (yych <= 'f') goto yy67;
            goto yy69;
        }
    yy277:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy69;
            if (yych <= '9') goto yy298;
            goto yy69;
        } else {
            if (yych <= 'F') goto yy298;
            if (yych <= '`') goto yy69;
            if (yych <= 'f') goto yy298;
            goto yy69;
        }
    yy278:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy299;
        goto yy113;
    yy279:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy300;
        goto yy53;
    yy280:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy301;
        goto yy53;
    yy281:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy302;
        goto yy53;
    yy282:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy283;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy283;
                if (yych <= 'z') goto yy52;
            }
        }
    yy283:
#line 76 "src/lexer.re"
    {
        return rbs_next_token(lexer, kEXTEND);
    }
#line 2358 "src/lexer.c"
    yy284:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy303;
        goto yy53;
    yy285:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy305;
        goto yy53;
    yy286:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy306;
        goto yy53;
    yy287:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy288;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy288;
                if (yych <= 'z') goto yy52;
            }
        }
    yy288:
#line 82 "src/lexer.re"
    {
        return rbs_next_token(lexer, kMODULE);
    }
#line 2396 "src/lexer.c"
    yy289:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy307;
        goto yy53;
    yy290:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy309;
        goto yy53;
    yy291:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy292;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy292;
                if (yych <= 'z') goto yy52;
            }
        }
    yy292:
#line 87 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPUBLIC);
    }
#line 2429 "src/lexer.c"
    yy293:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy294;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy294;
                if (yych <= 'z') goto yy52;
            }
        }
    yy294:
#line 101 "src/lexer.re"
    {
        return rbs_next_token(lexer, kRETURN);
    }
#line 2452 "src/lexer.c"
    yy295:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy311;
        goto yy53;
    yy296:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'k') goto yy312;
        goto yy53;
    yy297:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy313;
        goto yy53;
    yy298:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy69;
            if (yych <= '9') goto yy87;
            goto yy69;
        } else {
            if (yych <= 'F') goto yy87;
            if (yych <= '`') goto yy69;
            if (yych <= 'f') goto yy87;
            goto yy69;
        }
    yy299:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy315;
        goto yy113;
    yy300:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy317;
        goto yy53;
    yy301:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy318;
        goto yy53;
    yy302:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy319;
        goto yy53;
    yy303:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy304;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy304;
                if (yych <= 'z') goto yy52;
            }
        }
    yy304:
#line 79 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINCLUDE);
    }
#line 2523 "src/lexer.c"
    yy305:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy320;
        goto yy53;
    yy306:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy322;
        goto yy53;
    yy307:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy308;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy308;
                if (yych <= 'z') goto yy52;
            }
        }
    yy308:
#line 85 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPREPEND);
    }
#line 2556 "src/lexer.c"
    yy309:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy310;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy310;
                if (yych <= 'z') goto yy52;
            }
        }
    yy310:
#line 86 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPRIVATE);
    }
#line 2579 "src/lexer.c"
    yy311:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy323;
        goto yy53;
    yy312:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy324;
        goto yy53;
    yy313:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy314;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy314;
                if (yych <= 'z') goto yy52;
            }
        }
    yy314:
#line 94 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUNTYPED);
    }
#line 2612 "src/lexer.c"
    yy315:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy112;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy316;
                if (yych <= 'Z') goto yy112;
            } else {
                if (yych == '`') goto yy316;
                if (yych <= 'z') goto yy112;
            }
        }
    yy316:
#line 98 "src/lexer.re"
    {
        return rbs_next_token(lexer, k__TODO__);
    }
#line 2635 "src/lexer.c"
    yy317:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy325;
        goto yy53;
    yy318:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy326;
        goto yy53;
    yy319:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy327;
        goto yy53;
    yy320:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy321;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy321;
                if (yych <= 'z') goto yy52;
            }
        }
    yy321:
#line 80 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINSTANCE);
    }
#line 2673 "src/lexer.c"
    yy322:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy328;
        goto yy53;
    yy323:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy330;
        goto yy53;
    yy324:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy332;
        goto yy53;
    yy325:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy334;
        goto yy53;
    yy326:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy335;
        goto yy53;
    yy327:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy336;
        goto yy53;
    yy328:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy329;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy329;
                if (yych <= 'z') goto yy52;
            }
        }
    yy329:
#line 81 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINTERFACE);
    }
#line 2726 "src/lexer.c"
    yy330:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy331;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy331;
                if (yych <= 'z') goto yy52;
            }
        }
    yy331:
#line 89 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSINGLETON);
    }
#line 2749 "src/lexer.c"
    yy332:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy333;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy333;
                if (yych <= 'z') goto yy52;
            }
        }
    yy333:
#line 93 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUNCHECKED);
    }
#line 2772 "src/lexer.c"
    yy334:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy337;
        goto yy53;
    yy335:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy338;
        goto yy53;
    yy336:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy340;
        goto yy53;
    yy337:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy342;
        goto yy53;
    yy338:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy339;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy339;
                if (yych <= 'z') goto yy52;
            }
        }
    yy339:
#line 69 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRREADER);
    }
#line 2815 "src/lexer.c"
    yy340:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy341;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy341;
                if (yych <= 'z') goto yy52;
            }
        }
    yy341:
#line 70 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRWRITER);
    }
#line 2838 "src/lexer.c"
    yy342:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych != 'r') goto yy53;
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy109;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy110;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy343;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy343;
                if (yych <= 'z') goto yy52;
            }
        }
    yy343:
#line 68 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRACCESSOR);
    }
#line 2864 "src/lexer.c"
    }
#line 150 "src/lexer.re"
}
