diff -r 1276d7013c2c -r 6937caaff1d9 slides/slides08.tex --- a/slides/slides08.tex Wed Nov 15 00:17:15 2017 +0000 +++ b/slides/slides08.tex Wed Nov 15 00:28:25 2017 +0000 @@ -498,6 +498,43 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[c,fragile] +\frametitle{Compiling Ifs} + +For example + +\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{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} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[t] \frametitle{Compiling BExps} @@ -641,32 +678,98 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[t] -\frametitle{Compiling Writes} +\begin{frame}[c,fragile] +\frametitle{Compiling Whiles} + +For example -{\Large\bl{write $x$}} +\begin{lstlisting}[mathescape,numbers=none,language=While] +while x <= 10 do x := x + 1 +\end{lstlisting} + \begin{center} -\small\bl{\begin{tabular}{l} -.method public static write(I)V\hspace{1cm}\textcolor{black}{(library function)}\\ -\;\; .limit locals 5 \\ -\;\; .limit stack 5 \\ -\;\; iload 0 \\ -\;\; getstatic java/lang/System/out Ljava/io/PrintStream;\\ -\;\; swap \\ -\;\; invokevirtual java/io/PrintStream/println(I)V \\ -\;\; return \\ -.end method\bigskip\bigskip\\ -% -\normalsize -iload $E(x)$\\ -invokestatic write(I)V\\ -\end{tabular}} +\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} + \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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 + + + +iload $E(x)$ +invokestatic XXX/XXX/write(I)V +\end{lstlisting} + +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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 + +.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 + + $\textit{\ldots{}here comes the compiled code\ldots}$ + + return +.end method +\end{lstlisting} + +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \mode{ \begin{frame}[c]