Initial commit, basic lexer structure

This commit is contained in:
2025-03-30 17:45:51 +02:00
commit df948b18c6
13 changed files with 794 additions and 0 deletions

56
src/lexer.h Normal file
View File

@ -0,0 +1,56 @@
#ifndef INCLUDE_SRC_LEXER_H_
#define INCLUDE_SRC_LEXER_H_
#include "error.h"
#include <stddef.h>
#include <stdio.h>
extern error_t *err_eof;
typedef enum {
TOKEN_ERROR,
TOKEN_IDENTIFIER,
TOKEN_DECIMAL,
TOKEN_HEXADECIMAL,
TOKEN_OCTAL,
TOKEN_BINARY,
TOKEN_CHAR,
TOKEN_STRING,
TOKEN_COLON,
TOKEN_COMMA,
TOKEN_LBRACKET,
TOKEN_RBRACKET,
TOKEN_PLUS,
TOKEN_MINUS,
TOKEN_ASTERISK,
TOKEN_DOT,
TOKEN_COMMENT,
TOKEN_NEWLINE,
TOKEN_WHITESPACE,
} lexer_token_id_t;
typedef struct lexer_token {
lexer_token_id_t id;
size_t line_number;
size_t character_number;
char *value;
const char *explanation;
} lexer_token_t;
constexpr size_t lexer_buffer_size = 32;
typedef struct lexer {
size_t line_number;
size_t character_number;
size_t buffer_count;
char buffer[lexer_buffer_size];
FILE *fp;
} lexer_t;
void lexer_close(lexer_t *lex);
error_t *lexer_open(lexer_t *lex, char *path);
error_t *lexer_next(lexer_t *lex, lexer_token_t *token);
void lexer_token_print(lexer_token_t *token);
void lexer_token_cleanup(lexer_token_t *token);
#endif // INCLUDE_SRC_LEXER_H_