소스 검색

[lexer/token.h] Adding tokens for multiples identifiers

Adding tokens for:
 - STRUCT
 - ENUM
 - FOR
 - WHILE
 - DO
 - CONTINUE
 - IF
 - ELSE
 - SWITCH
 - CASE
 - BREAK
Vinicius Teshima 1 년 전
부모
커밋
aefb1907ad
2개의 변경된 파일68개의 추가작업 그리고 1개의 파일을 삭제
  1. 46 1
      src/lexer.h
  2. 22 0
      src/token.h

+ 46 - 1
src/lexer.h

@@ -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;
 	}
 
 

+ 22 - 0
src/token.h

@@ -32,7 +32,18 @@ enum token_type_enum {
 	TT_FUNCION,
 	TT_RETURN,
 	TT_CONST,
+	TT_STRUCT,
+	TT_ENUM,
 	TT_TYPE,
+	TT_FOR,
+	TT_WHILE,
+	TT_DO,
+	TT_CONTINUE,
+	TT_IF,
+	TT_ELSE,
+	TT_SWITCH,
+	TT_CASE,
+	TT_BREAK,
 
 	TT_PP_INCLUDE,
 	TT_PP_DEFINE,
@@ -118,7 +129,18 @@ token_type_enum_2_cstr(enum token_type_enum tte)
 	_TOKEN_CASE(TT_FUNCION);
 	_TOKEN_CASE(TT_RETURN);
 	_TOKEN_CASE(TT_CONST);
+	_TOKEN_CASE(TT_STRUCT);
+	_TOKEN_CASE(TT_ENUM);
 	_TOKEN_CASE(TT_TYPE);
+	_TOKEN_CASE(TT_FOR);
+	_TOKEN_CASE(TT_WHILE);
+	_TOKEN_CASE(TT_DO);
+	_TOKEN_CASE(TT_CONTINUE);
+	_TOKEN_CASE(TT_IF);
+	_TOKEN_CASE(TT_ELSE);
+	_TOKEN_CASE(TT_SWITCH);
+	_TOKEN_CASE(TT_CASE);
+	_TOKEN_CASE(TT_BREAK);
 	
 	_TOKEN_CASE(TT_PP_INCLUDE);
 	_TOKEN_CASE(TT_PP_DEFINE);