Skip to content

Commit ea89403

Browse files
committed
Merge branch 'ziggy' of github.com:cmsc430/www into ziggy
2 parents 27a1efe + dafd513 commit ea89403

70 files changed

Lines changed: 948 additions & 65 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

langs/abscond/ast.rkt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#lang racket
2+
(provide Lit)
3+
4+
;; type Expr = (Lit Integer)
5+
6+
(struct Lit (i) #:prefab)

langs/abscond/compile-stdin.rkt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#lang racket
2+
(provide main)
3+
(require "parse.rkt")
4+
(require "compile.rkt")
5+
(require a86/printer)
6+
7+
;; -> Void
8+
;; Compile contents of stdin,
9+
;; emit asm code on stdout
10+
(define (main)
11+
(read-line) ; ignore #lang racket line
12+
(asm-display (compile (parse (read)))))
13+

langs/abscond/compile.rkt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#lang racket
2+
(provide (all-defined-out))
3+
(require "ast.rkt")
4+
(require a86/ast)
5+
6+
(define rax 'rax)
7+
8+
;; Expr -> Asm
9+
(define (compile e)
10+
(prog (Global 'entry)
11+
(Label 'entry)
12+
(compile-e e)
13+
(Ret)))
14+
15+
;; Expr -> Asm
16+
(define (compile-e e)
17+
(match e
18+
[(Lit i) (seq (Mov rax i))]))
19+

langs/abscond/interp-stdin.rkt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#lang racket
2+
(provide main)
3+
(require "parse.rkt")
4+
(require "interp.rkt")
5+
6+
;; -> Void
7+
;; Parse and interpret contents of stdin,
8+
;; print result on stdout
9+
(define (main)
10+
(read-line) ; ignore #lang racket line
11+
(println (interp (parse (read)))))
12+

langs/abscond/interp.rkt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#lang racket
2+
(provide interp)
3+
(require "ast.rkt")
4+
5+
;; Expr -> Integer
6+
(define (interp e)
7+
(match e
8+
[(Lit i) i]))
9+
10+

langs/abscond/main.rkt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#lang racket
2+
(require "ast.rkt")
3+
(require "parse.rkt")
4+
(require "interp.rkt")
5+
(require "compile.rkt")
6+
(require "run.rkt")
7+
(provide (all-from-out "ast.rkt"))
8+
(provide (all-from-out "parse.rkt"))
9+
(provide (all-from-out "interp.rkt"))
10+
(provide (all-from-out "compile.rkt"))
11+
(provide (all-from-out "run.rkt"))
12+
13+

langs/abscond/parse.rkt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#lang racket
2+
(provide parse)
3+
(require "ast.rkt")
4+
5+
;; S-Expr -> Expr
6+
(define (parse s)
7+
(match s
8+
[(? exact-integer?) (Lit s)]
9+
[_ (error "Parse error")]))

langs/abscond/run-stdin.rkt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#lang racket
2+
(provide main)
3+
(require "parse.rkt")
4+
(require "compile.rkt")
5+
(require "run.rkt")
6+
7+
;; -> Void
8+
;; Compile contents of stdin and use asm-interp to run
9+
(define (main)
10+
(read-line) ; ignore #lang racket line
11+
(run (compile (parse (read)))))
12+

langs/abscond/run.rkt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#lang racket
2+
(require a86/interp)
3+
(provide run)
4+
5+
;; Asm -> Integer
6+
(define (run is)
7+
(asm-interp is))
8+

langs/abscond/test/compile.rkt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#lang racket
2+
(require "../compile.rkt")
3+
(require "../parse.rkt")
4+
(require "../run.rkt")
5+
(require "test-runner.rkt")
6+
7+
(test (λ (e) (run (compile (parse e)))))
8+

0 commit comments

Comments
 (0)