diff -r 3a5a7908517f -r 370508e4d7f6 slides/slides08.tex --- a/slides/slides08.tex Thu Nov 21 00:49:21 2019 +0000 +++ b/slides/slides08.tex Thu Nov 21 14:41:53 2019 +0000 @@ -1,3 +1,4 @@ +% !TEX program = xelatex \documentclass[dvipsnames,14pt,t]{beamer} \usepackage{xcolor} \usepackage{../slides} @@ -37,9 +38,10 @@ \normalsize \begin{center} \begin{tabular}{ll} - Email: & christian.urban at kcl.ac.uk\\ - Office: & N7.07 (North Wing, Bush House)\\ - Slides: & KEATS (also home work is there)\\ + Email: & christian.urban at kcl.ac.uk\\ + Office Hours: & Thursdays 12 -- 14\\ + Location: & N7.07 (North Wing, Bush House)\\ + Slides \& Progs: & KEATS (also homework is there)\\ \end{tabular} \end{center} @@ -80,7 +82,9 @@ \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}} +\tikzset{edge from parent/.style={draw,very thick}} +\Tree [.$+$ [.$1$ ] [.$+$ [.$*$ $2$ $3$ ] [.$-$ $4$ $3$ ]]] +\end{tikzpicture}} \end{center} \end{column} \begin{column}{.3\textwidth} @@ -154,10 +158,12 @@ \end{lstlisting} \end{center} -\begin{tikzpicture}[remember picture,overlay] \draw[->,very thick] (A) edge [->,to path={-- ++(10mm,0mm) +\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} + -- ++(0mm,-17.3mm) |- (\tikztotarget)},line width=1mm] (D.east); +\end{tikzpicture} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -192,7 +198,8 @@ \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} + -- ++(0mm,-17.3mm) |- (\tikztotarget)},line width=1mm] (LD.east); +\end{tikzpicture} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -279,13 +286,13 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[c] -\frametitle{Fun Grammar} +\frametitle{Fun-Grammar} \bl{ \begin{plstx}[rhs style=] -: \meta{Exp} ::= \meta{Var} | \meta{Num}{\hspace{3cm}} +: \meta{Exp} ::= \meta{Var} | \meta{Num}{\hspace{4cm}} | \meta{Exp} + \meta{Exp} | ... | (\meta{Exp}) | \code{if} \meta{BExp} \code{then} \meta{Exp} \code{else} \meta{Exp} - | \code{write} \meta{Exp} {\hspace{3cm}} + | \code{write} \meta{Exp} {\hspace{5cm}} | \meta{Exp} ; \meta{Exp} | \textit{FunName} (\meta{Exp}, ... , \meta{Exp})\\ : \meta{BExp} ::= ...\\ @@ -331,9 +338,11 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[c, fragile] -\frametitle{Idea} +\frametitle{Ideas} -Compile \texttt{exp} such that the result of the expression +Use separate JVM methods for each Fun-function.\bigskip + +Compile \bl{\texttt{exp}}s such that the result of the expression is on top of the stack.\bigskip \begin{itemize} @@ -412,7 +421,7 @@ .end method \end{lstlisting}\bigskip -\small We will need for definitions, like\footnotesize\medskip +\small We will need methods for definitions like\footnotesize\medskip \begin{lstlisting}[language=JVMIS, xleftmargin=2mm, @@ -652,7 +661,7 @@ then a call \texttt{f(args)} can be compiled as\medskip\small -\begin{lstlisting}[basicstyle=\ttfamily, numbers=none] +\begin{lstlisting}[numbers=none] prepare environment jump to start of function \end{lstlisting} @@ -665,23 +674,22 @@ \frametitle{Tail Recursive Call} \footnotesize -\begin{textblock}{13}(-0.3,2) -\begin{lstlisting}[language=Scala,basicstyle=\ttfamily, numbers=none] +\begin{textblock}{13}(-0.3,3) +\begin{lstlisting}[language=Scala, numbers=none] def compile_expT(a: Exp, env: Mem, name: String): Instrs = ... - case Call(n, args) => if (name == n) - { - val stores = args.zipWithIndex.map - { case (x, y) => "istore " + y.toString + "\n" } - args.flatMap(a => compile_expT(a, env, "")) ++ - stores.reverse ++ - List ("goto " + n + "_Start\n") - } - else + case Call(n, args) => if (name == n) { + val stores = + args.zipWithIndex.map { case (x, y) => i"istore $y" } + + args.map(a => compile_expT(a, env, "")).mkString ++ + stores.reverse.mkString ++ + i"goto ${n}_Start" + } else { val is = "I" * args.length - args.flatMap(a => compile_expT(a, env, "")) ++ - List ("invokestatic XXX/XXX/" + n + "(" + is + ")I\n") + args.map(a => compile_expT(a, env, "")).mkString ++ + i"invokestatic XXX/XXX/${n}(${is})I" } \end{lstlisting} \end{textblock} @@ -738,7 +746,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \begin{frame}[c] \frametitle{Can This Be Done?} @@ -781,6 +788,36 @@ \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[c] + +\begin{center} + \includegraphics[angle=90,scale=0.35]{/Users/cu/vote.pdf} +\end{center} + +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[c] + +\begin{center} + \includegraphics[scale=0.25]{/Users/cu/dresden.png} +\end{center} + +\begin{textblock}{13}(2,12) +\includegraphics[scale=0.08]{/Users/cu/kiss.jpg} +\end{textblock} + +\begin{textblock}{13}(7,12) +\includegraphics[scale=0.079]{/Users/cu/pioniere.jpg} +\end{textblock} + +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + \end{document} %%% Local Variables: