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