aboutsummaryrefslogtreecommitdiff
path: root/src/lexer.c
diff options
context:
space:
mode:
authors-over-42023-09-30 16:59:13 -0400
committers-over-42023-09-30 16:59:13 -0400
commit2569231ab9876d59a5e14261bae81dca4d24e4e3 (patch)
treebff30779f3debbc604ec2da3d41f672f531be67e /src/lexer.c
parentf675656431075450714f2a1054ea8db3a2897e26 (diff)
use flag vars for preprocessor states
Diffstat (limited to 'src/lexer.c')
-rw-r--r--src/lexer.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/src/lexer.c b/src/lexer.c
index 09831bb..7a6aed5 100644
--- a/src/lexer.c
+++ b/src/lexer.c
@@ -104,21 +104,16 @@ token_t* lexer_next_token(lexer_t* lexer, int token_type) {
return token;
}
-/* get the current character as a string */
char* lexer_get_c_as_string(lexer_t* lexer) {
char* str; /* the string to return */
- str = calloc(2, sizeof(char));
+ str = malloc(2);
str[0] = lexer->c;
str[1] = '\0';
return str;
}
-/*
- fskip: skip first char?
- lskip: skip last char?
-*/
token_t* lexer_collect(lexer_t* lexer, int (*end_char)(char), int fskip, int lskip, int type) {
size_t len; /* length of collected token so far */
char* token; /* collected token so far */
@@ -146,7 +141,28 @@ token_t* lexer_collect(lexer_t* lexer, int (*end_char)(char), int fskip, int lsk
if (lskip) { lexer_next(lexer); }
- token[len] = '\0'; /* null terminate */
+ token[len] = '\0'; /* terminate */
return token_init(type, token);
}
+
+lexer_t* lexer_run(lexer_t* lexer) {
+ while (1) {
+ token_t* token;
+ char* type;
+
+ token = lexer_get_next_token(lexer);
+ type = token_get_type(token->type);
+
+ log_inf("type: %s\t\tval:%s", type, token->value);
+
+ if (token->type == TOKEN_EOF) {
+ token_destroy(token);
+ break;
+ }
+
+ token_destroy(token);
+ }
+
+ return lexer;
+}