// Kyler Olsen // ZINC Bootstrap compiler // Main // June 2025 #include #include #include "sync/types.h" #include "sync/lexer.h" #include "sync/syntax.h" const char* TOKEN_TYPES[] = { "EOF", "IDENTIFIER", "NUMBER", "OPERATOR", "LPAREN", "RPAREN", "SEMICOLON", "LBRACE", "RBRACE", "LBRACKET", "RBRACKET", "CHARACTER", "STRING", "KEYWORD" }; static void print_token(Token token) { printf("Token: %-15s | Text: %.*s\n", TOKEN_TYPES[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); LexerResult lexer_result = lexical_analysis(&lexer); if (lexer_result.type == SYNC_ERROR) { fprintf(stderr, "Error: %s\n", lexer_result.error.message); free(source); return lexer_result.error.code; } TokenResult* token_result = lexer_result.result; int error_count = 0; while (token_result != NULL) { if (token_result->type == SYNC_ERROR) { fprintf(stderr, "Error: %s\n", token_result->error.message); fprintf(stderr, "\tFilename: %s\n", token_result->error.file_info.filename); fprintf(stderr, "\tLn: %zi, Col: %zi\n", token_result->error.file_info.line, token_result->error.file_info.column); clean_token_result(lexer_result.result); free(source); return 1; } else { print_token(token_result->result); } token_result = token_result->next; } TokenArrayResult array_result = token_result_array(lexer_result.result); clean_token_result(lexer_result.result); if (array_result.type == SYNC_ERROR) { fprintf(stderr, "Error: %s\n", array_result.error.message); free(source); return array_result.error.code; } TokenArray tokens = array_result.result; free(tokens.tokens); free(source); printf("Compilation Completed."); return 0; }