summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/ast/ir.scm50
-rw-r--r--src/modules/emitter/driver.scm6
-rw-r--r--src/modules/emitter/traverse.scm50
-rw-r--r--src/modules/generator/allocate.scm16
-rw-r--r--src/modules/generator/assembly.scm18
-rw-r--r--src/modules/generator/driver.scm9
-rw-r--r--src/modules/generator/expansion.scm23
-rw-r--r--src/modules/lexer/driver.scm83
-rw-r--r--src/modules/parser/driver.scm35
-rw-r--r--src/modules/tacky/driver.scm6
-rw-r--r--src/modules/tacky/traverse.scm43
-rw-r--r--src/modules/utils/assign-stack.scm15
-rw-r--r--src/modules/utils/merge-instructions.scm7
13 files changed, 0 insertions, 361 deletions
diff --git a/src/modules/ast/ir.scm b/src/modules/ast/ir.scm
deleted file mode 100644
index 50e9e29..0000000
--- a/src/modules/ast/ir.scm
+++ /dev/null
@@ -1,50 +0,0 @@
-(define-module (ast ir)
- #:export (prog
- srout
- neg
- not
- mov
- stack
- reg
- imm
- tmp
- ret))
-
-;;; Commentary:
-;;;
-;;; Nodes which exist to do nothing when evaluated.
-;;;
-;;; Code:
-
-(define (ir-node type . args)
- (cons type args))
-
-(define (prog func)
- (ir-node 'prog func))
-
-(define (srout label instrs)
- (ir-node 'srout label instrs))
-
-(define (neg dst)
- (ir-node 'neg dst))
-
-(define (not dst)
- (ir-node 'not dst))
-
-(define (mov src dst)
- (ir-node 'mov src dst))
-
-(define (stack val)
- (ir-node 'stack val))
-
-(define (reg val)
- (ir-node 'reg val))
-
-(define (imm val)
- (ir-node 'imm val))
-
-(define (tmp num)
- (ir-node 'tmp num))
-
-(define (ret)
- (ir-node 'ret))
diff --git a/src/modules/emitter/driver.scm b/src/modules/emitter/driver.scm
deleted file mode 100644
index 7ce8517..0000000
--- a/src/modules/emitter/driver.scm
+++ /dev/null
@@ -1,6 +0,0 @@
-(define-module (emitter driver)
- #:export (assembly->string))
-
-
-(define (assembly->string n)
- (eval n (resolve-module '(emitter traverse))))
diff --git a/src/modules/emitter/traverse.scm b/src/modules/emitter/traverse.scm
deleted file mode 100644
index 6c0c19d..0000000
--- a/src/modules/emitter/traverse.scm
+++ /dev/null
@@ -1,50 +0,0 @@
-(define-module (emitter traverse)
- #:export (prog
- subrout
- instr
- allocate
- mov
- ret
- neg
- not
- allocate
- reg
- stack
- imm))
-
-
-(define (prog srout)
- (string-append/shared srout ".section .note.GNU-stack,\"\",@progbits\n"))
-
-(define (srout label instrs)
- (format #f " .globl ~a
-~a:
-\tpushq\t%rbp
-\tmovq\t%rsp, %rbp
-~a" label label (apply string-append/shared instrs)))
-
-(define (mov src dst)
- (format #f "\tmovl\t~a, ~a\n" src dst))
-
-(define (ret)
- "\tmovq\t%rbp, %rsp
-\tpopq\t%rbp
-\tret\n")
-
-(define (neg dst)
- (format #f "\tnegl\t~a\n" dst))
-
-(define (not dst)
- (format #f "\tnotl\t~a\n" dst))
-
-(define (alloc size)
- (format #f "\tsubq\t$~a, %rsp\n" size))
-
-(define (reg r)
- (format #f "%~a" r))
-
-(define (stack loc)
- (format #f "~a(%rbp)" loc))
-
-(define (imm int)
- (format #f "$~a" int))
diff --git a/src/modules/generator/allocate.scm b/src/modules/generator/allocate.scm
deleted file mode 100644
index f975fca..0000000
--- a/src/modules/generator/allocate.scm
+++ /dev/null
@@ -1,16 +0,0 @@
-(define-module (generator allocate)
- #:use-module (utils assign-stack)
- #:export (expansion->allocate))
-
-
-(define (expansion->allocate ast)
- (define (allocate n)
- (cond
- ((null? n) n)
- ((eq? (car n) 'tmp)
- (list 'stack (make-location (cadr n))))
- ((list? (car n))
- (cons (allocate (car n)) (allocate (cdr n))))
- (#t
- (cons (car n) (allocate (cdr n))))))
- (allocate ast))
diff --git a/src/modules/generator/assembly.scm b/src/modules/generator/assembly.scm
deleted file mode 100644
index 55eaaed..0000000
--- a/src/modules/generator/assembly.scm
+++ /dev/null
@@ -1,18 +0,0 @@
-(define-module (generator assembly)
- #:use-module (ast ir)
- #:use-module (utils assign-stack)
- #:use-module (utils merge-instructions)
- #:export (instrs
- mov))
-
-
-(define (instrs lst)
- (cons 'list (cons (list 'alloc (abs (get-frame-size)))
- (merge-instr lst))))
-
-(define (mov src dst)
- (if (and (eq? 'stack (car dst))
- (eq? 'stack (car src)))
- (append (list (list 'mov src (reg "r10d")))
- (list (list 'mov (reg "r10d") dst)))
- (list 'mov src dst)))
diff --git a/src/modules/generator/driver.scm b/src/modules/generator/driver.scm
deleted file mode 100644
index 8b9ed30..0000000
--- a/src/modules/generator/driver.scm
+++ /dev/null
@@ -1,9 +0,0 @@
-(define-module (generator driver)
- #:use-module (generator allocate)
- #:export (tacky->assembly))
-
-
-(define (tacky->assembly n)
- (eval (expansion->allocate
- (eval n (resolve-module '(generator expansion))))
- (resolve-module '(generator assembly))))
diff --git a/src/modules/generator/expansion.scm b/src/modules/generator/expansion.scm
deleted file mode 100644
index 5bfa878..0000000
--- a/src/modules/generator/expansion.scm
+++ /dev/null
@@ -1,23 +0,0 @@
-(define-module (generator expansion)
- #:use-module (ast ir)
- #:use-module (utils merge-instructions)
- #:export (instrs
- not
- neg
- ret))
-
-
-(define (instrs lst)
- #f
- (list 'instrs (cons 'list (merge-instr lst))))
-
-(define (not src dst) (unary 'not src dst))
-(define (neg src dst) (unary 'neg src dst))
-
-(define (ret src)
- (list (list 'mov src (list 'reg "eax"))
- (list 'ret)))
-
-(define (unary op src dst)
- (list (list 'mov src dst)
- (list op dst)))
diff --git a/src/modules/lexer/driver.scm b/src/modules/lexer/driver.scm
deleted file mode 100644
index 92c8687..0000000
--- a/src/modules/lexer/driver.scm
+++ /dev/null
@@ -1,83 +0,0 @@
-(define-module (lexer driver)
- #:export (read-tokens))
-
-(define (read-tokens)
- "Returns a stream of tokens from the
-current input port."
- (define (read-tokens-loop tokens-so-far)
- (let ((token (read-token)))
- (if token
- (read-tokens-loop (cons token tokens-so-far))
- (reverse tokens-so-far))))
- (read-tokens-loop '()))
-
-(define (read-token)
- (let ((chr (read-char)))
- (cond
- ((eof-object? chr) #f)
- ((char-whitespace? chr)
- (read-token))
-
- ((eqv? chr #\() 'left-paren)
- ((eqv? chr #\)) 'right-paren)
- ((eqv? chr #\{) 'open-brace)
- ((eqv? chr #\}) 'close-brace)
- ((eqv? chr #\;) 'semi-colon)
- ((eqv? chr #\~) 'not)
- ((eqv? chr #\*) 'mul)
- ((eqv? chr #\/) 'div)
- ((eqv? chr #\%) 'mod)
-
- ((eqv? chr #\+)
- (if (take-double? chr)
- '++
- 'add))
-
- ((eqv? chr #\-)
- (if (take-double? chr)
- '--
- 'neg))
-
- ((char-numeric? chr)
- (read-constant chr))
-
- ((char-alphabetic? chr)
- (lookup-keyword (read-identifier chr)))
-
- (#t (error "illegal lexical syntax")))))
-
-(define (read-constant chr)
- (define (read-constant-helper chrs-so-far)
- (let ((chr (peek-char)))
- (cond ((and (not (eof-object? chr)) (char-numeric? chr))
- (read-constant-helper (cons (read-char) chrs-so-far)))
- ((and (not (eof-object? chr)) (char-alphabetic? chr))
- (error "identifier starting with digit"))
- (#t (reverse chrs-so-far)))))
- (string->number (list->string (read-constant-helper (list chr)))))
-
-(define (read-identifier chr)
- (define (read-identifier-helper chrs-so-far)
- (let ((chr (peek-char)))
- (cond ((and (not (eof-object? chr))
- (or (char-alphabetic? chr)
- (char-numeric? chr)
- (eqv? chr #\_)))
- (read-identifier-helper (cons (read-char) chrs-so-far)))
- (#t (reverse chrs-so-far)))))
- (list->string (read-identifier-helper (list chr))))
-
-(define (take-double? chr)
- (if (eqv? chr (peek-char))
- (read-char)
- #f))
-
-(define (lookup-keyword id)
- "Given identifier ID, converts it to a keyword
-if one is known."
- (let ((found (assoc
- id
- '(("int" . int)
- ("void" . void)
- ("return" . return)))))
- (if found (cdr found) id)))
diff --git a/src/modules/parser/driver.scm b/src/modules/parser/driver.scm
deleted file mode 100644
index e464a7a..0000000
--- a/src/modules/parser/driver.scm
+++ /dev/null
@@ -1,35 +0,0 @@
-(define-module (parser driver)
- #:use-module (ice-9 match)
- #:export (tokens->ast))
-
-
-(define (die)
- (error "syntax error"))
-
-(define (tokens->ast tokens)
- (match tokens
- ((func ...)
- (list 'prog (function func)))
- (_ (die))))
-
-(define (function tokens)
- (match tokens
- (('int (? string? id) 'left-paren 'void 'right-paren 'open-brace stmt ... 'close-brace)
- (list 'func id (statement stmt)))
- (_ (die))))
-
-(define (statement tokens)
- (match tokens
- (('return expr ... 'semi-colon)
- (list 'stmt (expression expr)))
- (_ (die))))
-
-(define (expression tokens)
- (match tokens
- (((? integer? int))
- (list 'const int))
- (((or 'neg 'not) expr ...)
- (list 'expr (car tokens) (expression expr)))
- (('left-paren expr ... 'right-paren)
- (expression expr))
- (_ (die))))
diff --git a/src/modules/tacky/driver.scm b/src/modules/tacky/driver.scm
deleted file mode 100644
index 9696306..0000000
--- a/src/modules/tacky/driver.scm
+++ /dev/null
@@ -1,6 +0,0 @@
-(define-module (tacky driver)
- #:export (ast->tacky))
-
-
-(define (ast->tacky n)
- (eval n (resolve-module '(tacky traverse))))
diff --git a/src/modules/tacky/traverse.scm b/src/modules/tacky/traverse.scm
deleted file mode 100644
index 2fd4ca7..0000000
--- a/src/modules/tacky/traverse.scm
+++ /dev/null
@@ -1,43 +0,0 @@
-(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)
- (make-instruction op (car val) (cdr val)))
-
-(define (const val)
- (cons (imm 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))
diff --git a/src/modules/utils/assign-stack.scm b/src/modules/utils/assign-stack.scm
deleted file mode 100644
index 1096846..0000000
--- a/src/modules/utils/assign-stack.scm
+++ /dev/null
@@ -1,15 +0,0 @@
-(define-module (utils assign-stack)
- #:export (make-location
- get-frame-size))
-
-
-(define make-location)
-(define get-frame-size)
-(let ((dict (make-hash-table))
- (ptr 0))
- (set! make-location
- (lambda (id)
- (or (hash-ref dict id)
- (begin (set! ptr (1+ ptr))
- (hash-set! dict id (get-frame-size))))))
- (set! get-frame-size (lambda () (* -4 ptr))))
diff --git a/src/modules/utils/merge-instructions.scm b/src/modules/utils/merge-instructions.scm
deleted file mode 100644
index 754117c..0000000
--- a/src/modules/utils/merge-instructions.scm
+++ /dev/null
@@ -1,7 +0,0 @@
-(define-module (utils merge-instructions)
- #:use-module (srfi srfi-1)
- #:export (merge-instr))
-
-
-(define (merge-instr lst)
- (append-map (lambda (x) (if (list? (car x)) x (list x))) lst))