@@ -48,6 +48,48 @@ char STRING_CE[] = "ce";
48
48
char STRING_COMMENT_START [] = "comments-start" ;
49
49
char STRING_COMMENT_END [] = "comments-end" ;
50
50
51
+ struct KeywordMap {
52
+ char * string ;
53
+ enum Keyword symbol ;
54
+ };
55
+
56
+ struct KeywordMap KEYWORD_MAP [] = {
57
+ {"Dim" , KWD_DIM },
58
+ {"Local" , KWD_LOCAL },
59
+ {"Global" , KWD_GLOBAL },
60
+ {"Enum" , KWD_ENUM },
61
+ {"Const" , KWD_CONST },
62
+ {"Static" , KWD_STATIC },
63
+ {"ContinueCase" , KWD_CONT_CASE },
64
+ {"ContinueLoop" , KWD_CONT_LOOP },
65
+ {"Default" , KWD_DEFAULT },
66
+ {"Null" , KWD_NULL },
67
+ {"Do" , KWD_DO },
68
+ {"Until" , KWD_UNTIL },
69
+ {"While" , KWD_WHILE },
70
+ {"WEnd" , KWD_END_WHILE },
71
+ {"For" , KWD_FOR },
72
+ {"In" , KWD_IN },
73
+ {"To" , KWD_TO },
74
+ {"Step" , KWD_STEP },
75
+ {"Next" , KWD_NEXT },
76
+ {"Exit" , KWD_EXIT },
77
+ {"ExitLoop" , KWD_EXITLOOP },
78
+ {"Func" , KWD_FUNC },
79
+ {"Return" , KWD_RETURN },
80
+ {"EndFunc" , KWD_END_FUNC },
81
+ {"If" , KWD_IF },
82
+ {"Else" , KWD_ELSE },
83
+ {"ElseIf" , KWD_ELSE_IF },
84
+ {"EndIf" , KWD_END_IF },
85
+ {"ReDim" , KWD_REDIM },
86
+ {"Select" , KWD_SELECT },
87
+ {"Switch" , KWD_SWITCH },
88
+ {"Case" , KWD_CASE },
89
+ {"EndSelect" , KWD_END_SELECT },
90
+ {"EndSwitch" , KWD_END_SWITCH },
91
+ };
92
+
51
93
static void print_token (struct Token * token ) {
52
94
puts ("---### TOKEN ###---" );
53
95
char * token_type ;
@@ -119,6 +161,7 @@ struct Token token_get(char *code, char **next) {
119
161
.type = TOK_UNKNOWN ,
120
162
.data = NULL ,
121
163
.data_len = 0 ,
164
+ .info = NULL ,
122
165
};
123
166
size_t length ;
124
167
char * next_code = NULL ;
@@ -193,6 +236,12 @@ struct Token token_get(char *code, char **next) {
193
236
token .type = TOK_WORD ;
194
237
token .data = code ;
195
238
token .data_len = length ;
239
+
240
+ // Identify keywords
241
+ for (size_t i = 0 ; i < sizeof KEYWORD_MAP / sizeof (struct KeywordMap ); ++ i ) if (strncmp (KEYWORD_MAP [i ].string , code , length ) == 0 ) {
242
+ token .info = & (KEYWORD_MAP [i ].symbol );
243
+ break ;
244
+ }
196
245
} else if (* code == CHR_MACRO || * code == CHR_VARIABLE ){
197
246
// Macro or Variable
198
247
token .type = * code == CHR_MACRO ? TOK_MACRO : TOK_VARIABLE ;
0 commit comments