>>108179339
>Ok the autism bug has me. I will try to make a simple scheme subset -> PIC assembly compiler.
You might be interested in this from a previous bread (scheme subset -> arm)
(define (compile term table reg)
(match term
[(? number? n)
(let ([a (reg)])
(format #t "mov r~a, #~a~%" a n)
a)]
[(? symbol? s)
(let ([a (reg)])
(format #t "mov r~a, r~a~%" a (cdr (assoc s table)))
a)]
[('+ left right)
(let ([a (compile left table reg)]
[b (compile right table reg)])
(format #t "add r~a, r~a, r~a~%" b b a)
b)]
[('let binds scope)
(let* ([syms (map car binds)]
[vals (map cdr binds)]
[n (length binds)]
[regs (iota n)])
(format #t "~:{mov r~a, #~a~%~}" (map cons regs vals))
(set! reg (counter (- n 1)))
(compile scope (append (map cons syms regs) table) reg))]))
(define-syntax test
(syntax-rules ()
[(test program)
(compile 'program '() (counter 0))]))
(test
(+ 2 (+ 3 5)))
mov r1, #5
mov r2, #3
add r1, r1, r2
mov r3, #2
add r1, r1, r3
(test
(let ([a 2]
[b 3])
(+ a (+ b 5))))
mov r0, #2
mov r1, #3
mov r2, #5
mov r3, r1
add r2, r2, r3
mov r4, r0
add r2, r2, r4