switch (name[0]) { case 'a': switch (name[1]) { case 's': if (name[2] == 'm' && name[3] == '\0') { /* asm */ static const CKeywordToken ckt = { ASM_TOK, "asm" }; return &ckt; } goto unknown; case 'u': if (name[2] == 't' && name[3] == 'o' && name[4] == '\0') { /* auto */ static const CKeywordToken ckt = { AUTO_TOK, "auto" }; return &ckt; } goto unknown; default: goto unknown; } case 'b': if (name[1] == 'r' && name[2] == 'e' && name[3] == 'a' && name[4] == 'k' && name[5] == '\0') { /* break */ static const CKeywordToken ckt = { BREAK_TOK, "break" }; return &ckt; } goto unknown; case 'c': switch (name[1]) { case 'a': if (name[2] == 's' && name[3] == 'e' && name[4] == '\0') { /* case */ static const CKeywordToken ckt = { CASE_TOK, "case" }; return &ckt; } goto unknown; case 'h': if (name[2] == 'a' && name[3] == 'r' && name[4] == '\0') { /* char */ static const CKeywordToken ckt = { CHAR_TOK, "char" }; return &ckt; } goto unknown; case 'o': switch (name[2]) { case 'n': switch (name[3]) { case 's': if (name[4] == 't' && name[5] == '\0') { /* const */ static const CKeywordToken ckt = { CONST_TOK, "const" }; return &ckt; } goto unknown; case 't': if (name[4] == 'i' && name[5] == 'n' && name[6] == 'u' && name[7] == 'e' && name[8] == '\0') { /* continue */ static const CKeywordToken ckt = { CONTINUE_TOK, "continue" }; return &ckt; } goto unknown; default: goto unknown; } default: goto unknown; } default: goto unknown; } case 'd': switch (name[1]) { case 'e': if (name[2] == 'f' && name[3] == 'a' && name[4] == 'u' && name[5] == 'l' && name[6] == 't' && name[7] == '\0') { /* default */ static const CKeywordToken ckt = { DEFAULT_TOK, "default" }; return &ckt; } goto unknown; case 'o': switch (name[2]) { case '\0': { /* do */ static const CKeywordToken ckt = { DO_TOK, "do" }; return &ckt; } case 'u': if (name[3] == 'b' && name[4] == 'l' && name[5] == 'e' && name[6] == '\0') { /* double */ static const CKeywordToken ckt = { DOUBLE_TOK, "double" }; return &ckt; } goto unknown; default: goto unknown; } default: goto unknown; } case 'e': switch (name[1]) { case 'l': if (name[2] == 's' && name[3] == 'e' && name[4] == '\0') { /* else */ static const CKeywordToken ckt = { ELSE_TOK, "else" }; return &ckt; } goto unknown; case 'n': if (name[2] == 'u' && name[3] == 'm' && name[4] == '\0') { /* enum */ static const CKeywordToken ckt = { ENUM_TOK, "enum" }; return &ckt; } goto unknown; case 'x': if (name[2] == 't' && name[3] == 'e' && name[4] == 'r' && name[5] == 'n' && name[6] == '\0') { /* extern */ static const CKeywordToken ckt = { EXTERN_TOK, "extern" }; return &ckt; } goto unknown; default: goto unknown; } case 'f': switch (name[1]) { case 'l': if (name[2] == 'o' && name[3] == 'a' && name[4] == 't' && name[5] == '\0') { /* float */ static const CKeywordToken ckt = { FLOAT_TOK, "float" }; return &ckt; } goto unknown; case 'o': if (name[2] == 'r' && name[3] == '\0') { /* for */ static const CKeywordToken ckt = { FOR_TOK, "for" }; return &ckt; } goto unknown; default: goto unknown; } case 'g': if (name[1] == 'o' && name[2] == 't' && name[3] == 'o' && name[4] == '\0') { /* goto */ static const CKeywordToken ckt = { GOTO_TOK, "goto" }; return &ckt; } goto unknown; case 'i': switch (name[1]) { case 'f': if (name[2] == '\0') { /* if */ static const CKeywordToken ckt = { IF_TOK, "if" }; return &ckt; } goto unknown; case 'n': switch (name[2]) { case 'l': if (name[3] == 'i' && name[4] == 'n' && name[5] == 'e' && name[6] == '\0') { /* inline */ static const CKeywordToken ckt = { INLINE_TOK, "inline" }; return &ckt; } goto unknown; case 't': if (name[3] == '\0') { /* int */ static const CKeywordToken ckt = { INT_TOK, "int" }; return &ckt; } goto unknown; default: goto unknown; } default: goto unknown; } case 'l': if (name[1] == 'o' && name[2] == 'n' && name[3] == 'g' && name[4] == '\0') { /* long */ static const CKeywordToken ckt = { LONG_TOK, "long" }; return &ckt; } goto unknown; case 'r': switch (name[1]) { case 'e': switch (name[2]) { case 'g': if (name[3] == 'i' && name[4] == 's' && name[5] == 't' && name[6] == 'e' && name[7] == 'r' && name[8] == '\0') { /* register */ static const CKeywordToken ckt = { REGISTER_TOK, "register" }; return &ckt; } goto unknown; case 's': if (name[3] == 't' && name[4] == 'r' && name[5] == 'i' && name[6] == 'c' && name[7] == 't' && name[8] == '\0') { /* restrict */ static const CKeywordToken ckt = { RESTRICT_TOK, "restrict" }; return &ckt; } goto unknown; case 't': if (name[3] == 'u' && name[4] == 'r' && name[5] == 'n' && name[6] == '\0') { /* return */ static const CKeywordToken ckt = { RETURN_TOK, "return" }; return &ckt; } goto unknown; default: goto unknown; } default: goto unknown; } case 's': switch (name[1]) { case 'h': if (name[2] == 'o' && name[3] == 'r' && name[4] == 't' && name[5] == '\0') { /* short */ static const CKeywordToken ckt = { SHORT_TOK, "short" }; return &ckt; } goto unknown; case 'i': switch (name[2]) { case 'g': if (name[3] == 'n' && name[4] == 'e' && name[5] == 'd' && name[6] == '\0') { /* signed */ static const CKeywordToken ckt = { SIGNED_TOK, "signed" }; return &ckt; } goto unknown; case 'z': if (name[3] == 'e' && name[4] == 'o' && name[5] == 'f' && name[6] == '\0') { /* sizeof */ static const CKeywordToken ckt = { SIZEOF_TOK, "sizeof" }; return &ckt; } goto unknown; default: goto unknown; } case 't': switch (name[2]) { case 'a': if (name[3] == 't' && name[4] == 'i' && name[5] == 'c' && name[6] == '\0') { /* static */ static const CKeywordToken ckt = { STATIC_TOK, "static" }; return &ckt; } goto unknown; case 'r': if (name[3] == 'u' && name[4] == 'c' && name[5] == 't' && name[6] == '\0') { /* struct */ static const CKeywordToken ckt = { STRUCT_TOK, "struct" }; return &ckt; } goto unknown; default: goto unknown; } case 'w': if (name[2] == 'i' && name[3] == 't' && name[4] == 'c' && name[5] == 'h' && name[6] == '\0') { /* switch */ static const CKeywordToken ckt = { SWITCH_TOK, "switch" }; return &ckt; } goto unknown; default: goto unknown; } case 't': if (name[1] == 'y' && name[2] == 'p' && name[3] == 'e' && name[4] == 'd' && name[5] == 'e' && name[6] == 'f' && name[7] == '\0') { /* typedef */ static const CKeywordToken ckt = { TYPEDEF_TOK, "typedef" }; return &ckt; } goto unknown; case 'u': switch (name[1]) { case 'n': switch (name[2]) { case 'i': if (name[3] == 'o' && name[4] == 'n' && name[5] == '\0') { /* union */ static const CKeywordToken ckt = { UNION_TOK, "union" }; return &ckt; } goto unknown; case 's': if (name[3] == 'i' && name[4] == 'g' && name[5] == 'n' && name[6] == 'e' && name[7] == 'd' && name[8] == '\0') { /* unsigned */ static const CKeywordToken ckt = { UNSIGNED_TOK, "unsigned" }; return &ckt; } goto unknown; default: goto unknown; } default: goto unknown; } case 'v': switch (name[1]) { case 'o': switch (name[2]) { case 'i': if (name[3] == 'd' && name[4] == '\0') { /* void */ static const CKeywordToken ckt = { VOID_TOK, "void" }; return &ckt; } goto unknown; case 'l': if (name[3] == 'a' && name[4] == 't' && name[5] == 'i' && name[6] == 'l' && name[7] == 'e' && name[8] == '\0') { /* volatile */ static const CKeywordToken ckt = { VOLATILE_TOK, "volatile" }; return &ckt; } goto unknown; default: goto unknown; } default: goto unknown; } case 'w': if (name[1] == 'h' && name[2] == 'i' && name[3] == 'l' && name[4] == 'e' && name[5] == '\0') { /* while */ static const CKeywordToken ckt = { WHILE_TOK, "while" }; return &ckt; } goto unknown; default: goto unknown; }