/* * Copyright (C) 2025 Johnny Richard * * SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of obe. * * obe is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) * any later version. * * obe is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with obe. If not, see . */ #ifndef OBE_LEXER_H #define OBE_LEXER_H #include #include typedef enum obe_token_kind { TOKEN_KW_RETURN, TOKEN_KW_FN, TOKEN_KW_BR, TOKEN_IDENT, TOKEN_LABEL, TOKEN_NUMBER, TOKEN_INT, TOKEN_EQ, TOKEN_COLON, TOKEN_SEMICOLON, TOKEN_LBRACE, TOKEN_RBRACE, TOKEN_EOF, TOKEN_UNKOWN } obe_token_kind_t; typedef struct obe_lexer_loc { size_t offset; size_t lineoffset; size_t lineno; } obe_lexer_loc_t; typedef struct obe_token { obe_token_kind_t kind; obe_string_t value; obe_lexer_loc_t loc; } obe_token_t; typedef struct obe_lexer { char* filename; obe_string_t source; obe_lexer_loc_t loc; } obe_lexer_t; void obe_lexer_init(obe_lexer_t* lexer, char* filename); bool obe_lexer_is_eof(obe_lexer_t* lexer); char obe_lexer_current_char(obe_lexer_t* lexer); char obe_lexer_next_char(obe_lexer_t* lexer); void obe_lexer_next_token(obe_lexer_t* lexer, obe_token_t* token); char* obe_token_to_cstr(obe_token_kind_t kind); #endif /* OBE_LEXER_H */