(define-module (modules generator generator) #:use-module (modules ast syntax-tree) #:use-module (modules ast assembly-tree) #:export (generate)) (define (generate node) (cond ((program? node) (g-program node)) ((function? node) (g-function node)) ((stmt? node) (g-stmt node)) ((expr? node) (g-expr node)) ((id? node) (g-id node)) (else (error "Unknown AST element")))) (define (g-program p) (make-program (generate (program-function p)))) (define (g-function f) (make-subroutine (generate (function-id f)) (generate (function-stmt f)))) (define (g-stmt s) (generate (stmt-expr s))) (define (g-expr e) ;; for now, we assume only 'return'! (list (make-instruction "mov1" "%eax" "$2") (make-instruction "ret" #f #f))) (define (g-id i) (id-symbol i))