|
@@ -1,5 +1,8 @@
|
|
\documentclass[7x10]{TimesAPriori_MIT}%%7x10
|
|
\documentclass[7x10]{TimesAPriori_MIT}%%7x10
|
|
|
|
|
|
|
|
+% TODO:
|
|
|
|
+% move binary subtraction from Lif to Lint
|
|
|
|
+
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[utf8]{inputenc}
|
|
%% \usepackage{setspace}
|
|
%% \usepackage{setspace}
|
|
%% \doublespacing
|
|
%% \doublespacing
|
|
@@ -884,11 +887,13 @@ defined in Figure~\ref{fig:r0-concrete-syntax}.
|
|
|
|
|
|
\newcommand{\LintGrammar}{
|
|
\newcommand{\LintGrammar}{
|
|
\begin{array}{rcl}
|
|
\begin{array}{rcl}
|
|
|
|
+ \Type &::=& \key{Integer} \\
|
|
\Exp{} &::=& \Int{} \MID \LP\key{read}\RP \MID \LP\key{-}\;\Exp\RP \MID \LP\key{+} \; \Exp{}\;\Exp{}\RP
|
|
\Exp{} &::=& \Int{} \MID \LP\key{read}\RP \MID \LP\key{-}\;\Exp\RP \MID \LP\key{+} \; \Exp{}\;\Exp{}\RP
|
|
\end{array}
|
|
\end{array}
|
|
}
|
|
}
|
|
\newcommand{\LintAST}{
|
|
\newcommand{\LintAST}{
|
|
\begin{array}{rcl}
|
|
\begin{array}{rcl}
|
|
|
|
+ \Type &::=& \key{Integer} \\
|
|
\Exp{} &::=& \INT{\Int} \MID \READ{} \\
|
|
\Exp{} &::=& \INT{\Int} \MID \READ{} \\
|
|
&\MID& \NEG{\Exp} \MID \ADD{\Exp}{\Exp}
|
|
&\MID& \NEG{\Exp} \MID \ADD{\Exp}{\Exp}
|
|
\end{array}
|
|
\end{array}
|
|
@@ -1720,7 +1725,7 @@ exhibit several compilation techniques.
|
|
{\if\edition\racketEd
|
|
{\if\edition\racketEd
|
|
\[
|
|
\[
|
|
\begin{array}{l}
|
|
\begin{array}{l}
|
|
- \gray{\LintGrammar{}} \\
|
|
|
|
|
|
+ \gray{\LintGrammar{}} \\ \hline
|
|
\LvarGrammar{} \\
|
|
\LvarGrammar{} \\
|
|
\begin{array}{rcl}
|
|
\begin{array}{rcl}
|
|
\LangVarM{} &::=& \Exp
|
|
\LangVarM{} &::=& \Exp
|
|
@@ -1750,7 +1755,7 @@ exhibit several compilation techniques.
|
|
{\if\edition\racketEd
|
|
{\if\edition\racketEd
|
|
\[
|
|
\[
|
|
\begin{array}{l}
|
|
\begin{array}{l}
|
|
- \gray{\LintAST{}} \\
|
|
|
|
|
|
+ \gray{\LintAST{}} \\ \hline
|
|
\LvarAST \\
|
|
\LvarAST \\
|
|
\begin{array}{rcl}
|
|
\begin{array}{rcl}
|
|
\LangVarM{} &::=& \PROGRAM{\code{'()}}{\Exp}
|
|
\LangVarM{} &::=& \PROGRAM{\code{'()}}{\Exp}
|
|
@@ -6468,6 +6473,7 @@ operators to include
|
|
|
|
|
|
\newcommand{\LifGrammar}{
|
|
\newcommand{\LifGrammar}{
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
|
|
+ \Type &::=& \key{Boolean} \\
|
|
\itm{bool} &::=& \TRUE \MID \FALSE \\
|
|
\itm{bool} &::=& \TRUE \MID \FALSE \\
|
|
\itm{cmp} &::= & \key{eq?} \MID \key{<} \MID \key{<=} \MID \key{>} \MID \key{>=} \\
|
|
\itm{cmp} &::= & \key{eq?} \MID \key{<} \MID \key{<=} \MID \key{>} \MID \key{>=} \\
|
|
\Exp &::=& \CSUB{\Exp}{\Exp} \MID \itm{bool}
|
|
\Exp &::=& \CSUB{\Exp}{\Exp} \MID \itm{bool}
|
|
@@ -6478,17 +6484,17 @@ operators to include
|
|
}
|
|
}
|
|
\newcommand{\LifAST}{
|
|
\newcommand{\LifAST}{
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
|
|
+ \Type &::=& \key{Boolean} \\
|
|
\itm{bool} &::=& \code{\#t} \MID \code{\#f} \\
|
|
\itm{bool} &::=& \code{\#t} \MID \code{\#f} \\
|
|
\itm{cmp} &::= & \code{eq?} \MID \code{<} \MID \code{<=} \MID \code{>} \MID \code{>=} \\
|
|
\itm{cmp} &::= & \code{eq?} \MID \code{<} \MID \code{<=} \MID \code{>} \MID \code{>=} \\
|
|
- \itm{op} &::= & \itm{cmp} \MID \code{read} \MID \code{+} \MID \code{-}
|
|
|
|
- \MID \code{and} \MID \code{or} \MID \code{not} \\
|
|
|
|
- \Exp &::=& \PRIM{\itm{op}}{\Exp\ldots}
|
|
|
|
- \MID \BOOL{\itm{bool}} \MID \IF{\Exp}{\Exp}{\Exp} \\
|
|
|
|
|
|
+ \itm{op} &::= & \itm{cmp} \MID \code{and} \MID \code{or} \MID \code{not} \\
|
|
|
|
+ \Exp &::=& \BOOL{\itm{bool}} \MID \IF{\Exp}{\Exp}{\Exp}
|
|
\end{array}
|
|
\end{array}
|
|
}
|
|
}
|
|
\newcommand{\LintOnlyAST}{
|
|
\newcommand{\LintOnlyAST}{
|
|
\begin{array}{rcl}
|
|
\begin{array}{rcl}
|
|
- \Exp{} &::=& \INT{\Int}
|
|
|
|
|
|
+ \itm{op} &::= & \code{read} \MID \code{+} \MID \code{-}\\
|
|
|
|
+ \Exp{} &::=& \INT{\Int} \MID \PRIM{\itm{op}}{\Exp\ldots}
|
|
\end{array}
|
|
\end{array}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -6499,9 +6505,9 @@ operators to include
|
|
{\if\edition\racketEd
|
|
{\if\edition\racketEd
|
|
\[
|
|
\[
|
|
\begin{array}{l}
|
|
\begin{array}{l}
|
|
- \LifGrammar{} \\
|
|
|
|
- \gray{\LintGrammar{}} \\
|
|
|
|
- \gray{\LvarGrammar{}} \\
|
|
|
|
|
|
+ \gray{\LintGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LvarGrammar{}} \\ \hline
|
|
|
|
+ \LifGrammar{} \\
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
\LangIfM{} &::=& \Exp
|
|
\LangIfM{} &::=& \Exp
|
|
\end{array}
|
|
\end{array}
|
|
@@ -6535,9 +6541,9 @@ operators to include
|
|
{\if\edition\racketEd
|
|
{\if\edition\racketEd
|
|
\[
|
|
\[
|
|
\begin{array}{l}
|
|
\begin{array}{l}
|
|
- \LifAST{} \\
|
|
|
|
- \gray{\LintOnlyAST} \\
|
|
|
|
- \gray{\LvarAST{}} \\
|
|
|
|
|
|
+ \gray{\LintOnlyAST} \\ \hline
|
|
|
|
+ \gray{\LvarAST{}} \\ \hline
|
|
|
|
+ \LifAST{} \\
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
\LangIfM{} &::=& \PROGRAM{\code{'()}}{\Exp}
|
|
\LangIfM{} &::=& \PROGRAM{\code{'()}}{\Exp}
|
|
\end{array}
|
|
\end{array}
|
|
@@ -9455,6 +9461,7 @@ the condition remains true.
|
|
|
|
|
|
\newcommand{\LwhileGrammar}{
|
|
\newcommand{\LwhileGrammar}{
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
|
|
+ \Type &::=& \key{Void}\\
|
|
\Exp &::=& \CSETBANG{\Var}{\Exp}
|
|
\Exp &::=& \CSETBANG{\Var}{\Exp}
|
|
\MID \CBEGIN{\Exp\ldots}{\Exp}
|
|
\MID \CBEGIN{\Exp\ldots}{\Exp}
|
|
\MID \CWHILE{\Exp}{\Exp} \MID \LP\key{void}\RP
|
|
\MID \CWHILE{\Exp}{\Exp} \MID \LP\key{void}\RP
|
|
@@ -9462,6 +9469,7 @@ the condition remains true.
|
|
}
|
|
}
|
|
\newcommand{\LwhileAST}{
|
|
\newcommand{\LwhileAST}{
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
|
|
+ \Type &::=& \key{Void}\\
|
|
\Exp &::=& \SETBANG{\Var}{\Exp} \MID \BEGIN{\LP\Exp\ldots\RP}{\Exp}\\
|
|
\Exp &::=& \SETBANG{\Var}{\Exp} \MID \BEGIN{\LP\Exp\ldots\RP}{\Exp}\\
|
|
&\MID& \WHILE{\Exp}{\Exp} \MID \VOID{}
|
|
&\MID& \WHILE{\Exp}{\Exp} \MID \VOID{}
|
|
\end{array}
|
|
\end{array}
|
|
@@ -9475,9 +9483,9 @@ the condition remains true.
|
|
{\if\edition\racketEd
|
|
{\if\edition\racketEd
|
|
\[
|
|
\[
|
|
\begin{array}{l}
|
|
\begin{array}{l}
|
|
- \gray{\LifGrammar{}} \\
|
|
|
|
- \gray{\LintGrammar{}} \\
|
|
|
|
- \gray{\LvarGrammar{}} \\
|
|
|
|
|
|
+ \gray{\LintGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LvarGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LifGrammar{}} \\ \hline
|
|
\LwhileGrammar \\
|
|
\LwhileGrammar \\
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
\LangLoopM{} &::=& \Exp
|
|
\LangLoopM{} &::=& \Exp
|
|
@@ -9513,9 +9521,9 @@ the condition remains true.
|
|
{\if\edition\racketEd
|
|
{\if\edition\racketEd
|
|
\[
|
|
\[
|
|
\begin{array}{l}
|
|
\begin{array}{l}
|
|
- \gray{\LifAST{}} \\
|
|
|
|
- \gray{\LintOnlyAST} \\
|
|
|
|
- \gray{\LvarAST{}} \\
|
|
|
|
|
|
+ \gray{\LintOnlyAST} \\ \hline
|
|
|
|
+ \gray{\LvarAST{}} \\ \hline
|
|
|
|
+ \gray{\LifAST{}} \\ \hline
|
|
\LwhileAST{} \\
|
|
\LwhileAST{} \\
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
%% \Exp &::=& \gray{ \INT{\Int} \VAR{\Var} \MID \LET{\Var}{\Exp}{\Exp} } \\
|
|
%% \Exp &::=& \gray{ \INT{\Int} \VAR{\Var} \MID \LET{\Var}{\Exp}{\Exp} } \\
|
|
@@ -10591,8 +10599,7 @@ print( t[0] + t[2][0] if t[1] else 44 )
|
|
|
|
|
|
\newcommand{\LtupGrammar}{
|
|
\newcommand{\LtupGrammar}{
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
- \Type &::=& \key{Integer} \MID \key{Boolean} \MID \key{Void}
|
|
|
|
- \MID \LP\key{Vector}\;\Type\ldots\RP \\
|
|
|
|
|
|
+ \Type &::=& \LP\key{Vector}\;\Type\ldots\RP \\
|
|
\Exp &::=& \LP\key{vector}\;\Exp\ldots\RP
|
|
\Exp &::=& \LP\key{vector}\;\Exp\ldots\RP
|
|
\MID \LP\key{vector-length}\;\Exp\RP \\
|
|
\MID \LP\key{vector-length}\;\Exp\RP \\
|
|
&\MID& \LP\key{vector-ref}\;\Exp\;\Int\RP
|
|
&\MID& \LP\key{vector-ref}\;\Exp\;\Int\RP
|
|
@@ -10601,8 +10608,7 @@ print( t[0] + t[2][0] if t[1] else 44 )
|
|
}
|
|
}
|
|
\newcommand{\LtupAST}{
|
|
\newcommand{\LtupAST}{
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
- \Type &::=& \key{Integer} \MID \key{Boolean} \MID \key{Void}
|
|
|
|
- \MID \LP\key{Vector}\;\Type\ldots\RP \\
|
|
|
|
|
|
+ \Type &::=& \LP\key{Vector}\;\Type\ldots\RP \\
|
|
\itm{op} &::=& \code{vector} \MID \code{vector-length} \\
|
|
\itm{op} &::=& \code{vector} \MID \code{vector-length} \\
|
|
\Exp &::=& \VECREF{\Exp}{\INT{\Int}} \\
|
|
\Exp &::=& \VECREF{\Exp}{\INT{\Int}} \\
|
|
&\MID& \VECSET{\Exp}{\INT{\Int}}{\Exp} \\
|
|
&\MID& \VECSET{\Exp}{\INT{\Int}}{\Exp} \\
|
|
@@ -10617,10 +10623,10 @@ print( t[0] + t[2][0] if t[1] else 44 )
|
|
{\if\edition\racketEd
|
|
{\if\edition\racketEd
|
|
\[
|
|
\[
|
|
\begin{array}{l}
|
|
\begin{array}{l}
|
|
- \gray{\LifGrammar{}} \\
|
|
|
|
- \gray{\LintGrammar{}} \\
|
|
|
|
- \gray{\LvarGrammar{}} \\
|
|
|
|
- \gray{\LwhileGrammar} \\
|
|
|
|
|
|
+ \gray{\LintGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LvarGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LifGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LwhileGrammar} \\ \hline
|
|
\LtupGrammar \\
|
|
\LtupGrammar \\
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
%% \Type &::=& \gray{\key{Integer} \MID \key{Boolean}}
|
|
%% \Type &::=& \gray{\key{Integer} \MID \key{Boolean}}
|
|
@@ -10675,10 +10681,10 @@ print( t[0] + t[2][0] if t[1] else 44 )
|
|
{\if\edition\racketEd
|
|
{\if\edition\racketEd
|
|
\[
|
|
\[
|
|
\begin{array}{l}
|
|
\begin{array}{l}
|
|
- \gray{\LifAST{}} \\
|
|
|
|
- \gray{\LintOnlyAST} \\
|
|
|
|
- \gray{\LvarAST{}} \\
|
|
|
|
- \gray{\LwhileAST{}} \\
|
|
|
|
|
|
+ \gray{\LintOnlyAST} \\ \hline
|
|
|
|
+ \gray{\LvarAST{}} \\ \hline
|
|
|
|
+ \gray{\LifAST{}} \\ \hline
|
|
|
|
+ \gray{\LwhileAST{}} \\ \hline
|
|
\LtupAST{} \\
|
|
\LtupAST{} \\
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
%% \Exp &::=& \gray{ \INT{\Int} \MID \VAR{\Var} \MID \LET{\Var}{\Exp}{\Exp} } \\
|
|
%% \Exp &::=& \gray{ \INT{\Int} \MID \VAR{\Var} \MID \LET{\Var}{\Exp}{\Exp} } \\
|
|
@@ -12700,11 +12706,11 @@ inside each other.
|
|
\small
|
|
\small
|
|
\[
|
|
\[
|
|
\begin{array}{l}
|
|
\begin{array}{l}
|
|
- \gray{\LifGrammar{}} \\
|
|
|
|
- \gray{\LintGrammar{}} \\
|
|
|
|
- \gray{\LvarGrammar{}} \\
|
|
|
|
- \gray{\LwhileGrammar} \\
|
|
|
|
- \gray{\LtupGrammar} \\
|
|
|
|
|
|
+ \gray{\LintGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LvarGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LifGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LwhileGrammar} \\ \hline
|
|
|
|
+ \gray{\LtupGrammar} \\ \hline
|
|
\LfunGrammar \\
|
|
\LfunGrammar \\
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
%% \Type &::=& \gray{ \key{Integer} \MID \key{Boolean}
|
|
%% \Type &::=& \gray{ \key{Integer} \MID \key{Boolean}
|
|
@@ -12740,11 +12746,11 @@ inside each other.
|
|
\small
|
|
\small
|
|
\[
|
|
\[
|
|
\begin{array}{l}
|
|
\begin{array}{l}
|
|
- \gray{\LifAST{}} \\
|
|
|
|
- \gray{\LintOnlyAST} \\
|
|
|
|
- \gray{\LvarAST{}} \\
|
|
|
|
- \gray{\LwhileAST{}} \\
|
|
|
|
- \gray{\LtupAST{}} \\
|
|
|
|
|
|
+ \gray{\LintOnlyAST} \\ \hline
|
|
|
|
+ \gray{\LvarAST{}} \\ \hline
|
|
|
|
+ \gray{\LifAST{}} \\ \hline
|
|
|
|
+ \gray{\LwhileAST{}} \\ \hline
|
|
|
|
+ \gray{\LtupAST{}} \\ \hline
|
|
\LfunAST \\
|
|
\LfunAST \\
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
%% \Exp &::=& \gray{ \INT{\Int} \MID \VAR{\Var} \MID \LET{\Var}{\Exp}{\Exp} } \\
|
|
%% \Exp &::=& \gray{ \INT{\Int} \MID \VAR{\Var} \MID \LET{\Var}{\Exp}{\Exp} } \\
|
|
@@ -13974,32 +13980,54 @@ Figures~\ref{fig:Rlam-concrete-syntax} and ~\ref{fig:Rlam-syntax}. It adds
|
|
the \key{lambda} form to the grammar for \LangFun{}, which already has
|
|
the \key{lambda} form to the grammar for \LangFun{}, which already has
|
|
syntax for function application.
|
|
syntax for function application.
|
|
|
|
|
|
|
|
+\newcommand{\LlambdaGrammar}{
|
|
|
|
+ \begin{array}{lcl}
|
|
|
|
+ \Exp &::=& \LP \key{procedure-arity}~\Exp\RP \\
|
|
|
|
+ &\MID& \CLAMBDA{\LP\LS\Var \key{:} \Type\RS\ldots\RP}{\Type}{\Exp}
|
|
|
|
+ \end{array}
|
|
|
|
+}
|
|
|
|
+\newcommand{\LlambdaAST}{
|
|
|
|
+ \begin{array}{lcl}
|
|
|
|
+ \itm{op} &::=& \code{procedure-arity} \\
|
|
|
|
+ \Exp &::=& \LAMBDA{\LP\LS\Var\code{:}\Type\RS\ldots\RP}{\Type}{\Exp}
|
|
|
|
+ \end{array}
|
|
|
|
+}
|
|
|
|
+
|
|
\begin{figure}[tp]
|
|
\begin{figure}[tp]
|
|
\centering
|
|
\centering
|
|
\fbox{
|
|
\fbox{
|
|
\begin{minipage}{0.96\textwidth}
|
|
\begin{minipage}{0.96\textwidth}
|
|
\small
|
|
\small
|
|
\[
|
|
\[
|
|
-\begin{array}{lcl}
|
|
|
|
- \Type &::=& \gray{\key{Integer} \MID \key{Boolean}
|
|
|
|
- \MID (\key{Vector}\;\Type\ldots) \MID \key{Void}
|
|
|
|
- \MID (\Type\ldots \; \key{->}\; \Type)} \\
|
|
|
|
- \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{ (\key{eq?}\;\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 (\Exp \; \Exp\ldots) } \\
|
|
|
|
- &\MID& \LP \key{procedure-arity}~\Exp\RP \\
|
|
|
|
- &\MID& \CLAMBDA{\LP\LS\Var \key{:} \Type\RS\ldots\RP}{\Type}{\Exp} \\
|
|
|
|
- \Def &::=& \gray{ \CDEF{\Var}{\LS\Var \key{:} \Type\RS\ldots}{\Type}{\Exp} } \\
|
|
|
|
- \LangLamM{} &::=& \gray{\Def\ldots \; \Exp}
|
|
|
|
|
|
+\begin{array}{l}
|
|
|
|
+ \gray{\LintGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LvarGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LifGrammar{}} \\ \hline
|
|
|
|
+ \gray{\LwhileGrammar} \\ \hline
|
|
|
|
+ \gray{\LtupGrammar} \\ \hline
|
|
|
|
+ \gray{\LfunGrammar} \\ \hline
|
|
|
|
+ \LlambdaGrammar \\
|
|
|
|
+ \begin{array}{lcl}
|
|
|
|
+ %% \Type &::=& \gray{\key{Integer} \MID \key{Boolean}
|
|
|
|
+ %% \MID (\key{Vector}\;\Type\ldots) \MID \key{Void}
|
|
|
|
+ %% \MID (\Type\ldots \; \key{->}\; \Type)} \\
|
|
|
|
+ %% \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{ (\key{eq?}\;\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 (\Exp \; \Exp\ldots) } \\
|
|
|
|
+ %% &\MID& \LP \key{procedure-arity}~\Exp\RP \\
|
|
|
|
+ %% &\MID& \CLAMBDA{\LP\LS\Var \key{:} \Type\RS\ldots\RP}{\Type}{\Exp} \\
|
|
|
|
+ %% \Def &::=& \gray{ \CDEF{\Var}{\LS\Var \key{:} \Type\RS\ldots}{\Type}{\Exp} } \\
|
|
|
|
+ \LangLamM{} &::=& \Def\ldots \; \Exp
|
|
|
|
+ \end{array}
|
|
\end{array}
|
|
\end{array}
|
|
\]
|
|
\]
|
|
\end{minipage}
|
|
\end{minipage}
|
|
@@ -14015,17 +14043,26 @@ syntax for function application.
|
|
\begin{minipage}{0.96\textwidth}
|
|
\begin{minipage}{0.96\textwidth}
|
|
\small
|
|
\small
|
|
\[
|
|
\[
|
|
-\begin{array}{lcl}
|
|
|
|
- \itm{op} &::=& \ldots \MID \code{procedure-arity} \\
|
|
|
|
- \Exp &::=& \gray{ \INT{\Int} \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} }\\
|
|
|
|
- &\MID& \LAMBDA{\LP\LS\Var\code{:}\Type\RS\ldots\RP}{\Type}{\Exp}\\
|
|
|
|
- \Def &::=& \gray{ \FUNDEF{\Var}{\LP\LS\Var \code{:} \Type\RS\ldots\RP}{\Type}{\code{'()}}{\Exp} }\\
|
|
|
|
|
|
+\begin{array}{l}
|
|
|
|
+ \gray{\LintOnlyAST} \\ \hline
|
|
|
|
+ \gray{\LvarAST{}} \\ \hline
|
|
|
|
+ \gray{\LifAST{}} \\ \hline
|
|
|
|
+ \gray{\LwhileAST{}} \\ \hline
|
|
|
|
+ \gray{\LtupAST{}} \\ \hline
|
|
|
|
+ \gray{\LfunAST} \\ \hline
|
|
|
|
+ \LlambdaAST \\
|
|
|
|
+ \begin{array}{lcl}
|
|
|
|
+ %% \itm{op} &::=& \ldots \MID \code{procedure-arity} \\
|
|
|
|
+ %% \Exp &::=& \gray{ \INT{\Int} \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} }\\
|
|
|
|
+ %% &\MID& \LAMBDA{\LP\LS\Var\code{:}\Type\RS\ldots\RP}{\Type}{\Exp}\\
|
|
|
|
+ %% \Def &::=& \gray{ \FUNDEF{\Var}{\LP\LS\Var \code{:} \Type\RS\ldots\RP}{\Type}{\code{'()}}{\Exp} }\\
|
|
\LangLamM{} &::=& \gray{ \PROGRAMDEFSEXP{\code{'()}}{\LP\Def\ldots\RP}{\Exp} }
|
|
\LangLamM{} &::=& \gray{ \PROGRAMDEFSEXP{\code{'()}}{\LP\Def\ldots\RP}{\Exp} }
|
|
|
|
+ \end{array}
|
|
\end{array}
|
|
\end{array}
|
|
\]
|
|
\]
|
|
\end{minipage}
|
|
\end{minipage}
|
|
@@ -15097,23 +15134,44 @@ in greater detail.
|
|
\section{The \LangAny{} Language}
|
|
\section{The \LangAny{} Language}
|
|
\label{sec:Rany-lang}
|
|
\label{sec:Rany-lang}
|
|
|
|
|
|
|
|
+\newcommand{\LAnyAST}{
|
|
|
|
+\begin{array}{lcl}
|
|
|
|
+\Type &::= & \key{Any} \\
|
|
|
|
+\itm{op} &::= & \code{any-vector-length}
|
|
|
|
+ \MID \code{any-vector-ref} \MID \code{any-vector-set!}\\
|
|
|
|
+ &\MID& \code{boolean?} \MID \code{integer?} \MID \code{vector?}
|
|
|
|
+ \MID \code{procedure?} \MID \code{void?} \\
|
|
|
|
+ \Exp &::=& \INJECT{\Exp}{\FType} \MID \PROJECT{\Exp}{\FType}
|
|
|
|
+\end{array}
|
|
|
|
+}
|
|
|
|
+
|
|
\begin{figure}[tp]
|
|
\begin{figure}[tp]
|
|
\centering
|
|
\centering
|
|
\fbox{
|
|
\fbox{
|
|
\begin{minipage}{0.96\textwidth}
|
|
\begin{minipage}{0.96\textwidth}
|
|
\small
|
|
\small
|
|
\[
|
|
\[
|
|
|
|
+\begin{array}{l}
|
|
|
|
+ \gray{\LintOnlyAST} \\ \hline
|
|
|
|
+ \gray{\LvarAST{}} \\ \hline
|
|
|
|
+ \gray{\LifAST{}} \\ \hline
|
|
|
|
+ \gray{\LwhileAST{}} \\ \hline
|
|
|
|
+ \gray{\LtupAST{}} \\ \hline
|
|
|
|
+ \gray{\LfunAST} \\ \hline
|
|
|
|
+ \gray{\LlambdaAST} \\ \hline
|
|
|
|
+ \LAnyAST \\
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
-\Type &::= & \ldots \MID \key{Any} \\
|
|
|
|
-\itm{op} &::= & \ldots \MID \code{any-vector-length}
|
|
|
|
- \MID \code{any-vector-ref} \MID \code{any-vector-set!}\\
|
|
|
|
- &\MID& \code{boolean?} \MID \code{integer?} \MID \code{vector?}
|
|
|
|
- \MID \code{procedure?} \MID \code{void?} \\
|
|
|
|
-\Exp &::=& \ldots
|
|
|
|
- \MID \gray{ \PRIM{\itm{op}}{\Exp\ldots} } \\
|
|
|
|
- &\MID& \INJECT{\Exp}{\FType} \MID \PROJECT{\Exp}{\FType} \\
|
|
|
|
- \Def &::=& \gray{ \FUNDEF{\Var}{\LP[\Var \code{:} \Type]\ldots\RP}{\Type}{\code{'()}}{\Exp} }\\
|
|
|
|
- \LangAnyM{} &::=& \gray{ \PROGRAMDEFSEXP{\code{'()}}{\LP\Def\ldots\RP}{\Exp} }
|
|
|
|
|
|
+%% \Type &::= & \ldots \MID \key{Any} \\
|
|
|
|
+%% \itm{op} &::= & \ldots \MID \code{any-vector-length}
|
|
|
|
+%% \MID \code{any-vector-ref} \MID \code{any-vector-set!}\\
|
|
|
|
+%% &\MID& \code{boolean?} \MID \code{integer?} \MID \code{vector?}
|
|
|
|
+%% \MID \code{procedure?} \MID \code{void?} \\
|
|
|
|
+%% \Exp &::=& \ldots
|
|
|
|
+%% \MID \gray{ \PRIM{\itm{op}}{\Exp\ldots} } \\
|
|
|
|
+%% &\MID& \INJECT{\Exp}{\FType} \MID \PROJECT{\Exp}{\FType} \\
|
|
|
|
+%% \Def &::=& \gray{ \FUNDEF{\Var}{\LP[\Var \code{:} \Type]\ldots\RP}{\Type}{\code{'()}}{\Exp} }\\
|
|
|
|
+ \LangAnyM{} &::=& \PROGRAMDEFSEXP{\code{'()}}{\LP\Def\ldots\RP}{\Exp}
|
|
|
|
+\end{array}
|
|
\end{array}
|
|
\end{array}
|
|
\]
|
|
\]
|
|
\end{minipage}
|
|
\end{minipage}
|