/* Generated by re2c 4.3 */
#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 yy35;
        case '@':
            goto yy36;
        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 yy37;
        case '[':
            goto yy39;
        case ']':
            goto yy40;
        case '^':
            goto yy41;
        case '_':
            goto yy42;
        case '`':
            goto yy44;
        case 'a':
            goto yy46;
        case 'b':
            goto yy48;
        case 'c':
            goto yy49;
        case 'd':
            goto yy50;
        case 'e':
            goto yy51;
        case 'f':
            goto yy52;
        case 'g':
        case 'h':
        case 'j':
        case 'k':
        case 'l':
        case 'q':
        case 'w':
        case 'x':
        case 'y':
        case 'z':
            goto yy53;
        case 'i':
            goto yy55;
        case 'm':
            goto yy56;
        case 'n':
            goto yy57;
        case 'o':
            goto yy58;
        case 'p':
            goto yy59;
        case 'r':
            goto yy60;
        case 's':
            goto yy61;
        case 't':
            goto yy62;
        case 'u':
            goto yy63;
        case 'v':
            goto yy64;
        case '{':
            goto yy65;
        case '|':
            goto yy66;
        case '}':
            goto yy67;
        default:
            goto yy2;
        }
    yy1:
        rbs_skip(lexer);
#line 151 "src/lexer.re"
        {
            return rbs_next_eof_token(lexer);
        }
#line 121 "src/lexer.c"
    yy2:
        rbs_skip(lexer);
    yy3:
#line 152 "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 150 "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 49 "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 yy69;
    yy10:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy11;
        if (yych != '\n') goto yy10;
    yy11:
#line 61 "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 yy73;
                    goto yy3;
                } else {
                    if (yych == '\r') goto yy3;
                    goto yy73;
                }
            } else {
                if (yych <= '#') {
                    if (yych <= ' ') goto yy3;
                    if (yych <= '"') goto yy75;
                    goto yy73;
                } else {
                    if (yych == '%') goto yy3;
                    if (yych <= '\'') goto yy75;
                    goto yy3;
                }
            }
        } else {
            if (yych <= 'Z') {
                if (yych <= '/') {
                    if (yych == '-') goto yy73;
                    goto yy75;
                } else {
                    if (yych <= '9') goto yy73;
                    if (yych <= '>') goto yy75;
                    goto yy73;
                }
            } else {
                if (yych <= '^') {
                    if (yych == '\\') goto yy75;
                    goto yy3;
                } else {
                    if (yych <= 'z') goto yy73;
                    if (yych <= '}') goto yy3;
                    if (yych <= '~') goto yy75;
                    goto yy73;
                }
            }
        }
    yy13:
        yyaccept = 1;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy76;
        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 yy78;
    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 yy82;
#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 yy83;
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            goto yy25;
        case '>':
            goto yy84;
        case '@':
            goto yy24;
        default:
            goto yy8;
        }
    yy22:
        yyaccept = 2;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych == '.') goto yy85;
    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 53 "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 yy86;
        case '"':
            goto yy88;
        case '$':
            goto yy89;
        case '%':
        case '&':
        case '/':
        case '^':
        case '`':
        case '|':
        case '~':
            goto yy90;
        case '\'':
            goto yy91;
        case '*':
            goto yy92;
        case '+':
        case '-':
            goto yy93;
        case ':':
            goto yy94;
        case '<':
            goto yy95;
        case '=':
            goto yy96;
        case '>':
            goto yy97;
        case '@':
            goto yy98;
        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 yy99;
        case '[':
            goto yy101;
        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 yy102;
    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 yy103;
            goto yy104;
        } 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 yy34;
        if (yych <= '>') goto yy24;
    yy34:
#line 47 "src/lexer.re"
    {
        return rbs_next_token(lexer, pGT);
    }
#line 423 "src/lexer.c"
    yy35:
        rbs_skip(lexer);
#line 34 "src/lexer.re"
        {
            return rbs_next_token(lexer, pQUESTION);
        }
#line 428 "src/lexer.c"
    yy36:
        yyaccept = 0;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '_') {
            if (yych <= '@') {
                if (yych <= '?') goto yy3;
                goto yy105;
            } else {
                if (yych <= 'Z') goto yy106;
                if (yych <= '^') goto yy3;
                goto yy106;
            }
        } else {
            if (yych <= 'q') {
                if (yych <= '`') goto yy3;
                goto yy106;
            } else {
                if (yych <= 'r') goto yy109;
                if (yych <= 'z') goto yy106;
                goto yy3;
            }
        }
    yy37:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy37;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy38;
                if (yych <= 'Z') goto yy37;
            } else {
                if (yych == '`') goto yy38;
                if (yych <= 'z') goto yy37;
            }
        }
    yy38:
#line 136 "src/lexer.re"
    {
        return rbs_next_token(lexer, tUIDENT);
    }
#line 475 "src/lexer.c"
    yy39:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == ']') goto yy112;
#line 26 "src/lexer.re"
        {
            return rbs_next_token(lexer, pLBRACKET);
        }
#line 482 "src/lexer.c"
    yy40:
        rbs_skip(lexer);
