55 lines
1.7 KiB
Scheme
Executable File
55 lines
1.7 KiB
Scheme
Executable File
#! /usr/bin/mzscheme
|
|
#lang scheme/base
|
|
|
|
(require scheme/path)
|
|
(require scheme/pretty)
|
|
(require scheme/cmdline)
|
|
|
|
(require (file "libcompiler/reader.scm"))
|
|
(require (file "libcompiler/compiler.scm"))
|
|
(require (file "libcompiler/simplifier.scm"))
|
|
(require (file "libcompiler/writer.scm"))
|
|
|
|
;(require profile)
|
|
;(profile (begin
|
|
(define reduce-code? (make-parameter #t))
|
|
(define map-bytecode? (make-parameter #t))
|
|
|
|
(define source-file
|
|
(command-line
|
|
#:once-each
|
|
[("-O") ol "Set the optimization level"
|
|
(optimize? (>= (string->number ol) 1))]
|
|
[("-S" "--simplify-only") "Stop before reducing code to lowest terms"
|
|
(map-bytecode? #f)
|
|
(reduce-code? #f)]
|
|
[("-R" "--reduce-only") "Stop before mapping forms to VM bytecode"
|
|
(map-bytecode? #f)]
|
|
[("-v" "--verbose") "Output verbose intermediate (.rla) representation"
|
|
(verbose-rla? #t)]
|
|
#:args source-file
|
|
(if (null? source-file)
|
|
"-"
|
|
(car source-file))))
|
|
|
|
(define source-module
|
|
(if (string=? source-file "-")
|
|
(read-module)
|
|
(let* ([complete-path (path->complete-path source-file)]
|
|
[directory (path-only complete-path)])
|
|
(with-input-from-file complete-path
|
|
(lambda ()
|
|
(parameterize ([current-directory directory])
|
|
(read-module)))))))
|
|
|
|
(if (map-bytecode?)
|
|
(begin
|
|
(write-rla-value (compile-function source-module))
|
|
(write-char #\Newline))
|
|
(if (reduce-code?)
|
|
(pretty-print (reduce-function source-module))
|
|
(pretty-print (simplify-lambda source-module))))
|
|
;) #:delay 0.002)
|
|
|
|
; vim:set sw=2 expandtab:
|