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

rbs_token_t rbs_lexer_next_token(rbs_lexer_t *lexer) {
    rbs_lexer_t backup;

    backup = *lexer;

#line 12 "src/lexer.c"
    {
        unsigned int yych;
        unsigned int yyaccept = 0;
        yych = rbs_peek(lexer);
        if (yych <= '[') {
            if (yych <= '(') {
                if (yych <= ' ') {
                    if (yych <= '\n') {
                        if (yych <= 0x00000000) goto yy1;
                        if (yych <= 0x00000008) goto yy2;
                        if (yych <= '\t') goto yy4;
                        goto yy6;
                    } else {
                        if (yych == '\r') goto yy6;
                        if (yych <= 0x0000001F) goto yy2;
                        goto yy4;
                    }
                } else {
                    if (yych <= '$') {
                        if (yych <= '!') goto yy7;
                        if (yych <= '"') goto yy9;
                        if (yych <= '#') goto yy10;
                        goto yy12;
                    } else {
                        if (yych <= '%') goto yy13;
                        if (yych <= '&') goto yy14;
                        if (yych <= '\'') goto yy15;
                        goto yy16;
                    }
                }
            } else {
                if (yych <= '9') {
                    if (yych <= ',') {
                        if (yych <= ')') goto yy17;
                        if (yych <= '*') goto yy18;
                        if (yych <= '+') goto yy19;
                        goto yy20;
                    } else {
                        if (yych <= '-') goto yy21;
                        if (yych <= '.') goto yy22;
                        if (yych <= '/') goto yy24;
                        goto yy25;
                    }
                } else {
                    if (yych <= '=') {
                        if (yych <= ':') goto yy27;
                        if (yych <= ';') goto yy2;
                        if (yych <= '<') goto yy29;
                        goto yy31;
                    } else {
                        if (yych <= '?') {
                            if (yych <= '>') goto yy33;
                            goto yy35;
                        } else {
                            if (yych <= '@') goto yy36;
                            if (yych <= 'Z') goto yy37;
                            goto yy39;
                        }
                    }
                }
            }
        } else {
            if (yych <= 'n') {
                if (yych <= 'c') {
                    if (yych <= '_') {
                        if (yych <= '\\') goto yy2;
                        if (yych <= ']') goto yy40;
                        if (yych <= '^') goto yy41;
                        goto yy42;
                    } else {
                        if (yych <= '`') goto yy44;
                        if (yych <= 'a') goto yy46;
                        if (yych <= 'b') goto yy48;
                        goto yy49;
                    }
                } else {
                    if (yych <= 'h') {
                        if (yych <= 'd') goto yy50;
                        if (yych <= 'e') goto yy51;
                        if (yych <= 'f') goto yy52;
                        goto yy53;
                    } else {
                        if (yych <= 'i') goto yy55;
                        if (yych <= 'l') goto yy53;
                        if (yych <= 'm') goto yy56;
                        goto yy57;
                    }
                }
            } else {
                if (yych <= 'v') {
                    if (yych <= 'r') {
                        if (yych <= 'o') goto yy58;
                        if (yych <= 'p') goto yy59;
                        if (yych <= 'q') goto yy53;
                        goto yy60;
                    } else {
                        if (yych <= 's') goto yy61;
                        if (yych <= 't') goto yy62;
                        if (yych <= 'u') goto yy63;
                        goto yy64;
                    }
                } else {
                    if (yych <= '}') {
                        if (yych <= 'z') goto yy53;
                        if (yych <= '{') goto yy65;
                        if (yych <= '|') goto yy66;
                        goto yy67;
                    } else {
                        if (yych <= 0x0000007F) {
                            if (yych <= '~') goto yy24;
                            goto yy2;
                        } else {
                            if (yych == 0x0000FFFD) goto yy2;
                            goto yy68;
                        }
                    }
                }
            }
        }
    yy1:
        rbs_skip(lexer);
#line 184 "src/lexer.re"
        {
            return rbs_next_eof_token(lexer);
        }
#line 136 "src/lexer.c"
    yy2:
        rbs_skip(lexer);
    yy3:
#line 185 "src/lexer.re"
    {
        return rbs_next_token(lexer, ErrorToken);
    }
#line 142 "src/lexer.c"
    yy4:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '\t') goto yy4;
        if (yych == ' ') goto yy4;
    yy5:
#line 183 "src/lexer.re"
    {
        return rbs_next_token(lexer, tTRIVIA);
    }
#line 151 "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 61 "src/lexer.re"
    {
        return rbs_next_token(lexer, tOPERATOR);
    }
#line 163 "src/lexer.c"
    yy9:
        yyaccept = 0;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy3;
        goto yy71;
    yy10:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\n') {
            if (yych <= 0x00000000) goto yy11;
            if (yych <= '\t') goto yy10;
        } else {
            if (yych != 0x0000FFFD) goto yy10;
        }
    yy11:
#line 73 "src/lexer.re"
    {
        // Keep a bare CR in the comment, but leave the CR in CRLF for a trivia token.
        if (rbs_peek(lexer) == '\n' && lexer->string.start[lexer->current.byte_pos - 1] == '\r') {
            lexer->current.byte_pos -= 1;
            lexer->current.char_pos -= 1;
            lexer->current.column -= 1;
            lexer->current_code_point = '\r';
            lexer->current_character_bytes = 1;
        }

        return rbs_next_token(
            lexer,
            lexer->first_token_of_line ? tLINECOMMENT : tCOMMENT
        );
    }
#line 197 "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 yy75;
                    goto yy3;
                } else {
                    if (yych == '\r') goto yy3;
                    goto yy75;
                }
            } else {
                if (yych <= '#') {
                    if (yych <= ' ') goto yy3;
                    if (yych <= '"') goto yy77;
                    goto yy75;
                } else {
                    if (yych == '%') goto yy3;
                    if (yych <= '\'') goto yy77;
                    goto yy3;
                }
            }
        } else {
            if (yych <= 'Z') {
                if (yych <= '/') {
                    if (yych == '-') goto yy75;
                    goto yy77;
                } else {
                    if (yych <= '9') goto yy75;
                    if (yych <= '>') goto yy77;
                    goto yy75;
                }
            } else {
                if (yych <= '^') {
                    if (yych == '\\') goto yy77;
                    goto yy3;
                } else {
                    if (yych <= 'z') goto yy75;
                    if (yych <= '}') goto yy3;
                    if (yych <= '~') goto yy77;
                    goto yy75;
                }
            }
        }
    yy13:
        yyaccept = 1;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy78;
        goto yy8;
    yy14:
        rbs_skip(lexer);
