blob: 5f1ad1f6e89ce73f1f1062cdf5d6fb9f5ffbaec9 (
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
32
33
34
35
36
37
38
39
40
41
42
|
(define-module (tacky traverse)
#:use-module (ast ir)
#:export (prog
func
stmt
unary
const))
(define (prog srout)
(list 'prog srout))
(define (func name instrs)
(list 'srout name instrs))
(define (stmt val)
(list 'instrs
(cons 'list (append (cdr val)
(list (list 'ret (car val)))))))
(define (expr op val)
(cond
((integer? val) (make-instruction op (imm val) '()))
(#t (make-instruction op (car val) (cdr val)))))
(define (make-instruction op src instrs)
(let ((dst (make-temporary)))
(cons dst
(append instrs
(list (op src dst))))))
(define make-temporary
(let ((count 100))
(lambda ()
(set! count (1+ count))
(list 'tmp count))))
(define (neg src dst)
(list 'neg src dst))
(define (not src dst)
(list 'not src dst))
|