diff options
| -rw-r--r-- | Makefile | 1 | ||||
| -rw-r--r-- | lisp.c | 2 | ||||
| -rw-r--r-- | lisp.y | 6 |
3 files changed, 5 insertions, 4 deletions
@@ -3,6 +3,7 @@ YACC = bison CC = gcc -g CFLAGS = -DYYDEBUG=1 LIBS = -lreadline -lfl -lm +.SUFFIXES: lisp: lisp.c lisp.tab.o lex.yy.o $(CC) $(CFLAGS) -o $@ lisp.c lisp.tab.o lex.yy.o $(LIBS) @@ -87,7 +87,7 @@ int main(void) { char* line; while ((line = readline("λ > ")) != NULL) { if (*line) add_history(line); - yy_scan_string(line); // feed input to Flex/Bison + yy_scan_string(line); yyparse(); free(line); } @@ -23,7 +23,7 @@ static int is_integer(double x) { %token <ival> LPAREN RPAREN DOT WHITESPACE %token <ival> PLUS MINUS MULT DIV -%type <val> sexpr atom sexprs +%type <val> sexpr atom %start sexprs @@ -31,8 +31,8 @@ static int is_integer(double x) { opt_ws: /* matches no whitespace */ | WHITESPACE; -sexprs: sexpr - | sexprs opt_ws sexpr; +sexprs: sexpr { print_val($1); printf("\n"); } + | sexprs opt_ws sexpr { print_val($3); }; sexpr: atom | LPAREN opt_ws sexpr opt_ws DOT opt_ws sexpr opt_ws RPAREN |
