Jeremy Siek 6 years ago
parent
commit
65d8b657cf
2 changed files with 43 additions and 21 deletions
  1. 14 10
      book.tex
  2. 29 11
      notes.md

+ 14 - 10
book.tex

@@ -4150,7 +4150,7 @@ $40$, to which we add the $2$, the element at index $0$ of the
     (\key{vector-ref}\;\Exp\;\Int) \\
   &\mid& (\key{vector-set!}\;\Exp\;\Int\;\Exp)\\
   &\mid& (\key{void}) \\
-  R_3 &::=& (\key{program} \;(\key{type}\;\itm{type})\; \Exp)
+  R_3 &::=& (\key{program} \; \Exp)
 \end{array}
 \]
 \end{minipage}
@@ -5254,21 +5254,20 @@ that does what its name suggests. The program then applies
 The definitional interpreter for $R_4$ is in
 Figure~\ref{fig:interp-R4}.
 
-%% change to do backpatching -Jeremy 
 \begin{figure}[tp]
 \begin{lstlisting}
-(define (interp-exp env global-env)
+(define (interp-exp env)
   (lambda (e)
-    (define recur (interp-exp env global-env))
+    (define recur (interp-exp env))
     (match e
       ...
       [`(,fun ,args ...)
-       (define fun-val (recur fun))
        (define arg-vals (map recur args))
+       (define fun-val (recur fun))
        (match fun-val
-	 [`(lambda (,xs ...) ,body)
-	  (define new-env (append (map cons xs arg-vals) global-env))
-	  ((interp-exp new-env global-env) body)]
+	 [`(lambda (,xs ...) ,body ,fun-env)
+	  (define new-env (append (map cons xs arg-vals) fun-env))
+	  ((interp-exp new-env) body)]
 	 [else (error "interp-exp, expected function, not" fun-val)])]
       [else (error 'interp-exp "unrecognized expression")]
       )))
@@ -5276,14 +5275,19 @@ Figure~\ref{fig:interp-R4}.
 (define (interp-def d)
   (match d
     [`(define (,f [,xs : ,ps] ...) : ,rt ,body)
-     (cons f `(lambda ,xs ,body))]
+     (mcons f `(lambda ,xs ,body ()))]
     ))
 
 (define (interp-R4 p)
   (match p
     [`(program ,ds ... ,body)
      (let ([top-level (map interp-def ds)])
-       ((interp-exp top-level top-level) body))]
+       (for/list ([b top-level])
+         (set-mcdr! b
+                    (match (mcdr b)
+                      [`(lambda ,xs ,body ())
+                       `(lambda ,xs ,body ,top-level)])))
+       ((interp-exp top-level) body))]
     ))
 \end{lstlisting}
 \caption{Interpreter for the $R_4$ language.}

+ 29 - 11
notes.md

@@ -19,7 +19,7 @@ uniquify
 |
 V
 
-    exp ::= ...
+    exp ::= x | n | (op exp*) | (let ([x exp]) exp)
     R1 ::= (program () exp)
 
 remove-complex-opera*
@@ -28,8 +28,7 @@ V
 
     arg ::= x | n
     exp ::= arg | (op arg*) | (let ([x exp]) exp)
-    R2 ::= (program () exp)
-
+    R1' ::= (program () exp)
 
 create-CFG (the graph is empty for this assignment)
 |
@@ -57,15 +56,15 @@ V
 
     imm ::= (var x) | (deref r n) | (int n)
     instr ::= (addq imm imm) | ...
-    x86 ::= (program ((locals . x*)) instr ...)
-    
+    x86 ::= (program ((locals . x*)) instr*)
+
 assign-homes
 |
 V
 
     imm ::= (reg r) | (deref r n) | (int n)
     instr ::= (addq imm imm) | ...
-    x86 ::= (program ((stack-space . n)) instr ...)
+    x86 ::= (program ((stack-space . n)) instr*)
     
 patch-instructions
 |
@@ -137,17 +136,36 @@ V
 
     imm ::= (var x) | (deref r n) | (int n)
     instr ::= (addq imm imm) | ... | (jmp label) | (jmp-if cc label) | (retq) 
-    x86-CFG ::= (program ((locals . x*) (type . type) 
-                          (flow-graph . ((label . instr*)*))) instr*)
+    x86 ::= (program ((locals . x*) (type . type) 
+                      (flow-graph . ((label . instr*)*))) instr*)
+
+uncover-live
+|
+V
 
-uncover-live, build-interference, allocate-registers
+    imm ::= (var x) | (deref r n) | (int n)
+    instr ::= (addq imm imm) | (jmp label) | (jmp-if cc label) | (retq)
+	block ::= (block (lives ls*) instr*)
+    x86 ::= (program ((locals . x*) (type . type)
+                      (flow-graph . ([label . block]*))) block)
+
+build-interference
+|
+V
+
+    x86 ::= (program ((locals . x*) (type . type)
+                      (flow-graph . ([label . block]*))
+						  (conflicts . graph))
+					     block)
+
+allocate-registers
 |
 V
 
     imm ::= (reg r) | (deref r n) | (int n)
     instr ::= (addq imm imm) | ... | (jmp label) | (jmp-if cc label) | (retq)
-    x86-CFG ::= (program  ((locals . x*) (type . type) 
-                          (flow-graph . ((label . instr*)*))) instr*)
+    x86 ::= (program  ((locals . x*) (type . type) 
+                       (flow-graph . ((label . instr*)*))) instr*)
     
 print-x86
 |