From 29f047404e3364d0d96f58865f8b0d3e355eb4ca Mon Sep 17 00:00:00 2001 From: Kyler Date: Tue, 28 Oct 2025 22:00:19 -0600 Subject: [PATCH] Add lexer and error handling structures for improved token processing --- SLS_C/include/sls/lexer.h | 34 ++++++++++++++++++++++++++++++---- SLS_C/include/sls/sls_errors.h | 19 +++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 SLS_C/include/sls/sls_errors.h diff --git a/SLS_C/include/sls/lexer.h b/SLS_C/include/sls/lexer.h index e24080b..afc20da 100644 --- a/SLS_C/include/sls/lexer.h +++ b/SLS_C/include/sls/lexer.h @@ -8,6 +8,16 @@ #include +#include "sls_errors.h" + +typedef struct { + const char *filename; + const char *source_code; + size_t pos; + size_t column; + size_t line; +} LexerInfo; + typedef enum { TOKEN_EOF, TOKEN_IDENTIFIER, @@ -91,9 +101,25 @@ typedef struct { }; } Token; -typedef struct TokenStream { - Token token; - struct TokenStream *next; -} TokenStream; +typedef struct LexerTokenResult { + SlsResultType type; + union { + Token result; + SlsError error; + }; + struct LexerTokenResult *next; +} LexerTokenResult; + +typedef struct { + SlsResultType type; + union { + LexerTokenResult *result; + SlsError error; + }; +} LexerResult; + +void init_lexer(LexerInfo *lexer_info, const char *filename, const char *source_code); +LexerResult lexical_analysis(LexerInfo *lexer_info); +void clean_token_result(LexerTokenResult* head); #endif // SLS_LEXER_H diff --git a/SLS_C/include/sls/sls_errors.h b/SLS_C/include/sls/sls_errors.h new file mode 100644 index 0000000..6e0a330 --- /dev/null +++ b/SLS_C/include/sls/sls_errors.h @@ -0,0 +1,19 @@ +// Kyler Olsen +// YREA SLS +// SLS Error Header +// October 2025 + +#ifndef SLS_ERROR_H +#define SLS_ERROR_H + +typedef struct { + const char *message; + int code; +} SlsError; + +typedef enum { + SLS_ERROR, + SLS_RESULT, +} SlsResultType; + +#endif // SLS_ERROR_H