#line 45 "src/lexer.re"
        {
            return rbs_next_token(lexer, pAMP);
        }
#line 255 "src/lexer.c"
    yy15:
        yyaccept = 0;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy3;
        goto yy80;
    yy16:
        rbs_skip(lexer);
#line 36 "src/lexer.re"
        {
            return rbs_next_token(lexer, pLPAREN);
        }
#line 267 "src/lexer.c"
    yy17:
        rbs_skip(lexer);
#line 37 "src/lexer.re"
        {
            return rbs_next_token(lexer, pRPAREN);
        }
#line 272 "src/lexer.c"
    yy18:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '*') goto yy84;
#line 47 "src/lexer.re"
        {
            return rbs_next_token(lexer, pSTAR);
        }
#line 279 "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 42 "src/lexer.re"
        {
            return rbs_next_token(lexer, pCOMMA);
        }
#line 291 "src/lexer.c"
    yy21:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        switch (yych) {
        case '-':
            goto yy85;
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            goto yy25;
        case '>':
            goto yy86;
        case '@':
            goto yy24;
        default:
            goto yy8;
        }
    yy22:
        yyaccept = 2;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych == '.') goto yy87;
    yy23:
#line 49 "src/lexer.re"
    {
        return rbs_next_token(lexer, pDOT);
    }
#line 320 "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 65 "src/lexer.re"
    {
        return rbs_next_token(lexer, tINTEGER);
    }
#line 333 "src/lexer.c"
    yy27:
        yyaccept = 3;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '<') {
            if (yych <= '*') {
                if (yych <= '#') {
                    if (yych <= ' ') goto yy28;
                    if (yych <= '!') goto yy88;
                    if (yych <= '"') goto yy90;
                } else {
                    if (yych <= '&') {
                        if (yych <= '$') goto yy91;
                        goto yy92;
                    } else {
                        if (yych <= '\'') goto yy93;
                        if (yych >= '*') goto yy94;
                    }
                }
            } else {
                if (yych <= '.') {
                    if (yych == ',') goto yy28;
                    if (yych <= '-') goto yy95;
                } else {
                    if (yych <= '9') {
                        if (yych <= '/') goto yy92;
                    } else {
                        if (yych <= ':') goto yy96;
                        if (yych >= '<') goto yy97;
                    }
                }
            }
        } else {
            if (yych <= '_') {
                if (yych <= '@') {
                    if (yych <= '=') goto yy98;
                    if (yych <= '>') goto yy99;
                    if (yych >= '@') goto yy100;
                } else {
                    if (yych <= '[') {
                        if (yych <= 'Z') goto yy101;
                        goto yy103;
                    } else {
                        if (yych <= ']') goto yy28;
                        if (yych <= '^') goto yy92;
                        goto yy101;
                    }
                }
            } else {
                if (yych <= '}') {
                    if (yych <= 'z') {
                        if (yych <= '`') goto yy92;
                        goto yy101;
                    } else {
                        if (yych == '|') goto yy92;
                    }
                } else {
                    if (yych <= 0x0000007F) {
                        if (yych <= '~') goto yy92;
                    } else {
                        if (yych != 0x0000FFFD) goto yy101;
                    }
                }
            }
        }
    yy28:
#line 56 "src/lexer.re"
    {
        return rbs_next_token(lexer, pCOLON);
    }
#line 403 "src/lexer.c"
    yy29:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ';') goto yy30;
        if (yych <= '<') goto yy24;
        if (yych <= '=') goto yy104;
    yy30:
#line 58 "src/lexer.re"
    {
        return rbs_next_token(lexer, pLT);
    }
#line 413 "src/lexer.c"
    yy31:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '>') {
            if (yych <= '<') goto yy32;
            if (yych <= '=') goto yy105;
            goto yy106;
        } else {
            if (yych == '~') goto yy24;
        }
    yy32:
#line 55 "src/lexer.re"
    {
        return rbs_next_token(lexer, pEQ);
    }
#line 427 "src/lexer.c"
    yy33:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '<') goto yy34;
        if (yych <= '>') goto yy24;
    yy34:
#line 59 "src/lexer.re"
    {
        return rbs_next_token(lexer, pGT);
    }
#line 436 "src/lexer.c"
    yy35:
        rbs_skip(lexer);
#line 46 "src/lexer.re"
        {
            return rbs_next_token(lexer, pQUESTION);
        }
#line 441 "src/lexer.c"
    yy36:
        yyaccept = 0;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '`') {
            if (yych <= 'Z') {
                if (yych <= '?') goto yy3;
                if (yych <= '@') goto yy107;
                goto yy108;
            } else {
                if (yych == '_') goto yy108;
                goto yy3;
            }
        } else {
            if (yych <= 'z') {
                if (yych == 'r') goto yy111;
                goto yy108;
            } else {
                if (yych <= 0x0000007F) goto yy3;
                if (yych == 0x0000FFFD) goto yy3;
                goto yy108;
            }
        }
    yy37:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy37;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy37;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy37;
                if (yych >= 'a') goto yy37;
            } else {
                if (yych <= 0x0000007F) goto yy38;
                if (yych != 0x0000FFFD) goto yy37;
            }
        }
    yy38:
#line 155 "src/lexer.re"
    {
        return rbs_next_token(lexer, tUIDENT);
    }
#line 489 "src/lexer.c"
    yy39:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == ']') goto yy114;
#line 38 "src/lexer.re"
        {
            return rbs_next_token(lexer, pLBRACKET);
        }
#line 496 "src/lexer.c"
    yy40:
        rbs_skip(lexer);