#line 27 "src/lexer.re"
        {
            return rbs_next_token(lexer, pRBRACKET);
        }
#line 487 "src/lexer.c"
    yy41:
        rbs_skip(lexer);
#line 32 "src/lexer.re"
        {
            return rbs_next_token(lexer, pHAT);
        }
#line 492 "src/lexer.c"
    yy42:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy113;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy43;
                if (yych <= 'Z') goto yy116;
            } else {
                if (yych <= '_') goto yy118;
                if (yych <= '`') goto yy43;
                if (yych <= 'z') goto yy113;
            }
        }
    yy43:
#line 139 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULLIDENT);
    }
#line 516 "src/lexer.c"
    yy44:
        yyaccept = 4;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= ' ') {
            if (yych <= 0x00000000) goto yy45;
            if (yych <= 0x0000001F) goto yy119;
        } else {
            if (yych != ':') goto yy119;
        }
    yy45:
#line 39 "src/lexer.re"
    {
        return rbs_next_token(lexer, tOPERATOR);
    }
#line 531 "src/lexer.c"
    yy46:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'r') {
            if (yych == 'l') goto yy120;
            goto yy54;
        } else {
            if (yych <= 's') goto yy121;
            if (yych <= 't') goto yy123;
            goto yy54;
        }
    yy47:
#line 135 "src/lexer.re"
    {
        return rbs_next_token(lexer, tLIDENT);
    }
#line 546 "src/lexer.c"
    yy48:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy124;
        goto yy54;
    yy49:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy125;
        goto yy54;
    yy50:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy126;
        goto yy54;
    yy51:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy127;
        if (yych == 'x') goto yy128;
        goto yy54;
    yy52:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy129;
        goto yy54;
    yy53:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy54:
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
                goto yy47;
            } else {
                if (yych <= '9') goto yy53;
                if (yych <= '<') goto yy47;
                goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy47;
                if (yych <= 'Z') goto yy53;
                goto yy47;
            } else {
                if (yych == '`') goto yy47;
                if (yych <= 'z') goto yy53;
                goto yy47;
            }
        }
    yy55:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy130;
        goto yy54;
    yy56:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy132;
        goto yy54;
    yy57:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy133;
        goto yy54;
    yy58:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy134;
        goto yy54;
    yy59:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy135;
        if (yych == 'u') goto yy136;
        goto yy54;
    yy60:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy137;
        goto yy54;
    yy61:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'h') {
            if (yych == 'e') goto yy138;
            goto yy54;
        } else {
            if (yych <= 'i') goto yy139;
            if (yych == 'k') goto yy140;
            goto yy54;
        }
    yy62:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'q') {
            if (yych == 'o') goto yy141;
            goto yy54;
        } else {
            if (yych <= 'r') goto yy142;
            if (yych == 'y') goto yy143;
            goto yy54;
        }
    yy63:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy144;
        if (yych == 's') goto yy145;
        goto yy54;
    yy64:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy146;
        goto yy54;
    yy65:
        rbs_skip(lexer);
#line 28 "src/lexer.re"
        {
            return rbs_next_token(lexer, pLBRACE);
        }
#line 665 "src/lexer.c"
    yy66:
        rbs_skip(lexer);
#line 31 "src/lexer.re"
        {
            return rbs_next_token(lexer, pBAR);
        }
#line 670 "src/lexer.c"
    yy67:
        rbs_skip(lexer);
#line 29 "src/lexer.re"
        {
            return rbs_next_token(lexer, pRBRACE);
        }
#line 675 "src/lexer.c"
    yy68:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy69:
        if (yych <= '"') {
            if (yych <= 0x00000000) goto yy70;
            if (yych <= '!') goto yy68;
            goto yy71;
        } else {
            if (yych == '\\') goto yy72;
            goto yy68;
        }
    yy70:
        *lexer = backup;
        if (yyaccept <= 4) {
            if (yyaccept <= 2) {
                if (yyaccept <= 1) {
                    if (yyaccept == 0) goto yy3;
                    else
                        goto yy8;
                } else {
                    goto yy23;
                }
            } else {
                if (yyaccept == 3) goto yy28;
                else
                    goto yy45;
            }
        } else {
            if (yyaccept <= 6) {
                if (yyaccept == 5) goto yy80;
                else
                    goto yy162;
            } else {
                if (yyaccept == 7) goto yy262;
                else
                    goto yy290;
            }
        }
    yy71:
        rbs_skip(lexer);
#line 113 "src/lexer.re"
        {
            return rbs_next_token(lexer, tDQSTRING);
        }
#line 715 "src/lexer.c"
    yy72:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy147;
        if (yych == 'x') goto yy148;
        goto yy68;
    yy73:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ',') {
            if (yych <= '\f') {
                if (yych <= 0x00000000) goto yy74;
                if (yych <= 0x00000008) goto yy73;
                if (yych >= '\v') goto yy73;
            } else {
                if (yych <= 0x0000001F) {
                    if (yych >= 0x0000000E) goto yy73;
                } else {
                    if (yych == '#') goto yy73;
                }
            }
        } else {
            if (yych <= '>') {
                if (yych <= '-') goto yy73;
                if (yych <= '/') goto yy74;
                if (yych <= '9') goto yy73;
            } else {
                if (yych <= '^') {
                    if (yych <= 'Z') goto yy73;
                } else {
                    if (yych <= 'z') goto yy73;
                    if (yych >= 0x0000007F) goto yy73;
                }
            }
        }
    yy74:
