|
|
@@ -209,29 +209,74 @@ ret_err:
|
|
|
enum token_type_enum
|
|
|
lexer_lookup_ident(struct str ident)
|
|
|
{
|
|
|
- if ( ident.size < 3 ) {
|
|
|
+ if ( ident.size < 2 ) {
|
|
|
return TT_IDENT;
|
|
|
}
|
|
|
|
|
|
switch ( ident.data[0] ) {
|
|
|
case 'i':
|
|
|
+ if ( str_eq_cstr(ident, "if", 2) ) {
|
|
|
+ return TT_IF;
|
|
|
+ }
|
|
|
if ( str_eq_cstr(ident, "int", 3) ) {
|
|
|
return TT_TYPE;
|
|
|
}
|
|
|
break;
|
|
|
+ case 's':
|
|
|
+ if ( str_eq_cstr(ident, "switch", 6) ) {
|
|
|
+ return TT_SWITCH;
|
|
|
+ }
|
|
|
+ if ( str_eq_cstr(ident, "struct", 6) ) {
|
|
|
+ return TT_SWITCH;
|
|
|
+ }
|
|
|
+ break;
|
|
|
case 'c':
|
|
|
if ( str_eq_cstr(ident, "char", 4) ) {
|
|
|
return TT_TYPE;
|
|
|
}
|
|
|
+ if ( str_eq_cstr(ident, "case", 4) ) {
|
|
|
+ return TT_CASE;
|
|
|
+ }
|
|
|
if ( str_eq_cstr(ident, "const", 5) ) {
|
|
|
return TT_CONST;
|
|
|
}
|
|
|
+ if ( str_eq_cstr(ident, "continue", 8) ) {
|
|
|
+ return TT_CONST;
|
|
|
+ }
|
|
|
break;
|
|
|
case 'r':
|
|
|
if ( str_eq_cstr(ident, "return", 6) ) {
|
|
|
return TT_RETURN;
|
|
|
}
|
|
|
break;
|
|
|
+ case 'e':
|
|
|
+ if ( str_eq_cstr(ident, "else", 4) ) {
|
|
|
+ return TT_ELSE;
|
|
|
+ }
|
|
|
+ if ( str_eq_cstr(ident, "enum", 4) ) {
|
|
|
+ return TT_ENUM;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 'f':
|
|
|
+ if ( str_eq_cstr(ident, "for", 3) ) {
|
|
|
+ return TT_FOR;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 'b':
|
|
|
+ if ( str_eq_cstr(ident, "break", 5) ) {
|
|
|
+ return TT_BREAK;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 'd':
|
|
|
+ if ( str_eq_cstr(ident, "do", 2) ) {
|
|
|
+ return TT_WHILE;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 'w':
|
|
|
+ if ( str_eq_cstr(ident, "while", 5) ) {
|
|
|
+ return TT_WHILE;
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
|