37   | 
    37   | 
    38   \normalsize  | 
    38   \normalsize  | 
    39   \begin{center} | 
    39   \begin{center} | 
    40   \begin{tabular}{ll} | 
    40   \begin{tabular}{ll} | 
    41   Email:  & christian.urban at kcl.ac.uk\\  | 
    41   Email:  & christian.urban at kcl.ac.uk\\  | 
    42   Office: & N7.07 (North Wing, Bush House)\\  | 
    42   Office: & N\liningnums{7.07} (North Wing, Bush House)\\ | 
    43   Slides: & KEATS  | 
    43   Slides: & KEATS  | 
    44   \end{tabular} | 
    44   \end{tabular} | 
    45   \end{center} | 
    45   \end{center} | 
    46   | 
    46   | 
    47 \end{frame} | 
    47 \end{frame} | 
    48 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       | 
    48 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
    49   | 
    49   | 
    50 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
    50 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
    51 \begin{frame}[c] | 
    51 \begin{frame}[t] | 
    52 \frametitle{The Goal of this Course} | 
    52 \frametitle{Why Study Compilers?} | 
    53   | 
    53   | 
    54 \begin{center} | 
    54 John Regehr {\small(LLVM compiler hacker)}\smallskip\\ | 
    55   \begin{tikzpicture}[scale=1, | 
    55   | 
    56                       node/.style={ | 
    56 \begin{bubble}[10.5cm] | 
    57                       rectangle,rounded corners=3mm,  | 
    57   \bf ``\ldots{}It’s effectively a perpetual | 
    58                       very thick,draw=black!50,minimum height=18mm, minimum width=20mm,  | 
    58   employment act for solid compiler hackers.''  | 
    59                       top color=white,bottom color=black!20}]  | 
         | 
    60   | 
         | 
    61   \node at (3.05, 1.8) {\Large\bf Write A Compiler}; | 
         | 
    62   | 
         | 
    63   \node (0) at (-2.3,0) {};  | 
         | 
    64     | 
         | 
    65   \node (A) at (0,0)  [node] {}; | 
         | 
    66   \node [below right] at (A.north west) {lexer}; | 
         | 
    67   | 
         | 
    68   \node (B) at (3,0)  [node] {}; | 
         | 
    69   \node [below right=1mm] at (B.north west) {\mbox{}\hspace{-1mm}parser}; | 
         | 
    70   | 
         | 
    71   \node (C) at (6,0)  [node] {}; | 
         | 
    72   \node [below right] at (C.north west) {\mbox{}\hspace{-1mm}code gen}; | 
         | 
    73   | 
         | 
    74   \node (1) at (8.4,0) {};  | 
         | 
    75   | 
         | 
    76   \draw [->,line width=4mm] (0) -- (A);   | 
         | 
    77   \draw [->,line width=4mm] (A) -- (B);   | 
         | 
    78   \draw [->,line width=4mm] (B) -- (C);   | 
         | 
    79   \draw [->,line width=4mm] (C) -- (1);   | 
         | 
    80   \end{tikzpicture} | 
         | 
    81   \end{center} | 
         | 
    82   | 
         | 
    83 \only<2,3>{ | 
         | 
    84 \begin{textblock}{1}(1,2) | 
         | 
    85 \begin{bubble}[9.8cm] | 
         | 
    86 \normalsize  | 
         | 
    87 lexer input: a string\smallskip\\  | 
         | 
    88 \hspace{5mm}\code{"read(n);"}\medskip\\ | 
         | 
    89 lexer output: a sequence of tokens\smallskip\\  | 
         | 
    90 \hspace{5mm}\code{key(read); lpar; id(n); rpar; semi} | 
         | 
    91 \end{bubble} | 
    59 \end{bubble} | 
    92 \end{textblock}} | 
    60   | 
    93   | 
    61 \onslide<1->{ | 
         | 
    62 \only<2>{ | 
         | 
    63 \begin{itemize} | 
         | 
    64 \item {\bf Hardware is getting weirder | 
         | 
    65   rather than getting clocked faster}  | 
         | 
    66   | 
         | 
    67 \begin{itemize} | 
         | 
    68 \item  Almost all processors are  | 
         | 
    69   multicores nowadays and it looks like there is increasing asymmetry in  | 
         | 
    70   resources across cores. Processors come with vector units, crypto  | 
         | 
    71   accelerators etc. We have DSPs, GPUs,  | 
         | 
    72   ARM big.little, and Xeon Phi. This is only scratching the  | 
         | 
    73   surface.  | 
         | 
    74 \end{itemize}   | 
         | 
    75 \end{itemize}} | 
    94 \only<3>{ | 
    76 \only<3>{ | 
    95 \begin{textblock}{1}(6,7.8) | 
    77 \begin{itemize} | 
    96 \begin{tabular}{c} | 
    78 \item {\bf We’re getting tired of low-level languages and | 
    97 \includegraphics[scale=0.2]{../pics/rosetta.jpg}\\[-2mm] | 
    79     their associated security disasters}  | 
    98 \footnotesize lexing $\Rightarrow$ recognising words (Stone of Rosetta)  | 
    80     | 
    99 \end{tabular} | 
    81 \begin{itemize} | 
   100 \end{textblock}} | 
    82 \item   | 
   101   | 
    83   We want to write new code, to  | 
   102 \only<4>{ | 
    84   whatever extent possible, in safer, higher-level  | 
   103 \begin{textblock}{1}(1,1.5) | 
    85   languages. Compilers are caught right in the middle of these  | 
   104 \begin{bubble}[8.5cm] | 
    86   opposing trends: one of their main jobs is to help bridge the large  | 
   105 \normalsize  | 
    87   and growing gap between increasingly high-level languages and  | 
   106 parser input: a sequence of token\smallskip\\  | 
    88   increasingly wacky platforms.  | 
   107 parser output: an abstract syntax tree\smallskip\\  | 
    89 \end{itemize}   | 
   108 \footnotesize  | 
    90 \end{itemize}}} | 
   109 \hspace{2cm}\begin{tikzpicture} | 
    91   | 
   110   \node {\code{read}} | 
    92 \end{frame} | 
   111     child {node {\code{lpar}}} | 
    93 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
   112     child {node {\code{n}}} | 
         | 
   113     child {node {\code{rpar}}}; | 
         | 
   114 \end{tikzpicture} | 
         | 
   115 \end{bubble} | 
         | 
   116 \end{textblock}} | 
         | 
   117   | 
         | 
   118 \only<5,6>{ | 
         | 
   119 \begin{textblock}{1}(1,1.5) | 
         | 
   120 \begin{bubble}[4cm] | 
         | 
   121 \normalsize  | 
         | 
   122 code generator:\smallskip\\  | 
         | 
   123 \hspace{5mm}\code{istore 2}\\  | 
         | 
   124 \hspace{5mm}\code{iload 2}\\  | 
         | 
   125 \hspace{5mm}\code{ldc 10}\\ | 
         | 
   126 \hspace{5mm}\code{isub}\\ | 
         | 
   127 \hspace{5mm}\code{ifeq Label2}\\  | 
         | 
   128 \hspace{5mm}\code{iload 2}\\ | 
         | 
   129 \hspace{5mm}\code{...}\\ | 
         | 
   130 \end{bubble} | 
         | 
   131 \end{textblock}} | 
         | 
   132   | 
         | 
   133 \only<6>{ | 
         | 
   134 \begin{textblock}{6}(8.4,7) | 
         | 
   135 \begin{bubble}[5cm] | 
         | 
   136 \mbox{\begin{tikzpicture}[scale=0.58,rounded corners=0mm] | 
         | 
   137 \begin{axis}[axis x line=bottom, axis y line=left, ylabel=secs, | 
         | 
   138     xlabel=n,  | 
         | 
   139     enlargelimits=0.05,  | 
         | 
   140     ybar interval=0.7, legend style=small]  | 
         | 
   141 \addplot file {interpreted2.data}; | 
         | 
   142 \addplot file {compiled2.data}; | 
         | 
   143 %\legend{interpreted, compiled} | 
         | 
   144 \end{axis} | 
         | 
   145 \end{tikzpicture}} | 
         | 
   146 \end{bubble} | 
         | 
   147 \end{textblock}} | 
         | 
   148   | 
         | 
   149 \end{frame} | 
         | 
   150 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       | 
         | 
   151   | 
         | 
   152 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   153 \begin{frame}[c] | 
         | 
   154 \frametitle{The subject is quite old} | 
         | 
   155   | 
         | 
   156 \begin{itemize} | 
         | 
   157 \item Turing Machines, 1936  | 
         | 
   158 \item Regular Expressions, 1956\\  | 
         | 
   159 \item The first compiler for COBOL, 1957\\ (Grace Hopper)  | 
         | 
   160 \item But surprisingly research papers are still published nowadays  | 
         | 
   161 \end{itemize} | 
         | 
   162   | 
         | 
   163 \begin{flushright} | 
         | 
   164 \includegraphics[scale=0.3]{pics/hopper.jpg}\\ | 
         | 
   165 \footnotesize\textcolor{gray}{Grace Hopper} | 
         | 
   166 \end{flushright} | 
         | 
   167   | 
         | 
   168 \mbox{}\\[-10mm] | 
         | 
   169 {\footnotesize\textcolor{gray}{(she made it to David Letterman's Tonight Show, \url{http://www.youtube.com/watch?v=aZOxtURhfEU})}} | 
         | 
   170   | 
         | 
   171 \end{frame} | 
         | 
   172 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       | 
         | 
   173   | 
    94   | 
   174 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
    95 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
   175 \begin{frame}[c] | 
    96 \begin{frame}[c] | 
   176 \frametitle{Why Bother?} | 
    97 \frametitle{Why Bother?} | 
   177   | 
    98   | 
   178 \begin{columns}[t] | 
    99 \begin{columns}[t] | 
   179 \begin{column}{.5\textwidth} | 
   100 \begin{column}{.5\textwidth} | 
   180 Ruby, Python, Java\medskip\\  | 
   101 Ruby, Python, Java 8\medskip\\  | 
   181 \begin{tikzpicture}\footnotesize | 
   102 \begin{tikzpicture}\footnotesize | 
   182 \begin{axis}[ | 
   103 \begin{axis}[ | 
   183     xlabel={$n$}, | 
   104     xlabel={$n$}, | 
   184     x label style={at={(1.05,0.0)}}, | 
   105     x label style={at={(1.05,0.0)}}, | 
   185     ylabel={time in secs}, | 
   106     ylabel={time in secs}, | 
   258 \end{tikzpicture} | 
   180 \end{tikzpicture} | 
   259 \end{column} | 
   181 \end{column} | 
   260 \end{columns}\bigskip | 
   182 \end{columns}\bigskip | 
   261   | 
   183   | 
   262 \small\centering  | 
   184 \small\centering  | 
   263 matching \texttt{[a?]\{n\}[a]\{n\}} and \texttt{[a*]*b} | 
   185 matching \texttt{[a?]\{n\}[a]\{n\}} and \texttt{(a*)*b} | 
   264 against $\underbrace{\texttt{a}...\texttt{a}}_n$ | 
   186 against $\underbrace{\texttt{a}...\texttt{a}}_n$ | 
   265 \end{frame}  | 
   187 \end{frame}  | 
   266 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    | 
   188 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    | 
         | 
   189   | 
         | 
   190   | 
         | 
   191 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   192 \begin{frame}[c] | 
         | 
   193 \frametitle{The Goal of this Module} | 
         | 
   194   | 
         | 
   195 \begin{center} | 
         | 
   196   \begin{tikzpicture}[scale=1, | 
         | 
   197                       node/.style={ | 
         | 
   198                       rectangle,rounded corners=3mm,  | 
         | 
   199                       very thick,draw=black!50,minimum height=18mm, minimum width=20mm,  | 
         | 
   200                       top color=white,bottom color=black!20}]  | 
         | 
   201   | 
         | 
   202   \node at (3.05, 1.8) {\Large\bf Write a compiler}; | 
         | 
   203   | 
         | 
   204   \node (0) at (-2.3,0) {};  | 
         | 
   205     | 
         | 
   206   \node (A) at (0,0)  [node] {}; | 
         | 
   207   \node [below right] at (A.north west) {lexer}; | 
         | 
   208   | 
         | 
   209   \node (B) at (3,0)  [node] {}; | 
         | 
   210   \node [below right=1mm] at (B.north west) {\mbox{}\hspace{-1mm}parser}; | 
         | 
   211   | 
         | 
   212   \node (C) at (6,0)  [node] {}; | 
         | 
   213   \node [below right] at (C.north west) {\mbox{}\hspace{-1mm}code gen}; | 
         | 
   214   | 
         | 
   215   \node (1) at (8.4,0) {};  | 
         | 
   216   | 
         | 
   217   \draw [->,line width=4mm] (0) -- (A);   | 
         | 
   218   \draw [->,line width=4mm] (A) -- (B);   | 
         | 
   219   \draw [->,line width=4mm] (B) -- (C);   | 
         | 
   220   \draw [->,line width=4mm] (C) -- (1);   | 
         | 
   221   \end{tikzpicture} | 
         | 
   222   \end{center} | 
         | 
   223   | 
         | 
   224 \only<2,3,4>{ | 
         | 
   225 \begin{textblock}{1}(1,2.1) | 
         | 
   226 \begin{bubble}[9.8cm] | 
         | 
   227 \normalsize  | 
         | 
   228 lexer input: a string\smallskip\\  | 
         | 
   229 \hspace{5mm}\code{"read(n);"}\medskip\\ | 
         | 
   230 lexer output: a sequence of tokens\smallskip\\  | 
         | 
   231 \hspace{5mm}\code{key(read) lpar id(n) rpar semi} | 
         | 
   232 \end{bubble} | 
         | 
   233 \end{textblock}} | 
         | 
   234   | 
         | 
   235 \only<3,4>{ | 
         | 
   236 \begin{textblock}{1}(6,7.8) | 
         | 
   237 \begin{tabular}{c} | 
         | 
   238 \includegraphics[scale=0.2]{../pics/rosetta.jpg}\\[-2mm] | 
         | 
   239 \footnotesize lexing $\Rightarrow$ recognising words (Stone of Rosetta)  | 
         | 
   240 \end{tabular} | 
         | 
   241 \end{textblock}} | 
         | 
   242   | 
         | 
   243 \only<4>{ | 
         | 
   244 \begin{textblock}{1}(0.5,12)\small | 
         | 
   245 \begin{tabular}{l@{}c@{}l} | 
         | 
   246   \pcode{if}    & $\;\Rightarrow\;$ & keyword\\ | 
         | 
   247   \pcode{iffoo} & $\;\Rightarrow\;$ & identifier\\ | 
         | 
   248 \end{tabular}   | 
         | 
   249 \end{textblock}} | 
         | 
   250   | 
         | 
   251 \only<5>{ | 
         | 
   252 \begin{textblock}{1}(1,1.5) | 
         | 
   253 \begin{bubble}[8.5cm] | 
         | 
   254 \normalsize  | 
         | 
   255 parser input: a sequence of tokens\smallskip\\  | 
         | 
   256   | 
         | 
   257 {\small\hspace{5mm}\code{key(read) lpar id(n) rpar semi}}\smallskip\\ | 
         | 
   258   | 
         | 
   259 parser output: an abstract syntax tree\smallskip\\  | 
         | 
   260 \footnotesize  | 
         | 
   261 \hspace{2cm}\begin{tikzpicture} | 
         | 
   262   \node {\code{read}} | 
         | 
   263     child {node {\code{lpar}}} | 
         | 
   264     child {node {\code{n}}} | 
         | 
   265     child {node {\code{rpar}}}; | 
         | 
   266 \end{tikzpicture} | 
         | 
   267 \end{bubble} | 
         | 
   268 \end{textblock}} | 
         | 
   269   | 
         | 
   270 \only<6,7>{ | 
         | 
   271 \begin{textblock}{1}(1,1.5) | 
         | 
   272 \begin{bubble}[4cm] | 
         | 
   273 \normalsize  | 
         | 
   274 code generator:\smallskip\\  | 
         | 
   275 \hspace{5mm}\code{istore 2}\\  | 
         | 
   276 \hspace{5mm}\code{iload 2}\\  | 
         | 
   277 \hspace{5mm}\code{ldc 10}\\ | 
         | 
   278 \hspace{5mm}\code{isub}\\ | 
         | 
   279 \hspace{5mm}\code{ifeq Label2}\\  | 
         | 
   280 \hspace{5mm}\code{iload 2}\\ | 
         | 
   281 \hspace{5mm}\code{...}\\ | 
         | 
   282 \end{bubble} | 
         | 
   283 \end{textblock}} | 
         | 
   284   | 
         | 
   285 \only<7>{ | 
         | 
   286 \begin{textblock}{6}(8.4,7) | 
         | 
   287 \begin{bubble}[5cm] | 
         | 
   288 \mbox{\begin{tikzpicture}[scale=0.58,rounded corners=0mm] | 
         | 
   289 \begin{axis}[axis x line=bottom, axis y line=left, ylabel=secs, | 
         | 
   290     xlabel=n,  | 
         | 
   291     enlargelimits=0.05,  | 
         | 
   292     ybar interval=0.7, legend style=small]  | 
         | 
   293 \addplot file {interpreted2.data}; | 
         | 
   294 \addplot file {compiled2.data}; | 
         | 
   295 %\legend{interpreted, compiled} | 
         | 
   296 \end{axis} | 
         | 
   297 \end{tikzpicture}} | 
         | 
   298 \end{bubble} | 
         | 
   299 \end{textblock}} | 
         | 
   300   | 
         | 
   301 \end{frame} | 
         | 
   302 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       | 
         | 
   303   | 
         | 
   304 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   305 \begin{frame}[c] | 
         | 
   306 \frametitle{The Acad.~Subject is Mature} | 
         | 
   307   | 
         | 
   308 \begin{itemize} | 
         | 
   309 \item Turing Machines, 1936  | 
         | 
   310 \item Regular Expressions, 1956\\  | 
         | 
   311 \item The first compiler for COBOL, 1957\\ (Grace Hopper)  | 
         | 
   312 \item But surprisingly research papers are still published nowadays\\  | 
         | 
   313 \item ``Parsing: The Solved Problem That Isn't''  | 
         | 
   314 \end{itemize} | 
         | 
   315   | 
         | 
   316 \begin{flushright} | 
         | 
   317 \includegraphics[scale=0.3]{pics/hopper.jpg}\\ | 
         | 
   318 \footnotesize\textcolor{gray}{Grace Hopper} | 
         | 
   319 \end{flushright} | 
         | 
   320   | 
         | 
   321   | 
         | 
   322 \begin{flushright} | 
         | 
   323 \mbox{}\\[-6mm] | 
         | 
   324 {\footnotesize\textcolor{gray}{(she made it to David Letterman's Tonight Show,\\[-2mm] | 
         | 
   325  \url{http://www.youtube.com/watch?v=aZOxtURhfEU})}} | 
         | 
   326 \end{flushright} | 
         | 
   327   | 
         | 
   328 \end{frame} | 
         | 
   329 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       | 
         | 
   330   | 
   267   | 
   331   | 
   268   | 
   332   | 
   269 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
   333 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
   270 \begin{frame}[c] | 
   334 \begin{frame}[c] | 
   271 \frametitle{Lectures 1 - 5} | 
   335 \frametitle{Lectures 1 - 5} | 
   699 \begin{column}{.5\textwidth} | 
   765 \begin{column}{.5\textwidth} | 
   700 \underline{\bf Strand 1}\medskip | 
   766 \underline{\bf Strand 1}\medskip | 
   701 \begin{itemize} | 
   767 \begin{itemize} | 
   702 \item four programming tasks:  | 
   768 \item four programming tasks:  | 
   703 \begin{itemize} | 
   769 \begin{itemize} | 
   704 \item matcher (4\%, 19.10.)   | 
   770 \item matcher (4\%, 12.10.)   | 
   705 \item lexer (5\%, 03.11.)  | 
   771 \item lexer (5\%, 02.11.)  | 
   706 \item parser (5\%, 23.11.)  | 
   772 \item parser (5\%, 23.11.)  | 
   707 \item compiler (6\%, 7.12.)  | 
   773 \item compiler (6\%, 14.12.)  | 
   708 \end{itemize} | 
   774 \end{itemize} | 
         | 
   775 \item in any lang.~you like,\\ but I want to see the code  | 
   709 \end{itemize} | 
   776 \end{itemize} | 
   710 \end{column} | 
   777 \end{column} | 
   711   | 
   778   | 
   712 \hspace{-45pt}\vrule{}\hspace{10pt} | 
   779 \hspace{-45pt}\vrule{}\hspace{10pt} | 
   713 \begin{column}{.5\textwidth} | 
   780 \begin{column}{.5\textwidth} | 
   714 \underline{\bf Strand 2}\smallskip\begin{itemize} | 
   781 \underline{\bf Strand 2}\smallskip\begin{itemize} | 
   715 \item one task: prove the correctness of a regular expression matcher in   | 
   782 \item one task: prove the correctness of a regular expression matcher in   | 
   716 the Isabelle theorem prover  | 
   783 the \underline{Isabelle} theorem prover | 
   717 \item 20\%, submission 7.12.  | 
   784 \item 20\%, submission on~14.12.\hspace{-5mm}\mbox{} | 
   718 \end{itemize} | 
   785 \end{itemize} | 
   719 \end{column} | 
   786 \end{column} | 
   720 \end{columns}\medskip | 
   787 \end{columns}\medskip | 
   721   | 
   788   | 
   722 \small  | 
   789 \small  |