|
@@ -12626,8 +12626,6 @@ from the set.
|
|
|
\label{ch:Rfun}
|
|
|
\index{subject}{function}
|
|
|
|
|
|
-\if\edition\racketEd
|
|
|
-
|
|
|
This chapter studies the compilation of functions similar to those
|
|
|
found in the C language. This corresponds to a subset of Typed Racket
|
|
|
in which only top-level function definitions are allowed. This kind of
|
|
@@ -12685,11 +12683,27 @@ inside each other.
|
|
|
\end{array}
|
|
|
}
|
|
|
|
|
|
+\newcommand{\LfunGrammarPython}{
|
|
|
+ \begin{array}{lcl}
|
|
|
+ \Type &::=& \key{Callable}\LS \LS \Type \key{, } \ldots \RS \key{, } \Type \RS \\
|
|
|
+ \Exp &::=& \Exp \LP \Exp \ldots\RP \\
|
|
|
+ \Def &::=& \CDEF{\Var}{\Var \key{:} \Type\key{, } \ldots}{\Type}{\Stmt^{+}}
|
|
|
+ \end{array}
|
|
|
+}
|
|
|
+\newcommand{\LfunASTPython}{
|
|
|
+ \begin{array}{lcl}
|
|
|
+ \Type &::=& \key{FunctionType}\LP \Type^{*} \key{, } \Type \RP \\
|
|
|
+ \itm{arguments}&::=&
|
|
|
+ \Def &::=& \FUNDEF{\Var}{\itm{arguments}}{\Type}{}{\Stmt^{+}}
|
|
|
+ \end{array}
|
|
|
+}
|
|
|
+
|
|
|
\begin{figure}[tp]
|
|
|
\centering
|
|
|
\fbox{
|
|
|
\begin{minipage}{0.96\textwidth}
|
|
|
\small
|
|
|
+{\if\edition\racketEd
|
|
|
\[
|
|
|
\begin{array}{l}
|
|
|
\gray{\LintGrammarRacket{}} \\ \hline
|
|
@@ -12699,26 +12713,26 @@ inside each other.
|
|
|
\gray{\LtupGrammarRacket} \\ \hline
|
|
|
\LfunGrammarRacket \\
|
|
|
\begin{array}{lcl}
|
|
|
-%% \Type &::=& \gray{ \key{Integer} \MID \key{Boolean}
|
|
|
-%% \MID (\key{Vector}\;\Type\ldots) \MID \key{Void} } \MID (\Type \ldots \; \key{->}\; \Type) \\
|
|
|
-%% \itm{cmp} &::= & \gray{ \key{eq?} \MID \key{<} \MID \key{<=} \MID \key{>} \MID \key{>=} } \\
|
|
|
-%% \Exp &::=& \gray{ \Int \MID \CREAD{} \MID \CNEG{\Exp} \MID \CADD{\Exp}{\Exp} \MID \CSUB{\Exp}{\Exp} } \\
|
|
|
-%% &\MID& \gray{ \Var \MID \CLET{\Var}{\Exp}{\Exp} }\\
|
|
|
-%% &\MID& \gray{ \key{\#t} \MID \key{\#f}
|
|
|
-%% \MID (\key{and}\;\Exp\;\Exp)
|
|
|
-%% \MID (\key{or}\;\Exp\;\Exp)
|
|
|
-%% \MID (\key{not}\;\Exp)} \\
|
|
|
-%% &\MID& \gray{(\itm{cmp}\;\Exp\;\Exp) \MID \CIF{\Exp}{\Exp}{\Exp} } \\
|
|
|
-%% &\MID& \gray{(\key{vector}\;\Exp\ldots) \MID
|
|
|
-%% (\key{vector-ref}\;\Exp\;\Int)} \\
|
|
|
-%% &\MID& \gray{(\key{vector-set!}\;\Exp\;\Int\;\Exp)\MID (\key{void})
|
|
|
-%% \MID \LP\key{has-type}~\Exp~\Type\RP } \\
|
|
|
-%% &\MID& \LP\Exp \; \Exp \ldots\RP \\
|
|
|
-%% \Def &::=& \CDEF{\Var}{\LS\Var \key{:} \Type\RS \ldots}{\Type}{\Exp} \\
|
|
|
\LangFunM{} &::=& \Def \ldots \; \Exp
|
|
|
\end{array}
|
|
|
\end{array}
|
|
|
\]
|
|
|
+\fi}
|
|
|
+{\if\edition\pythonEd
|
|
|
+\[
|
|
|
+\begin{array}{l}
|
|
|
+ \gray{\LintGrammarPython{}} \\ \hline
|
|
|
+ \gray{\LvarGrammarPython{}} \\ \hline
|
|
|
+ \gray{\LifGrammarPython{}} \\ \hline
|
|
|
+ \gray{\LwhileGrammarPython} \\ \hline
|
|
|
+ \gray{\LtupGrammarPython} \\ \hline
|
|
|
+ \LfunGrammarPython \\
|
|
|
+\begin{array}{rcl}
|
|
|
+ \LangFunM{} &::=& \Def^{*} \Stmt^{*}
|
|
|
+\end{array}
|
|
|
+\end{array}
|
|
|
+\]
|
|
|
+\fi}
|
|
|
\end{minipage}
|
|
|
}
|
|
|
\caption{The concrete syntax of \LangFun{}, extending \LangVec{} (Figure~\ref{fig:Lvec-concrete-syntax}).}
|
|
@@ -12730,6 +12744,7 @@ inside each other.
|
|
|
\fbox{
|
|
|
\begin{minipage}{0.96\textwidth}
|
|
|
\small
|
|
|
+{\if\edition\racketEd
|
|
|
\[
|
|
|
\begin{array}{l}
|
|
|
\gray{\LintOpAST} \\ \hline
|
|
@@ -12739,17 +12754,26 @@ inside each other.
|
|
|
\gray{\LtupASTRacket{}} \\ \hline
|
|
|
\LfunASTRacket \\
|
|
|
\begin{array}{lcl}
|
|
|
-%% \Exp &::=& \gray{ \INT{\Int} \MID \VAR{\Var} \MID \LET{\Var}{\Exp}{\Exp} } \\
|
|
|
-%% &\MID& \gray{ \PRIM{\itm{op}}{\Exp\ldots} }\\
|
|
|
-%% &\MID& \gray{ \BOOL{\itm{bool}}
|
|
|
-%% \MID \IF{\Exp}{\Exp}{\Exp} } \\
|
|
|
-%% &\MID& \gray{ \VOID{} \MID \LP\key{HasType}~\Exp~\Type \RP }
|
|
|
-%% \MID \APPLY{\Exp}{\Exp\ldots}\\
|
|
|
-%% \Def &::=& \FUNDEF{\Var}{\LP[\Var \code{:} \Type]\ldots\RP}{\Type}{\code{'()}}{\Exp}\\
|
|
|
\LangFunM{} &::=& \PROGRAMDEFSEXP{\code{'()}}{\LP\Def\ldots\RP)}{\Exp}
|
|
|
\end{array}
|
|
|
\end{array}
|
|
|
\]
|
|
|
+\fi}
|
|
|
+{\if\edition\pythonEd
|
|
|
+\[
|
|
|
+\begin{array}{l}
|
|
|
+ \gray{\LintASTPython{}} \\ \hline
|
|
|
+ \gray{\LvarASTPython{}} \\ \hline
|
|
|
+ \gray{\LifASTPython{}} \\ \hline
|
|
|
+ \gray{\LwhileASTPython} \\ \hline
|
|
|
+ \gray{\LtupASTPython} \\ \hline
|
|
|
+ \LfunASTPython \\
|
|
|
+\begin{array}{rcl}
|
|
|
+ \LangFunM{} &::=& ??
|
|
|
+\end{array}
|
|
|
+\end{array}
|
|
|
+\]
|
|
|
+\fi}
|
|
|
\end{minipage}
|
|
|
}
|
|
|
\caption{The abstract syntax of \LangFun{}, extending \LangVec{} (Figure~\ref{fig:Lvec-syntax}).}
|
|
@@ -13827,7 +13851,7 @@ mainconclusion:
|
|
|
|
|
|
% Further Reading
|
|
|
|
|
|
-\fi % racketEd
|
|
|
+
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
\chapter{Lexically Scoped Functions}
|