Lexer forces uppercase for symbols

This commit is contained in:
2023-10-26 10:22:35 +01:00
parent 3200e97324
commit b152365561
2 changed files with 10 additions and 1 deletions

View File

@@ -43,13 +43,21 @@ bool is_symbol(char c)
return isalpha(c) || c == '-' || c == '_' || c == '.';
}
char uppercase(char c)
{
if (c >= 'a' && c <= 'z')
return (c - 'a') + 'A';
return c;
}
token_t tokenise_symbol(buffer_t *buffer)
{
token_t token = {.type = TOKEN_SYMBOL, .str_size = 0};
for (; token.str_size < space_left(buffer) &&
is_symbol(buffer->data[buffer->used + token.str_size]);
++token.str_size)
continue;
buffer->data[buffer->used + token.str_size] =
uppercase(buffer->data[buffer->used + token.str_size]);
token.str = calloc(token.str_size + 1, 1);
memcpy(token.str, buffer->data + buffer->used, token.str_size);
token.str[token.str_size] = '\0';

View File

@@ -31,6 +31,7 @@ typedef struct
typedef darr_t buffer_t;
typedef darr_t token_stream_t;
#define TOKEN_STREAM_AT(STREAM_DATA, INDEX) (((token_t *)(STREAM_DATA))[INDEX])
const char *token_type_as_cstr(token_type_t type);
token_stream_t tokenise_buffer(buffer_t *);