(define program (parse-file fname))
(with-output-to-file ofname
(lambda () (map print program)))
- (load ofname))
+ (load ofname)
+ (delete-file ofname))
; If we have a file, then parse it
(if (= 1 (length (command-line-arguments)))
(interpret-file (car (command-line-arguments)))
- ;(map print (parse-file (car (command-line-arguments))))
(print "No input file provided."))
-(declare (unit scheme) (uses parse-utils))
+(declare (unit scheme) (uses parse-utils extras))
+
+(define (obj->string obj)
+ (with-output-to-string
+ (lambda () (display obj))))
(define (scheme-program lst)
(if (null? lst) '()
(syntree-text expr))
(define (scheme-character expr)
- (string-ref (syntree-text expr) 1))
+ (string-append "#\\" (string (string-ref (syntree-text expr) 1))))
(define (scheme-number expr)
(syntree-text expr))
(define (scheme-define expr)
(string-append
"(define "
- (scheme-expression (list-ref (syntree-children expr) 0))
+ (obj->string (scheme-expression (list-ref (syntree-children expr) 0)))
" "
- (scheme-expression (list-ref (syntree-children expr) 1))
+ (obj->string (scheme-expression (list-ref (syntree-children expr) 1)))
")"))
(define (scheme-assign expr)
(string-append
"(set! "
- (scheme-expression (list-ref (syntree-children expr) 0))
+ (obj->string (scheme-expression (list-ref (syntree-children expr) 0)))
" "
- (scheme-expression (list-ref (syntree-children expr) 1))
+ (obj->string (scheme-expression (list-ref (syntree-children expr) 1)))
")"))
(define (scheme-if expr)
(list (map scheme-expression (syntree-children expr))))
(define (scheme-block expr)
- (map scheme-expression (syntree-children expr)))
+ (if (null? (syntree-children expr))
+ '('())
+ (map scheme-expression (syntree-children expr))))
-(declare (unit test)
- (compile-syntax))
+(declare (unit test))
(define unit-tests '())
(define (register-test! test)
(set! unit-tests (append unit-tests (list test))))
-;(define (error msg) msg)
-
(define (print-summary pass fail)
(if (zero? fail)
(print "Success: " pass " tests passed.")