#line 146 "src/lexer.re"
    {
        return rbs_next_token(lexer, tGIDENT);
    }
#line 754 "src/lexer.c"
    yy75:
        rbs_skip(lexer);
        goto yy74;
    yy76:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '(') {
                if (yych <= '\'') goto yy70;
                goto yy149;
            } else {
                if (yych == '<') goto yy150;
                goto yy70;
            }
        } else {
            if (yych <= 'z') {
                if (yych <= '[') goto yy151;
                goto yy70;
            } else {
                if (yych <= '{') goto yy152;
                if (yych <= '|') goto yy153;
                goto yy70;
            }
        }
    yy77:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy78:
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy70;
            if (yych <= '&') goto yy77;
        } else {
            if (yych == '\\') goto yy81;
            goto yy77;
        }
    yy79:
        rbs_skip(lexer);
    yy80:
#line 114 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSQSTRING);
    }
#line 795 "src/lexer.c"
    yy81:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy70;
            if (yych <= '&') goto yy77;
            goto yy154;
        } else {
            if (yych == '\\') goto yy81;
            goto yy77;
        }
    yy82:
        rbs_skip(lexer);
#line 36 "src/lexer.re"
        {
            return rbs_next_token(lexer, pSTAR2);
        }
#line 811 "src/lexer.c"
    yy83:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych >= 0x00000001) goto yy83;
#line 50 "src/lexer.re"
        {
            return rbs_next_token(lexer, tINLINECOMMENT);
        }
#line 818 "src/lexer.c"
    yy84:
        rbs_skip(lexer);
#line 41 "src/lexer.re"
        {
            return rbs_next_token(lexer, pARROW);
        }
#line 823 "src/lexer.c"
    yy85:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '.') goto yy155;
        goto yy70;
    yy86:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy90;
        if (yych == '~') goto yy90;
    yy87:
#line 133 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 837 "src/lexer.c"
    yy88:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '"') {
            if (yych <= 0x00000000) goto yy70;
            if (yych <= '!') goto yy88;
            goto yy156;
        } else {
            if (yych == '\\') goto yy157;
            goto yy88;
        }
    yy89:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ')') {
            if (yych <= 0x0000001F) {
                if (yych <= '\n') {
                    if (yych <= 0x00000000) goto yy70;
                    if (yych <= 0x00000008) goto yy158;
                    goto yy70;
                } else {
                    if (yych == '\r') goto yy70;
                    goto yy158;
                }
            } else {
                if (yych <= '#') {
                    if (yych <= ' ') goto yy70;
                    if (yych <= '"') goto yy160;
                    goto yy158;
                } else {
                    if (yych == '%') goto yy70;
                    if (yych <= '\'') goto yy160;
                    goto yy70;
                }
            }
        } else {
            if (yych <= 'Z') {
                if (yych <= '/') {
                    if (yych == '-') goto yy158;
                    goto yy160;
                } else {
                    if (yych <= '9') goto yy158;
                    if (yych <= '>') goto yy160;
                    goto yy158;
                }
            } else {
                if (yych <= '^') {
                    if (yych == '\\') goto yy160;
                    goto yy70;
                } else {
                    if (yych <= 'z') goto yy158;
                    if (yych <= '}') goto yy70;
                    if (yych <= '~') goto yy160;
                    goto yy158;
                }
            }
        }
    yy90:
        rbs_skip(lexer);
        goto yy87;
    yy91:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy70;
            if (yych <= '&') goto yy91;
            goto yy161;
        } else {
            if (yych == '\\') goto yy163;
            goto yy91;
        }
    yy92:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '*') goto yy90;
        goto yy87;
    yy93:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '@') goto yy90;
        goto yy87;
    yy94:
        rbs_skip(lexer);
#line 45 "src/lexer.re"
        {
            return rbs_next_token(lexer, pCOLON2);
        }
#line 923 "src/lexer.c"
    yy95:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ';') goto yy87;
        if (yych <= '<') goto yy90;
        if (yych <= '=') goto yy164;
        goto yy87;
    yy96:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy165;
        if (yych == '~') goto yy90;
        goto yy70;
    yy97:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '<') goto yy87;
        if (yych <= '>') goto yy90;
        goto yy87;
    yy98:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '?') goto yy70;
            if (yych <= '@') goto yy166;
            if (yych <= 'Z') goto yy167;
            goto yy70;
        } else {
            if (yych == '`') goto yy70;
            if (yych <= 'z') goto yy167;
            goto yy70;
        }
    yy99:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '/') {
                if (yych == '!') goto yy169;
            } else {
                if (yych <= '9') goto yy99;
                if (yych == '=') goto yy169;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '?') goto yy169;
                if (yych <= '@') goto yy100;
                if (yych <= 'Z') goto yy99;
            } else {
                if (yych == '`') goto yy100;
                if (yych <= 'z') goto yy99;
            }
        }
    yy100:
