201 \bl{$(b \cdot c) + \ONE$} |
201 \bl{$(b \cdot c) + \ONE$} |
202 |
202 |
203 \end{frame} |
203 \end{frame} |
204 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
204 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
205 |
205 |
206 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
206 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
207 \begin{frame}[t] |
207 % \begin{frame}[t] |
208 |
208 |
209 \begin{center} |
209 % \begin{center} |
210 \bl{$\only<1>{(b \cdot c)}% |
210 % \bl{$\only<1>{(b \cdot c)}% |
211 \only<2-3>{(\underline{b \cdot c})}% |
211 % \only<2-3>{(\underline{b \cdot c})}% |
212 \only<1-3>{+}% |
212 % \only<1-3>{+}% |
213 \only<1>{(\ZERO + \ONE)}% |
213 % \only<1>{(\ZERO + \ONE)}% |
214 \only<2-3>{(\underline{\ZERO + \ONE})}$}% |
214 % \only<2-3>{(\underline{\ZERO + \ONE})}$}% |
215 \only<4->{% |
215 % \only<4->{% |
216 \bl{$\underline{(b \cdot c) + (\ZERO + \ONE)}$}% |
216 % \bl{$\underline{(b \cdot c) + (\ZERO + \ONE)}$}% |
217 } |
217 % } |
218 $\mapsto$ |
218 % $\mapsto$ |
219 \bl{$(b \cdot c) + \ONE$} |
219 % \bl{$(b \cdot c) + \ONE$} |
220 \end{center}\bigskip |
220 % \end{center}\bigskip |
221 |
221 |
222 \onslide<3->{% |
222 % \onslide<3->{% |
223 \begin{center} |
223 % \begin{center} |
224 \begin{tabular}{lcl} |
224 % \begin{tabular}{lcl} |
225 \bl{$f_{s1}$} & \bl{$=$} & \bl{$\lambda v.v$}\\ |
225 % \bl{$f_{s1}$} & \bl{$=$} & \bl{$\lambda v.v$}\\ |
226 \bl{$f_{s2}$} & \bl{$=$} & \bl{$\lambda v. \textit{Right}(v)$} |
226 % \bl{$f_{s2}$} & \bl{$=$} & \bl{$\lambda v. \textit{Right}(v)$} |
227 \end{tabular} |
227 % \end{tabular} |
228 \end{center}} |
228 % \end{center}} |
229 |
229 |
230 \only<4>{% |
230 % \only<4>{% |
231 \begin{center} |
231 % \begin{center} |
232 \begin{tabular}{@{}l@{\hspace{1mm}}l@{}} |
232 % \begin{tabular}{@{}l@{\hspace{1mm}}l@{}} |
233 \bl{$f_{alt}(f_{s1}, f_{s2}) \dn$}\\ |
233 % \bl{$f_{alt}(f_{s1}, f_{s2}) \dn$}\\ |
234 \quad \bl{$\lambda v.\,$} |
234 % \quad \bl{$\lambda v.\,$} |
235 case \bl{$v = Left(v')$}: |
235 % case \bl{$v = Left(v')$}: |
236 & return \bl{$Left(f_{s1}(v'))$}\\ |
236 % & return \bl{$Left(f_{s1}(v'))$}\\ |
237 \quad \phantom{$\lambda v.\,$} |
237 % \quad \phantom{$\lambda v.\,$} |
238 case \bl{$v = Right(v')$}: |
238 % case \bl{$v = Right(v')$}: |
239 & return \bl{$Right(f_{s2}(v'))$}\\ |
239 % & return \bl{$Right(f_{s2}(v'))$}\\ |
240 \end{tabular} |
240 % \end{tabular} |
241 \end{center}}% |
241 % \end{center}}% |
242 \only<5->{% |
242 % \only<5->{% |
243 \begin{center} |
243 % \begin{center} |
244 \begin{tabular}{@{}l@{\hspace{1mm}}l@{}} |
244 % \begin{tabular}{@{}l@{\hspace{1mm}}l@{}} |
245 \only<5->{\phantom{\bl{$f_{alt}(f_{s1}, f_{s2}) \dn$}}}\\ |
245 % \only<5->{\phantom{\bl{$f_{alt}(f_{s1}, f_{s2}) \dn$}}}\\ |
246 \quad \bl{$\lambda v.\,$} |
246 % \quad \bl{$\lambda v.\,$} |
247 case \bl{$v = Left(v')$}: |
247 % case \bl{$v = Left(v')$}: |
248 & return \bl{$Left(v')$}\\ |
248 % & return \bl{$Left(v')$}\\ |
249 \quad \phantom{$\lambda v.\,$} |
249 % \quad \phantom{$\lambda v.\,$} |
250 case \bl{$v = Right(v')$}: |
250 % case \bl{$v = Right(v')$}: |
251 & return \bl{$Right(Right(v'))$}\\ |
251 % & return \bl{$Right(Right(v'))$}\\ |
252 \end{tabular} |
252 % \end{tabular} |
253 \end{center}}% |
253 % \end{center}}% |
254 |
254 |
255 \only<6->{% |
255 % \only<6->{% |
256 \begin{center} |
256 % \begin{center} |
257 \begin{tabular}{@{}l@{\hspace{4mm}}l@{}} |
257 % \begin{tabular}{@{}l@{\hspace{4mm}}l@{}} |
258 \bl{$\textit{mkeps}$} simplified case: & |
258 % \bl{$\textit{mkeps}$} simplified case: & |
259 \bl{$\textit{Right}(\textit{Empty})$}\\ |
259 % \bl{$\textit{Right}(\textit{Empty})$}\\ |
260 rectified case: & |
260 % rectified case: & |
261 \bl{$\textit{Right}(\textit{Right}(\textit{Empty}))$} |
261 % \bl{$\textit{Right}(\textit{Right}(\textit{Empty}))$} |
262 \end{tabular} |
262 % \end{tabular} |
263 \end{center}}% |
263 % \end{center}}% |
264 |
264 |
265 \end{frame} |
265 % \end{frame} |
266 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
266 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
267 |
267 |
268 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
268 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
269 \begin{frame}[c] |
269 \begin{frame}[c] |
270 \frametitle{Records} |
270 \frametitle{Records} |
271 |
271 |
369 \end{frame} |
369 \end{frame} |
370 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
370 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
371 |
371 |
372 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
372 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
373 \begin{frame}[c] |
373 \begin{frame}[c] |
374 \frametitle{Two Rules} |
374 \frametitle{Coursework: Nullable} |
375 |
375 |
376 \begin{itemize} |
376 \begin{center} |
377 \item Longest match rule (``maximal munch rule''): The |
377 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}} |
378 longest initial substring matched by any regular expression is taken |
378 \bl{$nullable([c_1 c_2 \ldots c_n])$} & \bl{$\dn$} & $?$\\ |
379 as next token.\bigskip |
379 \bl{$nullable(r^+)$} & \bl{$\dn$} & $?$\\ |
380 |
380 \bl{$nullable(r^?)$} & \bl{$\dn$} & $?$\\ |
381 \item Rule priority: |
381 \bl{$nullable(r^{\{n\}})$} & \bl{$\dn$} & $?$\\ |
382 For a particular longest initial substring, the first regular |
382 \bl{$nullable(r^{\{n..\}})$} & \bl{$\dn$} & $?$\\ |
383 expression that can match determines the token. |
383 \bl{$nullable(r^{\{..n\}})$} & \bl{$\dn$} & $?$\\ |
384 |
384 \bl{$nullable(r^{\{n..m\}})$} & \bl{$\dn$} & $?$\\ |
385 \end{itemize} |
385 \bl{$nullable(\sim{}r)$} & \bl{$\dn$} & $?$\\ |
386 |
386 |
387 %\url{http://www.technologyreview.com/tr10/?year=2011} |
387 \end{tabular} |
|
388 \end{center} |
|
389 |
|
390 \end{frame} |
|
391 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
392 |
|
393 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
394 \begin{frame}[c] |
|
395 %%\frametitle{Coursework: der} |
|
396 |
|
397 \begin{center} |
|
398 \begin{tabular}{@ {}l@ {\hspace{1mm}}c@ {\hspace{1mm}}l@ {}} |
|
399 \bl{$der\, c\, ([c_1 c_2 \ldots c_n])$} & \bl{$\dn$} & $?$\\ |
|
400 \bl{$der\, c\, (r^+)$} & \bl{$\dn$} & $?$\\ |
|
401 \bl{$der\, c\, (r^?)$} & \bl{$\dn$} & $?$\\ |
|
402 \bl{$der\, c\, (r^{\{n\}})$} & \bl{$\dn$} & |
|
403 \bl{$if\;n=0\;then\;\ZERO\;else\;(der\,c\,r)\cdot r^{\{n-1\}}$}\\ |
|
404 \bl{$der\, c\, (r^{\{n..\}})$} & \bl{$\dn$} & |
|
405 \bl{$if\;n=0\;then (der\,c\,r)\cdot r^*$}\\ |
|
406 & & \bl{$\phantom{if\;n=0\;}else \;(der\,c\,r)\cdot r^{\{n-1..\}}$}\\ |
|
407 \bl{$der\, c\, (r^{\{..n\}})$} & \bl{$\dn$} & |
|
408 \bl{$if\;n=0\;then\;\ZERO\;else\;(der\,c\,r)\cdot r^{\{..n-1\}}$}\\ |
388 |
409 |
389 %finite deterministic automata/ nondeterministic automaton |
410 \bl{$der\, c\, (r^{\{n..m\}})$} & \bl{$\dn$} & |
390 |
411 \bl{$if\;n = 0 \wedge m = 0\;then\;\ZERO\; else$}\\ |
391 %\item problem with infix operations, for example i-12 |
412 \multicolumn{3}{l}{\bl{$if\;n = 0 \wedge m > 0\;then\;(der\,c\,r)\cdot r^{\{..m-1\}}$}}\\ |
392 |
413 \multicolumn{3}{l}{\bl{$\phantom{if\;n = 0 \wedge m > 0\;}else |
393 |
414 \;(der\,c\,r)\cdot r^{\{n-1..m-1\}}$}}\\ |
394 \end{frame} |
415 \bl{$der\, c\, (\sim{}r)$} & \bl{$\dn$} & $?$\\ |
395 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
416 \end{tabular} |
396 |
417 \end{center} |
397 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
418 |
398 \begin{frame}[c] |
419 \end{frame} |
399 \frametitle{Coursework} |
420 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
421 |
|
422 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
423 \begin{frame}[c] |
|
424 \frametitle{Coursework: CFUN} |
400 |
425 |
401 \begin{center} |
426 \begin{center} |
402 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}} |
427 \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}} |
403 \bl{$nullable([c_1 c_2 \ldots c_n])$} & \bl{$\dn$} & $?$\\ |
428 \bl{$nullable(CFUN(\_))$} & \bl{$\dn$} & \bl{$false$}\\ |
404 \bl{$nullable(r^+)$} & \bl{$\dn$} & $?$\\ |
429 \bl{$der\,c\,(CFUN(f))$} & \bl{$\dn$} & |
405 \bl{$nullable(r^?)$} & \bl{$\dn$} & $?$\\ |
430 \bl{$if\;f(c)\;then\;\ONE\;else\;\ZERO$}\bigskip\\ |
406 \bl{$nullable(r^{\{n,m\}})$} & \bl{$\dn$} & $?$\\ |
431 \bl{$CHAR(c)$} & \bl{$\dn$} & \bl{$CFUN(\lambda{}d.\;c=d)$}\\ |
407 \bl{$nullable(\sim{}r)$} & \bl{$\dn$} & $?$\medskip\\ |
432 \bl{$CSET([c_1,\ldots,c_n])$} & \bl{$\dn$} & \bl{$CFUN(\lambda{}d.\;d\in [c_1,\ldots,c_n])$}\\ |
408 \bl{$der\, c\, ([c_1 c_2 \ldots c_n])$} & \bl{$\dn$} & $?$\\ |
433 \bl{$ALL$} & \bl{$\dn$} & \bl{$CFUN(\lambda{}d.\;true)$}\\ |
409 \bl{$der\, c\, (r^+)$} & \bl{$\dn$} & $?$\\ |
|
410 \bl{$der\, c\, (r^?)$} & \bl{$\dn$} & $?$\\ |
|
411 \bl{$der\, c\, (r^{\{n,m\}})$} & \bl{$\dn$} & $?$\\ |
|
412 \bl{$der\, c\, (\sim{}r)$} & \bl{$\dn$} & $?$\\ |
|
413 \end{tabular} |
434 \end{tabular} |
414 \end{center} |
435 \end{center} |
415 |
436 |
416 \end{frame} |
437 \end{frame} |
417 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
438 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
418 |
439 |
|
440 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
441 \begin{frame}[t] |
|
442 \frametitle{Lexer, Parser} |
|
443 \mbox{}\\[-16mm]\mbox{} |
|
444 |
|
445 \begin{center} |
|
446 \begin{tikzpicture}[scale=1, |
|
447 node/.style={ |
|
448 rectangle,rounded corners=3mm, |
|
449 very thick,draw=black!50, |
|
450 minimum height=18mm, minimum width=20mm, |
|
451 top color=white,bottom color=black!20}] |
|
452 \node (0) at (-2.3,0) {}; |
|
453 |
|
454 \node (A) at (0,0) [node] {}; |
|
455 \node [below right] at (A.north west) {lexer}; |
|
456 |
|
457 \node (B) at (3,0) [node] {}; |
|
458 \node [below right=1mm] at (B.north west) |
|
459 {\mbox{}\hspace{-1mm}parser}; |
|
460 |
|
461 \node (C) at (6,0) [node] {}; |
|
462 \node [below right] at (C.north west) |
|
463 {\mbox{}\hspace{-1mm}code gen}; |
|
464 |
|
465 \node (1) at (8.4,0) {}; |
|
466 |
|
467 \draw [->,line width=4mm] (0) -- (A); |
|
468 \draw [->,line width=4mm] (A) -- (B); |
|
469 \draw [->,line width=4mm] (B) -- (C); |
|
470 \draw [->,line width=4mm] (C) -- (1); |
|
471 \end{tikzpicture} |
|
472 \end{center} |
|
473 |
|
474 Today a parser. |
|
475 |
|
476 \end{frame} |
|
477 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
419 |
478 |
420 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
479 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
421 \begin{frame}[c] |
480 \begin{frame}[c] |
422 \frametitle{Regular Languages} |
481 \frametitle{Regular Languages} |
423 |
482 |