#line 39 "src/lexer.re"
        {
            return rbs_next_token(lexer, pRBRACKET);
        }
#line 501 "src/lexer.c"
    yy41:
        rbs_skip(lexer);
#line 44 "src/lexer.re"
        {
            return rbs_next_token(lexer, pHAT);
        }
#line 506 "src/lexer.c"
    yy42:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy115;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy118;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy120;
                if (yych >= 'a') goto yy115;
            } else {
                if (yych <= 0x0000007F) goto yy43;
                if (yych != 0x0000FFFD) goto yy68;
            }
        }
    yy43:
#line 158 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULLIDENT);
    }
#line 530 "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 yy121;
        } else {
            if (yych != ':') goto yy121;
        }
    yy45:
#line 51 "src/lexer.re"
    {
        return rbs_next_token(lexer, tOPERATOR);
    }
#line 545 "src/lexer.c"
    yy46:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'r') {
            if (yych == 'l') goto yy122;
            goto yy54;
        } else {
            if (yych <= 's') goto yy123;
            if (yych <= 't') goto yy125;
            goto yy54;
        }
    yy47:
#line 154 "src/lexer.re"
    {
        return rbs_next_token(lexer, tLIDENT);
    }
#line 560 "src/lexer.c"
    yy48:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy126;
        goto yy54;
    yy49:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy127;
        goto yy54;
    yy50:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy128;
        goto yy54;
    yy51:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy129;
        if (yych == 'x') goto yy130;
        goto yy54;
    yy52:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy131;
        goto yy54;
    yy53:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy54:
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych <= '/') goto yy47;
                goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych <= '@') goto yy47;
                goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych <= '`') goto yy47;
                goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy47;
                if (yych == 0x0000FFFD) goto yy47;
                goto yy53;
            }
        }
    yy55:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy132;
        goto yy54;
    yy56:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy134;
        goto yy54;
    yy57:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy135;
        goto yy54;
    yy58:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy136;
        goto yy54;
    yy59:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy137;
        if (yych == 'u') goto yy138;
        goto yy54;
    yy60:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy139;
        goto yy54;
    yy61:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'h') {
            if (yych == 'e') goto yy140;
            goto yy54;
        } else {
            if (yych <= 'i') goto yy141;
            if (yych == 'k') goto yy142;
            goto yy54;
        }
    yy62:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'q') {
            if (yych == 'o') goto yy143;
            goto yy54;
        } else {
            if (yych <= 'r') goto yy144;
            if (yych == 'y') goto yy145;
            goto yy54;
        }
    yy63:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy146;
        if (yych == 's') goto yy147;
        goto yy54;
    yy64:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy148;
        goto yy54;
    yy65:
        rbs_skip(lexer);
#line 40 "src/lexer.re"
        {
            return rbs_next_token(lexer, pLBRACE);
        }
#line 680 "src/lexer.c"
    yy66:
        rbs_skip(lexer);
#line 43 "src/lexer.re"
        {
            return rbs_next_token(lexer, pBAR);
        }
#line 685 "src/lexer.c"
    yy67:
        rbs_skip(lexer);
#line 41 "src/lexer.re"
        {
            return rbs_next_token(lexer, pRBRACE);
        }
#line 690 "src/lexer.c"
    yy68:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy68;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy68;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy68;
                if (yych >= 'a') goto yy68;
            } else {
                if (yych <= 0x0000007F) goto yy69;
                if (yych != 0x0000FFFD) goto yy68;
            }
        }
    yy69:
#line 169 "src/lexer.re"
    {
        return rbs_next_token(lexer, tNONASCIIIDENT);
    }
#line 714 "src/lexer.c"
    yy70:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy71:
        if (yych <= '"') {
            if (yych <= 0x00000000) goto yy72;
            if (yych <= '!') goto yy70;
            goto yy73;
        } else {
            if (yych == '\\') goto yy74;
            goto yy70;
        }
    yy72:
        *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 yy82;
                else
                    goto yy164;
            } else {
                if (yyaccept == 7) goto yy258;
                else
                    goto yy286;
            }
        }
    yy73:
        rbs_skip(lexer);
#line 135 "src/lexer.re"
        {
            return rbs_next_token(lexer, tDQSTRING);
        }
#line 754 "src/lexer.c"
    yy74:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy149;
        if (yych == 'x') goto yy150;
        goto yy70;
    yy75:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ',') {
            if (yych <= '\f') {
                if (yych <= 0x00000000) goto yy76;
                if (yych <= 0x00000008) goto yy75;
                if (yych >= '\v') goto yy75;
            } else {
                if (yych <= 0x0000001F) {
                    if (yych >= 0x0000000E) goto yy75;
                } else {
                    if (yych == '#') goto yy75;
                }
            }
        } else {
            if (yych <= '>') {
                if (yych <= '-') goto yy75;
                if (yych <= '/') goto yy76;
                if (yych <= '9') goto yy75;
            } else {
                if (yych <= '^') {
                    if (yych <= 'Z') goto yy75;
                } else {
                    if (yych <= 'z') goto yy75;
                    if (yych >= 0x0000007F) goto yy75;
                }
            }
        }
    yy76:
#line 179 "src/lexer.re"
    {
        return rbs_next_token(lexer, tGIDENT);
    }
#line 793 "src/lexer.c"
    yy77:
        rbs_skip(lexer);
        goto yy76;
    yy78:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '(') {
                if (yych <= '\'') goto yy72;
                goto yy151;
            } else {
                if (yych == '<') goto yy152;
                goto yy72;
            }
        } else {
            if (yych <= 'z') {
                if (yych <= '[') goto yy153;
                goto yy72;
            } else {
                if (yych <= '{') goto yy154;
                if (yych <= '|') goto yy155;
                goto yy72;
            }
        }
    yy79:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy80:
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy72;
            if (yych <= '&') goto yy79;
        } else {
            if (yych == '\\') goto yy83;
            goto yy79;
        }
    yy81:
        rbs_skip(lexer);
    yy82:
#line 136 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSQSTRING);
    }
