changeset 578 | 6e5e3adc9eb1 |
parent 574 | bd4f144326c7 |
child 579 | 1a521448d211 |
577:7a437f1f689d | 578:6e5e3adc9eb1 |
---|---|
25 |
25 |
26 \normalsize |
26 \normalsize |
27 \begin{center} |
27 \begin{center} |
28 \begin{tabular}{ll} |
28 \begin{tabular}{ll} |
29 Email: & christian.urban at kcl.ac.uk\\ |
29 Email: & christian.urban at kcl.ac.uk\\ |
30 Office: & N7.07 (North Wing, Bush House)\\ |
30 Office: & N\liningnums{7.07} (North Wing, Bush House)\\ |
31 Slides: & KEATS (also home work is there)\\ |
31 Slides: & KEATS (also homework is there)\\ |
32 \end{tabular} |
32 \end{tabular} |
33 \end{center} |
33 \end{center} |
34 \end{frame} |
34 \end{frame} |
35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
36 |
36 |
37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
38 \begin{frame}[c] |
38 \begin{frame}[t] |
39 \frametitle{Regular Expressions} |
39 \frametitle{Survey: Thanks!} |
40 |
40 \small |
41 In programming languages they are often used to recognise:\medskip |
41 |
42 |
42 \hspace{9mm}{\it``\ldots Thanks a million! Thanks without end!''} |
43 \begin{itemize} |
43 |
44 \item symbols, digits |
44 \begin{textblock}{3}(12,1.7) |
45 \item identifiers |
45 \includegraphics[scale=0.1]{../pics/stickman.jpg} |
46 \item numbers (non-leading zeros) |
46 \end{textblock}\pause |
47 \item keywords |
47 |
48 \item comments |
48 \begin{textblock}{6}(1,4.15) |
49 \end{itemize}\bigskip |
49 \begin{bubble}[6.7cm] |
50 |
50 \it ``Urban is a very talented lecturer: thorough, concise, |
51 \mbox{}\hfill\bl{\url{http://www.regexper.com}} |
51 clear, and cares to make sure that we are learning!'' |
52 \end{bubble} |
|
53 \end{textblock} |
|
54 |
|
55 \only<3>{ |
|
56 \begin{textblock}{6}(0.6,8.5) |
|
57 \includegraphics[scale=0.2]{../pics/s1.png} |
|
58 \end{textblock} |
|
59 \begin{textblock}{6}(8,8.5) |
|
60 \includegraphics[scale=0.2]{../pics/s2.png} |
|
61 \end{textblock}} |
|
62 |
|
63 \only<4>{ |
|
64 \begin{textblock}{6}(0.6,8.5) |
|
65 \includegraphics[scale=0.2]{../pics/s3.png} |
|
66 \end{textblock} |
|
67 \begin{textblock}{6}(8,8.5) |
|
68 \includegraphics[scale=0.2]{../pics/s4.png} |
|
69 \end{textblock}} |
|
70 |
|
71 % \begin{itemize} |
|
72 % \item {\bf My Voice} ``lecturer speaks in a low voice and |
|
73 % is hard to hear him'' ``please use mic'' ``please use mic |
|
74 % \& lecture recording'' |
|
75 % \item {\bf Pace} ``faster pace'' ``a bit quick for me |
|
76 % personally'' |
|
77 % \item {\bf Recording} ``please use recording class'' |
|
78 % \item {\bf Module Name} ``misleading'' |
|
79 % \item {\bf Examples} ``more examples'' |
|
80 % \item {\bf Assessment} ``really appreciate extension of |
|
81 % first coursework'' |
|
82 % \end{itemize} |
|
83 |
|
84 \end{frame} |
|
85 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
86 |
|
87 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
88 \begin{frame}[c] |
|
89 |
|
90 \begin{center} |
|
91 \begin{tikzpicture}[scale=2,>=stealth',very thick, |
|
92 every state/.style={minimum size=0pt,draw=blue!50,very thick,fill=blue!20},] |
|
93 \only<-7>{\node[state, initial] (q0) at ( 0,1) {$\mbox{Q}_0$};} |
|
94 \only<8->{\node[state, initial,accepting] (q0) at ( 0,1) {$\mbox{Q}_0$};} |
|
95 \only<-7>{\node[state] (q1) at ( 1,1) {$\mbox{Q}_1$};} |
|
96 \only<8->{\node[state,accepting] (q1) at ( 1,1) {$\mbox{Q}_1$};} |
|
97 \node[state] (q2) at ( 2,1) {$\mbox{Q}_2$}; |
|
98 \path[->] (q0) edge[bend left] node[above] {\alert{$a$}} (q1) |
|
99 (q1) edge[bend left] node[above] {\alert{$b$}} (q0) |
|
100 (q2) edge[bend left=50] node[below] {\alert{$b$}} (q0) |
|
101 (q1) edge node[above] {\alert{$a$}} (q2) |
|
102 (q2) edge [loop right] node {\alert{$a$}} () |
|
103 (q0) edge [loop below] node {\alert{$b$}} () |
|
104 ; |
|
105 \end{tikzpicture} |
|
106 \end{center}\bigskip |
|
107 |
|
108 \begin{center} |
|
109 \begin{tabular}{r@ {\hspace{2mm}}c@ {\hspace{2mm}}l} |
|
110 \bl{$\mbox{Q}_0$} & \bl{$=$} & \bl{$\ONE + \mbox{Q}_0\,b + \mbox{Q}_1\,b + \mbox{Q}_2\,b$}\\ |
|
111 \bl{$\mbox{Q}_1$} & \bl{$=$} & \bl{$\mbox{Q}_0\,a$}\\ |
|
112 \bl{$\mbox{Q}_2$} & \bl{$=$} & \bl{$\mbox{Q}_1\,a + \mbox{Q}_2\,a$}\\ |
|
113 \end{tabular} |
|
114 \end{center} |
|
115 |
|
116 |
|
117 Arden's Lemma: |
|
118 \begin{center} |
|
119 If \bl{$q = q\,r + s$}\; then\; \bl{$q = s\, r^*$} |
|
120 \end{center} |
|
121 |
|
122 \only<2-6>{\small |
|
123 \begin{textblock}{6}(1,0.8) |
|
124 \begin{bubble}[6.7cm] |
|
125 \begin{tabular}{r@ {\hspace{1mm}}c@ {\hspace{1mm}}l} |
|
126 \multicolumn{3}{@{}l}{substitute \bl{$\mbox{Q}_1$} into \bl{$\mbox{Q}_0$} + \bl{$\mbox{Q}_2$}:}\\ |
|
127 \bl{$\mbox{Q}_0$} & \bl{$=$} & \bl{$\ONE + \mbox{Q}_0\,b + \mbox{Q}_0\,a\,b + \mbox{Q}_2\,b$}\\ |
|
128 \bl{$\mbox{Q}_2$} & \bl{$=$} & \bl{$\mbox{Q}_0\,a\,a + \mbox{Q}_2\,a$} |
|
129 \end{tabular} |
|
130 \end{bubble} |
|
131 \end{textblock}} |
|
132 |
|
133 \only<3-6>{\small |
|
134 \begin{textblock}{6}(2,4.15) |
|
135 \begin{bubble}[6.7cm] |
|
136 \begin{tabular}{r@ {\hspace{1mm}}c@ {\hspace{1mm}}l} |
|
137 \multicolumn{3}{@{}l}{simplifying \bl{$\mbox{Q}_0$}:}\\ |
|
138 \bl{$\mbox{Q}_0$} & \bl{$=$} & \bl{$\ONE + \mbox{Q}_0\,(b + a\,b) + \mbox{Q}_2\,b$}\\ |
|
139 \bl{$\mbox{Q}_2$} & \bl{$=$} & \bl{$\mbox{Q}_0\,a\,a + \mbox{Q}_2\,a$} |
|
140 \end{tabular} |
|
141 \end{bubble} |
|
142 \end{textblock}} |
|
143 |
|
144 \only<4-6>{\small |
|
145 \begin{textblock}{6}(3,7.55) |
|
146 \begin{bubble}[6.7cm] |
|
147 \begin{tabular}{r@ {\hspace{1mm}}c@ {\hspace{1mm}}l} |
|
148 \multicolumn{3}{@{}l}{Arden for \bl{$\mbox{Q}_2$}:}\\ |
|
149 \bl{$\mbox{Q}_0$} & \bl{$=$} & \bl{$\ONE + \mbox{Q}_0\,(b + a\,b) + \mbox{Q}_2\,b$}\\ |
|
150 \bl{$\mbox{Q}_2$} & \bl{$=$} & \bl{$\mbox{Q}_0\,a\,a\,(a^*)$} |
|
151 \end{tabular} |
|
152 \end{bubble} |
|
153 \end{textblock}} |
|
154 |
|
155 \only<5-6>{\small |
|
156 \begin{textblock}{6}(4,10.9) |
|
157 \begin{bubble}[7.5cm] |
|
158 \begin{tabular}{r@ {\hspace{1mm}}c@ {\hspace{1mm}}l} |
|
159 \multicolumn{3}{@{}l}{Substitute \bl{$\mbox{Q}_2$} and simplify:}\\ |
|
160 \bl{$\mbox{Q}_0$} & \bl{$=$} & \bl{$\ONE + \mbox{Q}_0\,(b + a\,b + a\,a\,(a^*)\,b)$}\\ |
|
161 \end{tabular} |
|
162 \end{bubble} |
|
163 \end{textblock}} |
|
164 |
|
165 \only<6>{\small |
|
166 \begin{textblock}{6}(5,13.4) |
|
167 \begin{bubble}[7.5cm] |
|
168 \begin{tabular}{r@ {\hspace{1mm}}c@ {\hspace{1mm}}l} |
|
169 \multicolumn{3}{@{}l}{Arden again for \bl{$\mbox{Q}_0$}:}\\ |
|
170 \bl{$\mbox{Q}_0$} & \bl{$=$} & \bl{$(b + a\,b + a\,a\,(a^*)\,b)^*$}\\ |
|
171 \end{tabular} |
|
172 \end{bubble} |
|
173 \end{textblock}} |
|
174 |
|
175 |
|
176 \only<7->{\small |
|
177 \begin{textblock}{6}(6,11.5) |
|
178 \begin{bubble}[6.7cm] |
|
179 \begin{tabular}{r@ {\hspace{1mm}}c@ {\hspace{1mm}}l} |
|
180 \multicolumn{3}{@{}l}{Finally:}\\ |
|
181 \bl{$\mbox{Q}_0$} & \bl{$=$} & \bl{$(b + a\,b + a\,a\,(a^*)\,b)^*$}\\ |
|
182 \bl{$\mbox{Q}_1$} & \bl{$=$} & \bl{$(b + a\,b + a\,a\,(a^*)\,b)^*\,a$}\\ |
|
183 \bl{$\mbox{Q}_2$} & \bl{$=$} & \bl{$(b + a\,b + a\,a\,(a^*)\,b)^*\,a\,a\,(a^*)$}\\ |
|
184 \end{tabular} |
|
185 \end{bubble} |
|
186 \end{textblock}} |
|
187 |
|
52 \end{frame} |
188 \end{frame} |
53 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
189 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
54 |
190 |
55 |
191 |
56 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
192 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
96 legend entries={Python,Ruby,my NFA}, |
232 legend entries={Python,Ruby,my NFA}, |
97 legend pos=north west, |
233 legend pos=north west, |
98 legend cell align=left] |
234 legend cell align=left] |
99 \addplot[blue,mark=*, mark options={fill=white}] table {re-python.data}; |
235 \addplot[blue,mark=*, mark options={fill=white}] table {re-python.data}; |
100 \addplot[brown,mark=pentagon*, mark options={fill=white}] table {re-ruby.data}; |
236 \addplot[brown,mark=pentagon*, mark options={fill=white}] table {re-ruby.data}; |
101 \addplot[red,mark=triangle*, mark options={fill=white}] table {nfasearch.data}; |
237 \addplot[red,mark=triangle*, mark options={fill=white}] table {nfasearch.data}; |
102 \end{axis} |
238 \end{axis} |
103 \end{tikzpicture} |
239 \end{tikzpicture} |
240 |
|
241 The punchline is that existing libraries do depth-first search in NFAs. |
|
104 |
242 |
105 \end{frame} |
243 \end{frame} |
106 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
244 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
107 |
245 |
108 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
246 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
259 \small |
397 \small |
260 for example \bl{$a^nb^n$} is not regular |
398 for example \bl{$a^nb^n$} is not regular |
261 \end{frame} |
399 \end{frame} |
262 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
400 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
263 |
401 |
402 |
|
264 |
403 |
265 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
404 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
266 \begin{frame}[c] |
405 \begin{frame}[c] |
267 \frametitle{Negation} |
406 \frametitle{Negation} |
268 |
407 |
303 rectangle,rounded corners=3mm, |
442 rectangle,rounded corners=3mm, |
304 very thick,draw=black!50, |
443 very thick,draw=black!50, |
305 minimum height=18mm, minimum width=20mm, |
444 minimum height=18mm, minimum width=20mm, |
306 top color=white,bottom color=black!20}] |
445 top color=white,bottom color=black!20}] |
307 |
446 |
308 \node at (3.05, 1.8) {\Large\bf Write A Compiler}; |
447 \node at (3.05, 1.8) {\Large\bf Write a compiler}; |
309 |
448 |
310 \node (0) at (-2.3,0) {}; |
449 \node (0) at (-2.3,0) {}; |
311 |
450 |
312 \node (A) at (0,0) [node] {}; |
451 \node (A) at (0,0) [node] {}; |
313 \node [below right] at (A.north west) {lexer}; |
452 \node [below right] at (A.north west) {lexer}; |
333 |
472 |
334 \end{frame} |
473 \end{frame} |
335 |
474 |
336 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
475 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
337 \begin{frame}[c] |
476 \begin{frame}[c] |
338 \frametitle{Survey: Thanks!} |
477 \frametitle{Regular Expressions} |
339 \small |
478 |
340 |
479 In programming languages they are often used to recognise:\medskip |
341 % \begin{itemize} |
480 |
342 % \item {\bf My Voice} ``lecturer speaks in a low voice and |
481 \begin{itemize} |
343 % is hard to hear him'' ``please use mic'' ``please use mic |
482 \item symbols, digits |
344 % \& lecture recording'' |
483 \item identifiers |
345 % \item {\bf Pace} ``faster pace'' ``a bit quick for me |
484 \item numbers (non-leading zeros) |
346 % personally'' |
485 \item keywords |
347 % \item {\bf Recording} ``please use recording class'' |
486 \item comments |
348 % \item {\bf Module Name} ``misleading'' |
487 \end{itemize}\bigskip |
349 % \item {\bf Examples} ``more examples'' |
488 |
350 % \item {\bf Assessment} ``really appreciate extension of |
489 \mbox{}\hfill\bl{\url{http://www.regexper.com}} |
351 % first coursework'' |
490 \end{frame} |
352 % \end{itemize} |
491 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
353 |
|
354 \end{frame} |
|
355 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
356 |
492 |
357 |
493 |
358 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
494 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
359 \begin{frame}[c] |
495 \begin{frame}[c] |
360 \frametitle{Lexing: Test Case} |
496 \frametitle{Lexing: Test Case} |
362 \mbox{\lstinputlisting[language=While]{../progs/fib.while}} |
498 \mbox{\lstinputlisting[language=While]{../progs/fib.while}} |
363 |
499 |
364 \end{frame} |
500 \end{frame} |
365 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
501 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
366 |
502 |
367 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
503 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
368 \begin{frame}[c] |
504 %\begin{frame}[c] |
369 \frametitle{?? Test Case} |
505 %\frametitle{?? Test Case} |
370 |
506 % |
371 \mbox{\lstinputlisting[language=While]{../progs/collatz.while}} |
507 %\mbox{\lstinputlisting[language=While]{../progs/collatz.while}} |
372 |
508 % |
373 \end{frame} |
509 %\end{frame} |
374 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
510 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
375 |
511 |
376 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
512 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
377 \begin{frame}[t] |
513 \begin{frame}[t] |
378 |
514 |
442 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
578 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
443 \begin{frame}[c] |
579 \begin{frame}[c] |
444 |
580 |
445 |
581 |
446 There is one small problem with the tokenizer. How should we |
582 There is one small problem with the tokenizer. How should we |
447 tokenize: |
583 tokenize\ldots? |
448 |
584 |
449 \begin{center} |
585 \begin{center} |
450 \large\code{"x-3"} |
586 \large\code{"x-3"} |
451 \end{center} |
587 \end{center} |
452 |
588 |
476 |
612 |
477 Or, keywords are \pcode{if} and identifiers are |
613 Or, keywords are \pcode{if} and identifiers are |
478 letters followed by ``letters + numbers + \_''$^*$ |
614 letters followed by ``letters + numbers + \_''$^*$ |
479 |
615 |
480 \[ |
616 \[ |
481 \bl{iffoo} |
617 \bl{if}\qquad\bl{iffoo} |
482 \] |
618 \] |
483 |
619 |
484 \end{frame} |
620 \end{frame} |
485 |
621 |
486 |
622 |
574 & & \bl{$Empty$} \\ |
710 & & \bl{$Empty$} \\ |
575 & \bl{$\mid$} & \bl{$Char(c)$} \\ |
711 & \bl{$\mid$} & \bl{$Char(c)$} \\ |
576 & \bl{$\mid$} & \bl{$Seq(v_1,v_2)$}\\ |
712 & \bl{$\mid$} & \bl{$Seq(v_1,v_2)$}\\ |
577 & \bl{$\mid$} & \bl{$Left(v)$} \\ |
713 & \bl{$\mid$} & \bl{$Left(v)$} \\ |
578 & \bl{$\mid$} & \bl{$Right(v)$} \\ |
714 & \bl{$\mid$} & \bl{$Right(v)$} \\ |
579 & \bl{$\mid$} & \bl{$[]$} \\ |
715 & \bl{$\mid$} & \bl{$Stars\,[]$} \\ |
580 & \bl{$\mid$} & \bl{$[v_1,\ldots\,v_n]$} \\ |
716 & \bl{$\mid$} & \bl{$Stars\,[v_1,\ldots\,v_n]$} \\ |
581 \end{tabular} |
717 \end{tabular} |
582 \end{column} |
718 \end{column} |
583 \end{columns} |
719 \end{columns} |
584 \end{center} |
720 \end{center} |
585 |
721 |
608 \bl{$mkeps\,(\ONE)$} & \bl{$\dn$} & \bl{$Empty$}\\ |
744 \bl{$mkeps\,(\ONE)$} & \bl{$\dn$} & \bl{$Empty$}\\ |
609 \bl{$mkeps\,(r_1 + r_2)$} & \bl{$\dn$} & \bl{if $nullable(r_1)$} \\ |
745 \bl{$mkeps\,(r_1 + r_2)$} & \bl{$\dn$} & \bl{if $nullable(r_1)$} \\ |
610 & & \bl{then $Left(mkeps(r_1))$}\\ |
746 & & \bl{then $Left(mkeps(r_1))$}\\ |
611 & & \bl{else $Right(mkeps(r_2))$}\\ |
747 & & \bl{else $Right(mkeps(r_2))$}\\ |
612 \bl{$mkeps\,(r_1 \cdot r_2)$} & \bl{$\dn$} & \bl{$Seq(mkeps(r_1),mkeps(r_2))$}\\ |
748 \bl{$mkeps\,(r_1 \cdot r_2)$} & \bl{$\dn$} & \bl{$Seq(mkeps(r_1),mkeps(r_2))$}\\ |
613 \bl{$mkeps\,(r^*)$} & \bl{$\dn$} & \bl{$[]$} \\ |
749 \bl{$mkeps\,(r^*)$} & \bl{$\dn$} & \bl{$Stars\,[]$} \\ |
614 \end{tabular} |
750 \end{tabular} |
615 \end{center} |
751 \end{center} |
616 |
752 |
617 \end{frame} |
753 \end{frame} |
618 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
754 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
622 \frametitle{Inject} |
758 \frametitle{Inject} |
623 |
759 |
624 Injecting (``Adding'') a character to a value\\[-12mm]\mbox{} |
760 Injecting (``Adding'') a character to a value\\[-12mm]\mbox{} |
625 |
761 |
626 \begin{center} |
762 \begin{center} |
627 \begin{tabular}{@{}l@{\hspace{1mm}}c@{\hspace{1mm}}l@{}} |
763 \begin{tabular}{@{\hspace{-3mm}}l@{\hspace{1mm}}c@{\hspace{1mm}}l@{}} |
628 \bl{$inj\,(c)\,c\,Empty$} & \bl{$\dn$} & \bl{$Char\,c$}\\ |
764 \bl{$inj\,(c)\,c\,(Empty)$} & \bl{$\dn$} & \bl{$Char\,c$}\\ |
629 \bl{$inj\,(r_1 + r_2)\,c\,Left(v)$} & \bl{$\dn$} & \bl{$Left(inj\,r_1\,c\,v)$}\\ |
765 \bl{$inj\,(r_1 + r_2)\,c\,(Left(v))$} & \bl{$\dn$} & \bl{$Left(inj\,r_1\,c\,v)$}\\ |
630 \bl{$inj\,(r_1 + r_2)\,c\,Right(v)$} & \bl{$\dn$} & \bl{$Right(inj\,r_2\,c\,v)$}\\ |
766 \bl{$inj\,(r_1 + r_2)\,c\,(Right(v))$} & \bl{$\dn$} & \bl{$Right(inj\,r_2\,c\,v)$}\\ |
631 \bl{$inj\,(r_1 \cdot r_2)\,c\,Seq(v_1,v_2)$} & \bl{$\dn$} & \bl{$Seq(inj\,r_1\,c\,v_1,v_2)$}\\ |
767 \bl{$inj\,(r_1 \cdot r_2)\,c\,(Seq(v_1,v_2))$} & \bl{$\dn$} & \bl{$Seq(inj\,r_1\,c\,v_1,v_2)$}\\ |
632 \bl{$inj\,(r_1 \cdot r_2)\,c\,Left(Seq(v_1,v_2))$} & \bl{$\dn$} & \bl{$Seq(inj\,r_1\,c\,v_1,v_2)$}\\ |
768 \bl{$inj\,(r_1 \cdot r_2)\,c\,(Left(Seq(v_1,v_2)))$} & \bl{$\dn$} & \bl{$Seq(inj\,r_1\,c\,v_1,v_2)$}\\ |
633 \bl{$inj\,(r_1 \cdot r_2)\,c\,Right(v)$} & \bl{$\dn$} & \bl{$Seq(mkeps(r_1),inj\,r_2\,c\,v)$}\\ |
769 \bl{$inj\,(r_1 \cdot r_2)\,c\,(Right(v))$} & \bl{$\dn$} & \bl{$Seq(mkeps(r_1),inj\,r_2\,c\,v)$}\\ |
634 \bl{$inj\,(r^*)\,c\,Seq(v,vs)$} & \bl{$\dn$} & \bl{$inj\,r\,c\,v\,::\,vs$}\\ |
770 \bl{$inj\,(r^*)\,c\,(Seq(v,vs))$} & \bl{$\dn$} & \bl{$Stars\,(inj\,r\,c\,v\,::\,vs)$}\\ |
635 \end{tabular} |
771 \end{tabular} |
636 \end{center}\bigskip |
772 \end{center}\bigskip |
637 |
773 |
638 \footnotesize |
774 \footnotesize |
639 \bl{$inj$}: 1st arg $\mapsto$ a rexp; 2nd arg $\mapsto$ a character; 3rd arg $\mapsto$ a value |
775 \bl{$inj$}: 1st arg $\mapsto$ a rexp; 2nd arg $\mapsto$ a character; 3rd arg $\mapsto$ a value |
907 \begin{frame}[c] |
1043 \begin{frame}[c] |
908 \frametitle{Simplification} |
1044 \frametitle{Simplification} |
909 |
1045 |
910 \begin{itemize} |
1046 \begin{itemize} |
911 \item If we simplify after the derivative, then we are building the |
1047 \item If we simplify after the derivative, then we are building the |
912 value for the simplified regular expression, but \emph{not} for the original |
1048 value for the simplified regular expression, but \alert{\textbf{not}} for the original |
913 regular expression. |
1049 regular expression. |
914 \end{itemize} |
1050 \end{itemize} |
915 |
1051 |
916 \begin{center} |
1052 \begin{center} |
917 \begin{tikzpicture}[scale=2,node distance=1.3cm,every node/.style={minimum size=8mm}] |
1053 \begin{tikzpicture}[scale=2,node distance=1.3cm,every node/.style={minimum size=8mm}] |
954 \begin{center} |
1090 \begin{center} |
955 \bl{$(\ZERO \cdot (b \cdot c)) + ((\ZERO \cdot c) + \ONE)$} |
1091 \bl{$(\ZERO \cdot (b \cdot c)) + ((\ZERO \cdot c) + \ONE)$} |
956 \end{center} |
1092 \end{center} |
957 |
1093 |
958 and answer how this regular expression matches the empty string |
1094 and answer how this regular expression matches the empty string |
1095 with the value |
|
959 |
1096 |
960 \begin{center} |
1097 \begin{center} |
961 \bl{$Right(Right(Empty))$} |
1098 \bl{$Right(Right(Empty))$} |
962 \end{center}\bigskip |
1099 \end{center}\bigskip |
963 |
1100 |
964 But now we simplify this to \bl{$\ONE$} and would produce \bl{$Empty$}. |
1101 But now we simplify this to \bl{$\ONE$} and would produce \bl{$Empty$} (see \textit{mkeps}). |
965 |
1102 |
966 \end{frame} |
1103 \end{frame} |
967 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
1104 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
968 |
1105 |
969 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
1106 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
1197 \bl{$env(Empty)$} & \bl{$\dn$} & \bl{$[]$}\\ |
1334 \bl{$env(Empty)$} & \bl{$\dn$} & \bl{$[]$}\\ |
1198 \bl{$env(Char(c))$} & \bl{$\dn$} & \bl{$[]$}\\ |
1335 \bl{$env(Char(c))$} & \bl{$\dn$} & \bl{$[]$}\\ |
1199 \bl{$env(Left(v))$} & \bl{$\dn$} & \bl{$env(v)$}\\ |
1336 \bl{$env(Left(v))$} & \bl{$\dn$} & \bl{$env(v)$}\\ |
1200 \bl{$env(Right(v))$} & \bl{$\dn$} & \bl{$env(v)$}\\ |
1337 \bl{$env(Right(v))$} & \bl{$\dn$} & \bl{$env(v)$}\\ |
1201 \bl{$env(Seq(v_1,v_2))$}& \bl{$\dn$} & \bl{$env(v_1) \,@\, env(v_2)$}\\ |
1338 \bl{$env(Seq(v_1,v_2))$}& \bl{$\dn$} & \bl{$env(v_1) \,@\, env(v_2)$}\\ |
1202 \bl{$env([v_1,\ldots ,v_n])$} & \bl{$\dn$} & |
1339 \bl{$env(Stars\,[v_1,\ldots ,v_n])$} & \bl{$\dn$} & |
1203 \bl{$env(v_1) \,@\ldots @\, env(v_n)$}\\ |
1340 \bl{$env(v_1) \,@\ldots @\, env(v_n)$}\\ |
1204 \bl{$env(Rec(x:v))$} & \bl{$\dn$} & \bl{$(x:|v|) :: env(v)$}\\ |
1341 \bl{$env(Rec(x:v))$} & \bl{$\dn$} & \bl{$(x:|v|) :: env(v)$}\\ |
1205 \end{tabular} |
1342 \end{tabular} |
1206 \end{center} |
1343 \end{center} |
1207 |
1344 |
1299 |
1436 |
1300 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
1437 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
1301 \begin{frame}[c] |
1438 \begin{frame}[c] |
1302 \begin{center} |
1439 \begin{center} |
1303 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}} |
1440 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}} |
1304 \bl{$zeroable(\varnothing)$} & \bl{$\dn$} & \bl{$true$}\\ |
1441 \bl{$zeroable(\ZERO)$} & \bl{$\dn$} & \bl{$true$}\\ |
1305 \bl{$zeroable(\epsilon)$} & \bl{$\dn$} & \bl{$\textit{false}$}\\ |
1442 \bl{$zeroable(\ONE)$} & \bl{$\dn$} & \bl{$\textit{false}$}\\ |
1306 \bl{$zeroable(c)$} & \bl{$\dn$} & \bl{$\textit{false}$}\\ |
1443 \bl{$zeroable(c)$} & \bl{$\dn$} & \bl{$\textit{false}$}\\ |
1307 \bl{$zeroable(r_1 + r_2)$} & \bl{$\dn$} & \bl{$zeroable(r_1) \wedge zeroable(r_2)$}\\ |
1444 \bl{$zeroable(r_1 + r_2)$} & \bl{$\dn$} & \bl{$zeroable(r_1) \wedge zeroable(r_2)$}\\ |
1308 \bl{$zeroable(r_1 \cdot r_2)$} & \bl{$\dn$} & \bl{$zeroable(r_1) \vee zeroable(r_2)$}\\ |
1445 \bl{$zeroable(r_1 \cdot r_2)$} & \bl{$\dn$} & \bl{$zeroable(r_1) \vee zeroable(r_2)$}\\ |
1309 \bl{$zeroable(r^*)$} & \bl{$\dn$} & \bl{$\textit{false}$}\\ |
1446 \bl{$zeroable(r^*)$} & \bl{$\dn$} & \bl{$\textit{false}$}\\ |
1310 \end{tabular} |
1447 \end{tabular} |