From c63cbd8db40fbdeccabd218229010cbfb8a93977 Mon Sep 17 00:00:00 2001 From: Felix Perktold Date: Tue, 23 Dec 2025 14:29:00 +0100 Subject: fix tests, fix empty input behavior --- lisp.y | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) (limited to 'lisp.y') diff --git a/lisp.y b/lisp.y index 086ef93..a4ed142 100644 --- a/lisp.y +++ b/lisp.y @@ -5,6 +5,13 @@ int yylex(void); int yyerror(const char *s); + +void eval_and_print_REPL(value *v) { + if(!v) { return; } + value *ve = eval(global_env, v); + printf(";> "); + println_value(ve); +} %} %union { @@ -14,7 +21,7 @@ int yyerror(const char *s); } %token NUMBER %token STRING SYMBOL -%token LPAREN RPAREN DOT QUOTE NLINE +%token LPAREN RPAREN DOT QUOTE %type expr atom list list_items @@ -22,24 +29,13 @@ int yyerror(const char *s); %% exprs: /* nothing */ - | expr - { - value *v = eval(global_env, $1); - printf(";> "); - println_value(v); - } - | exprs expr - { - value *v = eval(global_env, $2); - printf(";> "); - println_value(v); - }; + | expr { eval_and_print_REPL($1); } + | exprs expr { eval_and_print_REPL($2); } expr: atom | list | LPAREN expr DOT expr RPAREN { $$ = cons($2, $4); } | QUOTE expr { $$ = cons(make_symbol("quote"), cons($2, make_nil())); } - | NLINE { $$ = make_nil(); }; list: LPAREN list_items RPAREN { $$ = $2; }; -- cgit v1.2.3