From: Lukas Krickl Date: Fri, 13 Mar 2026 12:34:37 +0000 (+0100) Subject: scripting: wip number lexing X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=70c75919016fe1960de60eec3bf1d09f0af7707a;p=lrts%2F.git scripting: wip number lexing --- diff --git a/README.md b/README.md index 937c5fb..fbd80b7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # lrts -lukas' real time strategy. +lukas' real time simulation. ## Table of content diff --git a/src/l_lsl.c b/src/l_lsl.c index 2ae4030..e4c0c31 100644 --- a/src/l_lsl.c +++ b/src/l_lsl.c @@ -27,6 +27,28 @@ lrts_bool l_lsl_isnum(char c) { return c >= '0' && c <= '9'; } +lrts_bool l_lsl_ishexnum(char c) { + return (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') + || l_lsl_isnum(c); +} + +lrts_bool l_lsl_isbin(char c) { + return c == '1' || c == '0'; +} + +/* peeks current token */ +#define l_lsl_lex_peek(v, code) \ + (code)[v->lex_pos] + +/* peeks current token and then advances cursor */ +#define l_lsl_lex_consume(v, code)\ + (code)[v->lex_pos++] + +/* advances cursor and then peeks current token */ +#define l_lsl_lex_advance(v, code) \ + (code)[++v->lex_pos] + + char tokbuf[L_LSL_TOK_MAX]; const char* l_lsl_next_token(struct l_lsl_vm *v, const char *code, u32 *token_len) { @@ -34,15 +56,31 @@ const char* l_lsl_next_token(struct l_lsl_vm *v, const char *code, *token_len = 0; - c = code[v->lex_pos]; + c = l_lsl_lex_peek(v, code); if (l_lsl_isnum(c)) { /* decimal number */ while (l_lsl_isnum(c)) { tokbuf[*token_len] = c; *token_len += 1; - c = code[++v->lex_pos]; + c = l_lsl_lex_advance(v, code); + } + } else if (c == '0') { + /* specific base number */ + c = l_lsl_lex_advance(v, code); + + if (l_lsl_isnum(c)) { + /* octal */ + } else if (c == 'x') { + /* hex */ + } else if (c == 'b') { + /* bin */ + } else { + u_log(U_LOG_CRIT, "unknown number base: 0%c\n", c); + return LRTS_NULL; } + + } else { u_log(U_LOG_CRIT, "unknown char: %c\n", c); return LRTS_NULL;