/* 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 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 'r':
        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 's':
            goto yy59;
        case 't':
            goto yy60;
        case 'u':
            goto yy61;
        case 'v':
            goto yy62;
        case '{':
            goto yy63;
        case '|':
            goto yy64;
        case '}':
            goto yy65;
        default:
            goto yy2;
        }
    yy1:
        rbs_skip(lexer);
#line 144 "src/lexer.re"
        {
            return rbs_next_eof_token(lexer);
        }
#line 121 "src/lexer.c"
    yy2:
        rbs_skip(lexer);
    yy3:
#line 145 "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 143 "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 yy67;
    yy10:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy11;
        if (yych != '\n') goto yy10;
    yy11:
#line 59 "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 yy71;
                    goto yy3;
                } else {
                    if (yych == '\r') goto yy3;
                    goto yy71;
                }
            } else {
                if (yych <= '#') {
                    if (yych <= ' ') goto yy3;
                    if (yych <= '"') goto yy73;
                    goto yy71;
                } else {
                    if (yych == '%') goto yy3;
                    if (yych <= '\'') goto yy73;
                    goto yy3;
                }
            }
        } else {
            if (yych <= 'Z') {
                if (yych <= '/') {
                    if (yych == '-') goto yy71;
                    goto yy73;
                } else {
                    if (yych <= '9') goto yy71;
                    if (yych <= '>') goto yy73;
                    goto yy71;
                }
            } else {
                if (yych <= '^') {
                    if (yych == '\\') goto yy73;
                    goto yy3;
                } else {
                    if (yych <= 'z') goto yy71;
                    if (yych <= '}') goto yy3;
                    if (yych <= '~') goto yy73;
                    goto yy71;
                }
            }
        }
    yy13:
        yyaccept = 1;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy74;
        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 yy76;
    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 yy80;
#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);
        if (yych <= '=') {
            if (yych <= '/') goto yy8;
            if (yych <= '9') goto yy25;
            goto yy8;
        } else {
            if (yych <= '>') goto yy81;
            if (yych == '@') goto yy24;
            goto yy8;
        }
    yy22:
        yyaccept = 2;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych == '.') goto yy82;
    yy23:
#line 37 "src/lexer.re"
    {
        return rbs_next_token(lexer, pDOT);
    }
#line 285 "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 51 "src/lexer.re"
    {
        return rbs_next_token(lexer, tINTEGER);
    }
#line 298 "src/lexer.c"
    yy27:
        yyaccept = 3;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        switch (yych) {
        case '!':
            goto yy83;
        case '"':
            goto yy85;
        case '$':
            goto yy86;
        case '%':
        case '&':
        case '/':
        case '^':
        case '`':
        case '|':
        case '~':
            goto yy87;
        case '\'':
            goto yy88;
        case '*':
            goto yy89;
        case '+':
        case '-':
            goto yy90;
        case ':':
            goto yy91;
        case '<':
            goto yy92;
        case '=':
            goto yy93;
        case '>':
            goto yy94;
        case '@':
            goto yy95;
        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 yy96;
        case '[':
            goto yy98;
        default:
            goto yy28;
        }
    yy28:
#line 44 "src/lexer.re"
    {
        return rbs_next_token(lexer, pCOLON);
    }
#line 383 "src/lexer.c"
    yy29:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ';') goto yy30;
        if (yych <= '<') goto yy24;
        if (yych <= '=') goto yy99;
    yy30:
#line 46 "src/lexer.re"
    {
        return rbs_next_token(lexer, pLT);
    }
#line 393 "src/lexer.c"
    yy31:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '<') goto yy32;
            if (yych <= '=') goto yy100;
            goto yy101;
        } else {
            if (yych == '~') goto yy24;
        }
    yy32:
#line 43 "src/lexer.re"
    {
        return rbs_next_token(lexer, pEQ);
    }
#line 407 "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 418 "src/lexer.c"
    yy35:
        yyaccept = 0;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '?') goto yy3;
            if (yych <= '@') goto yy102;
            if (yych <= 'Z') goto yy103;
            goto yy3;
        } else {
            if (yych == '`') goto yy3;
            if (yych <= 'z') goto yy103;
            goto yy3;
        }
    yy36:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy36;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy37;
                if (yych <= 'Z') goto yy36;
            } else {
                if (yych == '`') goto yy37;
                if (yych <= 'z') goto yy36;
            }
        }
    yy37:
#line 129 "src/lexer.re"
    {
        return rbs_next_token(lexer, tUIDENT);
    }
#line 456 "src/lexer.c"
    yy38:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == ']') goto yy107;
#line 26 "src/lexer.re"
        {
            return rbs_next_token(lexer, pLBRACKET);
        }
#line 463 "src/lexer.c"
    yy39:
        rbs_skip(lexer);
#line 27 "src/lexer.re"
        {
            return rbs_next_token(lexer, pRBRACKET);
        }
#line 468 "src/lexer.c"
    yy40:
        rbs_skip(lexer);
#line 32 "src/lexer.re"
        {
            return rbs_next_token(lexer, pHAT);
        }
#line 473 "src/lexer.c"
    yy41:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy108;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy42;
                if (yych <= 'Z') goto yy111;
            } else {
                if (yych <= '_') goto yy113;
                if (yych <= '`') goto yy42;
                if (yych <= 'z') goto yy108;
            }
        }
    yy42:
#line 132 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULLIDENT);
    }
#line 497 "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 yy114;
        } else {
            if (yych != ':') goto yy114;
        }
    yy44:
#line 39 "src/lexer.re"
    {
        return rbs_next_token(lexer, tOPERATOR);
    }
#line 512 "src/lexer.c"
    yy45:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'r') {
            if (yych == 'l') goto yy115;
            goto yy53;
        } else {
            if (yych <= 's') goto yy116;
            if (yych <= 't') goto yy118;
            goto yy53;
        }
    yy46:
#line 128 "src/lexer.re"
    {
        return rbs_next_token(lexer, tLIDENT);
    }
#line 527 "src/lexer.c"
    yy47:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy119;
        goto yy53;
    yy48:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy120;
        goto yy53;
    yy49:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy121;
        goto yy53;
    yy50:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy122;
        if (yych == 'x') goto yy123;
        goto yy53;
    yy51:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy124;
        goto yy53;
    yy52:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy53:
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
                goto yy46;
            } else {
                if (yych <= '9') goto yy52;
                if (yych <= '<') goto yy46;
                goto yy106;
            }
        } 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 yy125;
        goto yy53;
    yy55:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy127;
        goto yy53;
    yy56:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy128;
        goto yy53;
    yy57:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy129;
        goto yy53;
    yy58:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy130;
        if (yych == 'u') goto yy131;
        goto yy53;
    yy59:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy132;
        if (yych == 'i') goto yy133;
        goto yy53;
    yy60:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'q') {
            if (yych == 'o') goto yy134;
            goto yy53;
        } else {
            if (yych <= 'r') goto yy135;
            if (yych == 'y') goto yy136;
            goto yy53;
        }
    yy61:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy137;
        if (yych == 's') goto yy138;
        goto yy53;
    yy62:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy139;
        goto yy53;
    yy63:
        rbs_skip(lexer);
#line 28 "src/lexer.re"
        {
            return rbs_next_token(lexer, pLBRACE);
        }
#line 636 "src/lexer.c"
    yy64:
        rbs_skip(lexer);
#line 31 "src/lexer.re"
        {
            return rbs_next_token(lexer, pBAR);
        }
#line 641 "src/lexer.c"
    yy65:
        rbs_skip(lexer);
#line 29 "src/lexer.re"
        {
            return rbs_next_token(lexer, pRBRACE);
        }
#line 646 "src/lexer.c"
    yy66:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy67:
        if (yych <= '"') {
            if (yych <= 0x00000000) goto yy68;
            if (yych <= '!') goto yy66;
            goto yy69;
        } else {
            if (yych == '\\') goto yy70;
            goto yy66;
        }
    yy68:
        *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 yy78;
            } else {
                goto yy155;
            }
        }
    yy69:
        rbs_skip(lexer);
#line 106 "src/lexer.re"
        {
            return rbs_next_token(lexer, tDQSTRING);
        }
#line 681 "src/lexer.c"
    yy70:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy140;
        if (yych == 'x') goto yy141;
        goto yy66;
    yy71:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ',') {
            if (yych <= '\f') {
                if (yych <= 0x00000000) goto yy72;
                if (yych <= 0x00000008) goto yy71;
                if (yych >= '\v') goto yy71;
            } else {
                if (yych <= 0x0000001F) {
                    if (yych >= 0x0000000E) goto yy71;
                } else {
                    if (yych == '#') goto yy71;
                }
            }
        } else {
            if (yych <= '>') {
                if (yych <= '-') goto yy71;
                if (yych <= '/') goto yy72;
                if (yych <= '9') goto yy71;
            } else {
                if (yych <= '^') {
                    if (yych <= 'Z') goto yy71;
                } else {
                    if (yych <= 'z') goto yy71;
                    if (yych >= 0x0000007F) goto yy71;
                }
            }
        }
    yy72:
#line 139 "src/lexer.re"
    {
        return rbs_next_token(lexer, tGIDENT);
    }
#line 720 "src/lexer.c"
    yy73:
        rbs_skip(lexer);
        goto yy72;
    yy74:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '(') {
                if (yych <= '\'') goto yy68;
                goto yy142;
            } else {
                if (yych == '<') goto yy143;
                goto yy68;
            }
        } else {
            if (yych <= 'z') {
                if (yych <= '[') goto yy144;
                goto yy68;
            } else {
                if (yych <= '{') goto yy145;
                if (yych <= '|') goto yy146;
                goto yy68;
            }
        }
    yy75:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy76:
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy68;
            if (yych <= '&') goto yy75;
        } else {
            if (yych == '\\') goto yy79;
            goto yy75;
        }
    yy77:
        rbs_skip(lexer);
    yy78:
#line 107 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSQSTRING);
    }
#line 761 "src/lexer.c"
    yy79:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy68;
            if (yych <= '&') goto yy75;
            goto yy147;
        } else {
            if (yych == '\\') goto yy79;
            goto yy75;
        }
    yy80:
        rbs_skip(lexer);
#line 36 "src/lexer.re"
        {
            return rbs_next_token(lexer, pSTAR2);
        }
#line 777 "src/lexer.c"
    yy81:
        rbs_skip(lexer);
#line 41 "src/lexer.re"
        {
            return rbs_next_token(lexer, pARROW);
        }
#line 782 "src/lexer.c"
    yy82:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '.') goto yy148;
        goto yy68;
    yy83:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy87;
        if (yych == '~') goto yy87;
    yy84:
#line 126 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 796 "src/lexer.c"
    yy85:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '"') {
            if (yych <= 0x00000000) goto yy68;
            if (yych <= '!') goto yy85;
            goto yy149;
        } else {
            if (yych == '\\') goto yy150;
            goto yy85;
        }
    yy86:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ')') {
            if (yych <= 0x0000001F) {
                if (yych <= '\n') {
                    if (yych <= 0x00000000) goto yy68;
                    if (yych <= 0x00000008) goto yy151;
                    goto yy68;
                } else {
                    if (yych == '\r') goto yy68;
                    goto yy151;
                }
            } else {
                if (yych <= '#') {
                    if (yych <= ' ') goto yy68;
                    if (yych <= '"') goto yy153;
                    goto yy151;
                } else {
                    if (yych == '%') goto yy68;
                    if (yych <= '\'') goto yy153;
                    goto yy68;
                }
            }
        } else {
            if (yych <= 'Z') {
                if (yych <= '/') {
                    if (yych == '-') goto yy151;
                    goto yy153;
                } else {
                    if (yych <= '9') goto yy151;
                    if (yych <= '>') goto yy153;
                    goto yy151;
                }
            } else {
                if (yych <= '^') {
                    if (yych == '\\') goto yy153;
                    goto yy68;
                } else {
                    if (yych <= 'z') goto yy151;
                    if (yych <= '}') goto yy68;
                    if (yych <= '~') goto yy153;
                    goto yy151;
                }
            }
        }
    yy87:
        rbs_skip(lexer);
        goto yy84;
    yy88:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy68;
            if (yych <= '&') goto yy88;
            goto yy154;
        } else {
            if (yych == '\\') goto yy156;
            goto yy88;
        }
    yy89:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '*') goto yy87;
        goto yy84;
    yy90:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '@') goto yy87;
        goto yy84;
    yy91:
        rbs_skip(lexer);
#line 45 "src/lexer.re"
        {
            return rbs_next_token(lexer, pCOLON2);
        }
#line 882 "src/lexer.c"
    yy92:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ';') goto yy84;
        if (yych <= '<') goto yy87;
        if (yych <= '=') goto yy157;
        goto yy84;
    yy93:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy158;
        if (yych == '~') goto yy87;
        goto yy68;
    yy94:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '<') goto yy84;
        if (yych <= '>') goto yy87;
        goto yy84;
    yy95:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '?') goto yy68;
            if (yych <= '@') goto yy159;
            if (yych <= 'Z') goto yy160;
            goto yy68;
        } else {
            if (yych == '`') goto yy68;
            if (yych <= 'z') goto yy160;
            goto yy68;
        }
    yy96:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '/') {
                if (yych == '!') goto yy162;
            } else {
                if (yych <= '9') goto yy96;
                if (yych == '=') goto yy162;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '?') goto yy162;
                if (yych <= '@') goto yy97;
                if (yych <= 'Z') goto yy96;
            } else {
                if (yych == '`') goto yy97;
                if (yych <= 'z') goto yy96;
            }
        }
    yy97:
#line 122 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 938 "src/lexer.c"
    yy98:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == ']') goto yy158;
        goto yy68;
    yy99:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '>') goto yy24;
        goto yy8;
    yy100:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy24;
        goto yy8;
    yy101:
        rbs_skip(lexer);
#line 42 "src/lexer.re"
        {
            return rbs_next_token(lexer, pFATARROW);
        }
#line 958 "src/lexer.c"
    yy102:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '@') goto yy68;
            if (yych <= 'Z') goto yy163;
            goto yy68;
        } else {
            if (yych == '`') goto yy68;
            if (yych <= 'z') goto yy163;
            goto yy68;
        }
    yy103:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '/') goto yy104;
            if (yych <= '9') goto yy103;
            if (yych >= 'A') goto yy103;
        } else {
            if (yych <= '_') {
                if (yych >= '_') goto yy103;
            } else {
                if (yych <= '`') goto yy104;
                if (yych <= 'z') goto yy103;
            }
        }
    yy104:
#line 136 "src/lexer.re"
    {
        return rbs_next_token(lexer, tAIDENT);
    }
#line 989 "src/lexer.c"
    yy105:
        rbs_skip(lexer);
#line 133 "src/lexer.re"
        {
            return rbs_next_token(lexer, tBANGIDENT);
        }
#line 994 "src/lexer.c"
    yy106:
        rbs_skip(lexer);
#line 134 "src/lexer.re"
        {
            return rbs_next_token(lexer, tEQIDENT);
        }
#line 999 "src/lexer.c"
    yy107:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy24;
#line 47 "src/lexer.re"
        {
            return rbs_next_token(lexer, pAREF_OPR);
        }
#line 1006 "src/lexer.c"
    yy108:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy109:
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy108;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy110;
                if (yych <= 'Z') goto yy108;
            } else {
                if (yych == '`') goto yy110;
                if (yych <= 'z') goto yy108;
            }
        }
    yy110:
#line 130 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULLIDENT);
    }
#line 1030 "src/lexer.c"
    yy111:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy111;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy112;
                if (yych <= 'Z') goto yy111;
            } else {
                if (yych == '`') goto yy112;
                if (yych <= 'z') goto yy111;
            }
        }
    yy112:
#line 131 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULIDENT);
    }
#line 1053 "src/lexer.c"
    yy113:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy165;
        goto yy109;
    yy114:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy68;
        if (yych == '`') goto yy166;
        goto yy114;
    yy115:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy167;
        goto yy53;
    yy116:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy117;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy117;
                if (yych <= 'z') goto yy52;
            }
        }
    yy117:
#line 96 "src/lexer.re"
    {
        return rbs_next_token(lexer, kAS);
    }
#line 1092 "src/lexer.c"
    yy118:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy168;
        goto yy53;
    yy119:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy169;
        if (yych == 't') goto yy170;
        goto yy53;
    yy120:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy172;
        goto yy53;
    yy121:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy173;
        goto yy53;
    yy122:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy175;
        goto yy53;
    yy123:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy177;
        goto yy53;
    yy124:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy178;
        goto yy53;
    yy125:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '9') {
                if (yych == '!') goto yy105;
                if (yych >= '0') goto yy52;
            } else {
                if (yych <= '=') {
                    if (yych >= '=') goto yy106;
                } else {
                    if (yych <= '@') goto yy126;
                    if (yych <= 'Z') goto yy52;
                }
            }
        } else {
            if (yych <= 'c') {
                if (yych == '`') goto yy126;
                if (yych <= 'b') goto yy52;
                goto yy179;
            } else {
                if (yych <= 's') {
                    if (yych <= 'r') goto yy52;
                    goto yy180;
                } else {
                    if (yych <= 't') goto yy181;
                    if (yych <= 'z') goto yy52;
                }
            }
        }
    yy126:
#line 77 "src/lexer.re"
    {
        return rbs_next_token(lexer, kIN);
    }
#line 1162 "src/lexer.c"
    yy127:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy182;
        goto yy53;
    yy128:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy183;
        goto yy53;
    yy129:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy185;
        goto yy53;
    yy130:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy187;
        if (yych == 'i') goto yy188;
        goto yy53;
    yy131:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'b') 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 == 'n') goto yy191;
        goto yy53;
    yy134:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy192;
        goto yy53;
    yy135:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy194;
        goto yy53;
    yy136:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy195;
        goto yy53;
    yy137:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy196;
        if (yych == 't') goto yy197;
        goto yy53;
    yy138:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy198;
        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 <= '@') {
            if (yych <= '/') goto yy68;
            if (yych <= '9') goto yy201;
            goto yy68;
        } else {
            if (yych <= 'F') goto yy201;
            if (yych <= '`') goto yy68;
            if (yych <= 'f') goto yy201;
            goto yy68;
        }
    yy141:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '/') goto yy68;
        if (yych <= '9') goto yy66;
        if (yych <= '`') goto yy68;
        if (yych <= 'f') goto yy66;
        goto yy68;
    yy142:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy68;
        if (yych == ')') goto yy202;
        goto yy142;
    yy143:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy68;
        if (yych == '>') goto yy203;
        goto yy143;
    yy144:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy68;
        if (yych == ']') goto yy204;
        goto yy144;
    yy145:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy68;
        if (yych == '}') goto yy205;
        goto yy145;
    yy146:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy68;
        if (yych == '|') goto yy206;
        goto yy146;
    yy147:
        yyaccept = 5;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy78;
            if (yych <= '&') goto yy75;
            goto yy77;
        } else {
            if (yych == '\\') goto yy79;
            goto yy75;
        }
    yy148:
        rbs_skip(lexer);
#line 38 "src/lexer.re"
        {
            return rbs_next_token(lexer, pDOT3);
        }
#line 1298 "src/lexer.c"
    yy149:
        rbs_skip(lexer);
#line 108 "src/lexer.re"
        {
            return rbs_next_token(lexer, tDQSYMBOL);
        }
#line 1303 "src/lexer.c"
    yy150:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy207;
        if (yych == 'x') goto yy208;
        goto yy85;
    yy151:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ',') {
            if (yych <= '\f') {
                if (yych <= 0x00000000) goto yy152;
                if (yych <= 0x00000008) goto yy151;
                if (yych >= '\v') goto yy151;
            } else {
                if (yych <= 0x0000001F) {
                    if (yych >= 0x0000000E) goto yy151;
                } else {
                    if (yych == '#') goto yy151;
                }
            }
        } else {
            if (yych <= '>') {
                if (yych <= '-') goto yy151;
                if (yych <= '/') goto yy152;
                if (yych <= '9') goto yy151;
            } else {
                if (yych <= '^') {
                    if (yych <= 'Z') goto yy151;
                } else {
                    if (yych <= 'z') goto yy151;
                    if (yych >= 0x0000007F) goto yy151;
                }
            }
        }
    yy152:
#line 125 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1342 "src/lexer.c"
    yy153:
        rbs_skip(lexer);
        goto yy152;
    yy154:
        rbs_skip(lexer);
    yy155:
#line 109 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSQSYMBOL);
    }
#line 1351 "src/lexer.c"
    yy156:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy68;
            if (yych <= '&') goto yy88;
            goto yy209;
        } else {
            if (yych == '\\') goto yy156;
            goto yy88;
        }
    yy157:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '>') goto yy87;
        goto yy84;
    yy158:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy87;
        goto yy84;
    yy159:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '^') {
            if (yych <= '@') goto yy68;
            if (yych <= 'Z') goto yy210;
            goto yy68;
        } else {
            if (yych == '`') goto yy68;
            if (yych <= 'z') goto yy210;
            goto yy68;
        }
    yy160:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '/') {
                if (yych == '!') goto yy212;
            } else {
                if (yych <= '9') goto yy160;
                if (yych == '=') goto yy212;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '?') goto yy212;
                if (yych <= '@') goto yy161;
                if (yych <= 'Z') goto yy160;
            } else {
                if (yych == '`') goto yy161;
                if (yych <= 'z') goto yy160;
            }
        }
    yy161:
#line 123 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1408 "src/lexer.c"
    yy162:
        rbs_skip(lexer);
        goto yy97;
    yy163:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '/') goto yy164;
            if (yych <= '9') goto yy163;
            if (yych >= 'A') goto yy163;
        } else {
            if (yych <= '_') {
                if (yych >= '_') goto yy163;
            } else {
                if (yych <= '`') goto yy164;
                if (yych <= 'z') goto yy163;
            }
        }
    yy164:
#line 137 "src/lexer.re"
    {
        return rbs_next_token(lexer, tA2IDENT);
    }
#line 1430 "src/lexer.c"
    yy165:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy213;
        goto yy109;
    yy166:
        rbs_skip(lexer);
#line 40 "src/lexer.re"
        {
            return rbs_next_token(lexer, tQIDENT);
        }
#line 1440 "src/lexer.c"
    yy167:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy214;
        goto yy53;
    yy168:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy215;
        goto yy53;
    yy169:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy216;
        goto yy53;
    yy170:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy171;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy171;
                if (yych <= 'z') goto yy52;
            }
        }
    yy171:
#line 71 "src/lexer.re"
    {
        return rbs_next_token(lexer, kBOT);
    }
#line 1478 "src/lexer.c"
    yy172:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy218;
        goto yy53;
    yy173:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy174;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy174;
                if (yych <= 'z') goto yy52;
            }
        }
    yy174:
#line 73 "src/lexer.re"
    {
        return rbs_next_token(lexer, kDEF);
    }
#line 1506 "src/lexer.c"
    yy175:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy176;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy176;
                if (yych <= 'z') goto yy52;
            }
        }
    yy176:
#line 74 "src/lexer.re"
    {
        return rbs_next_token(lexer, kEND);
    }
#line 1529 "src/lexer.c"
    yy177:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy219;
        goto yy53;
    yy178:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy220;
        goto yy53;
    yy179:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy221;
        goto yy53;
    yy180:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy222;
        goto yy53;
    yy181:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy223;
        goto yy53;
    yy182:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy224;
        goto yy53;
    yy183:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy184;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy184;
                if (yych <= 'z') goto yy52;
            }
        }
    yy184:
#line 82 "src/lexer.re"
    {
        return rbs_next_token(lexer, kNIL);
    }
#line 1582 "src/lexer.c"
    yy185:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy186;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy186;
                if (yych <= 'z') goto yy52;
            }
        }
    yy186:
#line 83 "src/lexer.re"
    {
        return rbs_next_token(lexer, kOUT);
    }
#line 1605 "src/lexer.c"
    yy187:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy225;
        goto yy53;
    yy188:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'v') goto yy226;
        goto yy53;
    yy189:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy227;
        goto yy53;
    yy190:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy228;
        goto yy53;
    yy191:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'g') goto yy230;
        goto yy53;
    yy192:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy193;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy193;
                if (yych <= 'z') goto yy52;
            }
        }
    yy193:
#line 89 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTOP);
    }
#line 1653 "src/lexer.c"
    yy194:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy231;
        goto yy53;
    yy195:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy233;
        goto yy53;
    yy196:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'h') goto yy235;
        goto yy53;
    yy197:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'y') goto yy236;
        goto yy53;
    yy198:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy199;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy199;
                if (yych <= 'z') goto yy52;
            }
        }
    yy199:
#line 95 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUSE);
    }
#line 1696 "src/lexer.c"
    yy200:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy237;
        goto yy53;
    yy201:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy68;
            if (yych <= '9') goto yy239;
            goto yy68;
        } else {
            if (yych <= 'F') goto yy239;
            if (yych <= '`') goto yy68;
            if (yych <= 'f') goto yy239;
            goto yy68;
        }
    yy202:
        rbs_skip(lexer);
#line 54 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1719 "src/lexer.c"
    yy203:
        rbs_skip(lexer);
#line 57 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1724 "src/lexer.c"
    yy204:
        rbs_skip(lexer);
#line 55 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1729 "src/lexer.c"
    yy205:
        rbs_skip(lexer);
#line 53 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1734 "src/lexer.c"
    yy206:
        rbs_skip(lexer);
#line 56 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1739 "src/lexer.c"
    yy207:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy68;
            if (yych <= '9') goto yy240;
            goto yy68;
        } else {
            if (yych <= 'F') goto yy240;
            if (yych <= '`') goto yy68;
            if (yych <= 'f') goto yy240;
            goto yy68;
        }
    yy208:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '/') goto yy68;
        if (yych <= '9') goto yy85;
        if (yych <= '`') goto yy68;
        if (yych <= 'f') goto yy85;
        goto yy68;
    yy209:
        yyaccept = 6;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy155;
            if (yych <= '&') goto yy88;
            goto yy154;
        } else {
            if (yych == '\\') goto yy156;
            goto yy88;
        }
    yy210:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '/') {
                if (yych == '!') goto yy241;
            } else {
                if (yych <= '9') goto yy210;
                if (yych == '=') goto yy241;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '?') goto yy241;
                if (yych <= '@') goto yy211;
                if (yych <= 'Z') goto yy210;
            } else {
                if (yych == '`') goto yy211;
                if (yych <= 'z') goto yy210;
            }
        }
    yy211:
#line 124 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1797 "src/lexer.c"
    yy212:
        rbs_skip(lexer);
        goto yy161;
    yy213:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy242;
        goto yy109;
    yy214:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy243;
        goto yy53;
    yy215:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy245;
        goto yy53;
    yy216:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy217;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy217;
                if (yych <= 'z') goto yy52;
            }
        }
    yy217:
#line 70 "src/lexer.re"
    {
        return rbs_next_token(lexer, kBOOL);
    }
#line 1838 "src/lexer.c"
    yy218:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy246;
        goto yy53;
    yy219:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy248;
        goto yy53;
    yy220:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy249;
        goto yy53;
    yy221:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy251;
        goto yy53;
    yy222:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy252;
        goto yy53;
    yy223:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy253;
        goto yy53;
    yy224:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy254;
        goto yy53;
    yy225:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy255;
        goto yy53;
    yy226:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy256;
        goto yy53;
    yy227:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy257;
        goto yy53;
    yy228:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy229;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy229;
                if (yych <= 'z') goto yy52;
            }
        }
    yy229:
#line 87 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSELF);
    }
#line 1911 "src/lexer.c"
    yy230:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy258;
        goto yy53;
    yy231:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy232;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy232;
                if (yych <= 'z') goto yy52;
            }
        }
    yy232:
#line 90 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTRUE);
    }
#line 1939 "src/lexer.c"
    yy233:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy234;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy234;
                if (yych <= 'z') goto yy52;
            }
        }
    yy234:
#line 91 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTYPE);
    }
#line 1962 "src/lexer.c"
    yy235:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy259;
        goto yy53;
    yy236:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy260;
        goto yy53;
    yy237:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy238;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy238;
                if (yych <= 'z') goto yy52;
            }
        }
    yy238:
#line 94 "src/lexer.re"
    {
        return rbs_next_token(lexer, kVOID);
    }
#line 1995 "src/lexer.c"
    yy239:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy68;
            if (yych <= '9') goto yy261;
            goto yy68;
        } else {
            if (yych <= 'F') goto yy261;
            if (yych <= '`') goto yy68;
            if (yych <= 'f') goto yy261;
            goto yy68;
        }
    yy240:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy68;
            if (yych <= '9') goto yy262;
            goto yy68;
        } else {
            if (yych <= 'F') goto yy262;
            if (yych <= '`') goto yy68;
            if (yych <= 'f') goto yy262;
            goto yy68;
        }
    yy241:
        rbs_skip(lexer);
        goto yy211;
    yy242:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy263;
        goto yy109;
    yy243:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy244;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy244;
                if (yych <= 'z') goto yy52;
            }
        }
    yy244:
#line 66 "src/lexer.re"
    {
        return rbs_next_token(lexer, kALIAS);
    }
#line 2052 "src/lexer.c"
    yy245:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'q') {
            if (yych == 'a') goto yy264;
            goto yy53;
        } else {
            if (yych <= 'r') goto yy265;
            if (yych == 'w') goto yy266;
            goto yy53;
        }
    yy246:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy247;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy247;
                if (yych <= 'z') goto yy52;
            }
        }
    yy247:
#line 72 "src/lexer.re"
    {
        return rbs_next_token(lexer, kCLASS);
    }
#line 2086 "src/lexer.c"
    yy248:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy267;
        goto yy53;
    yy249:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy250;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy250;
                if (yych <= 'z') goto yy52;
            }
        }
    yy250:
#line 76 "src/lexer.re"
    {
        return rbs_next_token(lexer, kFALSE);
    }
#line 2114 "src/lexer.c"
    yy251:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy269;
        goto yy53;
    yy252:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy270;
        goto yy53;
    yy253:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy271;
        goto yy53;
    yy254:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy272;
        goto yy53;
    yy255:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy274;
        goto yy53;
    yy256:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy275;
        goto yy53;
    yy257:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy276;
        goto yy53;
    yy258:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy278;
        goto yy53;
    yy259:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy279;
        goto yy53;
    yy260:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy280;
        goto yy53;
    yy261:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy68;
            if (yych <= '9') goto yy66;
            goto yy68;
        } else {
            if (yych <= 'F') goto yy66;
            if (yych <= '`') goto yy68;
            if (yych <= 'f') goto yy66;
            goto yy68;
        }
    yy262:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy68;
            if (yych <= '9') goto yy281;
            goto yy68;
        } else {
            if (yych <= 'F') goto yy281;
            if (yych <= '`') goto yy68;
            if (yych <= 'f') goto yy281;
            goto yy68;
        }
    yy263:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy282;
        goto yy109;
    yy264:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy283;
        goto yy53;
    yy265:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy284;
        goto yy53;
    yy266:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy285;
        goto yy53;
    yy267:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy268;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy268;
                if (yych <= 'z') goto yy52;
            }
        }
    yy268:
#line 75 "src/lexer.re"
    {
        return rbs_next_token(lexer, kEXTEND);
    }
#line 2233 "src/lexer.c"
    yy269:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy286;
        goto yy53;
    yy270:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy288;
        goto yy53;
    yy271:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy289;
        goto yy53;
    yy272:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy273;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy273;
                if (yych <= 'z') goto yy52;
            }
        }
    yy273:
#line 81 "src/lexer.re"
    {
        return rbs_next_token(lexer, kMODULE);
    }
#line 2271 "src/lexer.c"
    yy274:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy290;
        goto yy53;
    yy275:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy292;
        goto yy53;
    yy276:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy277;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy277;
                if (yych <= 'z') goto yy52;
            }
        }
    yy277:
#line 86 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPUBLIC);
    }
#line 2304 "src/lexer.c"
    yy278:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy294;
        goto yy53;
    yy279:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'k') goto yy295;
        goto yy53;
    yy280:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy296;
        goto yy53;
    yy281:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy68;
            if (yych <= '9') goto yy85;
            goto yy68;
        } else {
            if (yych <= 'F') goto yy85;
            if (yych <= '`') goto yy68;
            if (yych <= 'f') goto yy85;
            goto yy68;
        }
    yy282:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy298;
        goto yy109;
    yy283:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy300;
        goto yy53;
    yy284:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy301;
        goto yy53;
    yy285:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy302;
        goto yy53;
    yy286:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy287;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy287;
                if (yych <= 'z') goto yy52;
            }
        }
    yy287:
#line 78 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINCLUDE);
    }
#line 2375 "src/lexer.c"
    yy288:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy303;
        goto yy53;
    yy289:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy305;
        goto yy53;
    yy290:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy291;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy291;
                if (yych <= 'z') goto yy52;
            }
        }
    yy291:
#line 84 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPREPEND);
    }
#line 2408 "src/lexer.c"
    yy292:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy293;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy293;
                if (yych <= 'z') goto yy52;
            }
        }
    yy293:
#line 85 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPRIVATE);
    }
#line 2431 "src/lexer.c"
    yy294:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy306;
        goto yy53;
    yy295:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy307;
        goto yy53;
    yy296:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy297;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy297;
                if (yych <= 'z') goto yy52;
            }
        }
    yy297:
#line 93 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUNTYPED);
    }
#line 2464 "src/lexer.c"
    yy298:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy108;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy299;
                if (yych <= 'Z') goto yy108;
            } else {
                if (yych == '`') goto yy299;
                if (yych <= 'z') goto yy108;
            }
        }
    yy299:
#line 97 "src/lexer.re"
    {
        return rbs_next_token(lexer, k__TODO__);
    }
#line 2487 "src/lexer.c"
    yy300:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy308;
        goto yy53;
    yy301:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy309;
        goto yy53;
    yy302:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy310;
        goto yy53;
    yy303:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } 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, kINSTANCE);
    }
#line 2525 "src/lexer.c"
    yy305:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy311;
        goto yy53;
    yy306:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy313;
        goto yy53;
    yy307:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy315;
        goto yy53;
    yy308:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy317;
        goto yy53;
    yy309:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy318;
        goto yy53;
    yy310:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy319;
        goto yy53;
    yy311:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy312;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy312;
                if (yych <= 'z') goto yy52;
            }
        }
    yy312:
#line 80 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINTERFACE);
    }
#line 2578 "src/lexer.c"
    yy313:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy314;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy314;
                if (yych <= 'z') goto yy52;
            }
        }
    yy314:
#line 88 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSINGLETON);
    }
#line 2601 "src/lexer.c"
    yy315:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy316;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy316;
                if (yych <= 'z') goto yy52;
            }
        }
    yy316:
#line 92 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUNCHECKED);
    }
#line 2624 "src/lexer.c"
    yy317:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy320;
        goto yy53;
    yy318:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy321;
        goto yy53;
    yy319:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy323;
        goto yy53;
    yy320:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy325;
        goto yy53;
    yy321:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy322;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy322;
                if (yych <= 'z') goto yy52;
            }
        }
    yy322:
#line 68 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRREADER);
    }
#line 2667 "src/lexer.c"
    yy323:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '=') {
            if (yych <= '/') {
                if (yych == '!') goto yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy324;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy324;
                if (yych <= 'z') goto yy52;
            }
        }
    yy324:
#line 69 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRWRITER);
    }
#line 2690 "src/lexer.c"
    yy325:
        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 yy105;
            } else {
                if (yych <= '9') goto yy52;
                if (yych >= '=') goto yy106;
            }
        } else {
            if (yych <= '^') {
                if (yych <= '@') goto yy326;
                if (yych <= 'Z') goto yy52;
            } else {
                if (yych == '`') goto yy326;
                if (yych <= 'z') goto yy52;
            }
        }
    yy326:
#line 67 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRACCESSOR);
    }
#line 2716 "src/lexer.c"
    }
#line 146 "src/lexer.re"
}
