summaryrefslogtreecommitdiff
path: root/lisp.y
diff options
context:
space:
mode:
authorFelix Perktold <Felix.Perktold@student.uibk.ac.at>2025-12-23 14:29:00 +0100
committerFelix Perktold <Felix.Perktold@student.uibk.ac.at>2025-12-23 14:29:00 +0100
commitc63cbd8db40fbdeccabd218229010cbfb8a93977 (patch)
tree34a9725eb1207a624cb8486420d780bbfb983482 /lisp.y
parentb99be4933bcb850cbaf96f89750e925ecf2e8386 (diff)
fix tests, fix empty input behavior
Diffstat (limited to 'lisp.y')
-rw-r--r--lisp.y24
1 files changed, 10 insertions, 14 deletions
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 <dval> NUMBER
%token <strval> STRING SYMBOL
-%token LPAREN RPAREN DOT QUOTE NLINE
+%token LPAREN RPAREN DOT QUOTE
%type <val> 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; };