From 6551d88a48c66f9efe6bbc8ba779d86642680792 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Wed, 11 Mar 2026 15:15:15 +0100 Subject: [PATCH] l_lsl: started tokenizer --- src/l_lsl.c | 31 ++++++++++++++++++++++++------- src/l_lsl.h | 5 ++++- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/l_lsl.c b/src/l_lsl.c index 17eafe2..820ce6a 100644 --- a/src/l_lsl.c +++ b/src/l_lsl.c @@ -23,12 +23,24 @@ struct l_lsl_value l_lsl_value_init(void) { return val; } +lrts_bool l_lsl_isnum(char c) { + return c >= '0' && c <= '9'; +} + char *tokbuf[L_LSL_TOK_MAX]; -const char* l_lsl_next_token(const char *code, u32 len, u32 *token_len) { - LRTS_UNUSED(code); - LRTS_UNUSED(len); +const char* l_lsl_next_token(struct l_lsl_vm *v, const char *code, + u32 *token_len) { + char c = 0; *token_len = 0; + + c = code[v->lex_pos]; + + if (l_lsl_isnum(c)) { + } else { + u_log(U_LOG_CRIT, "unknown char: %c\n", c); + return LRTS_NULL; + } return LRTS_NULL; } @@ -37,7 +49,11 @@ struct l_lsl_value l_lsl_compile_file(struct l_lsl_vm *v, const char *path) { struct l_lsl_value val = l_lsl_value_init(); const char *src = u_file_read(path); u32 token_len; - u32 src_len = 0; + u32 prev_lex_pos = v->lex_pos; + const char *prev_file_name = v->path; + + v->lex_pos = 0; + v->path = path; if (src == LRTS_NULL) { u_log(U_LOG_CRIT, "%s: No such file or directory\n", path); @@ -45,15 +61,16 @@ struct l_lsl_value l_lsl_compile_file(struct l_lsl_vm *v, const char *path) { return val; } - src_len = u_strnlen(src, L_LSL_SOURCE_MAX); - u_printf("%s\n", src); - l_lsl_next_token(src, src_len, &token_len); + l_lsl_next_token(v, src, &token_len); u_free((void*)src); + + v->lex_pos = prev_lex_pos; + v->path = prev_file_name; return val; } diff --git a/src/l_lsl.h b/src/l_lsl.h index 17ed52b..918c405 100644 --- a/src/l_lsl.h +++ b/src/l_lsl.h @@ -73,6 +73,9 @@ struct l_lsl_vm { enum l_lsl_error err; enum l_lsl_flags flags; + const char *path; + u32 lex_pos; + u_malloc_fp malloc; u_free_fp free; u_realloc_fp realloc; @@ -95,7 +98,7 @@ void l_lsl_value_free(struct l_lsl_value *v); * the result token is placed into an internal string buffer and should not be modified * or saved. */ -const char* l_lsl_next_token(const char *code, u32 len, u32 *token_len); +const char* l_lsl_next_token(struct l_lsl_vm *v, const char *code, u32 *token_len); /* compiles a program * returns the resulting program's head as a list -- 2.30.2