369 \end{frame} | 
   370 \end{frame} | 
   370 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     | 
   371 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     | 
   371   | 
   372   | 
   372 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
   373 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
   373 \begin{frame}[c] | 
   374 \begin{frame}[c] | 
         | 
   375 \frametitle{Coursework: PLs (16)} | 
         | 
   376   | 
         | 
   377 \begin{itemize} | 
         | 
   378 \item Java (16)  | 
         | 
   379 \item C++, C, C\# (14)  | 
         | 
   380 \item JavaScript (10)  | 
         | 
   381 \item Scala (9)  | 
         | 
   382 \item Python (9)    | 
         | 
   383 \item PHP (6)  | 
         | 
   384 \item Haskell (3)  | 
         | 
   385 \item Ruby (4)  | 
         | 
   386 \item Bash, Perl, Powershell (2)  | 
         | 
   387 \item TypeScript (1)  | 
         | 
   388 \item R (1)  | 
         | 
   389 \item Coconut (1)    | 
         | 
   390 \item Pascal (1)  | 
         | 
   391 \end{itemize}   | 
         | 
   392   | 
         | 
   393 \end{frame} | 
         | 
   394 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   395   | 
         | 
   396 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
         | 
   397 \begin{frame}[c] | 
   374 \frametitle{Coursework: Nullable} | 
   398 \frametitle{Coursework: Nullable} | 
   375   | 
   399   | 
   376 \begin{center} | 
   400 \begin{center} | 
   377 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}} | 
   401 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}} | 
   378   \bl{$nullable([c_1 c_2 \ldots c_n])$}  & \bl{$\dn$} & $?$\\ | 
   402   \bl{$nullable([c_1 c_2 \ldots c_n])$}  & \bl{$\dn$} & $?$\\ | 
   398 \begin{tabular}{@ {}l@ {\hspace{1mm}}c@ {\hspace{1mm}}l@ {}} | 
   422 \begin{tabular}{@ {}l@ {\hspace{1mm}}c@ {\hspace{1mm}}l@ {}} | 
   399   \bl{$der\, c\, ([c_1 c_2 \ldots c_n])$}  & \bl{$\dn$} & $?$\\ | 
   423   \bl{$der\, c\, ([c_1 c_2 \ldots c_n])$}  & \bl{$\dn$} & $?$\\ | 
   400   \bl{$der\, c\, (r^+)$}                   & \bl{$\dn$} & $?$\\ | 
   424   \bl{$der\, c\, (r^+)$}                   & \bl{$\dn$} & $?$\\ | 
   401   \bl{$der\, c\, (r^?)$}                   & \bl{$\dn$} & $?$\\ | 
   425   \bl{$der\, c\, (r^?)$}                   & \bl{$\dn$} & $?$\\ | 
   402   \bl{$der\, c\, (r^{\{n\}})$}              & \bl{$\dn$} & | 
   426   \bl{$der\, c\, (r^{\{n\}})$}              & \bl{$\dn$} & | 
   403      \bl{$if\;n=0\;then\;\ZERO\;else\;(der\,c\,r)\cdot r^{\{n-1\}}$}\\ | 
   427      \bl{$if\;n=0\;then\;\ZERO\;else\;(der\,c\,r)\cdot r^{\{n-\liningnums{1}\}}$}\\ | 
   404   \bl{$der\, c\, (r^{\{n..\}})$}            & \bl{$\dn$} & | 
   428   \bl{$der\, c\, (r^{\{n..\}})$}            & \bl{$\dn$} & | 
   405      \bl{$if\;n=0\;then (der\,c\,r)\cdot r^*$}\\ | 
   429      \bl{$if\;n=0\;then (der\,c\,r)\cdot r^*$}\\ | 
   406   & & \bl{$\phantom{if\;n=0\;}else \;(der\,c\,r)\cdot r^{\{n-1..\}}$}\\ | 
   430   & & \bl{$\phantom{if\;n=0\;}else \;(der\,c\,r)\cdot r^{\{n-\liningnums{1}..\}}$}\\ | 
   407   \bl{$der\, c\, (r^{\{..n\}})$}            & \bl{$\dn$} & | 
   431   \bl{$der\, c\, (r^{\{..n\}})$}            & \bl{$\dn$} & | 
   408      \bl{$if\;n=0\;then\;\ZERO\;else\;(der\,c\,r)\cdot r^{\{..n-1\}}$}\\ | 
   432      \bl{$if\;n=0\;then\;\ZERO\;else\;(der\,c\,r)\cdot r^{\{..n-\liningnums{1}\}}$}\\ | 
   409     | 
   433     | 
   410   \bl{$der\, c\, (r^{\{n..m\}})$}          & \bl{$\dn$} & | 
   434   \bl{$der\, c\, (r^{\{n..m\}})$}          & \bl{$\dn$} & | 
   411      \bl{$if\;n = 0 \wedge m = 0\;then\;\ZERO\; else$}\\ | 
   435      \bl{$if\;n = 0 \wedge m = 0\;then\;\ZERO\; else$}\\ | 
   412   \multicolumn{3}{l}{\bl{$if\;n = 0 \wedge m > 0\;then\;(der\,c\,r)\cdot r^{\{..m-1\}}$}}\\ | 
   436   \multicolumn{3}{l}{\bl{$if\;n = 0 \wedge m > 0\;then\;(der\,c\,r)\cdot r^{\{..m-\liningnums{1}\}}$}}\\ | 
   413   \multicolumn{3}{l}{\bl{$\phantom{if\;n = 0 \wedge m > 0\;}else | 
   437   \multicolumn{3}{l}{\bl{$\phantom{if\;n = 0 \wedge m > 0\;}else | 
   414           \;(der\,c\,r)\cdot r^{\{n-1..m-1\}}$}}\\ | 
   438           \;(der\,c\,r)\cdot r^{\{n-\liningnums{1}..m-\liningnums{1}\}}$}}\\ | 
   415   \bl{$der\, c\, (\sim{}r)$}              & \bl{$\dn$} & $?$\\ | 
   439   \bl{$der\, c\, (\sim{}r)$}              & \bl{$\dn$} & $?$\\ | 
   416 \end{tabular} | 
   440 \end{tabular} | 
   417 \end{center} | 
   441 \end{center} | 
   418   | 
   442   | 
   419 \end{frame} | 
   443 \end{frame} | 
   614   | 
   638   | 
   615 \begin{enumerate} | 
   639 \begin{enumerate} | 
   616 \item Begin with a string containing only the start symbol, say \bl{\meta{S}}\bigskip | 
   640 \item Begin with a string containing only the start symbol, say \bl{\meta{S}}\bigskip | 
   617 \item Replace any nonterminal \bl{\meta{X}} in the string by the | 
   641 \item Replace any nonterminal \bl{\meta{X}} in the string by the | 
   618 right-hand side of some production \bl{$\meta{X} ::= \textit{rhs}$}\bigskip | 
   642 right-hand side of some production \bl{$\meta{X} ::= \textit{rhs}$}\bigskip | 
   619 \item Repeat 2 until there are no nonterminals  | 
   643 \item Repeat 2 until there are no nonterminals left  | 
   620 \end{enumerate} | 
   644 \end{enumerate} | 
   621   | 
   645   | 
   622 \begin{center} | 
   646 \begin{center} | 
   623 \bl{$\meta{S} \rightarrow \ldots \rightarrow \ldots  \rightarrow \ldots  \rightarrow \ldots $} | 
   647 \bl{$\meta{S} \rightarrow \ldots \rightarrow \ldots  \rightarrow \ldots  \rightarrow \ldots $} | 
   624 \end{center} | 
   648 \end{center} | 
   724 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     | 
   748 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     | 
   725   | 
   749   | 
   726 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
   750 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  | 
   727 \begin{frame}[t] | 
   751 \begin{frame}[t] | 
   728 \frametitle{Parse Trees} | 
   752 \frametitle{Parse Trees} | 
   729 \mbox{}\\[-16mm] | 
   753 \mbox{}\\[-12mm] | 
   730   | 
   754   | 
   731 \bl{\begin{plstx}: \meta{E} ::= \meta{F} | \meta{T} \cdot + \cdot \meta{E} |  \meta{T} \cdot - \cdot \meta{E}\\ | 
   755 \bl{\begin{plstx}: \meta{E} ::= \meta{F} | \meta{T} \cdot + \cdot \meta{E} |  \meta{T} \cdot - \cdot \meta{E}\\ | 
   732 : \meta{T} ::= \meta{F} | \meta{F} \cdot * \cdot \meta{T}\\ | 
   756 : \meta{T} ::= \meta{F} | \meta{F} \cdot * \cdot \meta{T}\\ | 
   733 : \meta{F} ::= num\_token | ( \cdot \meta{E} \cdot )\\ | 
   757 : \meta{F} ::= num\_token | ( \cdot \meta{E} \cdot )\\ | 
   734 \end{plstx}} | 
   758 \end{plstx}} | 
   936 \frametitle{\begin{tabular}{c}Semantic Actions\end{tabular}} | 
   960 \frametitle{\begin{tabular}{c}Semantic Actions\end{tabular}} | 
   937   | 
   961   | 
   938 Addition  | 
   962 Addition  | 
   939   | 
   963   | 
   940 \begin{center} | 
   964 \begin{center} | 
   941 \bl{$T \sim + \sim E \Rightarrow \underbrace{f((x,y), z) \Rightarrow x + z}_{\text{semantic action}}$} | 
   965 \bl{$\meta{T} \sim + \sim \meta{E} \Rightarrow \underbrace{f\,((x,y), z) \Rightarrow x + z}_{\text{semantic action}}$} | 
   942 \end{center}\pause | 
   966 \end{center}\pause | 
   943   | 
   967   | 
   944 Multiplication  | 
   968 Multiplication  | 
   945   | 
   969   | 
   946 \begin{center} | 
   970 \begin{center} | 
   947 \bl{$F \sim * \sim T \Rightarrow f((x,y), z) \Rightarrow x * z$} | 
   971 \bl{$\meta{F} \sim * \sim \meta{T} \Rightarrow f\,((x,y), z) \Rightarrow x * z$} | 
   948 \end{center}\pause | 
   972 \end{center}\pause | 
   949   | 
   973   | 
   950 Parenthesis  | 
   974 Parenthesis  | 
   951   | 
   975   | 
   952 \begin{center} | 
   976 \begin{center} | 
   953 \bl{$\text{(} \sim E \sim \text{)} \Rightarrow f((x,y), z) \Rightarrow y$} | 
   977 \bl{$\text{(} \sim \meta{E} \sim \text{)} \Rightarrow f\,((x,y), z) \Rightarrow y$} | 
   954 \end{center} | 
   978 \end{center} | 
   955   | 
   979   | 
   956 \end{frame}} | 
   980 \end{frame}} | 
   957 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     | 
   981 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     | 
   958   | 
   982   |