23 lines
629 B
Scheme
23 lines
629 B
Scheme
(define-module (scmvm language scheme)
|
||
#:use-module (scmvm assembler)
|
||
#:use-module (ice-9 match))
|
||
|
||
;; Scheme compiler
|
||
;; Scheme subset we're targeting
|
||
;; <prgm> ::= <top> ...
|
||
;; <top> ::= <def> | <exp>
|
||
;; <def> ::= (define <var> <exp>)
|
||
;; | (define (<var> <var> ...) <exp> ...)
|
||
;; <exp> ::= (lambda (<var> ...) <exp> ...)
|
||
;; | (if <exp> <exp> <exp>)
|
||
;; | (<exp> <exp> ...)
|
||
;; | (let ((<var> <exp>) ...) <exp> ...)
|
||
;; | (begin <exp> ...)
|
||
;; | <num> | <sym> | <var> | #t | #f
|
||
|
||
|
||
;; A-Normalization
|
||
;; All arguments to lambdas are atomic
|
||
;; <prgm> ::= <top> ...
|
||
;; <top>
|