23 \begin{frame}[t] | 
    23 \begin{frame}[t] | 
    24 \frametitle{% | 
    24 \frametitle{% | 
    25   \begin{tabular}{@ {}c@ {}} | 
    25   \begin{tabular}{@ {}c@ {}} | 
    26   \\[-3mm]  | 
    26   \\[-3mm]  | 
    27   \LARGE Compilers and \\[-2mm]   | 
    27   \LARGE Compilers and \\[-2mm]   | 
    28   \LARGE Formal Languages (5)\\[3mm]   | 
    28   \LARGE Formal Languages\\[3mm]   | 
    29   \end{tabular}} | 
    29   \end{tabular}} | 
    30   | 
    30   | 
    31   \normalsize  | 
    31   \normalsize  | 
    32   \begin{center} | 
    32   \begin{center} | 
    33   \begin{tabular}{ll} | 
    33   \begin{tabular}{ll} | 
    34     Email:  & christian.urban at kcl.ac.uk\\  | 
    34     Email:  & christian.urban at kcl.ac.uk\\  | 
    35     Office Hours: & Thursdays 12 -- 14\\  | 
    35     %Office Hours: & Thursdays 12 -- 14\\  | 
    36     Location: & N7.07 (North Wing, Bush House)\\  | 
    36     %Location: & N7.07 (North Wing, Bush House)\\  | 
    37     Slides \& Progs: & KEATS (also homework is there)\\    | 
    37     Slides \& Progs: & KEATS (also homework is there)\\    | 
    38   \end{tabular} | 
    38   \end{tabular} | 
         | 
    39 \end{center} | 
         | 
    40   | 
         | 
    41   \begin{center} | 
         | 
    42     \begin{tikzpicture} | 
         | 
    43       \node[drop shadow,fill=white,inner sep=0pt]   | 
         | 
    44       {\footnotesize\rowcolors{1}{capri!10}{white} | 
         | 
    45         \begin{tabular}{|p{4.8cm}|p{4.8cm}|}\hline | 
         | 
    46           1 Introduction, Languages          & 6 While-Language \\  | 
         | 
    47           2 Regular Expressions, Derivatives & 7 Compilation, JVM \\  | 
         | 
    48           3 Automata, Regular Languages      & 8 Compiling Functional Languages \\  | 
         | 
    49           4 Lexing, Tokenising               & 9 Optimisations \\  | 
         | 
    50           \cellcolor{blue!50} | 
         | 
    51           5 Grammars, Parsing                & 10 LLVM \\ \hline  | 
         | 
    52         \end{tabular}% | 
         | 
    53       };  | 
         | 
    54     \end{tikzpicture} | 
    39   \end{center} | 
    55   \end{center} | 
    40 \end{frame} | 
    56 \end{frame} | 
    41 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       | 
    57 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       | 
    42   | 
    58   | 
    43 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
    59 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
    44 \begin{frame}[c] | 
    60 %\begin{frame}[c] | 
    45   \frametitle{Coursework 1: Submissions} | 
    61 %  \frametitle{Coursework 1: Submissions} | 
    46     | 
    62 %    | 
    47   \begin{itemize} | 
    63 %  \begin{itemize} | 
    48   \item Scala (29)  | 
    64 %  \item Scala (29)  | 
    49   \item Haskell (1)  | 
    65 %  \item Haskell (1)  | 
    50   \item Kotlin (1)  | 
    66 %  \item Kotlin (1)  | 
    51   \item Rust (1)  | 
    67 %  \item Rust (1)  | 
    52   \end{itemize}\bigskip\bigskip   | 
    68 %  \end{itemize}\bigskip\bigskip   | 
    53     | 
    69 %    | 
    54   \small  | 
    70 %  \small  | 
    55   Please get in contact if you intend to do CW Strand 2. No zips please.  | 
    71 %  Please get in contact if you intend to do CW Strand 2. No zips please.  | 
    56   Give definitions also on paper if asked. BTW, simp   | 
    72 %  Give definitions also on paper if asked. BTW, simp   | 
    57   can stay unchanged. Use \texttt{ders} for CW2, not \texttt{ders2}! | 
    73 %  can stay unchanged. Use \texttt{ders} for CW2, not \texttt{ders2}! | 
    58   \end{frame} | 
    74 %  \end{frame} | 
    59   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
    75 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
    60       | 
    76       | 
    61     | 
         | 
    62 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
    63 \begin{frame}[c] | 
         | 
    64 \frametitle{\begin{tabular}{c}Last Week\\[-2mm]  | 
         | 
    65             Regexes and Values\end{tabular}} | 
         | 
    66   | 
         | 
    67 Regular expressions and their corresponding values:  | 
         | 
    68   | 
         | 
    69 \begin{center} | 
         | 
    70 \begin{columns} | 
         | 
    71 \begin{column}{3cm} | 
         | 
    72 \begin{tabular}{@{}rrl@{}} | 
         | 
    73   \bl{$r$} & \bl{$::=$}  & \bl{$\ZERO$}\\ | 
         | 
    74            & \bl{$\mid$} & \bl{$\ONE$}   \\ | 
         | 
    75            & \bl{$\mid$} & \bl{$c$}          \\ | 
         | 
    76            & \bl{$\mid$} & \bl{$r_1 \cdot r_2$}\\ | 
         | 
    77            & \bl{$\mid$} & \bl{$r_1 + r_2$}   \\ | 
         | 
    78   \\  | 
         | 
    79            & \bl{$\mid$} & \bl{$r^*$}         \\ | 
         | 
    80   \end{tabular} | 
         | 
    81 \end{column} | 
         | 
    82 \begin{column}{3cm} | 
         | 
    83 \begin{tabular}{@{\hspace{-7mm}}rrl@{}} | 
         | 
    84   \bl{$v$} & \bl{$::=$}  & \\ | 
         | 
    85            &             & \bl{$Empty$}   \\ | 
         | 
    86            & \bl{$\mid$} & \bl{$Char(c)$}          \\ | 
         | 
    87            & \bl{$\mid$} & \bl{$Seq(v_1,v_2)$}\\ | 
         | 
    88            & \bl{$\mid$} & \bl{$Left(v)$}   \\ | 
         | 
    89            & \bl{$\mid$} & \bl{$Right(v)$}  \\ | 
         | 
    90            & \bl{$\mid$} & \bl{$Stars [v_1,\ldots\,v_n]$} \\ | 
         | 
    91   \end{tabular} | 
         | 
    92 \end{column} | 
         | 
    93 \end{columns} | 
         | 
    94 \end{center} | 
         | 
    95   | 
         | 
    96   | 
         | 
    97 \end{frame} | 
         | 
    98 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     | 
         | 
    99   | 
         | 
   100 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   101 \begin{frame}[c] | 
         | 
   102   | 
         | 
   103 \begin{textblock}{10}(3,5) | 
         | 
   104 \begin{tikzpicture}[scale=2,node distance=1.3cm,every node/.style={minimum size=8mm}] | 
         | 
   105 \node (r1)  {\bl{$r_1$}}; | 
         | 
   106 \node (r2) [right=of r1] {\bl{$r_2$}}; | 
         | 
   107 \draw[->,line width=1mm]  (r1) -- (r2) node[above,midway] {\bl{$der\,a$}}; | 
         | 
   108 \node (r3) [right=of r2] {\bl{$r_3$}}; | 
         | 
   109 \draw[->,line width=1mm]  (r2) -- (r3) node[above,midway] {\bl{$der\,b$}}; | 
         | 
   110 \node (r4) [right=of r3] {\bl{$r_4$}}; | 
         | 
   111 \draw[->,line width=1mm]  (r3) -- (r4) node[above,midway] {\bl{$der\,c$}}; | 
         | 
   112 \draw (r4) node[anchor=west] {\;\raisebox{3mm}{\bl{$nullable$}}}; | 
         | 
   113 \node (v4) [below=of r4] {\bl{$v_4$}}; | 
         | 
   114 \draw[->,line width=1mm]  (r4) -- (v4);  | 
         | 
   115 \node (v3) [left=of v4] {\bl{$v_3$}}; | 
         | 
   116 \draw[->,line width=1mm]  (v4) -- (v3) node[below,midway] {\bl{$inj\,c$}}; | 
         | 
   117 \node (v2) [left=of v3] {\bl{$v_2$}}; | 
         | 
   118 \draw[->,line width=1mm]  (v3) -- (v2) node[below,midway] {\bl{$inj\,b$}}; | 
         | 
   119 \node (v1) [left=of v2] {\bl{$v_1$}}; | 
         | 
   120 \draw[->,line width=1mm]  (v2) -- (v1) node[below,midway] {\bl{$inj\,a$}}; | 
         | 
   121 \draw[->,line width=0.5mm]  (r3) -- (v3);  | 
         | 
   122 \draw[->,line width=0.5mm]  (r2) -- (v2);  | 
         | 
   123 \draw[->,line width=0.5mm]  (r1) -- (v1);  | 
         | 
   124 \draw (r4) node[anchor=north west] {\;\raisebox{-8mm}{\bl{$mkeps$}}}; | 
         | 
   125 \end{tikzpicture} | 
         | 
   126 \end{textblock} | 
         | 
   127   | 
         | 
   128 \begin{textblock}{6}(1,0.8) | 
         | 
   129 \begin{bubble}[6cm] | 
         | 
   130 \small  | 
         | 
   131 \begin{tabular}{ll} | 
         | 
   132 \bl{$r_1$}: & \bl{$a \cdot (b \cdot c)$}\\ | 
         | 
   133 \bl{$r_2$}: & \bl{$\ONE \cdot (b \cdot c)$}\\ | 
         | 
   134 \bl{$r_3$}: & \bl{$(\ZERO \cdot (b \cdot c)) + (\ONE \cdot c)$}\\ | 
         | 
   135 \bl{$r_4$}: & \bl{$(\ZERO \cdot (b \cdot c)) + ((\ZERO \cdot c) + \ONE)$}\\ | 
         | 
   136 \end{tabular} | 
         | 
   137 \end{bubble} | 
         | 
   138 \end{textblock} | 
         | 
   139   | 
         | 
   140 \begin{textblock}{6}(1,11.4) | 
         | 
   141 \begin{bubble}[7.6cm] | 
         | 
   142 \small  | 
         | 
   143 \begin{tabular}{ll} | 
         | 
   144 \bl{$v_1$}: & \bl{$Seq(Char(a), Seq(Char(b), Char(c)))$}\\ | 
         | 
   145 \bl{$v_2$}: & \bl{$Seq(Empty, Seq(Char(b), Char(c)))$}\\ | 
         | 
   146 \bl{$v_3$}: & \bl{$Right(Seq(Empty, Char(c)))$}\\ | 
         | 
   147 \bl{$v_4$}: & \bl{$Right(Right(Empty))$}\\ | 
         | 
   148 \end{tabular} | 
         | 
   149 \end{bubble} | 
         | 
   150 \end{textblock} | 
         | 
   151   | 
         | 
   152 \begin{textblock}{6}(12,11.4) | 
         | 
   153 \begin{bubble}[2cm] | 
         | 
   154 \small  | 
         | 
   155 \begin{tabular}{ll} | 
         | 
   156 \bl{$|v_1|$}: & \bl{$abc$}\\ | 
         | 
   157 \bl{$|v_2|$}: & \bl{$bc$}\\ | 
         | 
   158 \bl{$|v_3|$}: & \bl{$c$}\\ | 
         | 
   159 \bl{$|v_4|$}: & \bl{$[]$} | 
         | 
   160 \end{tabular} | 
         | 
   161 \end{bubble} | 
         | 
   162 \end{textblock} | 
         | 
   163   | 
         | 
   164   | 
         | 
   165 \end{frame} | 
         | 
   166 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     | 
         | 
   167   | 
         | 
   168 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   169 \begin{frame}[c] | 
         | 
   170 \frametitle{Simplification} | 
         | 
   171   | 
         | 
   172 \begin{itemize} | 
         | 
   173 \item If we simplify after the derivative, then we are builing the  | 
         | 
   174 value for the simplified regular expression, but \emph{not} for the original | 
         | 
   175 regular expression.  | 
         | 
   176 \end{itemize} | 
         | 
   177   | 
         | 
   178 \begin{center} | 
         | 
   179 \begin{tikzpicture}[scale=2,node distance=1.3cm,every node/.style={minimum size=8mm}] | 
         | 
   180 \node (r1)  {\bl{$r_1$}}; | 
         | 
   181 \node (r2) [right=of r1] {\bl{$r_2$}}; | 
         | 
   182 \draw[->,line width=1mm]  (r1) -- (r2) node[above,midway] {\bl{$der\,a$}}; | 
         | 
   183 \node (r3) [right=of r2] {\bl{$r_3$}}; | 
         | 
   184 \draw[->,line width=1mm]  (r2) -- (r3) node[above,midway] {\bl{$der\,b$}}; | 
         | 
   185 \node (r4) [right=of r3] {\bl{$r_4$}}; | 
         | 
   186 \draw[->,line width=1mm]  (r3) -- (r4) node[above,midway] {\bl{$der\,c$}}; | 
         | 
   187 \draw (r4) node[anchor=west] {\;\raisebox{3mm}{\bl{$nullable$}}}; | 
         | 
   188 \node (v4) [below=of r4] {\bl{$v_4$}}; | 
         | 
   189 \draw[->,line width=1mm]  (r4) -- (v4);  | 
         | 
   190 \node (v3) [left=of v4] {\bl{$v_3$}}; | 
         | 
   191 \draw[->,line width=1mm]  (v4) -- (v3) node[below,midway] {\bl{$inj\,c$}}; | 
         | 
   192 \node (v2) [left=of v3] {\bl{$v_2$}}; | 
         | 
   193 \draw[->,line width=1mm]  (v3) -- (v2) node[below,midway] {\bl{$inj\,b$}}; | 
         | 
   194 \node (v1) [left=of v2] {\bl{$v_1$}}; | 
         | 
   195 \draw[->,line width=1mm]  (v2) -- (v1) node[below,midway] {\bl{$inj\,a$}}; | 
         | 
   196 \draw[->,line width=0.5mm]  (r3) -- (v3);  | 
         | 
   197 \draw[->,line width=0.5mm]  (r2) -- (v2);  | 
         | 
   198 \draw[->,line width=0.5mm]  (r1) -- (v1);  | 
         | 
   199 \draw (r4) node[anchor=north west] {\;\raisebox{-8mm}{\bl{$mkeps$}}}; | 
         | 
   200 \end{tikzpicture} | 
         | 
   201 \end{center} | 
         | 
   202   | 
         | 
   203 \small  | 
         | 
   204 \hspace{4.5cm}\bl{$(b \cdot c) + (\ZERO + \ONE)$} | 
         | 
   205 $\mapsto$  | 
         | 
   206 \bl{$(b \cdot c) + \ONE$} | 
         | 
   207   | 
         | 
   208 \end{frame} | 
         | 
   209 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    | 
         | 
   210   | 
         | 
   211 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   212 % \begin{frame}[t] | 
         | 
   213   | 
         | 
   214 % \begin{center} | 
         | 
   215 % \bl{$\only<1>{(b \cdot c)}% | 
         | 
   216 %      \only<2-3>{(\underline{b \cdot c})}% | 
         | 
   217 %      \only<1-3>{+}%  | 
         | 
   218 %      \only<1>{(\ZERO + \ONE)}% | 
         | 
   219 %      \only<2-3>{(\underline{\ZERO + \ONE})}$}% | 
         | 
   220 % \only<4->{% | 
         | 
   221 % \bl{$\underline{(b \cdot c) + (\ZERO + \ONE)}$}% | 
         | 
   222 % }  | 
         | 
   223 % $\mapsto$  | 
         | 
   224 % \bl{$(b \cdot c) + \ONE$} | 
         | 
   225 % \end{center}\bigskip | 
         | 
   226   | 
         | 
   227 % \onslide<3->{% | 
         | 
   228 % \begin{center} | 
         | 
   229 % \begin{tabular}{lcl} | 
         | 
   230 % \bl{$f_{s1}$} & \bl{$=$} & \bl{$\lambda v.v$}\\ | 
         | 
   231 % \bl{$f_{s2}$} & \bl{$=$} & \bl{$\lambda v. \textit{Right}(v)$} | 
         | 
   232 % \end{tabular} | 
         | 
   233 % \end{center}} | 
         | 
   234   | 
         | 
   235 % \only<4>{% | 
         | 
   236 % \begin{center} | 
         | 
   237 % \begin{tabular}{@{}l@{\hspace{1mm}}l@{}} | 
         | 
   238 % \bl{$f_{alt}(f_{s1}, f_{s2}) \dn$}\\ | 
         | 
   239 % \quad \bl{$\lambda v.\,$}  | 
         | 
   240 %         case \bl{$v = Left(v')$}:  | 
         | 
   241 %       & return \bl{$Left(f_{s1}(v'))$}\\ | 
         | 
   242 % \quad \phantom{$\lambda v.\,$}  | 
         | 
   243 %         case \bl{$v = Right(v')$}:  | 
         | 
   244 %       & return \bl{$Right(f_{s2}(v'))$}\\  | 
         | 
   245 % \end{tabular} | 
         | 
   246 % \end{center}}% | 
         | 
   247 % \only<5->{% | 
         | 
   248 % \begin{center} | 
         | 
   249 % \begin{tabular}{@{}l@{\hspace{1mm}}l@{}} | 
         | 
   250 % \only<5->{\phantom{\bl{$f_{alt}(f_{s1}, f_{s2}) \dn$}}}\\ | 
         | 
   251 % \quad \bl{$\lambda v.\,$}  | 
         | 
   252 %         case \bl{$v = Left(v')$}:  | 
         | 
   253 %       & return \bl{$Left(v')$}\\ | 
         | 
   254 % \quad \phantom{$\lambda v.\,$}  | 
         | 
   255 %         case \bl{$v = Right(v')$}:  | 
         | 
   256 %       & return \bl{$Right(Right(v'))$}\\  | 
         | 
   257 % \end{tabular} | 
         | 
   258 % \end{center}}% | 
         | 
   259   | 
         | 
   260 % \only<6->{% | 
         | 
   261 % \begin{center} | 
         | 
   262 % \begin{tabular}{@{}l@{\hspace{4mm}}l@{}} | 
         | 
   263 % \bl{$\textit{mkeps}$} simplified case: & | 
         | 
   264 % \bl{$\textit{Right}(\textit{Empty})$}\\ | 
         | 
   265 % rectified case: &  | 
         | 
   266 % \bl{$\textit{Right}(\textit{Right}(\textit{Empty}))$} | 
         | 
   267 % \end{tabular} | 
         | 
   268 % \end{center}}% | 
         | 
   269   | 
         | 
   270 % \end{frame} | 
         | 
   271 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   272   | 
         | 
   273 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   274 \begin{frame}[c] | 
         | 
   275 \frametitle{Records} | 
         | 
   276   | 
         | 
   277 \begin{itemize} | 
         | 
   278 \item new regex: \bl{$(x:r)$}\hspace{7mm}new value: \bl{$Rec(x,v)$}\medskip\pause | 
         | 
   279   | 
         | 
   280 \item \bl{$nullable(x:r) \dn nullable(r)$} | 
         | 
   281 \item \bl{$der\,c\,(x:r) \dn der\,c\,r$} | 
         | 
   282 \item \bl{$mkeps(x:r) \dn Rec(x, mkeps(r))$} | 
         | 
   283 \item \bl{$inj\,(x:r)\,c\,v \dn Rec(x, inj\,r\,c\,v)$} | 
         | 
   284 \end{itemize}\bigskip\bigskip\pause | 
         | 
   285   | 
         | 
   286 \small  | 
         | 
   287 for extracting subpatterns \bl{$(z: ((x:ab) + (y:ba))$} | 
         | 
   288   | 
         | 
   289 \end{frame} | 
         | 
   290 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   291   | 
         | 
   292   | 
         | 
   293 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   294 \begin{frame}[c] | 
         | 
   295 \frametitle{Environments} | 
         | 
   296   | 
         | 
   297 Obtaining the ``recorded'' parts of a value:   | 
         | 
   298   | 
         | 
   299 \begin{center} | 
         | 
   300 \begin{tabular}{lcl} | 
         | 
   301   \bl{$env(Empty)$}     & \bl{$\dn$} & \bl{$[]$}\\ | 
         | 
   302   \bl{$env(Char(c))$}   & \bl{$\dn$} & \bl{$[]$}\\ | 
         | 
   303   \bl{$env(Left(v))$}   & \bl{$\dn$} & \bl{$env(v)$}\\ | 
         | 
   304   \bl{$env(Right(v))$}  & \bl{$\dn$} & \bl{$env(v)$}\\ | 
         | 
   305   \bl{$env(Seq(v_1,v_2))$}& \bl{$\dn$} & \bl{$env(v_1) \,@\, env(v_2)$}\\ | 
         | 
   306   \bl{$env(Stars [v_1,\ldots ,v_n])$} & \bl{$\dn$} &  | 
         | 
   307      \bl{$env(v_1) \,@\ldots @\, env(v_n)$}\\ | 
         | 
   308   \bl{$env(Rec(x:v))$} & \bl{$\dn$} & \bl{$(x:|v|) :: env(v)$}\\ | 
         | 
   309 \end{tabular} | 
         | 
   310 \end{center} | 
         | 
   311   | 
         | 
   312 \end{frame} | 
         | 
   313 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     | 
         | 
   314   | 
         | 
   315   | 
         | 
   316 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   317 \begin{frame}[c] | 
         | 
   318 \frametitle{While Tokens} | 
         | 
   319   | 
         | 
   320 \begin{center} | 
         | 
   321 \begin{tabular}{@{}r@{\hspace{2mm}}c@{\hspace{2mm}}l@{}} | 
         | 
   322 \pcode{WHILE\_REGS} & $\dn$ & \raisebox{-1mm}{\large(}\pcode{("k" : KEYWORD)} +\\  | 
         | 
   323                   &       & \phantom{(}\pcode{("i" : ID)} +\\  | 
         | 
   324                   &       & \phantom{(}\pcode{("o" : OP)} + \\ | 
         | 
   325                   &       & \phantom{(}\pcode{("n" : NUM)} + \\ | 
         | 
   326                   &       & \phantom{(}\pcode{("s" : SEMI)} +\\  | 
         | 
   327                   &       & \phantom{(}\pcode{("p" : (LPAREN + RPAREN))} +\\  | 
         | 
   328                   &       & \phantom{(}\pcode{("b" : (BEGIN + END))} +\\  | 
         | 
   329                   &       & \phantom{(}\pcode{("w" : WHITESPACE)}\raisebox{-1mm}{\large)$^*$} | 
         | 
   330 \end{tabular} | 
         | 
   331 \end{center} | 
         | 
   332   | 
         | 
   333 \end{frame} | 
         | 
   334 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   | 
         | 
   335   | 
         | 
   336   | 
         | 
   337   | 
         | 
   338 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   339 \begin{frame}[t] | 
         | 
   340   | 
         | 
   341 \consolas  | 
         | 
   342 \begin{center} | 
         | 
   343 \code{"if true then then 42 else +"} | 
         | 
   344 \end{center} | 
         | 
   345   | 
         | 
   346 \only<1>{ | 
         | 
   347 \small\begin{tabular}{l} | 
         | 
   348 KEYWORD(if),\\   | 
         | 
   349 WHITESPACE,\\   | 
         | 
   350 IDENT(true),\\   | 
         | 
   351 WHITESPACE,\\   | 
         | 
   352 KEYWORD(then),\\   | 
         | 
   353 WHITESPACE,\\   | 
         | 
   354 KEYWORD(then),\\   | 
         | 
   355 WHITESPACE,\\   | 
         | 
   356 NUM(42),\\   | 
         | 
   357 WHITESPACE,\\   | 
         | 
   358 KEYWORD(else),\\   | 
         | 
   359 WHITESPACE,\\   | 
         | 
   360 OP(+)  | 
         | 
   361 \end{tabular}} | 
         | 
   362   | 
         | 
   363 \only<2>{ | 
         | 
   364 \small\begin{tabular}{l} | 
         | 
   365 KEYWORD(if),\\   | 
         | 
   366 IDENT(true),\\   | 
         | 
   367 KEYWORD(then),\\   | 
         | 
   368 KEYWORD(then),\\   | 
         | 
   369 NUM(42),\\   | 
         | 
   370 KEYWORD(else),\\   | 
         | 
   371 OP(+)  | 
         | 
   372 \end{tabular}} | 
         | 
   373   | 
         | 
   374 \end{frame} | 
         | 
   375 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     | 
         | 
   376   | 
         | 
   377   | 
         | 
   378   | 
         | 
   379 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   380 %\begin{frame}[c] | 
         | 
   381 %\frametitle{Coursework: PLs (16)} | 
         | 
   382 %  | 
         | 
   383 %\begin{itemize} | 
         | 
   384 %\item Java (16)  | 
         | 
   385 %\item C++, C, C\# (14)  | 
         | 
   386 %\item JavaScript (10)  | 
         | 
   387 %\item Scala (9)  | 
         | 
   388 %\item Python (9)    | 
         | 
   389 %\item PHP (6)  | 
         | 
   390 %\item Haskell (3)  | 
         | 
   391 %\item Ruby (4)  | 
         | 
   392 %\item Bash, Perl, Powershell (2)  | 
         | 
   393 %\item TypeScript (1)  | 
         | 
   394 %\item R (1)  | 
         | 
   395 %\item Coconut (1)    | 
         | 
   396 %\item Pascal (1)  | 
         | 
   397 %\end{itemize}   | 
         | 
   398 %  | 
         | 
   399 %\end{frame} | 
         | 
   400 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   401   | 
         | 
   402 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   403 %\begin{frame}[c] | 
         | 
   404 %\frametitle{Coursework: Nullable} | 
         | 
   405 %  | 
         | 
   406 %\begin{center} | 
         | 
   407 %\begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}} | 
         | 
   408 %  \bl{$nullable([c_1 c_2 \ldots c_n])$}  & \bl{$\dn$} & $?$\\ | 
         | 
   409 %  \bl{$nullable(r^+)$}                   & \bl{$\dn$} & $?$\\ | 
         | 
   410 %  \bl{$nullable(r^?)$}                   & \bl{$\dn$} & $?$\\ | 
         | 
   411 %  \bl{$nullable(r^{\{n\}})$}              & \bl{$\dn$} & $?$\\ | 
         | 
   412 %  \bl{$nullable(r^{\{n..\}})$}            & \bl{$\dn$} & $?$\\ | 
         | 
   413 %  \bl{$nullable(r^{\{..n\}})$}            & \bl{$\dn$} & $?$\\ | 
         | 
   414 %  \bl{$nullable(r^{\{n..m\}})$}           & \bl{$\dn$} & $?$\\ | 
         | 
   415 %  \bl{$nullable(\sim{}r)$}               & \bl{$\dn$} & $?$\\ | 
         | 
   416 %                                                          | 
         | 
   417 %\end{tabular} | 
         | 
   418 %\end{center} | 
         | 
   419 %  | 
         | 
   420 %\end{frame} | 
         | 
   421 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   422   | 
         | 
   423 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   424 %\begin{frame}[c] | 
         | 
   425 %%%\frametitle{Coursework: der} | 
         | 
   426 %  | 
         | 
   427 %\begin{center} | 
         | 
   428 %\begin{tabular}{@ {}l@ {\hspace{1mm}}c@ {\hspace{1mm}}l@ {}} | 
         | 
   429 %  \bl{$der\, c\, ([c_1 c_2 \ldots c_n])$}  & \bl{$\dn$} & $?$\\ | 
         | 
   430 %  \bl{$der\, c\, (r^+)$}                   & \bl{$\dn$} & $?$\\ | 
         | 
   431 %  \bl{$der\, c\, (r^?)$}                   & \bl{$\dn$} & $?$\\ | 
         | 
   432 %  \bl{$der\, c\, (r^{\{n\}})$}              & \bl{$\dn$} & | 
         | 
   433 %     \bl{$if\;n=0\;then\;\ZERO\;else\;(der\,c\,r)\cdot r^{\{n-\liningnums{1}\}}$}\\ | 
         | 
   434 %  \bl{$der\, c\, (r^{\{n..\}})$}            & \bl{$\dn$} & | 
         | 
   435 %     \bl{$if\;n=0\;then (der\,c\,r)\cdot r^*$}\\ | 
         | 
   436 %  & & \bl{$\phantom{if\;n=0\;}else \;(der\,c\,r)\cdot r^{\{n-\liningnums{1}..\}}$}\\ | 
         | 
   437 %  \bl{$der\, c\, (r^{\{..n\}})$}            & \bl{$\dn$} & | 
         | 
   438 %     \bl{$if\;n=0\;then\;\ZERO\;else\;(der\,c\,r)\cdot r^{\{..n-\liningnums{1}\}}$}\\ | 
         | 
   439 %    | 
         | 
   440 %  \bl{$der\, c\, (r^{\{n..m\}})$}          & \bl{$\dn$} & | 
         | 
   441 %     \bl{$if\;n = 0 \wedge m = 0\;then\;\ZERO\; else$}\\ | 
         | 
   442 %  \multicolumn{3}{l}{\bl{$if\;n = 0 \wedge m > 0\;then\;(der\,c\,r)\cdot r^{\{..m-\liningnums{1}\}}$}}\\ | 
         | 
   443 %  \multicolumn{3}{l}{\bl{$\phantom{if\;n = 0 \wedge m > 0\;}else | 
         | 
   444 %          \;(der\,c\,r)\cdot r^{\{n-\liningnums{1}..m-\liningnums{1}\}}$}}\\ | 
         | 
   445 %  \bl{$der\, c\, (\sim{}r)$}              & \bl{$\dn$} & $?$\\ | 
         | 
   446 %\end{tabular} | 
         | 
   447 %\end{center} | 
         | 
   448 %  | 
         | 
   449 %\end{frame} | 
         | 
   450 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   451   | 
         | 
   452 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   453 %\begin{frame}[c] | 
         | 
   454 %\frametitle{Coursework: CFUN} | 
         | 
   455 %  | 
         | 
   456 %\begin{center} | 
         | 
   457 %\begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}} | 
         | 
   458 %  \bl{$nullable(CFUN(\_))$}  & \bl{$\dn$} & \bl{$false$}\\ | 
         | 
   459 %  \bl{$der\,c\,(CFUN(f))$}   & \bl{$\dn$} & | 
         | 
   460 %     \bl{$if\;f(c)\;then\;\ONE\;else\;\ZERO$}\bigskip\\ | 
         | 
   461 %  \bl{$CHAR(c)$}                   & \bl{$\dn$} & \bl{$CFUN(\lambda{}d.\;c=d)$}\\ | 
         | 
   462 %  \bl{$CSET([c_1,\ldots,c_n])$} & \bl{$\dn$} & \bl{$CFUN(\lambda{}d.\;d\in [c_1,\ldots,c_n])$}\\ | 
         | 
   463 %  \bl{$ALL$}                   & \bl{$\dn$} & \bl{$CFUN(\lambda{}d.\;true)$}\\                                                       | 
         | 
   464 %\end{tabular} | 
         | 
   465 %\end{center} | 
         | 
   466 %  | 
         | 
   467 %\end{frame} | 
         | 
   468 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   469    | 
         | 
   470 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
    77 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
   471 \begin{frame}[t] | 
    78 \begin{frame}[t] | 
   472 \frametitle{Lexer, Parser} | 
    79 \frametitle{Lexer, Parser} | 
   473 \mbox{}\\[-16mm]\mbox{} | 
    80 \mbox{}\\[-16mm]\mbox{} | 
   474   | 
    81   |