#line 834 "src/lexer.c"
    yy83:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy72;
            if (yych <= '&') goto yy79;
            goto yy156;
        } else {
            if (yych == '\\') goto yy83;
            goto yy79;
        }
    yy84:
        rbs_skip(lexer);
#line 48 "src/lexer.re"
        {
            return rbs_next_token(lexer, pSTAR2);
        }
#line 850 "src/lexer.c"
    yy85:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych >= 0x00000001) goto yy85;
#line 62 "src/lexer.re"
        {
            return rbs_next_token(lexer, tINLINECOMMENT);
        }
#line 857 "src/lexer.c"
    yy86:
        rbs_skip(lexer);
#line 53 "src/lexer.re"
        {
            return rbs_next_token(lexer, pARROW);
        }
#line 862 "src/lexer.c"
    yy87:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '.') goto yy157;
        goto yy72;
    yy88:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy92;
        if (yych == '~') goto yy92;
    yy89:
#line 152 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 876 "src/lexer.c"
    yy90:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '"') {
            if (yych <= 0x00000000) goto yy72;
            if (yych <= '!') goto yy90;
            goto yy158;
        } else {
            if (yych == '\\') goto yy159;
            goto yy90;
        }
    yy91:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ')') {
            if (yych <= 0x0000001F) {
                if (yych <= '\n') {
                    if (yych <= 0x00000000) goto yy72;
                    if (yych <= 0x00000008) goto yy160;
                    goto yy72;
                } else {
                    if (yych == '\r') goto yy72;
                    goto yy160;
                }
            } else {
                if (yych <= '#') {
                    if (yych <= ' ') goto yy72;
                    if (yych <= '"') goto yy162;
                    goto yy160;
                } else {
                    if (yych == '%') goto yy72;
                    if (yych <= '\'') goto yy162;
                    goto yy72;
                }
            }
        } else {
            if (yych <= 'Z') {
                if (yych <= '/') {
                    if (yych == '-') goto yy160;
                    goto yy162;
                } else {
                    if (yych <= '9') goto yy160;
                    if (yych <= '>') goto yy162;
                    goto yy160;
                }
            } else {
                if (yych <= '^') {
                    if (yych == '\\') goto yy162;
                    goto yy72;
                } else {
                    if (yych <= 'z') goto yy160;
                    if (yych <= '}') goto yy72;
                    if (yych <= '~') goto yy162;
                    goto yy160;
                }
            }
        }
    yy92:
        rbs_skip(lexer);
        goto yy89;
    yy93:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy72;
            if (yych <= '&') goto yy93;
            goto yy163;
        } else {
            if (yych == '\\') goto yy165;
            goto yy93;
        }
    yy94:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '*') goto yy92;
        goto yy89;
    yy95:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '@') goto yy92;
        goto yy89;
    yy96:
        rbs_skip(lexer);
#line 57 "src/lexer.re"
        {
            return rbs_next_token(lexer, pCOLON2);
        }
#line 962 "src/lexer.c"
    yy97:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ';') goto yy89;
        if (yych <= '<') goto yy92;
        if (yych <= '=') goto yy166;
        goto yy89;
    yy98:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy167;
        if (yych == '~') goto yy92;
        goto yy72;
    yy99:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '<') goto yy89;
        if (yych <= '>') goto yy92;
        goto yy89;
    yy100:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '_') {
            if (yych <= '@') {
                if (yych <= '?') goto yy72;
                goto yy168;
            } else {
                if (yych <= 'Z') goto yy101;
                if (yych <= '^') goto yy72;
            }
        } else {
            if (yych <= 0x0000007F) {
                if (yych <= '`') goto yy72;
                if (yych >= '{') goto yy72;
            } else {
                if (yych == 0x0000FFFD) goto yy72;
            }
        }
    yy101:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '9') {
                if (yych == '!') goto yy169;
                if (yych >= '0') goto yy101;
            } else {
                if (yych <= '=') {
                    if (yych >= '=') goto yy169;
                } else {
                    if (yych == '?') goto yy169;
                }
            }
        } else {
            if (yych <= '`') {
                if (yych <= 'Z') goto yy101;
                if (yych == '_') goto yy101;
            } else {
                if (yych <= 0x0000007F) {
                    if (yych <= 'z') goto yy101;
                } else {
                    if (yych != 0x0000FFFD) goto yy101;
                }
            }
        }
    yy102:
#line 150 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1030 "src/lexer.c"
    yy103:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == ']') goto yy167;
        goto yy72;
    yy104:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '>') goto yy24;
        goto yy8;
    yy105:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy24;
        goto yy8;
    yy106:
        rbs_skip(lexer);
#line 54 "src/lexer.re"
        {
            return rbs_next_token(lexer, pFATARROW);
        }
#line 1050 "src/lexer.c"
    yy107:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '`') {
            if (yych <= 'Z') {
                if (yych <= '@') goto yy72;
                goto yy170;
            } else {
                if (yych == '_') goto yy170;
                goto yy72;
            }
        } else {
            if (yych <= 0x0000007F) {
                if (yych <= 'z') goto yy170;
                goto yy72;
            } else {
                if (yych == 0x0000FFFD) goto yy72;
                goto yy170;
            }
        }
    yy108:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy109:
        if (yych <= '_') {
            if (yych <= '@') {
                if (yych <= '/') goto yy110;
                if (yych <= '9') goto yy108;
            } else {
                if (yych <= 'Z') goto yy108;
                if (yych >= '_') goto yy108;
            }
        } else {
            if (yych <= 0x0000007F) {
                if (yych <= '`') goto yy110;
                if (yych <= 'z') goto yy108;
            } else {
                if (yych != 0x0000FFFD) goto yy108;
            }
        }
    yy110:
#line 176 "src/lexer.re"
    {
        return rbs_next_token(lexer, tAIDENT);
    }
#line 1094 "src/lexer.c"
    yy111:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'b') goto yy172;
        goto yy109;
    yy112:
        rbs_skip(lexer);
#line 173 "src/lexer.re"
        {
            return rbs_next_token(lexer, tBANGIDENT);
        }
#line 1104 "src/lexer.c"
    yy113:
        rbs_skip(lexer);
