(load "chez-init.ss") (load "env.ss") (load "parser.ss") (load "interpreter.ss") (define (rl) (load "main.ss")) (define eval-one-exp (lambda (exp) (top-level-eval (expand-syntax (parse-expression exp))))) (define rep (lambda () (display "--> ") (let ([input (read)]) (if (equal? input '(exit)) (printf "Bye...~%") (let* ([parse-tree (parse-expression input)] [expanded-tree (expand-syntax parse-tree)] ; [response (top-level-eval parse-tree)]) [response (top-level-eval expanded-tree)]) (pretty-print response) (rep)))))) (define (rep) (begin (display "--> ") (let ([inpt (tryread)]) (if (equal? inpt '***myerror-encountered***) (rep) (if (not (equal? inpt '(exit))) (let ([rslt (tryint inpt)]) (if (not (equal? rslt '***myerror-encountered***)) (begin (write rslt) (newline) (rep)) (rep)))))))) (define (tryint exp) (guard (x [else (begin (my-error-print x) '***myerror-encountered***)]) (eval-one-exp exp)))) (define (tryread) (guard (x [else (begin (my-error-print x) '***myerror-encountered***)]) (read))) (define my-error-print (lambda (x) ;; print the message (eopl:printf "Error reported by ~s:~%" (condition-who x)) (apply eopl:printf (cons (condition-message x) (condition-irritants x))) (newline)))