slides/slides01.tex
changeset 756 f7c7a75e0583
parent 754 1c9a23304b85
child 757 ea0be0662be0
equal deleted inserted replaced
755:37b69593994c 756:f7c7a75e0583
    92 
    92 
    93 \end{frame}
    93 \end{frame}
    94 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    94 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    95 
    95 
    96 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    96 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    97 \begin{frame}<1-11>[c]
    97 \begin{frame}<1-12>[c]
    98 \frametitle{The Goal of this Module\ldots}
    98 \frametitle{The Goal of this Module\ldots}
    99 
    99 
   100 \begin{center}
   100 \begin{center}
   101   \begin{tikzpicture}[scale=1,
   101   \begin{tikzpicture}[scale=1,
   102                       node/.style={
   102                       node/.style={
   210 \end{textblock}}
   210 \end{textblock}}
   211 
   211 
   212 \only<10>{
   212 \only<10>{
   213 \begin{textblock}{6}(1,3)
   213 \begin{textblock}{6}(1,3)
   214   \begin{bubble}[11cm]
   214   \begin{bubble}[11cm]
   215   Compiler explorers, e.g.: \url{https://gcc.godbolt.org}  
   215     Compiler explorers, e.g.: \url{https://gcc.godbolt.org} \;\video{https://youtu.be/ysaBmhMEyUg}
   216   \begin{tikzpicture}[]
   216   \begin{tikzpicture}[]
   217   \node (0) at (-2.3,0) {\includegraphics[scale=0.3]{pics/csource.png}};
   217   \node (0) at (-2.3,0) {\includegraphics[scale=0.3]{pics/csource.png}};
   218   \node (1) [right=35mm] at (0) {\includegraphics[scale=0.3]{pics/cassmbl.png}}; 
   218   \node (1) [right=35mm] at (0) {\includegraphics[scale=0.3]{pics/cassmbl.png}}; 
   219   \draw [->,line width=4mm, red] (0) -- (1);   
   219   \draw [->,line width=4mm, red] (0) -- (1);   
   220   \node (2) [below=20mm] at (0) {\LARGE\bf``source''};
   220   \node (2) [below=20mm] at (0) {\LARGE\bf source};
   221   \node (3) [right=40mm] at (2) {\LARGE\bf``binary''};
   221   \node (3) [right=40mm] at (2) {\LARGE\bf binary};
       
   222   \draw [->,line width=1mm] (2) -- (3);   
       
   223 \end{tikzpicture}
       
   224 \end{bubble}
       
   225 
       
   226 \end{textblock}}
       
   227 \only<11>{
       
   228 \begin{textblock}{6}(1,3)
       
   229   \begin{bubble}[11cm]
       
   230     Compiler explorer for Java: \url{https://javap.yawk.at} 
       
   231   \begin{tikzpicture}[]
       
   232   \node (0) at (-2.3,0) {\includegraphics[scale=0.4]{pics/jsource.png}};
       
   233   \node (1) [right=35mm] at (0) {\includegraphics[scale=0.4]{pics/jassmbl.png}}; 
       
   234   \draw [->,line width=4mm, red] (0) -- (1);   
       
   235   \node (2) [below=20mm] at (0) {\LARGE\bf source};
       
   236   \node (3) [right=40mm] at (2) {\LARGE\bf byte code};
   222   \draw [->,line width=1mm] (2) -- (3);   
   237   \draw [->,line width=1mm] (2) -- (3);   
   223 \end{tikzpicture}
   238 \end{tikzpicture}
   224 \end{bubble}
   239 \end{bubble}
   225 \end{textblock}}
   240 \end{textblock}}
   226 
   241 
   300 \begin{textblock}{6}(8,4.5)
   315 \begin{textblock}{6}(8,4.5)
   301 \includegraphics[scale=0.28]{../pics/777.png}
   316 \includegraphics[scale=0.28]{../pics/777.png}
   302 \end{textblock}}
   317 \end{textblock}}
   303 
   318 
   304 \end{frame}
   319 \end{frame}
   305 %%%%%%%%%%%
   320 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   321 
       
   322 
       
   323 
       
   324 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   325 \begin{frame}[c]
       
   326 \frametitle{What Do Compilers Do?}
       
   327 
       
   328 Remember BF*** from PEP?
       
   329 
       
   330 \begin{center}
       
   331 \begin{tabular}{rcl}
       
   332 \bl{\texttt{>}} & $\Rightarrow$ & move one cell right\\
       
   333 \bl{\texttt{<}} & $\Rightarrow$ & move one cell left\\
       
   334 \bl{\texttt{+}} & $\Rightarrow$ & increase cell by one\\
       
   335 \bl{\texttt{-}} & $\Rightarrow$ & decrease cell by one\\
       
   336 \bl{\texttt{.}} & $\Rightarrow$ & print current cell\\
       
   337 \bl{\texttt{,}} & $\Rightarrow$ & input current cell\\
       
   338 \bl{\texttt{[}} & $\Rightarrow$ & loop begin\\
       
   339 \bl{\texttt{]}} & $\Rightarrow$ & loop end\medskip\\
       
   340                 & $\Rightarrow$ & everything else is a comment\\
       
   341 \end{tabular}  
       
   342 \end{center}  
       
   343 
       
   344 \end{frame}
       
   345 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   346 
       
   347 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   348 \begin{frame}[c]
       
   349   \frametitle{A ``Compiler'' for BF*** to C}
       
   350   
       
   351   \begin{center}
       
   352   \begin{tabular}{rcl}
       
   353   \bl{\texttt{>}} & $\Rightarrow$ & \texttt{ptr++}\\
       
   354   \bl{\texttt{<}} & $\Rightarrow$ & \texttt{ptr--}\\
       
   355   \bl{\texttt{+}} & $\Rightarrow$ & \texttt{(*ptr)++}\\
       
   356   \bl{\texttt{-}} & $\Rightarrow$ & \texttt{(*ptr)--}\\
       
   357   \bl{\texttt{.}} & $\Rightarrow$ & \texttt{putchar(*ptr)}\\
       
   358   \bl{\texttt{,}} & $\Rightarrow$ & \texttt{*ptr = getchar()}\\
       
   359   \bl{\texttt{[}} & $\Rightarrow$ & \texttt{while(*ptr)\{}\\
       
   360   \bl{\texttt{]}} & $\Rightarrow$ & \texttt{\}}\medskip\\
       
   361                   & $\Rightarrow$ & ignore everything else\\
       
   362   \end{tabular}  
       
   363   \end{center}\bigskip  
       
   364   
       
   365   \texttt{char field[30000]\\ char *ptr = \&field[15000]}
       
   366   
       
   367 \end{frame}
       
   368 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   369 
       
   370 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   371 \begin{frame}[c]
       
   372   \frametitle{A ``Compiler'' for BF*** to C}
       
   373   
       
   374   \begin{center}
       
   375   \begin{tabular}{rcl}
       
   376   \bl{\texttt{>\ldots>}} & $\Rightarrow$ & \texttt{ptr += n}\\
       
   377   \bl{\texttt{<\ldots<}} & $\Rightarrow$ & \texttt{ptr -= n}\\
       
   378   \bl{\texttt{+\ldots+}} & $\Rightarrow$ & \texttt{(*ptr) += n}\\
       
   379   \bl{\texttt{-\ldots-}} & $\Rightarrow$ & \texttt{(*ptr) -= n}\\
       
   380   \bl{\texttt{.}} & $\Rightarrow$ & \texttt{putchar(*ptr)}\\
       
   381   \bl{\texttt{,}} & $\Rightarrow$ & \texttt{*ptr = getchar()}\\
       
   382   \bl{\texttt{[}} & $\Rightarrow$ & \texttt{while(*ptr)\{}\\
       
   383   \bl{\texttt{]}} & $\Rightarrow$ & \texttt{\}}\medskip\\
       
   384                   & $\Rightarrow$ & ignore everything else\\
       
   385   \end{tabular}  
       
   386   \end{center}\bigskip  
       
   387   
       
   388   \texttt{char field[30000]\\ char *ptr = \&field[15000]}
       
   389   
       
   390 \end{frame}
       
   391 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   392 
       
   393 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   394 \begin{frame}[c]
       
   395   \frametitle{Recap}
       
   396   
       
   397   \begin{itemize}
       
   398   \item interpreter \bl{\texttt{bfi.sc}} \\$\Rightarrow$ 11 mins\pause
       
   399   \item simple compiler \bl{\texttt{bfi0.sc}}, no optimisations  \\$\Rightarrow$ 20 secs\pause
       
   400   \item ``advanced'' compiler \bl{\texttt{bfi1.sc}}, no optimisations  \\$\Rightarrow$ 5 secs\bigskip\pause
       
   401 
       
   402   \item simple compiler \bl{\texttt{bfi0.sc}},
       
   403     \alert{\textbf{full optimisations}}  \\$\Rightarrow$ 7 secs  
       
   404   \end{itemize}\bigskip\pause
       
   405 
       
   406   \hspace{4cm}all programs on KEATS
       
   407   
       
   408 \end{frame}
       
   409 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
       
   410 
       
   411 
       
   412 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   413 \begin{frame}[t]
       
   414 \frametitle{A Brief Compiler History}
       
   415 
       
   416 \bigskip
       
   417 \begin{itemize}
       
   418 \item Turing Machines, 1936 (a tape as memory)
       
   419 \item Regular Expressions, 1956\\
       
   420 \item The first compiler for COBOL, 1957\\ (Grace Hopper)\medskip
       
   421 \item But surprisingly research papers are still published nowadays\\
       
   422 \item ``Parsing: The Solved Problem That Isn't''
       
   423   \here{https://tratt.net/laurie/blog/entries/parsing_the_solved_problem_that_isnt.html}
       
   424 \end{itemize}
       
   425 
       
   426 
       
   427 \begin{textblock}{8.5}(5,7.6)
       
   428 \begin{flushright}
       
   429 \includegraphics[scale=0.3]{pics/hopper.jpg}\\
       
   430 \footnotesize\textcolor{gray}{Grace Hopper}\smallskip\\
       
   431 
       
   432 {\small\textcolor{gray}{(she made it to David Letterman's Tonight Show
       
   433  \here{https://youtu.be/3N_ywhx6_K0?t=31})}}
       
   434 \end{flushright}
       
   435 \end{textblock}
       
   436 
       
   437 \end{frame}
       
   438 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   439 
       
   440 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   441 \begin{frame}[c]
       
   442 \frametitle{Lectures 1 - 5}
       
   443 
       
   444 transforming strings into structured data\\[10mm]
       
   445 
       
   446 {\LARGE\bf Lexing} {\hfill{}based on regular expressions}\medskip\\
       
   447 \hspace{5mm}(recognising ``words'')\\[6mm]
       
   448 
       
   449 {\LARGE\bf Parsing}\medskip\\
       
   450 \hspace{5mm}(recognising ``sentences'')
       
   451 
       
   452 \begin{textblock}{1}(10,9.1)
       
   453 \begin{tabular}{c}
       
   454 \includegraphics[scale=0.1]{../pics/rosetta.jpg}\\[-2mm]
       
   455 \footnotesize Stone of Rosetta
       
   456 \end{tabular}
       
   457 \end{textblock}
       
   458 
       
   459 \end{frame}
       
   460 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   461 
       
   462 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   463 \begin{frame}[c]
       
   464   \frametitle{Lectures 5 - 10}
       
   465   
       
   466   code generation for a small imperative and a small functional language\\[10mm]
       
   467   
       
   468   {\LARGE\bf Interpreters}\medskip\\
       
   469   \hspace{5mm}(directly runs a program)\\[6mm]
       
   470   
       
   471   {\LARGE\bf Compilers}\medskip\\
       
   472   \hspace{5mm}(generate JVM code and LLVM-IR code)
       
   473   
       
   474   \begin{textblock}{1}(8.8,8.1)
       
   475   \begin{tabular}{c@{}c}
       
   476     \includegraphics[scale=0.4]{../pics/javaduke.png} &
       
   477     \includegraphics[scale=0.23]{../pics/llvmlogo.png}
       
   478   \end{tabular}
       
   479   \end{textblock}
       
   480   
       
   481   \end{frame}
       
   482   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   483   
       
   484 
       
   485 
       
   486 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   487 \begin{frame}[t]
       
   488 \frametitle{Familiar Regular Expr.}
       
   489 \small
       
   490 \begin{center}
       
   491 \texttt{[a-z0-9\_$\backslash{}$.-]+ @ [a-z0-9$\backslash{}$.-]+ . [a-z$\backslash{}$.]\{2,6\}}
       
   492 \end{center}\smallskip
       
   493 
       
   494 \begin{center}
       
   495 \begin{tabular}{@{}lp{8.5cm}@{}}
       
   496 \pcode{re*} & matches 0 or more times\\
       
   497 \pcode{re+} & matches 1 or more times\\
       
   498 \pcode{re?} & matches 0 or 1 times\\
       
   499 \pcode{re\{n\}}	& matches exactly \pcode{n} number of times\\
       
   500 \pcode{re\{n,m\}} & matches at least \pcode{n} and at most {\tt m} times\\
       
   501 \pcode{[...]} & matches any single character inside the brackets\\
       
   502 \pcode{[^...]} & matches any single character not inside the 
       
   503 brackets\\
       
   504 \pcode{a-z A-Z} & character ranges\\
       
   505 \pcode{\\d} & matches digits; equivalent to \pcode{[0-9]}\\
       
   506 \pcode{.} & matches every character except newline\\
       
   507 \pcode{(re)}	& groups regular expressions and remembers 
       
   508 the matched text
       
   509 \end{tabular}
       
   510 \end{center}
       
   511 
       
   512 
       
   513 \end{frame}
       
   514 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   515 
   306 
   516 
   307 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   517 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   308 \begin{frame}[c]
   518 \begin{frame}[c]
   309 \frametitle{Why Bother with Regexes?}
   519 \frametitle{Why Bother with Regexes?}
   310 
   520 
   468 \end{itemize}
   678 \end{itemize}
   469 
   679 
   470 \end{frame}
   680 \end{frame}
   471 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   681 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   472 
   682 
   473 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   474 \begin{frame}[t]
       
   475 \frametitle{The Acad.~Subject is Mature}
       
   476 
       
   477 \bigskip
       
   478 \begin{itemize}
       
   479 \item Turing Machines, 1936 (a tape as memory)
       
   480 \item Regular Expressions, 1956\\
       
   481 \item The first compiler for COBOL, 1957\\ (Grace Hopper)\medskip
       
   482 \item But surprisingly research papers are still published nowadays\\
       
   483 \item ``Parsing: The Solved Problem That Isn't''
       
   484   \here{https://tratt.net/laurie/blog/entries/parsing_the_solved_problem_that_isnt.html}
       
   485 \end{itemize}
       
   486 
       
   487 
       
   488 \begin{textblock}{8.5}(5,7.6)
       
   489 \begin{flushright}
       
   490 \includegraphics[scale=0.3]{pics/hopper.jpg}\\
       
   491 \footnotesize\textcolor{gray}{Grace Hopper}\smallskip\\
       
   492 
       
   493 {\small\textcolor{gray}{(she made it to David Letterman's Tonight Show
       
   494  \here{https://youtu.be/3N_ywhx6_K0?t=31})}}
       
   495 \end{flushright}
       
   496 \end{textblock}
       
   497 
       
   498 \end{frame}
       
   499 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
       
   500 
       
   501 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   502 \begin{frame}[c]
       
   503 \frametitle{What Do Compilers Do?}
       
   504 
       
   505 Remember BF*** from PEP?
       
   506 
       
   507 \begin{center}
       
   508 \begin{tabular}{lcl}
       
   509 \bl{\texttt{>}} & $\Rightarrow$ & move one cell right\\
       
   510 \bl{\texttt{<}} & $\Rightarrow$ & move one cell left\\
       
   511 \bl{\texttt{+}} & $\Rightarrow$ & increase cell by one\\
       
   512 \bl{\texttt{-}} & $\Rightarrow$ & decrease cell by one\\
       
   513 \bl{\texttt{.}} & $\Rightarrow$ & print current cell\\
       
   514 \bl{\texttt{,}} & $\Rightarrow$ & input current cell\\
       
   515 \bl{\texttt{[}} & $\Rightarrow$ & loop begin\\
       
   516 \bl{\texttt{]}} & $\Rightarrow$ & loop end\medskip\\
       
   517                 & $\Rightarrow$ & everything else is a comment\\
       
   518 \end{tabular}  
       
   519 \end{center}  
       
   520 
       
   521 \end{frame}
       
   522 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   523 
       
   524 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   525 \begin{frame}[c]
       
   526   \frametitle{A ``Compiler'' for BF*** to C}
       
   527   
       
   528   \begin{center}
       
   529   \begin{tabular}{lcl}
       
   530   \bl{\texttt{>}} & $\Rightarrow$ & \texttt{ptr++}\\
       
   531   \bl{\texttt{<}} & $\Rightarrow$ & \texttt{ptr--}\\
       
   532   \bl{\texttt{+}} & $\Rightarrow$ & \texttt{(*ptr)++}\\
       
   533   \bl{\texttt{-}} & $\Rightarrow$ & \texttt{(*ptr)--}\\
       
   534   \bl{\texttt{.}} & $\Rightarrow$ & \texttt{putchar(*ptr)}\\
       
   535   \bl{\texttt{,}} & $\Rightarrow$ & \texttt{*ptr = getchar()}\\
       
   536   \bl{\texttt{[}} & $\Rightarrow$ & \texttt{while(*ptr)\{}\\
       
   537   \bl{\texttt{]}} & $\Rightarrow$ & \texttt{\}}\medskip\\
       
   538                   & $\Rightarrow$ & ignore everything else\\
       
   539   \end{tabular}  
       
   540   \end{center}\bigskip  
       
   541   
       
   542   \texttt{char field[30000]\\ char *ptr = \&field[15000]}
       
   543   
       
   544 \end{frame}
       
   545 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   546     
       
   547 
       
   548 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   549 \begin{frame}[c]
       
   550 \frametitle{Lectures 1 - 5}
       
   551 
       
   552 transforming strings into structured data\\[10mm]
       
   553 
       
   554 {\LARGE\bf Lexing} {\hfill{}based on regular expressions}\medskip\\
       
   555 \hspace{5mm}(recognising ``words'')\\[6mm]
       
   556 
       
   557 {\LARGE\bf Parsing}\medskip\\
       
   558 \hspace{5mm}(recognising ``sentences'')
       
   559 
       
   560 \begin{textblock}{1}(10,9.1)
       
   561 \begin{tabular}{c}
       
   562 \includegraphics[scale=0.1]{../pics/rosetta.jpg}\\[-2mm]
       
   563 \footnotesize Stone of Rosetta
       
   564 \end{tabular}
       
   565 \end{textblock}
       
   566 
       
   567 \end{frame}
       
   568 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   569 
       
   570 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   571 \begin{frame}[c]
       
   572   \frametitle{Lectures 5 - 10}
       
   573   
       
   574   code generation for a small imperative and a small functional language\\[10mm]
       
   575   
       
   576   {\LARGE\bf Interpreters}\medskip\\
       
   577   \hspace{5mm}(directly runs a program)\\[6mm]
       
   578   
       
   579   {\LARGE\bf Compilers}\medskip\\
       
   580   \hspace{5mm}(generate JVM code and LLVM-IR code)
       
   581   
       
   582   \begin{textblock}{1}(8.8,8.1)
       
   583   \begin{tabular}{c@{}c}
       
   584     \includegraphics[scale=0.4]{../pics/javaduke.png} &
       
   585     \includegraphics[scale=0.23]{../pics/llvmlogo.png}
       
   586   \end{tabular}
       
   587   \end{textblock}
       
   588   
       
   589   \end{frame}
       
   590   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   591   
       
   592 
       
   593 
       
   594 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   595 \begin{frame}[t]
       
   596 \frametitle{Familiar Regular Expr.}
       
   597 \small
       
   598 \begin{center}
       
   599 \texttt{[a-z0-9\_$\backslash{}$.-]+ @ [a-z0-9$\backslash{}$.-]+ . [a-z$\backslash{}$.]\{2,6\}}
       
   600 \end{center}\smallskip
       
   601 
       
   602 \begin{center}
       
   603 \begin{tabular}{@{}lp{8.5cm}@{}}
       
   604 \pcode{re*} & matches 0 or more times\\
       
   605 \pcode{re+} & matches 1 or more times\\
       
   606 \pcode{re?} & matches 0 or 1 times\\
       
   607 \pcode{re\{n\}}	& matches exactly \pcode{n} number of times\\
       
   608 \pcode{re\{n,m\}} & matches at least \pcode{n} and at most {\tt m} times\\
       
   609 \pcode{[...]} & matches any single character inside the brackets\\
       
   610 \pcode{[^...]} & matches any single character not inside the 
       
   611 brackets\\
       
   612 \pcode{a-z A-Z} & character ranges\\
       
   613 \pcode{\\d} & matches digits; equivalent to \pcode{[0-9]}\\
       
   614 \pcode{.} & matches every character except newline\\
       
   615 \pcode{(re)}	& groups regular expressions and remembers 
       
   616 the matched text
       
   617 \end{tabular}
       
   618 \end{center}
       
   619 
       
   620 
       
   621 \end{frame}
       
   622 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   623 
   683 
   624 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   684 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   625 %\begin{frame}[c]
   685 %\begin{frame}[c]
   626 %\frametitle{Today}
   686 %\frametitle{Today}
   627 %
   687 %