diff -r 3056a4c071b0 -r e7d0157f0471 slides/slides04.tex --- a/slides/slides04.tex Fri Oct 07 22:08:03 2016 +0100 +++ b/slides/slides04.tex Sat Oct 08 13:45:30 2016 +0100 @@ -10,7 +10,7 @@ \newcommand{\bl}[1]{\textcolor{blue}{#1}} -\renewcommand{\slidecaption}{AFL 04, King's College London} +\renewcommand{\slidecaption}{CFL 04, King's College London} \begin{document} @@ -19,7 +19,7 @@ \frametitle{% \begin{tabular}{@ {}c@ {}} \\[-3mm] - \LARGE Automata and \\[-2mm] + \LARGE Compilers and \\[-2mm] \LARGE Formal Languages (4)\\[3mm] \end{tabular}} @@ -61,7 +61,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[t] -\frametitle{\bl{$a^?^{\{n\}} \cdot a^{\{n\}}$}} +\frametitle{\bl{$a^{?\{n\}} \cdot a^{\{n\}}$}} \begin{tikzpicture} \begin{axis}[xlabel={\pcode{a}s},ylabel={time in secs}, @@ -77,12 +77,9 @@ legend entries={Python,Ruby,my NFA}, legend pos=north west, legend cell align=left] -\addplot[blue,mark=*, mark options={fill=white}] - table {re-python.data}; -\addplot[brown,mark=pentagon*, mark options={fill=white}] - table {re-ruby.data}; -\addplot[red,mark=triangle*, mark options={fill=white}] - table {nfasearch.data}; +\addplot[blue,mark=*, mark options={fill=white}] table {re-python.data}; +\addplot[brown,mark=pentagon*, mark options={fill=white}] table {re-ruby.data}; +\addplot[red,mark=triangle*, mark options={fill=white}] table {nfasearch.data}; \end{axis} \end{tikzpicture} @@ -111,7 +108,7 @@ \begin{center} \begin{tabular}{r@ {\hspace{2mm}}c@ {\hspace{2mm}}l@{\hspace{7mm}}l} -\bl{$q_0$} & \bl{$=$} & \bl{$\epsilon + q_0\,b + q_1\,b + q_2\,b$} & (start state)\\ +\bl{$q_0$} & \bl{$=$} & \bl{$\ONE + q_0\,b + q_1\,b + q_2\,b$} & (start state)\\ \bl{$q_1$} & \bl{$=$} & \bl{$q_0\,a$}\\ \bl{$q_2$} & \bl{$=$} & \bl{$q_1\,a + q_2\,a$}\\ @@ -241,7 +238,7 @@ \small -for example $a^nb^n$ is not regular +for example \bl{$a^nb^n$} is not regular \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -542,8 +539,8 @@ \begin{columns} \begin{column}{3cm} \begin{tabular}{@{}rrl@{}} - \bl{$r$} & \bl{$::=$} & \bl{$\varnothing$}\\ - & \bl{$\mid$} & \bl{$\epsilon$} \\ + \bl{$r$} & \bl{$::=$} & \bl{$\ZERO$}\\ + & \bl{$\mid$} & \bl{$\ONE$} \\ & \bl{$\mid$} & \bl{$c$} \\ & \bl{$\mid$} & \bl{$r_1 \cdot r_2$}\\ & \bl{$\mid$} & \bl{$r_1 + r_2$} \\ @@ -589,7 +586,7 @@ \begin{center} \begin{tabular}{lcl} - \bl{$mkeps\,\epsilon$} & \bl{$\dn$} & \bl{$Empty$}\\ + \bl{$mkeps\,\ONE$} & \bl{$\dn$} & \bl{$Empty$}\\ \bl{$mkeps\,r_1 + r_2$} & \bl{$\dn$} & \bl{if $nullable(r_1)$} \\ & & \bl{then $Left(mkeps(r_1))$}\\ & & \bl{else $Right(mkeps(r_2))$}\\ @@ -660,9 +657,9 @@ \small \begin{tabular}{ll} \bl{$r_1$}: & \bl{$a \cdot (b \cdot c)$}\\ -\bl{$r_2$}: & \bl{$\epsilon \cdot (b \cdot c)$}\\ -\bl{$r_3$}: & \bl{$(\varnothing \cdot (b \cdot c)) + (\epsilon \cdot c)$}\\ -\bl{$r_4$}: & \bl{$(\varnothing \cdot (b \cdot c)) + ((\varnothing \cdot c) + \epsilon)$}\\ +\bl{$r_2$}: & \bl{$\ONE \cdot (b \cdot c)$}\\ +\bl{$r_3$}: & \bl{$(\ZERO \cdot (b \cdot c)) + (\ONE \cdot c)$}\\ +\bl{$r_4$}: & \bl{$(\ZERO \cdot (b \cdot c)) + ((\ZERO \cdot c) + \ONE)$}\\ \end{tabular} \end{bubble} \end{textblock}} @@ -735,9 +732,9 @@ \small \begin{tabular}{ll} \bl{$r_1$}: & \bl{$a \cdot (b \cdot c)$}\\ -\bl{$r_2$}: & \bl{$\epsilon \cdot (b \cdot c)$}\\ -\bl{$r_3$}: & \bl{$(\varnothing \cdot (b \cdot c)) + (\epsilon \cdot c)$}\\ -\bl{$r_4$}: & \bl{$(\varnothing \cdot (b \cdot c)) + ((\varnothing \cdot c) + \epsilon)$}\\ +\bl{$r_2$}: & \bl{$\ONE \cdot (b \cdot c)$}\\ +\bl{$r_3$}: & \bl{$(\ZERO \cdot (b \cdot c)) + (\ONE \cdot c)$}\\ +\bl{$r_4$}: & \bl{$(\ZERO \cdot (b \cdot c)) + ((\ZERO \cdot c) + \ONE)$}\\ \end{tabular} \end{bubble} \end{textblock} @@ -831,30 +828,12 @@ \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}[c] -\frametitle{Records} - -\begin{itemize} -\item new regex: \bl{$(x:r)$}\hspace{7mm}new value: \bl{$Rec(x,v)$}\medskip\pause - -\item \bl{$nullable(x:r) \dn nullable(r)$} -\item \bl{$der\,c\,(x:r) \dn (x:der\,c\,r)$} -\item \bl{$mkeps(x:r) \dn Rec(x, mkeps(r))$} -\item \bl{$inj\,(x:r)\,c\,v \dn Rec(x, inj\,r\,c\,v)$} -\end{itemize}\bigskip\bigskip\pause - -\small -for extracting subpatterns \bl{$(z: ((x:ab) + (y:ba))$} - -\end{frame} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[c] \begin{itemize} -\item Regular expression for email addresses +\item A regular expression for email addresses \begin{center} \begin{tabular}{l} @@ -868,7 +847,7 @@ \texttt{christian.urban@kcl.ac.uk} \]} -\item result environment: +\item the result environment: \begin{center} \begin{tabular}{l} @@ -941,9 +920,9 @@ \end{center} \small -\hspace{4.5cm}\bl{$(\varnothing \cdot (b \cdot c)) + ((\varnothing \cdot c) + \epsilon)$} +\hspace{4.5cm}\bl{$(\ZERO \cdot (b \cdot c)) + ((\ZERO \cdot c) + \ONE)$} $\mapsto$ -\bl{$\epsilon$} +\bl{$\ONE$} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -954,22 +933,22 @@ \def\arraystretch{1.05} \begin{center} -\begin{tabular}{l@{\hspace{2mm}}c@{\hspace{2mm}}l@{\hspace{5mm}}l} +\begin{tabular}{l@{\hspace{2mm}}c@{\hspace{2mm}}l@{\hspace{8mm}}l} & & & \hspace{5mm}rectification \\ & & & \hspace{5mm}functions:\\ -\bl{$r \cdot \varnothing$} & $\mapsto$ & \bl{$\varnothing$} & \\ -\bl{$\varnothing \cdot r$} & $\mapsto$ & \bl{$\varnothing$} & \\ -\bl{$r \cdot \epsilon$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Seq(f_1\,v, f_2\,Empty)$}\\ -\bl{$\epsilon \cdot r$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Seq(f_1\,Empty, f_2\,v)$}\\ -\bl{$r + \varnothing$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Left(f_1\,v)$}\\ -\bl{$\varnothing + r$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Right(f_2\,v)$}\\ +\bl{$r \cdot \ZERO$} & $\mapsto$ & \bl{$\ZERO$} & \\ +\bl{$\ZERO \cdot r$} & $\mapsto$ & \bl{$\ZERO$} & \\ +\bl{$r \cdot \ONE$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Seq(f_1\,v, f_2\,Empty)$}\\ +\bl{$\ONE \cdot r$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Seq(f_1\,Empty, f_2\,v)$}\\ +\bl{$r + \ZERO$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Left(f_1\,v)$}\\ +\bl{$\ZERO + r$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Right(f_2\,v)$}\\ \bl{$r + r$} & $\mapsto$ & \bl{$r$} & \bl{$\lambda f_1\,f_2\,v.\, Left(f_1\,v)$} \end{tabular} \end{center}\medskip\pause \small old \bl{$simp$} returns a rexp;\\ -new \bl{$simp$} returns a rexp and a rectification~fun. +new \bl{$simp$} returns a rexp and a rectification~function. \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -984,9 +963,9 @@ \quad case \bl{$r = r_1 + r_2$}\\ \qquad let \bl{$(r_{1s}, f_{1s}) = simp(r_1)$}\\ \qquad \phantom{let} \bl{$(r_{2s}, f_{2s}) = simp(r_2)$}\smallskip\\ -\qquad case \bl{$r_{1s} = \varnothing$}: +\qquad case \bl{$r_{1s} = \ZERO$}: return \bl{$(r_{2s}, \lambda v. \,Right(f_{2s}(v)))$}\\ -\qquad case \bl{$r_{2s} = \varnothing$}: +\qquad case \bl{$r_{2s} = \ZERO$}: return \bl{$(r_{1s}, \lambda v. \,Left(f_{1s}(v)))$}\\ \qquad case \bl{$r_{1s} = r_{2s}$}: return \bl{$(r_{1s}, \lambda v. \,Left(f_{1s}(v)))$}\\ @@ -1010,12 +989,14 @@ \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[c] {\footnotesize\lstinputlisting[language=Scala,numbers=none, xleftmargin=-5mm] {../progs/app05.scala}} \end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[c] @@ -1027,13 +1008,13 @@ \quad case \bl{$r = r_1 \cdot r_2$}\\ \qquad let \bl{$(r_{1s}, f_{1s}) = simp(r_1)$}\\ \qquad \phantom{let} \bl{$(r_{2s}, f_{2s}) = simp(r_2)$}\smallskip\\ -\qquad case \bl{$r_{1s} = \varnothing$}: - return \bl{$(\varnothing, f_{error})$}\\ -\qquad case \bl{$r_{2s} = \varnothing$}: - return \bl{$(\varnothing, f_{error})$}\\ -\qquad case \bl{$r_{1s} = \epsilon$}: +\qquad case \bl{$r_{1s} = \ZERO$}: + return \bl{$(\ZERO, f_{error})$}\\ +\qquad case \bl{$r_{2s} = \ZERO$}: + return \bl{$(\ZERO, f_{error})$}\\ +\qquad case \bl{$r_{1s} = \ONE$}: return \bl{$(r_{2s}, \lambda v. \,Seq(f_{1s}(Empty), f_{2s}(v)))$}\\ -\qquad case \bl{$r_{2s} = \epsilon$}: +\qquad case \bl{$r_{2s} = \ONE$}: return \bl{$(r_{1s}, \lambda v. \,Seq(f_{1s}(v), f_{2s}(Empty)))$}\\ \qquad otherwise: return \bl{$(r_{1s} \cdot r_{2s}, f_{seq}(f_{1s}, f_{2s}))$}\\ @@ -1107,17 +1088,17 @@ \begin{frame}[c] \begin{center} \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}} -$zeroable(\varnothing)$ & $\dn$ & $true$\\ -$zeroable(\epsilon)$ & $\dn$ & $f\!alse$\\ -$zeroable (c)$ & $\dn$ & $f\!alse$\\ -$zeroable (r_1 + r_2)$ & $\dn$ & $zeroable(r_1) \wedge zeroable(r_2)$ \\ -$zeroable (r_1 \cdot r_2)$ & $\dn$ & $zeroable(r_1) \vee zeroable(r_2)$ \\ -$zeroable (r^*)$ & $\dn$ & $f\!alse$\\ +\bl{$zeroable(\varnothing)$} & \bl{$\dn$} & \bl{$true$}\\ +\bl{$zeroable(\epsilon)$} & \bl{$\dn$} & \bl{$\textit{false}$}\\ +\bl{$zeroable(c)$} & \bl{$\dn$} & \bl{$\textit{false}$}\\ +\bl{$zeroable(r_1 + r_2)$} & \bl{$\dn$} & \bl{$zeroable(r_1) \wedge zeroable(r_2)$}\\ +\bl{$zeroable(r_1 \cdot r_2)$} & \bl{$\dn$} & \bl{$zeroable(r_1) \vee zeroable(r_2)$}\\ +\bl{$zeroable(r^*)$} & \bl{$\dn$} & \bl{$\textit{false}$}\\ \end{tabular} \end{center} \begin{center} -$zeroable(r)$ if and only if $L(r) = \varnothing$ +\bl{$zeroable(r)$} if and only if \bl{$L(r) = \{\}$} \end{center}