diff --git a/src/main.c b/src/main.c index 9c4a6eb..230028c 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,5 @@ #include +#include #include "sync/types.h" #include "sync/lexer.h" @@ -6,17 +7,35 @@ static void print_token(Token token) { printf("Token: %-15s | Text: '%.*s'\n", (const char *[]){ "EOF", "IDENTIFIER", "NUMBER", "OPERATOR", - "LPAREN", "RPAREN", "SEMICOLON", "UNKNOWN" + "LPAREN", "RPAREN", "SEMICOLON", "LBRACE", + "RBRACE", "LBRACKET", "RBRACKET" }[token.type], (int)token.length, token.start ); } int main(void) { - const char *source = "sum = a + b123;\nprint(sum);"; + const char *filename = "test/example1.zn"; + FILE *file = fopen(filename, "rb"); + if (!file) { + fprintf(stderr, "Failed to open file: %s\n", filename); + return 1; + } + fseek(file, 0, SEEK_END); + long filesize = ftell(file); + fseek(file, 0, SEEK_SET); + char *source = malloc(filesize + 1); + if (!source) { + fprintf(stderr, "Failed to allocate memory.\n"); + fclose(file); + return 1; + } + fread(source, 1, filesize, file); + source[filesize] = '\0'; + fclose(file); Lexer lexer; - lexer_init(&lexer, "", source); + lexer_init(&lexer, filename, source); TokenResult result; do { @@ -28,5 +47,6 @@ int main(void) { } } while (result.type != SYNC_ERROR && result.result.type != TOKEN_EOF); + free(source); return 0; } diff --git a/test/example1.zn b/test/example1.zn new file mode 100644 index 0000000..428220a --- /dev/null +++ b/test/example1.zn @@ -0,0 +1,47 @@ + +static void print_token(Token token) { + //printf("Token: %-15s | Text: '%.*s'\n", + (const char *[]){ + //"EOF", "IDENTIFIER", "NUMBER", "OPERATOR", + //"LPAREN", "RPAREN", "SEMICOLON", "UNKNOWN" + }[token.type], + (int)token.length, token.start + ); +} + +int main(void) { + //const char *filename = "test/example1.zn"; + FILE *file = fopen(filename, //"rb"); + if (!file) { + //fprintf(stderr, "Failed to open file: %s\n", filename); + return 1; + } + fseek(file, 0, SEEK_END); + long filesize = ftell(file); + fseek(file, 0, SEEK_SET); + char *source = malloc(filesize + 1); + if (!source) { + //fprintf(stderr, "Failed to allocate memory.\n"); + fclose(file); + return 1; + } + fread(source, 1, filesize, file); + source[filesize] = //'\0'; + fclose(file); + + Lexer lexer; + lexer_init(&lexer, filename, source); + + TokenResult result; + do { + result = lexer_next(&lexer); + if (result.type == SYNC_RESULT) { + print_token(result.result); + } else { + //fprintf(stderr, "Error: %s\n", result.error.message); + } + } while (result.type != SYNC_ERROR && result.result.type != TOKEN_EOF); + + free(source); + return 0; +}