소스 검색

wibbles on ch. 9

Andrew Tolmach 4 년 전
부모
커밋
9118cf7e94
1개의 변경된 파일13개의 추가작업 그리고 6개의 파일을 삭제
  1. 13 6
      book.tex

+ 13 - 6
book.tex

@@ -12484,7 +12484,7 @@ fine to place \code{begin} there.
 
 Recall that in the \code{explicate-control} pass we define one helper
 function for each kind of position in the program.  For the \LangVar{}
-language of integers and variables we needed kinds of positions:
+language of integers and variables we needed \ocaml{two} kinds of positions:
 assignment and tail. The \code{if} expressions of \LangIf{} introduced
 predicate positions. For \LangLoop{}, the \code{begin} expression introduces
 yet another kind of position: effect position. Except for the last
@@ -12559,6 +12559,9 @@ need to be updated. The three new language forms, \code{while},
 positions.  Only \code{begin} may appear in predicate positions; the
 other two have result type \code{Void}.
 
+\ocaml{Note that it should never be necessary to generate a \LangCIf{}
+  \code{atom} corresponding to the \LangLoop{} void constant \code{()}.}
+
 \section{Select Instructions}
 \label{sec:select-instructions-loop}
 
@@ -12586,8 +12589,8 @@ We recommend using the generic \code{analyze-dataflow} function that
 was presented at the end of Section~\ref{sec:dataflow-analysis} to
 perform liveness analysis, replacing the code in
 \code{uncover-live-CFG} that processed the basic blocks in topological
-order (Section~\ref{sec:liveness-analysis-Rif}). \ocaml{This function
-  has been programmed for you, in file \code{dataflow.ml}.}
+order (Section~\ref{sec:liveness-analysis-Rif}). \ocaml{An implementation
+  of this algorithm is provided to you as a functor in file \code{dataflow.ml}.}
 
 The \code{analyze-dataflow} function has four parameters.
 \begin{enumerate}
@@ -12595,7 +12598,8 @@ The \code{analyze-dataflow} function has four parameters.
   \code{racket/graph} package (see the sidebar in
   Section~\ref{sec:build-interference}) that represents the
   control-flow graph. \ocaml{Remember that it is necessary to
-    transpose the CFG for a backward dataflow problem.}
+    transpose the CFG for a backward dataflow problem. The functor
+  provides separate entry points for forward and backward analyses.}
 \item The second parameter \code{transfer} is a function that applies
   liveness analysis to a basic block. It takes two parameters: the
   label for the block to analyze and the live-after set for that
@@ -12603,11 +12607,14 @@ The \code{analyze-dataflow} function has four parameters.
   the block.  Also, as a side-effect, it should update the block's
   $\itm{info}$ with the liveness information for each instruction. To
   implement the \code{transfer} function, you should be able to reuse
-  the code you already have for analyzing basic blocks.
+  the code you already have for analyzing basic blocks. \ocaml{Depending on
+    how you wrote that code, you may need to refactor it slightly.}
 \item The third and fourth parameters of \code{analyze-dataflow} are
   \code{bottom} and \code{join} for the lattice of abstract states,
   i.e.  sets of locations. The bottom of the lattice is the empty set
-  \code{(set)} and the join operator is \code{set-union}.
+  \code{(set)} and the join operator is \code{set-union}. \ocaml{These
+    parameters are provided once-and-for-all when the functor is
+    instanstantiated.}
 \end{enumerate}