#line 129 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 979 "src/lexer.c"
    yy101:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == ']') goto yy165;
        goto yy70;
    yy102:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '>') goto yy24;
        goto yy8;
    yy103:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy24;
        goto yy8;
    yy104:
        rbs_skip(lexer);
#line 42 "src/lexer.re"
        {
            return rbs_next_token(lexer, pFATARROW);
        }
#line 999 "src/lexer.c"
    yy105:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '@') goto yy70;
            if (yych <= 'Z') goto yy170;
            goto yy70;
        } else {
            if (yych == '`') goto yy70;
            if (yych <= 'z') goto yy170;
            goto yy70;
        }
    yy106:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy107:
        if (yych <= 'Z') {
            if (yych <= '/') goto yy108;
            if (yych <= '9') goto yy106;
            if (yych >= 'A') goto yy106;
        } else {
            if (yych <= '_') {
                if (yych >= '_') goto yy106;
            } else {
                if (yych <= '`') goto yy108;
                if (yych <= 'z') goto yy106;
            }
        }
    yy108:
#line 143 "src/lexer.re"
    {
        return rbs_next_token(lexer, tAIDENT);
    }
#line 1031 "src/lexer.c"
    yy109:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'b') goto yy172;
        goto yy107;
    yy110:
        rbs_skip(lexer);
#line 140 "src/lexer.re"
        {
            return rbs_next_token(lexer, tBANGIDENT);
        }
#line 1041 "src/lexer.c"
    yy111:
        rbs_skip(lexer);
#line 141 "src/lexer.re"
        {
            return rbs_next_token(lexer, tEQIDENT);
        }
#line 1046 "src/lexer.c"
    yy112:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy24;
#line 48 "src/lexer.re"
        {
            return rbs_next_token(lexer, pAREF_OPR);
        }
#line 1053 "src/lexer.c"
    yy113:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy114:
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy113;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy115;
                if (yych <= 'Z') goto yy113;
            } else {
                if (yych == '`') goto yy115;
                if (yych <= 'z') goto yy113;
            }
        }
    yy115:
#line 137 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULLIDENT);
    }
#line 1077 "src/lexer.c"
    yy116:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy116;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy117;
                if (yych <= 'Z') goto yy116;
            } else {
                if (yych == '`') goto yy117;
                if (yych <= 'z') goto yy116;
            }
        }
    yy117:
#line 138 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULIDENT);
    }
#line 1100 "src/lexer.c"
    yy118:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy173;
        goto yy114;
    yy119:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy70;
        if (yych == '`') goto yy174;
        goto yy119;
    yy120:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy175;
        goto yy54;
    yy121:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy122;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy122;
                if (yych <= 'z') goto yy53;
            }
        }
    yy122:
#line 100 "src/lexer.re"
    {
        return rbs_next_token(lexer, kAS);
    }
#line 1139 "src/lexer.c"
    yy123:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy176;
        goto yy54;
    yy124:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy177;
        if (yych == 't') goto yy178;
        goto yy54;
    yy125:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy180;
        goto yy54;
    yy126:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy181;
        goto yy54;
    yy127:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy183;
        goto yy54;
    yy128:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy185;
        goto yy54;
    yy129:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy186;
        goto yy54;
    yy130:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '9') {
                if (yych == '!') goto yy110;
                if (yych >= '0') goto yy53;
            } else {
                if (yych <= '=') {
                    if (yych >= '=') goto yy111;
                } else {
                    if (yych <= '@') goto yy131;
                    if (yych <= 'Z') goto yy53;
                }
            }
        } else {
            if (yych <= 'c') {
                if (yych == '`') goto yy131;
                if (yych <= 'b') goto yy53;
                goto yy187;
            } else {
                if (yych <= 's') {
                    if (yych <= 'r') goto yy53;
                    goto yy188;
                } else {
                    if (yych <= 't') goto yy189;
                    if (yych <= 'z') goto yy53;
                }
            }
        }
    yy131:
#line 80 "src/lexer.re"
    {
        return rbs_next_token(lexer, kIN);
    }
#line 1209 "src/lexer.c"
    yy132:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy190;
        goto yy54;
    yy133:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy191;
        goto yy54;
    yy134:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy193;
        goto yy54;
    yy135:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy195;
        if (yych == 'i') goto yy196;
        goto yy54;
    yy136:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'b') goto yy197;
        goto yy54;
    yy137:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy198;
        goto yy54;
    yy138:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy199;
        goto yy54;
    yy139:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy200;
        goto yy54;
    yy140:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy201;
        goto yy54;
    yy141:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy202;
        goto yy54;
    yy142:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy204;
        goto yy54;
    yy143:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy205;
        goto yy54;
    yy144:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy206;
        if (yych == 't') goto yy207;
        goto yy54;
    yy145:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy208;
        goto yy54;
    yy146:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy210;
        goto yy54;
    yy147:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy70;
            if (yych <= '9') goto yy211;
            goto yy70;
        } else {
            if (yych <= 'F') goto yy211;
            if (yych <= '`') goto yy70;
            if (yych <= 'f') goto yy211;
            goto yy70;
        }
    yy148:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '/') goto yy70;
        if (yych <= '9') goto yy68;
        if (yych <= '`') goto yy70;
        if (yych <= 'f') goto yy68;
        goto yy70;
    yy149:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy70;
        if (yych == ')') goto yy212;
        goto yy149;
    yy150:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy70;
        if (yych == '>') goto yy213;
        goto yy150;
    yy151:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy70;
        if (yych == ']') goto yy214;
        goto yy151;
    yy152:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy70;
        if (yych == '}') goto yy215;
        goto yy152;
    yy153:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy70;
        if (yych == '|') goto yy216;
        goto yy153;
    yy154:
        yyaccept = 5;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy80;
            if (yych <= '&') goto yy77;
            goto yy79;
        } else {
            if (yych == '\\') goto yy81;
            goto yy77;
        }
    yy155:
        rbs_skip(lexer);
