l_lsl: started tokenizer
authorLukas Krickl <lukas@krickl.dev>
Wed, 11 Mar 2026 14:15:15 +0000 (15:15 +0100)
committerLukas Krickl <lukas@krickl.dev>
Wed, 11 Mar 2026 14:15:15 +0000 (15:15 +0100)
src/l_lsl.c
src/l_lsl.h

index 17eafe254033d779c730c2b3bc2317272702b013..820ce6ac22561411519b72a7ef54ce539d96e53d 100644 (file)
@@ -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;
 }
 
index 17ed52b53b0e6927e326cffd5fa625abe1c65072..918c405d2346da10a36509ecf869e0e024bab2b3 100644 (file)
@@ -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