slides/slides08.tex
changeset 697 370508e4d7f6
parent 608 3db4970ad0aa
child 701 681c36b2af27
equal deleted inserted replaced
696:3a5a7908517f 697:370508e4d7f6
       
     1 % !TEX program = xelatex
     1 \documentclass[dvipsnames,14pt,t]{beamer}
     2 \documentclass[dvipsnames,14pt,t]{beamer}
     2 \usepackage{xcolor}
     3 \usepackage{xcolor}
     3 \usepackage{../slides}
     4 \usepackage{../slides}
     4 \usepackage{../langs}
     5 \usepackage{../langs}
     5 \usepackage{../data}
     6 \usepackage{../data}
    35   \end{tabular}}
    36   \end{tabular}}
    36 
    37 
    37   \normalsize
    38   \normalsize
    38   \begin{center}
    39   \begin{center}
    39   \begin{tabular}{ll}
    40   \begin{tabular}{ll}
    40   Email:  & christian.urban at kcl.ac.uk\\
    41     Email:  & christian.urban at kcl.ac.uk\\
    41   Office: & N7.07 (North Wing, Bush House)\\
    42     Office Hours: & Thursdays 12 -- 14\\
    42   Slides: & KEATS (also home work is there)\\
    43     Location: & N7.07 (North Wing, Bush House)\\
       
    44     Slides \& Progs: & KEATS (also homework is there)\\  
    43   \end{tabular}
    45   \end{tabular}
    44   \end{center}
    46   \end{center}
    45 
    47 
    46 \end{frame}
    48 \end{frame}
    47 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    49 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   282 \end{frame}
   284 \end{frame}
   283 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   285 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   284 
   286 
   285 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   287 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   286 \begin{frame}[c]
   288 \begin{frame}[c]
   287 \frametitle{Fun Grammar}
   289 \frametitle{Fun-Grammar}
   288 \bl{
   290 \bl{
   289 \begin{plstx}[rhs style=]
   291 \begin{plstx}[rhs style=]
   290 : \meta{Exp} ::= \meta{Var} | \meta{Num}{\hspace{3cm}}
   292 : \meta{Exp} ::= \meta{Var} | \meta{Num}{\hspace{4cm}}
   291              |   \meta{Exp} + \meta{Exp} | ... | (\meta{Exp})
   293              |   \meta{Exp} + \meta{Exp} | ... | (\meta{Exp})
   292              |   \code{if} \meta{BExp} \code{then} \meta{Exp} \code{else} \meta{Exp}
   294              |   \code{if} \meta{BExp} \code{then} \meta{Exp} \code{else} \meta{Exp}
   293              |   \code{write} \meta{Exp} {\hspace{3cm}}
   295              |   \code{write} \meta{Exp} {\hspace{5cm}}
   294              |   \meta{Exp} ; \meta{Exp}
   296              |   \meta{Exp} ; \meta{Exp}
   295              |   \textit{FunName} (\meta{Exp}, ... , \meta{Exp})\\
   297              |   \textit{FunName} (\meta{Exp}, ... , \meta{Exp})\\
   296 : \meta{BExp} ::= ...\\
   298 : \meta{BExp} ::= ...\\
   297 : \meta{Def} ::= \code{def} \textit{FunName} ($\hspace{0.4mm}x_1$, ... , $x_n$) = \meta{Exp}\\               
   299 : \meta{Def} ::= \code{def} \textit{FunName} ($\hspace{0.4mm}x_1$, ... , $x_n$) = \meta{Exp}\\               
   298 : \meta{Prog} ::= \meta{Def} ; \meta{Prog}
   300 : \meta{Prog} ::= \meta{Def} ; \meta{Prog}
   334 \end{frame}
   336 \end{frame}
   335 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   337 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   336 
   338 
   337 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   339 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   338 \begin{frame}[c, fragile]
   340 \begin{frame}[c, fragile]
   339 \frametitle{Idea}
   341 \frametitle{Ideas}
   340 
   342 
   341 Compile \texttt{exp} such that the result of the expression
   343 Use separate JVM methods for each Fun-function.\bigskip
       
   344 
       
   345 Compile \bl{\texttt{exp}}s such that the result of the expression
   342 is on top of the stack.\bigskip
   346 is on top of the stack.\bigskip
   343 
   347 
   344 \begin{itemize}
   348 \begin{itemize}
   345 \item \texttt{\color{codepurple}{write}}\texttt{(1 + 2)}
   349 \item \texttt{\color{codepurple}{write}}\texttt{(1 + 2)}
   346 \item \texttt{1 + 2; 3 + 4} 
   350 \item \texttt{1 + 2; 3 + 4} 
   415    invokevirtual java/io/PrintStream/println(I)V 
   419    invokevirtual java/io/PrintStream/println(I)V 
   416    return 
   420    return 
   417 .end method
   421 .end method
   418 \end{lstlisting}\bigskip
   422 \end{lstlisting}\bigskip
   419 
   423 
   420 \small We will need for definitions, like\footnotesize\medskip
   424 \small We will need methods for definitions like\footnotesize\medskip
   421 
   425 
   422 \begin{lstlisting}[language=JVMIS, 
   426 \begin{lstlisting}[language=JVMIS, 
   423                    xleftmargin=2mm, 
   427                    xleftmargin=2mm, 
   424                    numbers=none]
   428                    numbers=none]
   425 def fname (x1, ... , xn) = ...                   
   429 def fname (x1, ... , xn) = ...                   
   655 \item \texttt{Exp  op Exp}
   659 \item \texttt{Exp  op Exp}
   656 \end{itemize}}\medskip
   660 \end{itemize}}\medskip
   657 
   661 
   658 then a call \texttt{f(args)} can be compiled as\medskip\small
   662 then a call \texttt{f(args)} can be compiled as\medskip\small
   659 
   663 
   660 \begin{lstlisting}[basicstyle=\ttfamily, numbers=none]
   664 \begin{lstlisting}[numbers=none]
   661   prepare environment
   665   prepare environment
   662   jump to start of function
   666   jump to start of function
   663 \end{lstlisting}
   667 \end{lstlisting}
   664 
   668 
   665 \end{frame}
   669 \end{frame}
   668 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   672 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   669 \begin{frame}[c, fragile]
   673 \begin{frame}[c, fragile]
   670 \frametitle{Tail Recursive Call}
   674 \frametitle{Tail Recursive Call}
   671 \footnotesize
   675 \footnotesize
   672 
   676 
   673 \begin{textblock}{13}(-0.3,2)
   677 \begin{textblock}{13}(-0.3,3)
   674 \begin{lstlisting}[language=Scala,basicstyle=\ttfamily, numbers=none]
   678 \begin{lstlisting}[language=Scala, numbers=none]
   675 def compile_expT(a: Exp, env: Mem, name: String): Instrs = 
   679 def compile_expT(a: Exp, env: Mem, name: String): Instrs = 
   676   ...
   680   ...
   677   case Call(n, args) => if (name == n) 
   681   case Call(n, args) => if (name == n)
   678   { 
       
   679     val stores = args.zipWithIndex.map 
       
   680        { case (x, y) => "istore " + y.toString + "\n" } 
       
   681     args.flatMap(a => compile_expT(a, env, "")) ++
       
   682     stores.reverse ++ 
       
   683     List ("goto " + n + "_Start\n") 
       
   684   } 
       
   685   else 
       
   686   {
   682   {
       
   683     val stores =
       
   684       args.zipWithIndex.map { case (x, y) => i"istore $y" } 
       
   685 
       
   686     args.map(a => compile_expT(a, env, "")).mkString ++
       
   687     stores.reverse.mkString ++ 
       
   688     i"goto ${n}_Start" 
       
   689   } else {
   687     val is = "I" * args.length
   690     val is = "I" * args.length
   688     args.flatMap(a => compile_expT(a, env, "")) ++
   691     args.map(a => compile_expT(a, env, "")).mkString ++
   689     List ("invokestatic XXX/XXX/" + n + "(" + is + ")I\n")
   692     i"invokestatic XXX/XXX/${n}(${is})I"
   690   }
   693   }
   691 \end{lstlisting}
   694 \end{lstlisting}
   692 \end{textblock}
   695 \end{textblock}
   693 
   696 
   694 \end{frame}
   697 \end{frame}
   741 \end{frame}
   744 \end{frame}
   742 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
   745 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
   743 
   746 
   744 
   747 
   745 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   748 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   746 
       
   747 \begin{frame}[c]
   749 \begin{frame}[c]
   748 \frametitle{Can This Be Done?}
   750 \frametitle{Can This Be Done?}
   749 
   751 
   750 \begin{itemize}
   752 \begin{itemize}
   751 \item in 2008, verification of a small C-compiler
   753 \item in 2008, verification of a small C-compiler
   784 \end{itemize}
   786 \end{itemize}
   785 
   787 
   786 \end{frame}
   788 \end{frame}
   787 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   789 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
   788 
   790 
       
   791 
       
   792 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   793 \begin{frame}[c]
       
   794 
       
   795 \begin{center}
       
   796   \includegraphics[angle=90,scale=0.35]{/Users/cu/vote.pdf}
       
   797 \end{center}
       
   798 
       
   799 \end{frame}
       
   800 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   801 
       
   802 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   803 \begin{frame}[c]
       
   804 
       
   805 \begin{center}
       
   806   \includegraphics[scale=0.25]{/Users/cu/dresden.png}
       
   807 \end{center}
       
   808 
       
   809 \begin{textblock}{13}(2,12)
       
   810 \includegraphics[scale=0.08]{/Users/cu/kiss.jpg}
       
   811 \end{textblock}
       
   812 
       
   813 \begin{textblock}{13}(7,12)
       
   814 \includegraphics[scale=0.079]{/Users/cu/pioniere.jpg}
       
   815 \end{textblock}
       
   816 
       
   817 \end{frame}
       
   818 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   819 
       
   820 
   789 \end{document}
   821 \end{document}
   790 
   822 
   791 %%% Local Variables:  
   823 %%% Local Variables:  
   792 %%% mode: latex
   824 %%% mode: latex
   793 %%% TeX-master: t
   825 %%% TeX-master: t