blob: 4c08e328daea77e2b6b87a957f6b9b803dfe6487 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
(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))
|