#line 174 "src/lexer.re"
        {
            return rbs_next_token(lexer, tEQIDENT);
        }
#line 1109 "src/lexer.c"
    yy114:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy24;
#line 60 "src/lexer.re"
        {
            return rbs_next_token(lexer, pAREF_OPR);
        }
#line 1116 "src/lexer.c"
    yy115:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
    yy116:
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy115;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy115;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy115;
                if (yych >= 'a') goto yy115;
            } else {
                if (yych <= 0x0000007F) goto yy117;
                if (yych != 0x0000FFFD) goto yy115;
            }
        }
    yy117:
#line 156 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULLIDENT);
    }
#line 1141 "src/lexer.c"
    yy118:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy118;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy118;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy118;
                if (yych >= 'a') goto yy118;
            } else {
                if (yych <= 0x0000007F) goto yy119;
                if (yych != 0x0000FFFD) goto yy118;
            }
        }
    yy119:
#line 157 "src/lexer.re"
    {
        return rbs_next_token(lexer, tULIDENT);
    }
#line 1165 "src/lexer.c"
    yy120:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy173;
        goto yy116;
    yy121:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy72;
        if (yych == '`') goto yy174;
        goto yy121;
    yy122:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy175;
        goto yy54;
    yy123:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy124;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy124:
#line 122 "src/lexer.re"
    {
        return rbs_next_token(lexer, kAS);
    }
#line 1205 "src/lexer.c"
    yy125:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy176;
        goto yy54;
    yy126:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy177;
        if (yych == 't') goto yy178;
        goto yy54;
    yy127:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy180;
        goto yy54;
    yy128:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy181;
        goto yy54;
    yy129:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy183;
        goto yy54;
    yy130:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy185;
        goto yy54;
    yy131:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy186;
        goto yy54;
    yy132:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '_') {
            if (yych <= '<') {
                if (yych <= '!') {
                    if (yych >= '!') goto yy112;
                } else {
                    if (yych <= '/') goto yy133;
                    if (yych <= '9') goto yy53;
                }
            } else {
                if (yych <= '@') {
                    if (yych <= '=') goto yy113;
                } else {
                    if (yych <= 'Z') goto yy53;
                    if (yych >= '_') goto yy53;
                }
            }
        } else {
            if (yych <= 's') {
                if (yych <= 'b') {
                    if (yych >= 'a') goto yy53;
                } else {
                    if (yych <= 'c') goto yy187;
                    if (yych <= 'r') goto yy53;
                    goto yy188;
                }
            } else {
                if (yych <= 0x0000007F) {
                    if (yych <= 't') goto yy189;
                    if (yych <= 'z') goto yy53;
                } else {
                    if (yych != 0x0000FFFD) goto yy53;
                }
            }
        }
    yy133:
#line 101 "src/lexer.re"
    {
        return rbs_next_token(lexer, kIN);
    }
#line 1282 "src/lexer.c"
    yy134:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy190;
        goto yy54;
    yy135:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy191;
        goto yy54;
    yy136:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy193;
        goto yy54;
    yy137:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy195;
        if (yych == 'i') goto yy196;
        goto yy54;
    yy138:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'b') goto yy197;
        goto yy54;
    yy139:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy198;
        goto yy54;
    yy140:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy199;
        goto yy54;
    yy141:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy200;
        goto yy54;
    yy142:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy201;
        goto yy54;
    yy143:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy202;
        goto yy54;
    yy144:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy204;
        goto yy54;
    yy145:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy205;
        goto yy54;
    yy146:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy206;
        if (yych == 't') goto yy207;
        goto yy54;
    yy147:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy208;
        goto yy54;
    yy148:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy210;
        goto yy54;
    yy149:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy72;
            if (yych <= '9') goto yy211;
            goto yy72;
        } else {
            if (yych <= 'F') goto yy211;
            if (yych <= '`') goto yy72;
            if (yych <= 'f') goto yy211;
            goto yy72;
        }
    yy150:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '/') goto yy72;
        if (yych <= '9') goto yy70;
        if (yych <= '`') goto yy72;
        if (yych <= 'f') goto yy70;
        goto yy72;
    yy151:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy72;
        if (yych == ')') goto yy212;
        goto yy151;
    yy152:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy72;
        if (yych == '>') goto yy213;
        goto yy152;
    yy153:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy72;
        if (yych == ']') goto yy214;
        goto yy153;
    yy154:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy72;
        if (yych == '}') goto yy215;
        goto yy154;
    yy155:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 0x00000000) goto yy72;
        if (yych == '|') goto yy216;
        goto yy155;
    yy156:
        yyaccept = 5;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy82;
            if (yych <= '&') goto yy79;
            goto yy81;
        } else {
            if (yych == '\\') goto yy83;
            goto yy79;
        }
    yy157:
        rbs_skip(lexer);
#line 50 "src/lexer.re"
        {
            return rbs_next_token(lexer, pDOT3);
        }
#line 1428 "src/lexer.c"
    yy158:
        rbs_skip(lexer);
#line 137 "src/lexer.re"
        {
            return rbs_next_token(lexer, tDQSYMBOL);
        }
#line 1433 "src/lexer.c"
    yy159:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy217;
        if (yych == 'x') goto yy218;
        goto yy90;
    yy160:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= ',') {
            if (yych <= '\f') {
                if (yych <= 0x00000000) goto yy161;
                if (yych <= 0x00000008) goto yy160;
                if (yych >= '\v') goto yy160;
            } else {
                if (yych <= 0x0000001F) {
                    if (yych >= 0x0000000E) goto yy160;
                } else {
                    if (yych == '#') goto yy160;
                }
            }
        } else {
            if (yych <= '>') {
                if (yych <= '-') goto yy160;
                if (yych <= '/') goto yy161;
                if (yych <= '9') goto yy160;
            } else {
                if (yych <= '^') {
                    if (yych <= 'Z') goto yy160;
                } else {
                    if (yych <= 'z') goto yy160;
                    if (yych >= 0x0000007F) goto yy160;
                }
            }
        }
    yy161:
