diff -r 2f9a0dcf61ae -r 059f970287d1 slides/slides08.tex --- a/slides/slides08.tex Fri Nov 27 13:53:06 2020 +0000 +++ b/slides/slides08.tex Tue Dec 01 05:41:12 2020 +0000 @@ -62,216 +62,216 @@ \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[c] +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \begin{frame}[c] -\begin{center} -\bl{\begin{tabular}{@{}lcl@{}} -\meta{Stmt} & $::=$ & $\texttt{skip}$\\ - & $|$ & \textit{Id}\;\texttt{:=}\;\meta{AExp}\\ - & $|$ & \texttt{if}\; \meta{BExp} \;\texttt{then}\; \meta{Block} \;\texttt{else}\; \meta{Block}\\ - & $|$ & \texttt{while}\; \meta{BExp} \;\texttt{do}\; \meta{Block}\\ - & $|$ & \texttt{read}\;\textit{Id}\\ - & $|$ & \texttt{write}\;\textit{Id}\\ - & $|$ & \texttt{write}\;\textit{String}\medskip\\ -\meta{Stmts} & $::=$ & \meta{Stmt} \;\texttt{;}\; \meta{Stmts}\\ - & $|$ & \meta{Stmt}\medskip\\ -\meta{Block} & $::=$ & \texttt{\{}\,\meta{Stmts}\,\texttt{\}}\\ - & $|$ & \meta{Stmt}\medskip\\ -\meta{AExp} & $::=$ & \ldots\\ -\meta{BExp} & $::=$ & \ldots\\ -\end{tabular}} -\end{center} -\end{frame} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \begin{center} +% \bl{\begin{tabular}{@{}lcl@{}} +% \meta{Stmt} & $::=$ & $\texttt{skip}$\\ +% & $|$ & \textit{Id}\;\texttt{:=}\;\meta{AExp}\\ +% & $|$ & \texttt{if}\; \meta{BExp} \;\texttt{then}\; \meta{Block} \;\texttt{else}\; \meta{Block}\\ +% & $|$ & \texttt{while}\; \meta{BExp} \;\texttt{do}\; \meta{Block}\\ +% & $|$ & \texttt{read}\;\textit{Id}\\ +% & $|$ & \texttt{write}\;\textit{Id}\\ +% & $|$ & \texttt{write}\;\textit{String}\medskip\\ +% \meta{Stmts} & $::=$ & \meta{Stmt} \;\texttt{;}\; \meta{Stmts}\\ +% & $|$ & \meta{Stmt}\medskip\\ +% \meta{Block} & $::=$ & \texttt{\{}\,\meta{Stmts}\,\texttt{\}}\\ +% & $|$ & \meta{Stmt}\medskip\\ +% \meta{AExp} & $::=$ & \ldots\\ +% \meta{BExp} & $::=$ & \ldots\\ +% \end{tabular}} +% \end{center} +% \end{frame} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t,fragile] -\frametitle{Compiling AExps} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \begin{frame}[t,fragile] +% \frametitle{Compiling AExps} -For example \bl{$1 + ((2 * 3) + (4 - 3))$}:\medskip +% For example \bl{$1 + ((2 * 3) + (4 - 3))$}:\medskip -\begin{columns}[T] -\begin{column}{.3\textwidth} -\begin{center} -\bl{\begin{tikzpicture} -\tikzset{level distance=12mm,sibling distance=4mm} -\tikzset{edge from parent/.style={draw,very thick}} -\Tree [.$+$ [.$1$ ] [.$+$ [.$*$ $2$ $3$ ] [.$-$ $4$ $3$ ]]] -\end{tikzpicture}} -\end{center} -\end{column} -\begin{column}{.3\textwidth} -\begin{lstlisting}[language=JVMIS,numbers=none] -ldc 1 -ldc 2 -ldc 3 -imul -ldc 4 -ldc 3 -isub -iadd -iadd -\end{lstlisting} -\end{column} -\end{columns}\bigskip +% \begin{columns}[T] +% \begin{column}{.3\textwidth} +% \begin{center} +% \bl{\begin{tikzpicture} +% \tikzset{level distance=12mm,sibling distance=4mm} +% \tikzset{edge from parent/.style={draw,very thick}} +% \Tree [.$+$ [.$1$ ] [.$+$ [.$*$ $2$ $3$ ] [.$-$ $4$ $3$ ]]] +% \end{tikzpicture}} +% \end{center} +% \end{column} +% \begin{column}{.3\textwidth} +% \begin{lstlisting}[language=JVMIS,numbers=none] +% ldc 1 +% ldc 2 +% ldc 3 +% imul +% ldc 4 +% ldc 3 +% isub +% iadd +% iadd +% \end{lstlisting} +% \end{column} +% \end{columns}\bigskip -\small -Traverse tree in post-order \bl{$\Rightarrow$} code for -stack-machine +% \small +% Traverse tree in post-order \bl{$\Rightarrow$} code for +% stack-machine -\end{frame} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \end{frame} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[c,fragile] -\frametitle{Compiling AExps} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \begin{frame}[c,fragile] +% \frametitle{Compiling AExps} -\bl{ -\begin{center} -\begin{tabular}{lcl} -$\textit{compile}(n, E)$ & $\dn$ & $\pcode{ldc}\;n$\smallskip\\ -$\textit{compile}(a_1 + a_2, E)$ & $\dn$ \\ -\multicolumn{3}{c}{$\qquad\textit{compile}(a_1, E) \;@\;\textit{compile}(a_2, E)\;@\; \pcode{iadd}$}\smallskip\\ -$\textit{compile}(a_1 - a_2, E)$ & $\dn$ \\ -\multicolumn{3}{c}{$\qquad\textit{compile}(a_1, E) \;@\; \textit{compile}(a_2, E)\;@\; \pcode{isub}$}\smallskip\\ -$\textit{compile}(a_1 * a_2, E)$ & $\dn$ \\ -\multicolumn{3}{c}{$\qquad\textit{compile}(a_1, E) \;@\; \textit{compile}(a_2, E)\;@\; \pcode{imul}$}\smallskip\\ -$\textit{compile}(a_1 \backslash a_2, E)$ & $\dn$\\ -\multicolumn{3}{c}{$\qquad\textit{compile}(a_1, E) \;@\; \textit{compile}(a_2, E)\;@\; \pcode{idiv}$}\smallskip\\ -$\textit{compile}(x, E)$ & $\dn$ & $\pcode{iload}\;E(x)$\\ -\end{tabular} -\end{center}} +% \bl{ +% \begin{center} +% \begin{tabular}{lcl} +% $\textit{compile}(n, E)$ & $\dn$ & $\pcode{ldc}\;n$\smallskip\\ +% $\textit{compile}(a_1 + a_2, E)$ & $\dn$ \\ +% \multicolumn{3}{c}{$\qquad\textit{compile}(a_1, E) \;@\;\textit{compile}(a_2, E)\;@\; \pcode{iadd}$}\smallskip\\ +% $\textit{compile}(a_1 - a_2, E)$ & $\dn$ \\ +% \multicolumn{3}{c}{$\qquad\textit{compile}(a_1, E) \;@\; \textit{compile}(a_2, E)\;@\; \pcode{isub}$}\smallskip\\ +% $\textit{compile}(a_1 * a_2, E)$ & $\dn$ \\ +% \multicolumn{3}{c}{$\qquad\textit{compile}(a_1, E) \;@\; \textit{compile}(a_2, E)\;@\; \pcode{imul}$}\smallskip\\ +% $\textit{compile}(a_1 \backslash a_2, E)$ & $\dn$\\ +% \multicolumn{3}{c}{$\qquad\textit{compile}(a_1, E) \;@\; \textit{compile}(a_2, E)\;@\; \pcode{idiv}$}\smallskip\\ +% $\textit{compile}(x, E)$ & $\dn$ & $\pcode{iload}\;E(x)$\\ +% \end{tabular} +% \end{center}} -\end{frame} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \end{frame} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[c,fragile] -\frametitle{Compiling Ifs} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \begin{frame}[c,fragile] +% \frametitle{Compiling Ifs} -For example +% For example -\begin{lstlisting}[mathescape,numbers=none,language=While] -if 1 = 1 then x := 2 else y := 3 -\end{lstlisting} +% \begin{lstlisting}[mathescape,numbers=none,language=While] +% if 1 = 1 then x := 2 else y := 3 +% \end{lstlisting} -\begin{center} -\begin{lstlisting}[mathescape,language=JVMIS,numbers=none] - ldc 1 - ldc 1 - if_icmpne L_ifelse $\quad\tikz[remember picture] \node (C) {\mbox{}};$ - ldc 2 - istore 0 - goto L_ifend $\quad\tikz[remember picture] \node (A) {\mbox{}};$ -L_ifelse: $\quad\tikz[remember picture] \node[] (D) {\mbox{}};$ - ldc 3 - istore 1 -L_ifend: $\quad\tikz[remember picture] \node[] (B) {\mbox{}};$ -\end{lstlisting} -\end{center} +% \begin{center} +% \begin{lstlisting}[mathescape,language=JVMIS,numbers=none] +% ldc 1 +% ldc 1 +% if_icmpne L_ifelse $\quad\tikz[remember picture] \node (C) {\mbox{}};$ +% ldc 2 +% istore 0 +% goto L_ifend $\quad\tikz[remember picture] \node (A) {\mbox{}};$ +% L_ifelse: $\quad\tikz[remember picture] \node[] (D) {\mbox{}};$ +% ldc 3 +% istore 1 +% L_ifend: $\quad\tikz[remember picture] \node[] (B) {\mbox{}};$ +% \end{lstlisting} +% \end{center} -\begin{tikzpicture}[remember picture,overlay] - \draw[->,very thick] (A) edge [->,to path={-- ++(10mm,0mm) - -- ++(0mm,-17.3mm) |- (\tikztotarget)},line width=1mm] (B.east); - \draw[->,very thick] (C) edge [->,to path={-- ++(10mm,0mm) - -- ++(0mm,-17.3mm) |- (\tikztotarget)},line width=1mm] (D.east); -\end{tikzpicture} +% \begin{tikzpicture}[remember picture,overlay] +% \draw[->,very thick] (A) edge [->,to path={-- ++(10mm,0mm) +% -- ++(0mm,-17.3mm) |- (\tikztotarget)},line width=1mm] (B.east); +% \draw[->,very thick] (C) edge [->,to path={-- ++(10mm,0mm) +% -- ++(0mm,-17.3mm) |- (\tikztotarget)},line width=1mm] (D.east); +% \end{tikzpicture} -\end{frame} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \end{frame} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[c,fragile] -\frametitle{Compiling Whiles} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \begin{frame}[c,fragile] +% \frametitle{Compiling Whiles} -For example +% For example -\begin{lstlisting}[mathescape,numbers=none,language=While] -while x <= 10 do x := x + 1 -\end{lstlisting} +% \begin{lstlisting}[mathescape,numbers=none,language=While] +% while x <= 10 do x := x + 1 +% \end{lstlisting} -\begin{center} -\begin{lstlisting}[mathescape,language=JVMIS,numbers=none] -L_wbegin: $\quad\tikz[remember picture] \node[] (LB) {\mbox{}};$ - iload 0 - ldc 10 - if_icmpgt L_wend $\quad\tikz[remember picture] \node (LC) {\mbox{}};$ - iload 0 - ldc 1 - iadd - istore 0 - goto L_wbegin $\quad\tikz[remember picture] \node (LA) {\mbox{}};$ -L_wend: $\quad\tikz[remember picture] \node[] (LD) {\mbox{}};$ -\end{lstlisting} -\end{center} +% \begin{center} +% \begin{lstlisting}[mathescape,language=JVMIS,numbers=none] +% L_wbegin: $\quad\tikz[remember picture] \node[] (LB) {\mbox{}};$ +% iload 0 +% ldc 10 +% if_icmpgt L_wend $\quad\tikz[remember picture] \node (LC) {\mbox{}};$ +% iload 0 +% ldc 1 +% iadd +% istore 0 +% goto L_wbegin $\quad\tikz[remember picture] \node (LA) {\mbox{}};$ +% L_wend: $\quad\tikz[remember picture] \node[] (LD) {\mbox{}};$ +% \end{lstlisting} +% \end{center} -\begin{tikzpicture}[remember picture,overlay] - \draw[->,very thick] (LA) edge [->,to path={-- ++(12mm,0mm) - -- ++(0mm,17.3mm) |- (\tikztotarget)},line width=1mm] (LB.east); - \draw[->,very thick] (LC) edge [->,to path={-- ++(12mm,0mm) - -- ++(0mm,-17.3mm) |- (\tikztotarget)},line width=1mm] (LD.east); -\end{tikzpicture} +% \begin{tikzpicture}[remember picture,overlay] +% \draw[->,very thick] (LA) edge [->,to path={-- ++(12mm,0mm) +% -- ++(0mm,17.3mm) |- (\tikztotarget)},line width=1mm] (LB.east); +% \draw[->,very thick] (LC) edge [->,to path={-- ++(12mm,0mm) +% -- ++(0mm,-17.3mm) |- (\tikztotarget)},line width=1mm] (LD.east); +% \end{tikzpicture} -\end{frame} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \end{frame} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[c,fragile] -\frametitle{Compiling Writes} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \begin{frame}[c,fragile] +% \frametitle{Compiling Writes} -\small -\begin{lstlisting}[language=JVMIS,mathescape, - numbers=none,xleftmargin=-6mm] -.method public static write(I)V - .limit locals 1 - .limit stack 2 - getstatic java/lang/System/out - Ljava/io/PrintStream; - iload 0 - invokevirtual java/io/PrintStream/println(I)V - return -.end method +% \small +% \begin{lstlisting}[language=JVMIS,mathescape, +% numbers=none,xleftmargin=-6mm] +% .method public static write(I)V +% .limit locals 1 +% .limit stack 2 +% getstatic java/lang/System/out +% Ljava/io/PrintStream; +% iload 0 +% invokevirtual java/io/PrintStream/println(I)V +% return +% .end method -iload $E(x)$ -invokestatic XXX/XXX/write(I)V -\end{lstlisting} +% iload $E(x)$ +% invokestatic XXX/XXX/write(I)V +% \end{lstlisting} -\end{frame} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \end{frame} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[c,fragile] -\frametitle{Compiling Main} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \begin{frame}[c,fragile] +% \frametitle{Compiling Main} -\footnotesize -\begin{lstlisting}[language=JVMIS,mathescape, - numbers=none,xleftmargin=-6mm] -.class public XXX.XXX -.super java/lang/Object +% \footnotesize +% \begin{lstlisting}[language=JVMIS,mathescape, +% numbers=none,xleftmargin=-6mm] +% .class public XXX.XXX +% .super java/lang/Object -.method public ()V - aload_0 - invokenonvirtual java/lang/Object/()V - return -.end method +% .method public ()V +% aload_0 +% invokenonvirtual java/lang/Object/()V +% return +% .end method -.method public static main([Ljava/lang/String;)V - .limit locals 200 - .limit stack 200 +% .method public static main([Ljava/lang/String;)V +% .limit locals 200 +% .limit stack 200 - $\textit{\ldots{}here comes the compiled code\ldots}$ +% $\textit{\ldots{}here comes the compiled code\ldots}$ - return -.end method -\end{lstlisting} +% return +% .end method +% \end{lstlisting} -\end{frame} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \end{frame} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%