// Lexer Test Example1 // Currently not valid ZINC code 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; }