#line 151 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSYMBOL);
    }
#line 1472 "src/lexer.c"
    yy162:
        rbs_skip(lexer);
        goto yy161;
    yy163:
        rbs_skip(lexer);
    yy164:
#line 138 "src/lexer.re"
    {
        return rbs_next_token(lexer, tSQSYMBOL);
    }
#line 1481 "src/lexer.c"
    yy165:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy72;
            if (yych <= '&') goto yy93;
            goto yy219;
        } else {
            if (yych == '\\') goto yy165;
            goto yy93;
        }
    yy166:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '>') goto yy92;
        goto yy89;
    yy167:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '=') goto yy92;
        goto yy89;
    yy168:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '`') {
            if (yych <= 'Z') {
                if (yych <= '@') goto yy72;
                goto yy101;
            } else {
                if (yych == '_') goto yy101;
                goto yy72;
            }
        } else {
            if (yych <= 0x0000007F) {
                if (yych <= 'z') goto yy101;
                goto yy72;
            } else {
                if (yych == 0x0000FFFD) goto yy72;
                goto yy101;
            }
        }
    yy169:
        rbs_skip(lexer);
        goto yy102;
    yy170:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '_') {
            if (yych <= '@') {
                if (yych <= '/') goto yy171;
                if (yych <= '9') goto yy170;
            } else {
                if (yych <= 'Z') goto yy170;
                if (yych >= '_') goto yy170;
            }
        } else {
            if (yych <= 0x0000007F) {
                if (yych <= '`') goto yy171;
                if (yych <= 'z') goto yy170;
            } else {
                if (yych != 0x0000FFFD) goto yy170;
            }
        }
    yy171:
#line 177 "src/lexer.re"
    {
        return rbs_next_token(lexer, tA2IDENT);
    }
#line 1548 "src/lexer.c"
    yy172:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy220;
        goto yy109;
    yy173:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy222;
        goto yy116;
    yy174:
        rbs_skip(lexer);
#line 52 "src/lexer.re"
        {
            return rbs_next_token(lexer, tQIDENT);
        }
#line 1563 "src/lexer.c"
    yy175:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy223;
        goto yy54;
    yy176:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy224;
        goto yy54;
    yy177:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy225;
        goto yy54;
    yy178:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy179;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy179:
#line 94 "src/lexer.re"
    {
        return rbs_next_token(lexer, kBOT);
    }
#line 1602 "src/lexer.c"
    yy180:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy227;
        goto yy54;
    yy181:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy182;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy182:
#line 97 "src/lexer.re"
    {
        return rbs_next_token(lexer, kDEF);
    }
#line 1631 "src/lexer.c"
    yy183:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy184;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy184:
#line 98 "src/lexer.re"
    {
        return rbs_next_token(lexer, kEND);
    }
#line 1655 "src/lexer.c"
    yy185:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy228;
        goto yy54;
    yy186:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy229;
        goto yy54;
    yy187:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy230;
        goto yy54;
    yy188:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy231;
        goto yy54;
    yy189:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy232;
        goto yy54;
    yy190:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy233;
        goto yy54;
    yy191:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy192;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy192:
#line 108 "src/lexer.re"
    {
        return rbs_next_token(lexer, kNIL);
    }
#line 1709 "src/lexer.c"
    yy193:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy194;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy194:
#line 109 "src/lexer.re"
    {
        return rbs_next_token(lexer, kOUT);
    }
#line 1733 "src/lexer.c"
    yy195:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy234;
        goto yy54;
    yy196:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'v') goto yy235;
        goto yy54;
    yy197:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy236;
        goto yy54;
    yy198:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy237;
        goto yy54;
    yy199:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy238;
        goto yy54;
    yy200:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'g') goto yy240;
        goto yy54;
    yy201:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy241;
        goto yy54;
    yy202:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy203;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy203:
#line 115 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTOP);
    }
#line 1792 "src/lexer.c"
    yy204:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy243;
        goto yy54;
    yy205:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy245;
        goto yy54;
    yy206:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'h') goto yy247;
        goto yy54;
    yy207:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'y') goto yy248;
        goto yy54;
    yy208:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy209;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy209:
#line 121 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUSE);
    }
#line 1836 "src/lexer.c"
    yy210:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy249;
        goto yy54;
    yy211:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy72;
            if (yych <= '9') goto yy251;
            goto yy72;
        } else {
            if (yych <= 'F') goto yy251;
            if (yych <= '`') goto yy72;
            if (yych <= 'f') goto yy251;
            goto yy72;
        }
    yy212:
        rbs_skip(lexer);
#line 68 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1859 "src/lexer.c"
    yy213:
        rbs_skip(lexer);
#line 71 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1864 "src/lexer.c"
    yy214:
        rbs_skip(lexer);
#line 69 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1869 "src/lexer.c"
    yy215:
        rbs_skip(lexer);
#line 67 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1874 "src/lexer.c"
    yy216:
        rbs_skip(lexer);
#line 70 "src/lexer.re"
        {
            return rbs_next_token(lexer, tANNOTATION);
        }
#line 1879 "src/lexer.c"
    yy217:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy72;
            if (yych <= '9') goto yy252;
            goto yy72;
        } else {
            if (yych <= 'F') goto yy252;
            if (yych <= '`') goto yy72;
            if (yych <= 'f') goto yy252;
            goto yy72;
        }
    yy218:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '/') goto yy72;
        if (yych <= '9') goto yy90;
        if (yych <= '`') goto yy72;
        if (yych <= 'f') goto yy90;
        goto yy72;
    yy219:
        yyaccept = 6;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '\'') {
            if (yych <= 0x00000000) goto yy164;
            if (yych <= '&') goto yy93;
            goto yy163;
        } else {
            if (yych == '\\') goto yy165;
            goto yy93;
        }
    yy220:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '_') {
            if (yych <= '@') {
                if (yych <= '/') goto yy221;
                if (yych <= '9') goto yy108;
            } else {
                if (yych <= 'Z') goto yy108;
                if (yych >= '_') goto yy108;
            }
        } else {
            if (yych <= 0x0000007F) {
                if (yych <= '`') goto yy221;
                if (yych <= 'z') goto yy108;
            } else {
                if (yych != 0x0000FFFD) goto yy108;
            }
        }
    yy221:
