slides/slides05.tex
changeset 743 6acabeecdf75
parent 671 83e38043ed78
child 792 34132a854d03
equal deleted inserted replaced
742:b5b5583a3a08 743:6acabeecdf75
     1 
     1 
     2 % !TEX program = xelatex
     2 % !TEX program = xelatex
     3 \documentclass[dvipsnames,14pt,t]{beamer}
     3 \documentclass[dvipsnames,14pt,t,xelatex,aspectratio=169,xcolor={table}]{beamer}
     4 \usepackage{../slides}
     4 \usepackage{../slides}
     5 \usepackage{../graphics}
     5 \usepackage{../graphics}
     6 \usepackage{../langs}
     6 \usepackage{../langs}
     7 \usepackage{../data}
     7 \usepackage{../data}
     8 \usepackage{../grammar}
     8 \usepackage{../grammar}
    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 
   476   \begin{tikzpicture}[scale=1,
    83   \begin{tikzpicture}[scale=1,
   477                       node/.style={
    84                       node/.style={
   478                       rectangle,rounded corners=3mm,
    85                       rectangle,rounded corners=3mm,
   479                       very thick,draw=black!50,
    86                       very thick,draw=black!50,
   480                       minimum height=18mm, minimum width=20mm,
    87                       minimum height=18mm, minimum width=20mm,
   481                       top color=white,bottom color=black!20}]
    88                       top color=white,bottom color=black!20,drop shadow}]
   482   \node (0) at (-2.3,0) {}; 
    89   \node (0) at (-2.3,0) {}; 
   483   
    90   
   484   \node (A) at (0,0)  [node] {};
    91   \node (A) at (0,0)  [node] {};
   485   \node [below right] at (A.north west) {lexer};
    92   \node [below right] at (A.north west) {lexer};
   486 
    93 
  1237 \begin{frame}[c]
   844 \begin{frame}[c]
  1238 \frametitle{Test Program}
   845 \frametitle{Test Program}
  1239 
   846 
  1240 \mbox{}\\[-18mm]\mbox{}
   847 \mbox{}\\[-18mm]\mbox{}
  1241 
   848 
  1242 {\lstset{language=While}%%\fontsize{10}{12}\selectfont
   849 ??%{\lstset{language=While}%%\fontsize{10}{12}\selectfont
  1243 \texttt{\lstinputlisting{../progs/loops.while}}}
   850 %\texttt{\lstinputlisting{../progs/loops.while}}}
  1244 
   851 
  1245 \end{frame}
   852 \end{frame}
  1246 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   853 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
  1247 
   854 
  1248 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   855 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%