summaryrefslogtreecommitdiff
path: root/lisp.y
diff options
context:
space:
mode:
authorFelix Perktold <Felix.Perktold@student.uibk.ac.at>2025-12-23 13:36:33 +0100
committerFelix Perktold <Felix.Perktold@student.uibk.ac.at>2025-12-23 13:36:33 +0100
commitb99be4933bcb850cbaf96f89750e925ecf2e8386 (patch)
treeb9bdfb0ae1a4731f414f1db1d959656a57657f34 /lisp.y
parentfddfed044719c2e8d9664a007b214dacc8a0aa36 (diff)
rename eq? to equal?, fix syntax error on empty newline
Diffstat (limited to 'lisp.y')
-rw-r--r--lisp.y9
1 files changed, 5 insertions, 4 deletions
diff --git a/lisp.y b/lisp.y
index 5a39640..086ef93 100644
--- a/lisp.y
+++ b/lisp.y
@@ -8,21 +8,21 @@ int yyerror(const char *s);
%}
%union {
- int ival;
double dval;
const char *strval;
value *val;
}
%token <dval> NUMBER
%token <strval> STRING SYMBOL
-%token <ival> LPAREN RPAREN DOT QUOTE
+%token LPAREN RPAREN DOT QUOTE NLINE
%type <val> expr atom list list_items
%start exprs
%%
-exprs: expr
+exprs: /* nothing */
+ | expr
{
value *v = eval(global_env, $1);
printf(";> ");
@@ -38,7 +38,8 @@ exprs: expr
expr: atom
| list
| LPAREN expr DOT expr RPAREN { $$ = cons($2, $4); }
- | QUOTE expr { $$ = cons(make_symbol("quote"), cons($2, make_nil())); };
+ | QUOTE expr { $$ = cons(make_symbol("quote"), cons($2, make_nil())); }
+ | NLINE { $$ = make_nil(); };
list: LPAREN list_items RPAREN { $$ = $2; };