#line 124 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATRBS);
    }
#line 1936 "src/lexer.c"
    yy222:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy253;
        goto yy116;
    yy223:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy254;
        goto yy54;
    yy224:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy256;
        goto yy54;
    yy225:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy226;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy226:
#line 93 "src/lexer.re"
    {
        return rbs_next_token(lexer, kBOOL);
    }
#line 1975 "src/lexer.c"
    yy227:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy257;
        goto yy54;
    yy228:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy259;
        goto yy54;
    yy229:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy260;
        goto yy54;
    yy230:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'u') goto yy262;
        goto yy54;
    yy231:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy263;
        goto yy54;
    yy232:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy264;
        goto yy54;
    yy233:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy265;
        goto yy54;
    yy234:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy266;
        goto yy54;
    yy235:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy267;
        goto yy54;
    yy236:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy268;
        goto yy54;
    yy237:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy269;
        goto yy54;
    yy238:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy239;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy239:
#line 113 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSELF);
    }
#line 2054 "src/lexer.c"
    yy240:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy270;
        goto yy54;
    yy241:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy242;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy242:
#line 125 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSKIP);
    }
#line 2083 "src/lexer.c"
    yy243:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy244;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy244:
#line 116 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTRUE);
    }
#line 2107 "src/lexer.c"
    yy245:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy246;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy246:
#line 117 "src/lexer.re"
    {
        return rbs_next_token(lexer, kTYPE);
    }
#line 2131 "src/lexer.c"
    yy247:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy271;
        goto yy54;
    yy248:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'p') goto yy272;
        goto yy54;
    yy249:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy250;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy250:
#line 120 "src/lexer.re"
    {
        return rbs_next_token(lexer, kVOID);
    }
#line 2165 "src/lexer.c"
    yy251:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy72;
            if (yych <= '9') goto yy273;
            goto yy72;
        } else {
            if (yych <= 'F') goto yy273;
            if (yych <= '`') goto yy72;
            if (yych <= 'f') goto yy273;
            goto yy72;
        }
    yy252:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy72;
            if (yych <= '9') goto yy274;
            goto yy72;
        } else {
            if (yych <= 'F') goto yy274;
            if (yych <= '`') goto yy72;
            if (yych <= 'f') goto yy274;
            goto yy72;
        }
    yy253:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy275;
        goto yy116;
    yy254:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy255;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy255:
#line 89 "src/lexer.re"
    {
        return rbs_next_token(lexer, kALIAS);
    }
#line 2220 "src/lexer.c"
    yy256:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'q') {
            if (yych == 'a') goto yy276;
            goto yy54;
        } else {
            if (yych <= 'r') goto yy277;
            if (yych == 'w') goto yy278;
            goto yy54;
        }
    yy257:
        yyaccept = 7;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '-') {
                if (yych == '!') goto yy112;
                if (yych >= '-') goto yy279;
            } else {
                if (yych <= '9') {
                    if (yych >= '0') goto yy53;
                } else {
                    if (yych == '=') goto yy113;
                }
            }
        } else {
            if (yych <= '`') {
                if (yych <= 'Z') goto yy53;
                if (yych == '_') goto yy53;
            } else {
                if (yych <= 0x0000007F) {
                    if (yych <= 'z') goto yy53;
                } else {
                    if (yych != 0x0000FFFD) goto yy53;
                }
            }
        }
    yy258:
#line 95 "src/lexer.re"
    {
        return rbs_next_token(lexer, kCLASS);
    }
#line 2263 "src/lexer.c"
    yy259:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy280;
        goto yy54;
    yy260:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy261;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy261:
#line 100 "src/lexer.re"
    {
        return rbs_next_token(lexer, kFALSE);
    }
#line 2292 "src/lexer.c"
    yy262:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy282;
        goto yy54;
    yy263:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy283;
        goto yy54;
    yy264:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy284;
        goto yy54;
    yy265:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy285;
        goto yy54;
    yy266:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy287;
        goto yy54;
    yy267:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy288;
        goto yy54;
    yy268:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy289;
        goto yy54;
    yy269:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy291;
        goto yy54;
    yy270:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy293;
        goto yy54;
    yy271:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy294;
        goto yy54;
    yy272:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy295;
        goto yy54;
    yy273:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy72;
            if (yych <= '9') goto yy70;
            goto yy72;
        } else {
            if (yych <= 'F') goto yy70;
            if (yych <= '`') goto yy72;
            if (yych <= 'f') goto yy70;
            goto yy72;
        }
    yy274:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy72;
            if (yych <= '9') goto yy296;
            goto yy72;
        } else {
            if (yych <= 'F') goto yy296;
            if (yych <= '`') goto yy72;
            if (yych <= 'f') goto yy296;
            goto yy72;
        }
    yy275:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy297;
        goto yy116;
    yy276:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy298;
        goto yy54;
    yy277:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy299;
        goto yy54;
    yy278:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy300;
        goto yy54;
    yy279:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy301;
        goto yy72;
    yy280:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy281;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy281:
#line 99 "src/lexer.re"
    {
        return rbs_next_token(lexer, kEXTEND);
    }
#line 2422 "src/lexer.c"
    yy282:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy302;
        goto yy54;
    yy283:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy304;
        goto yy54;
    yy284:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy305;
        goto yy54;
    yy285:
        yyaccept = 8;
        rbs_skip(lexer);
        backup = *lexer;
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '-') {
                if (yych == '!') goto yy112;
                if (yych >= '-') goto yy306;
            } else {
                if (yych <= '9') {
                    if (yych >= '0') goto yy53;
                } else {
                    if (yych == '=') goto yy113;
                }
            }
        } else {
            if (yych <= '`') {
                if (yych <= 'Z') goto yy53;
                if (yych == '_') goto yy53;
            } else {
                if (yych <= 0x0000007F) {
                    if (yych <= 'z') goto yy53;
                } else {
                    if (yych != 0x0000FFFD) goto yy53;
                }
            }
        }
    yy286:
