diff options
author | Quinn Stephens <quinn@osmora.org> | 2025-06-07 23:03:12 -0400 |
---|---|---|
committer | Quinn Stephens <quinn@osmora.org> | 2025-06-07 23:03:12 -0400 |
commit | 405d0c32ba8a6a065c2a8767295490e4add20498 (patch) | |
tree | 13163943514d9b9e5583e62128c9f92e8d3dd60e /src/main.c | |
parent | c395bce5617a4529036ef75e89be336b396eb880 (diff) |
Refactor and begin parser
* Added token flags
* Added `int` keyword
* Moved code from main.c to parser/parser.c
* Began work on parsing declarations
Signed-off-by: Quinn Stephens <quinn@osmora.org>
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 35 |
1 files changed, 5 insertions, 30 deletions
@@ -27,53 +27,28 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include <stdarg.h> -#include <stdio.h> #include <stdlib.h> #include "lexer.h" #include "log.h" +#include "parser.h" -static const char *src = "void main"; - -static void -tok_error(struct token *tok, const char *fmt, ...) -{ - va_list args; - - fprintf(stderr, "\033[1;97m%d:%d: \033[1;91merror: \033[0m", tok->line, tok->col); - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end(args); -} +static const char *src = "int test\nint main"; int main(int argc, char **argv) { struct lexer lexer; - struct token tok; (void)argc; (void)argv; if (!lexer_init(&lexer, src)) { + log_error("Failed to initialize lexer\n"); return EXIT_FAILURE; } - while (lexer_next(&lexer, &tok)) { - if (tok.kind == TK_EOF) { - return EXIT_SUCCESS; - } - - if (tok.kind == TK_UNKNOWN) { - tok_error(&tok, "unrecognized token\n"); - return EXIT_FAILURE; - } - - if (tok.kind == TK_VOID) { - log_debug("got void\n"); - } else if (tok.kind == TK_IDENTIFIER) { - log_debug("got identifier \"%.*s\"\n", tok.len, tok.pos); - } + if (!parser_parse(&lexer)) { + return EXIT_FAILURE; } return EXIT_SUCCESS; |