#line 38 "src/lexer.re"
        {
            return rbs_next_token(lexer, pDOT3);
        }
#line 1355 "src/lexer.c"
    yy156:
        rbs_skip(lexer);
#line 115 "src/lexer.re"
        {
            return rbs_next_token(lexer, tDQSYMBOL);
        }
#line 1360 "src/lexer.c"
    yy157:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy217;
        if (yych == 'x') goto yy218;
        goto yy88;
    yy158:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ',') {
            if (yych <= '\f') {
                if (yych <= 0x00000000) goto yy159;
                if (yych <= 0x00000008) goto yy158;
                if (yych >= '\v') goto yy158;
            } else {
                if (yych <= 0x0000001F) {
                    if (yych >= 0x0000000E) goto yy158;
                } else {
                    if (yych == '#') goto yy158;
                }
            }
        } else {
            if (yych <= '>') {
                if (yych <= '-') goto yy158;
                if (yych <= '/') goto yy159;
                if (yych <= '9') goto yy158;
            } else {
                if (yych <= '^') {
                    if (yych <= 'Z') goto yy158;
                } else {
                    if (yych <= 'z') goto yy158;
                    if (yych >= 0x0000007F) goto yy158;
                }
            }
        }
    yy159:
#line 132 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1399 "src/lexer.c"
    yy160:
        rbs_skip(lexer);
        goto yy159;
    yy161:
        rbs_skip(lexer);
    yy162:
#line 116 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSQSYMBOL);
    }
#line 1408 "src/lexer.c"
    yy163:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy70;
            if (yych <= '&') goto yy91;
            goto yy219;
        } else {
            if (yych == '\\') goto yy163;
            goto yy91;
        }
    yy164:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '>') goto yy90;
        goto yy87;
    yy165:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy90;
        goto yy87;
    yy166:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '@') goto yy70;
            if (yych <= 'Z') goto yy220;
            goto yy70;
        } else {
            if (yych == '`') goto yy70;
            if (yych <= 'z') goto yy220;
            goto yy70;
        }
    yy167:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '/') {
                if (yych == '!') goto yy222;
            } else {
                if (yych <= '9') goto yy167;
                if (yych == '=') goto yy222;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '?') goto yy222;
                if (yych <= '@') goto yy168;
                if (yych <= 'Z') goto yy167;
            } else {
                if (yych == '`') goto yy168;
                if (yych <= 'z') goto yy167;
            }
        }
    yy168:
#line 130 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1465 "src/lexer.c"
    yy169:
        rbs_skip(lexer);
        goto yy100;
    yy170:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '/') goto yy171;
            if (yych <= '9') goto yy170;
            if (yych >= 'A') goto yy170;
        } else {
            if (yych <= '_') {
                if (yych >= '_') goto yy170;
            } else {
                if (yych <= '`') goto yy171;
                if (yych <= 'z') goto yy170;
            }
        }
    yy171:
#line 144 "src/lexer.re"
    {
        return rbs_next_token(lexer, tA2IDENT);
    }
#line 1487 "src/lexer.c"
    yy172:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy223;
        goto yy107;
    yy173:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy225;
        goto yy114;
    yy174:
        rbs_skip(lexer);
#line 40 "src/lexer.re"
        {
            return rbs_next_token(lexer, tQIDENT);
        }
#line 1502 "src/lexer.c"
    yy175:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy226;
        goto yy54;
    yy176:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy227;
        goto yy54;
    yy177:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy228;
        goto yy54;
    yy178:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy179;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy179;
                if (yych <= 'z') goto yy53;
            }
        }
    yy179:
#line 73 "src/lexer.re"
    {
        return rbs_next_token(lexer, kBOT);
    }
#line 1540 "src/lexer.c"
    yy180:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy230;
        goto yy54;
    yy181:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy182;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy182;
                if (yych <= 'z') goto yy53;
            }
        }
    yy182:
#line 76 "src/lexer.re"
    {
        return rbs_next_token(lexer, kDEF);
    }
#line 1568 "src/lexer.c"
    yy183:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy184;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy184;
                if (yych <= 'z') goto yy53;
            }
        }
    yy184:
#line 77 "src/lexer.re"
    {
        return rbs_next_token(lexer, kEND);
    }
