Jeremy Siek vor 4 Jahren
Ursprung
Commit
c03f004bbb
1 geänderte Dateien mit 21 neuen und 21 gelöschten Zeilen
  1. 21 21
      book.tex

+ 21 - 21
book.tex

@@ -1157,8 +1157,8 @@ approximately 500 lines of code.
 
 The \LangVar{} language extends the \LangInt{} language with variable
 definitions.  The concrete syntax of the \LangVar{} language is defined by
-the grammar in Figure~\ref{fig:r1-concrete-syntax} and the abstract
-syntax is defined in Figure~\ref{fig:r1-syntax}.  The non-terminal
+the grammar in Figure~\ref{fig:Rvar-concrete-syntax} and the abstract
+syntax is defined in Figure~\ref{fig:Rvar-syntax}.  The non-terminal
 \Var{} may be any Racket identifier. As in \LangInt{}, \key{read} is a
 nullary operator, \key{-} is a unary operator, and \key{+} is a binary
 operator.  Similar to \LangInt{}, the abstract syntax of \LangVar{} includes the
@@ -1184,7 +1184,7 @@ exhibit several compilation techniques.
 \end{minipage}
 }
 \caption{The concrete syntax of \LangVar{}.}
-\label{fig:r1-concrete-syntax}
+\label{fig:Rvar-concrete-syntax}
 \end{figure}
 
 \begin{figure}[tp]
@@ -1202,14 +1202,14 @@ exhibit several compilation techniques.
 \end{minipage}
 }
 \caption{The abstract syntax of \LangVar{}.}
-\label{fig:r1-syntax}
+\label{fig:Rvar-syntax}
 \end{figure}
 
 Let us dive further into the syntax and semantics of the \LangVar{}
 language.  The \key{let} feature defines a variable for use within its
 body and initializes the variable with the value of an expression.
 The abstract syntax for \key{let} is defined in
-Figure~\ref{fig:r1-syntax}.  The concrete syntax for \key{let} is
+Figure~\ref{fig:Rvar-syntax}.  The concrete syntax for \key{let} is
 \begin{lstlisting}
 (let ([|$\itm{var}$| |$\itm{exp}$|]) |$\itm{exp}$|)
 \end{lstlisting}
@@ -2126,11 +2126,12 @@ right.
 \]
 \end{minipage}
 }
-\caption{\LangVarANF{} is \LangVar{} in administrative normal form (ANF).}
-\label{fig:r1-anf-syntax}
+\caption{\LangVarANF{} is \LangVar{} with operands restricted to
+   atomic expressions, like administrative normal form (ANF).}
+\label{fig:Rvar-anf-syntax}
 \end{figure}
 
-Figure~\ref{fig:r1-anf-syntax} presents the grammar for the output of
+Figure~\ref{fig:Rvar-anf-syntax} presents the grammar for the output of
 this pass, the language \LangVarANF{}. The only difference is that
 operator arguments are restricted to be atomic expressions that are
 defined by the \Atm{} non-terminal. In particular, integer constants
@@ -2290,13 +2291,16 @@ start:
 \end{figure}
 
 The organization of this pass depends on the notion of tail position
-that we have alluded to earlier. Formally, \emph{tail
-  position}\index{subject}{tail position} for the language \LangVar{} is
-defined recursively by the following two rules.
+that we have alluded to earlier.
+
+\begin{definition}
+  The following rules define when an expression is in \textbf{\emph{tail
+  position}}\index{subject}{tail position} for the language \LangVar{}.
 \begin{enumerate}
 \item In $\PROGRAM{\code{()}}{e}$, expression $e$ is in tail position.
 \item If $\LET{x}{e_1}{e_2}$ is in tail position, then so is $e_2$.
 \end{enumerate}
+\end{definition}
 
 We recommend implementing \code{explicate-control} using two mutually
 recursive functions, \code{explicate-tail} and
@@ -2312,17 +2316,13 @@ Figure~\ref{fig:c0-syntax}).
 %
 The \code{explicate-assign} function takes an \Exp{} in \LangVar{},
 the variable that it is to be assigned to, and a \Tail{} in
-\LangCVar{} for the code that will come after the assignment.  The
+\LangCVar{} for the code that comes after the assignment.  The
 \code{explicate-assign} function returns a $\Tail$ in \LangCVar{}.
 
-The \code{explicate-assign} function is in accumulator-passing style
-in that the \code{cont} parameter is used for accumulating the
-output. The reader might be tempted to instead organize
-\code{explicate-assign} in a more direct fashion, without the
-\code{cont} parameter and perhaps using \code{append} to combine
-statements. We warn against that alternative because the
-accumulator-passing style is key to how we generate high-quality code
-for conditional expressions in Chapter~\ref{ch:Rif}.
+The \code{explicate-assign} function is in accumulator-passing style:
+the \code{cont} parameter is used for accumulating the output. This
+accumulator-passing style plays an important role in how we generate
+high-quality code for conditional expressions in Chapter~\ref{ch:Rif}.
 
 \begin{exercise}\normalfont
 %
@@ -4502,7 +4502,7 @@ Section~\ref{sec:type-check-Rif}.
 \end{minipage}
 }
 \caption{The concrete syntax of \LangIf{}, extending \LangVar{}
-  (Figure~\ref{fig:r1-concrete-syntax}) with Booleans and conditionals.}
+  (Figure~\ref{fig:Rvar-concrete-syntax}) with Booleans and conditionals.}
 \label{fig:Rif-concrete-syntax}
 \end{figure}