#line 105 "src/lexer.re"
    {
        return rbs_next_token(lexer, kMODULE);
    }
#line 2469 "src/lexer.c"
    yy287:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy307;
        goto yy54;
    yy288:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy309;
        goto yy54;
    yy289:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy290;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy290:
#line 112 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPUBLIC);
    }
#line 2503 "src/lexer.c"
    yy291:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy292;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy292:
#line 126 "src/lexer.re"
    {
        return rbs_next_token(lexer, kRETURN);
    }
#line 2527 "src/lexer.c"
    yy293:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy311;
        goto yy54;
    yy294:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'k') goto yy312;
        goto yy54;
    yy295:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy313;
        goto yy54;
    yy296:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= '@') {
            if (yych <= '/') goto yy72;
            if (yych <= '9') goto yy90;
            goto yy72;
        } else {
            if (yych <= 'F') goto yy90;
            if (yych <= '`') goto yy72;
            if (yych <= 'f') goto yy90;
            goto yy72;
        }
    yy297:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == '_') goto yy315;
        goto yy116;
    yy298:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy317;
        goto yy54;
    yy299:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy318;
        goto yy54;
    yy300:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy319;
        goto yy54;
    yy301:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy320;
        goto yy72;
    yy302:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy303;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy303:
#line 102 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINCLUDE);
    }
#line 2604 "src/lexer.c"
    yy304:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy321;
        goto yy54;
    yy305:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'c') goto yy323;
        goto yy54;
    yy306:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy324;
        if (yych == 's') goto yy325;
        goto yy72;
    yy307:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy308;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy308:
#line 110 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPREPEND);
    }
#line 2644 "src/lexer.c"
    yy309:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy310;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy310:
#line 111 "src/lexer.re"
    {
        return rbs_next_token(lexer, kPRIVATE);
    }
#line 2668 "src/lexer.c"
    yy311:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy326;
        goto yy54;
    yy312:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy327;
        goto yy54;
    yy313:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy314;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy314:
#line 119 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUNTYPED);
    }
#line 2702 "src/lexer.c"
    yy315:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy115;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy115;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy115;
                if (yych >= 'a') goto yy115;
            } else {
                if (yych <= 0x0000007F) goto yy316;
                if (yych != 0x0000FFFD) goto yy115;
            }
        }
    yy316:
#line 123 "src/lexer.re"
    {
        return rbs_next_token(lexer, k__TODO__);
    }
#line 2726 "src/lexer.c"
    yy317:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy328;
        goto yy54;
    yy318:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy329;
        goto yy54;
    yy319:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 't') goto yy330;
        goto yy54;
    yy320:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy331;
        goto yy72;
    yy321:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy322;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy322:
#line 103 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINSTANCE);
    }
#line 2770 "src/lexer.c"
    yy323:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy332;
        goto yy54;
    yy324:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy334;
        goto yy72;
    yy325:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy335;
        goto yy72;
    yy326:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'n') goto yy336;
        goto yy54;
    yy327:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'd') goto yy338;
        goto yy54;
    yy328:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy340;
        goto yy54;
    yy329:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy341;
        goto yy54;
    yy330:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'e') goto yy342;
        goto yy54;
    yy331:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy343;
        goto yy72;
    yy332:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy333;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy333:
#line 104 "src/lexer.re"
    {
        return rbs_next_token(lexer, kINTERFACE);
    }
#line 2839 "src/lexer.c"
    yy334:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'i') goto yy344;
        goto yy72;
    yy335:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'l') goto yy345;
        goto yy72;
    yy336:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy337;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy337:
#line 114 "src/lexer.re"
    {
        return rbs_next_token(lexer, kSINGLETON);
    }
#line 2873 "src/lexer.c"
    yy338:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy339;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy339:
#line 118 "src/lexer.re"
    {
        return rbs_next_token(lexer, kUNCHECKED);
    }
#line 2897 "src/lexer.c"
    yy340:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy346;
        goto yy54;
    yy341:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy347;
        goto yy54;
    yy342:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy349;
        goto yy54;
    yy343:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy351;
        goto yy72;
    yy344:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'a') goto yy352;
        goto yy72;
    yy345:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'f') goto yy353;
        goto yy72;
    yy346:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'o') goto yy354;
        goto yy54;
    yy347:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy348;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy348:
#line 91 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRREADER);
    }
#line 2956 "src/lexer.c"
    yy349:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy350;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy350:
#line 92 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRWRITER);
    }
#line 2980 "src/lexer.c"
    yy351:
        rbs_skip(lexer);
#line 96 "src/lexer.re"
        {
            return rbs_next_token(lexer, kCLASSALIAS);
        }
#line 2985 "src/lexer.c"
    yy352:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 's') goto yy355;
        goto yy72;
    yy353:
        rbs_skip(lexer);
#line 107 "src/lexer.re"
        {
            return rbs_next_token(lexer, kMODULESELF);
        }
#line 2995 "src/lexer.c"
    yy354:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych == 'r') goto yy356;
        goto yy54;
    yy355:
        rbs_skip(lexer);
#line 106 "src/lexer.re"
        {
            return rbs_next_token(lexer, kMODULEALIAS);
        }
#line 3005 "src/lexer.c"
    yy356:
        rbs_skip(lexer);
        yych = rbs_peek(lexer);
        if (yych <= 'Z') {
            if (yych <= '9') {
                if (yych == '!') goto yy112;
                if (yych >= '0') goto yy53;
            } else {
                if (yych == '=') goto yy113;
                if (yych >= 'A') goto yy53;
            }
        } else {
            if (yych <= 'z') {
                if (yych == '_') goto yy53;
                if (yych >= 'a') goto yy53;
            } else {
                if (yych <= 0x0000007F) goto yy357;
                if (yych != 0x0000FFFD) goto yy53;
            }
        }
    yy357:
#line 90 "src/lexer.re"
    {
        return rbs_next_token(lexer, kATTRACCESSOR);
    }
#line 3029 "src/lexer.c"
    }
#line 186 "src/lexer.re"
}