#line 1591 "src/lexer.c"
    yy185:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy231;
        goto yy54;
    yy186:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy232;
        goto yy54;
    yy187:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy233;
        goto yy54;
    yy188:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy234;
        goto yy54;
    yy189:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy235;
        goto yy54;
    yy190:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy236;
        goto yy54;
    yy191:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy192;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy192;
                if (yych <= 'z') goto yy53;
            }
        }
    yy192:
#line 86 "src/lexer.re"
    {
        return rbs_next_token(lexer, kNIL);
    }
#line 1644 "src/lexer.c"
    yy193:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy194;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy194;
                if (yych <= 'z') goto yy53;
            }
        }
    yy194:
#line 87 "src/lexer.re"
    {
        return rbs_next_token(lexer, kOUT);
    }
#line 1667 "src/lexer.c"
    yy195:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy237;
        goto yy54;
    yy196:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'v') goto yy238;
        goto yy54;
    yy197:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy239;
        goto yy54;
    yy198:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy240;
        goto yy54;
    yy199:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy241;
        goto yy54;
    yy200:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'g') goto yy243;
        goto yy54;
    yy201:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy244;
        goto yy54;
    yy202:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy203;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy203;
                if (yych <= 'z') goto yy53;
            }
        }
    yy203:
#line 93 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTOP);
    }
#line 1725 "src/lexer.c"
    yy204:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy246;
        goto yy54;
    yy205:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy248;
        goto yy54;
    yy206:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'h') goto yy250;
        goto yy54;
    yy207:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'y') goto yy251;
        goto yy54;
    yy208:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy209;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy209;
                if (yych <= 'z') goto yy53;
            }
        }
    yy209:
#line 99 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUSE);
    }
#line 1768 "src/lexer.c"
    yy210:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy252;
        goto yy54;
    yy211:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy70;
            if (yych <= '9') goto yy254;
            goto yy70;
        } else {
            if (yych <= 'F') goto yy254;
            if (yych <= '`') goto yy70;
            if (yych <= 'f') goto yy254;
            goto yy70;
        }
    yy212:
        rbs_skip(lexer);
#line 56 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1791 "src/lexer.c"
    yy213:
        rbs_skip(lexer);
#line 59 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1796 "src/lexer.c"
    yy214:
        rbs_skip(lexer);
#line 57 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1801 "src/lexer.c"
    yy215:
        rbs_skip(lexer);
#line 55 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1806 "src/lexer.c"
    yy216:
        rbs_skip(lexer);
#line 58 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1811 "src/lexer.c"
    yy217:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy70;
            if (yych <= '9') goto yy255;
            goto yy70;
        } else {
            if (yych <= 'F') goto yy255;
            if (yych <= '`') goto yy70;
            if (yych <= 'f') goto yy255;
            goto yy70;
        }
    yy218:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '/') goto yy70;
        if (yych <= '9') goto yy88;
        if (yych <= '`') goto yy70;
        if (yych <= 'f') goto yy88;
        goto yy70;
    yy219:
        yyaccept = 6;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy162;
            if (yych <= '&') goto yy91;
            goto yy161;
        } else {
            if (yych == '\\') goto yy163;
            goto yy91;
        }
    yy220:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '/') {
                if (yych == '!') goto yy256;
            } else {
                if (yych <= '9') goto yy220;
                if (yych == '=') goto yy256;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '?') goto yy256;
                if (yych <= '@') goto yy221;
                if (yych <= 'Z') goto yy220;
            } else {
                if (yych == '`') goto yy221;
                if (yych <= 'z') goto yy220;
            }
        }
    yy221:
#line 131 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1869 "src/lexer.c"
    yy222:
        rbs_skip(lexer);
        goto yy168;
    yy223:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '/') goto yy224;
            if (yych <= '9') goto yy106;
            if (yych >= 'A') goto yy106;
        } else {
            if (yych <= '_') {
                if (yych >= '_') goto yy106;
            } else {
                if (yych <= '`') goto yy224;
                if (yych <= 'z') goto yy106;
            }
        }
    yy224:
#line 102 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATRBS);
    }
#line 1891 "src/lexer.c"
    yy225:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy257;
        goto yy114;
    yy226:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy258;
        goto yy54;
    yy227:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy260;
        goto yy54;
    yy228:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy229;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy229;
                if (yych <= 'z') goto yy53;
            }
        }
    yy229:
#line 72 "src/lexer.re"
    {
        return rbs_next_token(lexer, kBOOL);
    }
#line 1929 "src/lexer.c"
    yy230:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy261;
        goto yy54;
    yy231:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy263;
        goto yy54;
    yy232:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy264;
        goto yy54;
    yy233:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy266;
        goto yy54;
    yy234:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy267;
        goto yy54;
    yy235:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy268;
        goto yy54;
    yy236:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy269;
        goto yy54;
    yy237:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy270;
        goto yy54;
    yy238:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy271;
        goto yy54;
    yy239:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy272;
        goto yy54;
    yy240:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy273;
        goto yy54;
    yy241:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy242;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy242;
                if (yych <= 'z') goto yy53;
            }
        }
    yy242:
#line 91 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSELF);
    }
#line 2007 "src/lexer.c"
    yy243:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy274;
        goto yy54;
    yy244:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy245;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy245;
                if (yych <= 'z') goto yy53;
            }
        }
    yy245:
