aboutsummaryrefslogtreecommitdiff
path: root/src/lexer.c
diff options
context:
space:
mode:
authorc+12023-05-13 14:35:27 -0400
committerc+12023-05-13 14:35:27 -0400
commitc8d473a2e6bfcb463ca4fb3613cf73db8d74e479 (patch)
tree1c6ba184c1291b74759a03f71b851ba6a0866ddb /src/lexer.c
parentce63a4ea610bc80e9862c799633e07d3e896fe92 (diff)
real
Diffstat (limited to 'src/lexer.c')
-rw-r--r--src/lexer.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/lexer.c b/src/lexer.c
index 345d5c5..acfae12 100644
--- a/src/lexer.c
+++ b/src/lexer.c
@@ -1,7 +1,5 @@
-#include "include/lexer.h"
+#include "include/lexer.h"
#include "include/token.h"
-
-
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
@@ -40,16 +38,12 @@ token_t* lexer_get_next_token(lexer_t* lexer) {
lexer->c == ' ' ||
lexer->c == '\t' ||
lexer->c == '\n'
- ) {
- lexer_pass(lexer);
- }
+ ) { lexer_pass(lexer); }
if (
isalnum(lexer->c) ||
lexer->c == '_'
- ) {
- return lexer_get_keyword(lexer);
- }
+ ) { return lexer_get_keyword(lexer); }
switch (lexer->c) {
case '\'':
@@ -221,19 +215,18 @@ token_t* lexer_get_directive(lexer_t* lexer) {
}
token_t* lexer_get_keyword(lexer_t* lexer) {
- lexer_next(lexer);
-
char* str_so_far = calloc(1, sizeof(char));
str_so_far[0] = '\0';
while (isalnum(lexer->c)) {
char* current = lexer_get_c_as_string(lexer);
str_so_far = realloc(str_so_far, (strlen(str_so_far) + strlen(current) * sizeof(char)));
- strcat(str_so_far, current);
-
+ strcat(current, str_so_far);
+ free(current);
lexer_next(lexer);
}
+ lexer_next(lexer);
return token_init(TOKEN_KEYWORD, str_so_far);
}
@@ -251,3 +244,8 @@ char* lexer_get_c_as_string(lexer_t* lexer) {
return str;
}
+
+void lexer_destroy(lexer_t* lexer) {
+ free(lexer->content);
+ free(lexer);
+}