From a7a070371bcc10d0dbf94e503650856ac37ed81d Mon Sep 17 00:00:00 2001 From: Felix Perktold Date: Mon, 22 Dec 2025 00:14:15 +0100 Subject: add reading from files, add quote shorthand (') --- main.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 563d98a..2b0c00f 100644 --- a/main.c +++ b/main.c @@ -6,10 +6,26 @@ #include "lex.yy.h" #include "lisp.tab.h" - env *global_env = NULL; -int main(void) { + +void eval_file(const char *filename) { + FILE *f = fopen(filename, "r"); + if (!f) { + fprintf(stderr, "could not open file: %s\n", filename); + return; + } + + char line[1024]; + while (fgets(line, sizeof(line), f)) { + if (*line == '\n' || *line == ';') continue; // skip empty lines or comments + yy_scan_string(line); + yyparse(); + } + fclose(f); +} + +int main(int argc, char **argv) { // init global env global_env = env_create(NULL); env_define(global_env, "cons", make_builtin(builtin_cons)); @@ -21,6 +37,12 @@ int main(void) { env_define(global_env, "*", make_builtin(builtin_mul)); env_define(global_env, "/", make_builtin(builtin_div)); env_define(global_env, "<=", make_builtin(builtin_le)); + + // evaluate files + for(int i = 1; i < argc; i++) { + eval_file(argv[i]); + } + // START REPL char* line; while ((line = readline("λ> ")) != NULL) { -- cgit v1.2.3