#line 103 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSKIP);
    }
#line 2035 "src/lexer.c"
    yy246:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy247;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy247;
                if (yych <= 'z') goto yy53;
            }
        }
    yy247:
#line 94 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTRUE);
    }
#line 2058 "src/lexer.c"
    yy248:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy249;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy249;
                if (yych <= 'z') goto yy53;
            }
        }
    yy249:
#line 95 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTYPE);
    }
#line 2081 "src/lexer.c"
    yy250:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy275;
        goto yy54;
    yy251:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy276;
        goto yy54;
    yy252:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy253;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy253;
                if (yych <= 'z') goto yy53;
            }
        }
    yy253:
#line 98 "src/lexer.re"
    {
        return rbs_next_token(lexer, kVOID);
    }
#line 2114 "src/lexer.c"
    yy254:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy70;
            if (yych <= '9') goto yy277;
            goto yy70;
        } else {
            if (yych <= 'F') goto yy277;
            if (yych <= '`') goto yy70;
            if (yych <= 'f') goto yy277;
            goto yy70;
        }
    yy255:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy70;
            if (yych <= '9') goto yy278;
            goto yy70;
        } else {
            if (yych <= 'F') goto yy278;
            if (yych <= '`') goto yy70;
            if (yych <= 'f') goto yy278;
            goto yy70;
        }
    yy256:
        rbs_skip(lexer);
        goto yy221;
    yy257:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy279;
        goto yy114;
    yy258:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy259;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy259;
                if (yych <= 'z') goto yy53;
            }
        }
    yy259:
#line 68 "src/lexer.re"
    {
        return rbs_next_token(lexer, kALIAS);
    }
#line 2171 "src/lexer.c"
    yy260:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'q') {
            if (yych == 'a') goto yy280;
            goto yy54;
        } else {
            if (yych <= 'r') goto yy281;
            if (yych == 'w') goto yy282;
            goto yy54;
        }
    yy261:
        yyaccept = 7;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '<') {
            if (yych <= ',') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '-') goto yy283;
                if (yych <= '/') goto yy262;
                if (yych <= '9') goto yy53;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '=') goto yy111;
                if (yych <= '@') goto yy262;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy262;
                if (yych <= 'z') goto yy53;
            }
        }
    yy262:
#line 74 "src/lexer.re"
    {
        return rbs_next_token(lexer, kCLASS);
    }
#line 2209 "src/lexer.c"
    yy263:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy284;
        goto yy54;
    yy264:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy265;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy265;
                if (yych <= 'z') goto yy53;
            }
        }
    yy265:
#line 79 "src/lexer.re"
    {
        return rbs_next_token(lexer, kFALSE);
    }
#line 2237 "src/lexer.c"
    yy266:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy286;
        goto yy54;
    yy267:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy287;
        goto yy54;
    yy268:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy288;
        goto yy54;
    yy269:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy289;
        goto yy54;
    yy270:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy291;
        goto yy54;
    yy271:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy292;
        goto yy54;
    yy272:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy293;
        goto yy54;
    yy273:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy295;
        goto yy54;
    yy274:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy297;
        goto yy54;
    yy275:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy298;
        goto yy54;
    yy276:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy299;
        goto yy54;
    yy277:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy70;
            if (yych <= '9') goto yy68;
            goto yy70;
        } else {
            if (yych <= 'F') goto yy68;
            if (yych <= '`') goto yy70;
            if (yych <= 'f') goto yy68;
            goto yy70;
        }
    yy278:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy70;
            if (yych <= '9') goto yy300;
            goto yy70;
        } else {
            if (yych <= 'F') goto yy300;
            if (yych <= '`') goto yy70;
            if (yych <= 'f') goto yy300;
            goto yy70;
        }
    yy279:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy301;
        goto yy114;
    yy280:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy302;
        goto yy54;
    yy281:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy303;
        goto yy54;
    yy282:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy304;
        goto yy54;
    yy283:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy305;
        goto yy70;
    yy284:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy285;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy285;
                if (yych <= 'z') goto yy53;
            }
        }
    yy285:
#line 78 "src/lexer.re"
    {
        return rbs_next_token(lexer, kEXTEND);
    }
#line 2366 "src/lexer.c"
    yy286:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy306;
        goto yy54;
    yy287:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy308;
        goto yy54;
    yy288:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy309;
        goto yy54;
    yy289:
        yyaccept = 8;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '<') {
            if (yych <= ',') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '-') goto yy310;
                if (yych <= '/') goto yy290;
                if (yych <= '9') goto yy53;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '=') goto yy111;
                if (yych <= '@') goto yy290;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy290;
                if (yych <= 'z') goto yy53;
            }
        }
    yy290:
#line 84 "src/lexer.re"
    {
        return rbs_next_token(lexer, kMODULE);
    }
#line 2408 "src/lexer.c"
    yy291:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy311;
        goto yy54;
    yy292:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy313;
        goto yy54;
    yy293:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy294;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy294;
                if (yych <= 'z') goto yy53;
            }
        }
    yy294:
#line 90 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPUBLIC);
    }
