From 2c22cfc40c3521d31ebdab8269cd512496fd222a Mon Sep 17 00:00:00 2001 From: kdx Date: Thu, 19 Jan 2023 05:05:34 +0100 Subject: cool test --- Token.c | 2 ++ Token.h | 2 ++ lexer.c | 2 ++ test | 30 +++++++++++++++++++++++++++--- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Token.c b/Token.c index 0f259a1..3e42631 100644 --- a/Token.c +++ b/Token.c @@ -26,11 +26,13 @@ void token_print(const Token *tok) case TOK_CURL_CLOS: printf("TOK_CURL_CLOS\n"); break; case TOK_SQUAR_OPEN: printf("TOK_SQUAR_OPEN\n"); break; case TOK_SQUAR_CLOS: printf("TOK_SQUAR_CLOS\n"); break; + case TOK_COLON: printf("TOK_COLON\n"); break; case TOK_SEMICOLON: printf("TOK_SEMICOLON\n"); break; case TOK_ASSIGN: printf("TOK_ASSIGN\n"); break; case TOK_COMMA: printf("TOK_COMMA\n"); break; case TOK_COMP_LESS: printf("TOK_COMP_LESS\n"); break; case TOK_MODULO: printf("TOK_MODULO\n"); break; + case TOK_STAR: printf("TOK_STAR\n"); break; case TOK_INCREMENT: printf("TOK_INCREMENT\n"); break; default: printf("token_print TODO: type %d\n", tok->type); break; } diff --git a/Token.h b/Token.h index f11753f..e896c07 100644 --- a/Token.h +++ b/Token.h @@ -13,11 +13,13 @@ enum { TOK_CURL_CLOS, TOK_SQUAR_OPEN, TOK_SQUAR_CLOS, + TOK_COLON, TOK_SEMICOLON, TOK_ASSIGN, TOK_COMMA, TOK_COMP_LESS, TOK_MODULO, + TOK_STAR, /* double char toks */ TOK_INCREMENT, }; diff --git a/lexer.c b/lexer.c index a68b93e..1f76ab8 100644 --- a/lexer.c +++ b/lexer.c @@ -25,11 +25,13 @@ static unsigned int one_wide_tok(const char *s) case '}': return TOK_CURL_CLOS; case '[': return TOK_SQUAR_OPEN; case ']': return TOK_SQUAR_CLOS; + case ':': return TOK_COLON; case ';': return TOK_SEMICOLON; case '=': return TOK_ASSIGN; case ',': return TOK_COMMA; case '<': return TOK_COMP_LESS; case '%': return TOK_MODULO; + case '*': return TOK_STAR; default: return TOK_NONE; } } diff --git a/test b/test index f49dbe5..593194e 100644 --- a/test +++ b/test @@ -1,5 +1,29 @@ -int main(void) { - for (int i = 0; i < 10; i++) { - printf("%d\n", i); +fn main(argc: int, argv: **argv) int; + +fn main(argc: int, argv: **argv) int +{ + if (argc != 2) { + fprintf(stderr, "usage: %s \n", argv[0]); + return 1; } + const fp: *FILE = fopen(argv[1], "rb"); + if (fp == null) { + perror("main"); + return 1; + } + const data: *char = drain(fp); + fclose(fp); + if (data == null) { + fprintf(stderr, "failed to drain '%s'\n", argv[1]); + return 1; + } + const toks: *Token = lexer(data); + free(data); + if (toks == null) { + fprintf(stderr, "lexer failed\n"); + return 1; + } + lexer_print(toks); + lexer_free(toks); + return 0; } -- cgit v1.2.3