#line 2441 "src/lexer.c"
    yy295:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy296;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy296;
                if (yych <= 'z') goto yy53;
            }
        }
    yy296:
#line 104 "src/lexer.re"
    {
        return rbs_next_token(lexer, kRETURN);
    }
#line 2464 "src/lexer.c"
    yy297:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy315;
        goto yy54;
    yy298:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'k') goto yy316;
        goto yy54;
    yy299:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy317;
        goto yy54;
    yy300:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy70;
            if (yych <= '9') goto yy88;
            goto yy70;
        } else {
            if (yych <= 'F') goto yy88;
            if (yych <= '`') goto yy70;
            if (yych <= 'f') goto yy88;
            goto yy70;
        }
    yy301:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy319;
        goto yy114;
    yy302:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy321;
        goto yy54;
    yy303:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy322;
        goto yy54;
    yy304:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy323;
        goto yy54;
    yy305:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy324;
        goto yy70;
    yy306:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy307;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy307;
                if (yych <= 'z') goto yy53;
            }
        }
    yy307:
#line 81 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINCLUDE);
    }
#line 2540 "src/lexer.c"
    yy308:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy325;
        goto yy54;
    yy309:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy327;
        goto yy54;
    yy310:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy328;
        goto yy70;
    yy311:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy312;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy312;
                if (yych <= 'z') goto yy53;
            }
        }
    yy312:
#line 88 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPREPEND);
    }
#line 2578 "src/lexer.c"
    yy313:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy314;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy314;
                if (yych <= 'z') goto yy53;
            }
        }
    yy314:
#line 89 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPRIVATE);
    }
#line 2601 "src/lexer.c"
    yy315:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy329;
        goto yy54;
    yy316:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy330;
        goto yy54;
    yy317:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy318;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy318;
                if (yych <= 'z') goto yy53;
            }
        }
    yy318:
#line 97 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUNTYPED);
    }
#line 2634 "src/lexer.c"
    yy319:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy113;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy320;
                if (yych <= 'Z') goto yy113;
            } else {
                if (yych == '`') goto yy320;
                if (yych <= 'z') goto yy113;
            }
        }
    yy320:
#line 101 "src/lexer.re"
    {
        return rbs_next_token(lexer, k__TODO__);
    }
#line 2657 "src/lexer.c"
    yy321:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy331;
        goto yy54;
    yy322:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy332;
        goto yy54;
    yy323:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy333;
        goto yy54;
    yy324:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy334;
        goto yy70;
    yy325:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy326;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy326;
                if (yych <= 'z') goto yy53;
            }
        }
    yy326:
#line 82 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINSTANCE);
    }
#line 2700 "src/lexer.c"
    yy327:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy335;
        goto yy54;
    yy328:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy337;
        goto yy70;
    yy329:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy338;
        goto yy54;
    yy330:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy340;
        goto yy54;
    yy331:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy342;
        goto yy54;
    yy332:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy343;
        goto yy54;
    yy333:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy344;
        goto yy54;
    yy334:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy345;
        goto yy70;
    yy335:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy336;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy336;
                if (yych <= 'z') goto yy53;
            }
        }
    yy336:
#line 83 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINTERFACE);
    }
#line 2763 "src/lexer.c"
    yy337:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy346;
        goto yy70;
    yy338:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy339;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy339;
                if (yych <= 'z') goto yy53;
            }
        }
    yy339:
#line 92 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSINGLETON);
    }
#line 2791 "src/lexer.c"
    yy340:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy341;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy341;
                if (yych <= 'z') goto yy53;
            }
        }
    yy341:
#line 96 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUNCHECKED);
    }
#line 2814 "src/lexer.c"
    yy342:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy347;
        goto yy54;
    yy343:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy348;
        goto yy54;
    yy344:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy350;
        goto yy54;
    yy345:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy352;
        goto yy70;
    yy346:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy353;
        goto yy70;
    yy347:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy354;
        goto yy54;
    yy348:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy349;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy349;
                if (yych <= 'z') goto yy53;
            }
        }
    yy349:
#line 70 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRREADER);
    }
#line 2867 "src/lexer.c"
    yy350:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy351;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy351;
                if (yych <= 'z') goto yy53;
            }
        }
    yy351:
#line 71 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRWRITER);
    }
#line 2890 "src/lexer.c"
    yy352:
        rbs_skip(lexer);
#line 75 "src/lexer.re"
        {
            return rbs_next_token(lexer, kCLASSALIAS);
        }
#line 2895 "src/lexer.c"
    yy353:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy355;
        goto yy70;
    yy354:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy356;
        goto yy54;
    yy355:
        rbs_skip(lexer);
#line 85 "src/lexer.re"
        {
            return rbs_next_token(lexer, kMODULEALIAS);
        }
#line 2910 "src/lexer.c"
    yy356:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy110;
            } else {
                if (yych <= '9') goto yy53;
                if (yych >= '=') goto yy111;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy357;
                if (yych <= 'Z') goto yy53;
            } else {
                if (yych == '`') goto yy357;
                if (yych <= 'z') goto yy53;
            }
        }
    yy357:
#line 69 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRACCESSOR);
    }
#line 2933 "src/lexer.c"
    }
#line 153 "src/lexer.re"
}
