slides/slides02.tex
changeset 514 bca9f8889a48
parent 512 a6aa52ecc1c5
child 564 b5d57d7064bb
equal deleted inserted replaced
513:676e6484f29b 514:bca9f8889a48
    34   \normalsize
    34   \normalsize
    35   \begin{center}
    35   \begin{center}
    36   \begin{tabular}{ll}
    36   \begin{tabular}{ll}
    37   Email:  & christian.urban at kcl.ac.uk\\
    37   Email:  & christian.urban at kcl.ac.uk\\
    38   Office: & N7.07 (North Wing, Bush House)\\
    38   Office: & N7.07 (North Wing, Bush House)\\
    39   Slides: & KEATS 
    39   Slides: & KEATS (also homework is there)
    40   \end{tabular}
    40   \end{tabular}
    41   \end{center}
    41   \end{center}
    42 
    42 
    43 \end{frame}
    43 \end{frame}
    44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
    44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
    49     An Efficient Regular\\[-1mm] 
    49     An Efficient Regular\\[-1mm] 
    50     Expression Matcher\end{tabular}}
    50     Expression Matcher\end{tabular}}
    51 
    51 
    52 \footnotesize
    52 \footnotesize
    53 \begin{center}
    53 \begin{center}
    54   {\normalsize Graphs: \bl{$a^{?\{n\}} \cdot a^{\{n\}}$} and strings \bl{$\underbrace{\,a\ldots a\,}_{n}$}}\\
    54   {\normalsize Graphs: \bl{$a^{?\{n\}} \cdot a^{\{n\}}$} and strings \bl{$\underbrace{\,a\ldots a\,}_{n}$}}\smallskip\\
    55 \begin{tabular}{@{}cc@{}}
    55 \begin{tabular}{@{}cc@{}}
    56 \begin{tikzpicture}
    56 \begin{tikzpicture}
    57 \begin{axis}[
    57 \begin{axis}[
    58     xlabel={$n$},
    58     xlabel={$n$},
    59     x label style={at={(1.05,0.0)}},
    59     x label style={at={(1.05,0.0)}},
    67     axis lines=left,
    67     axis lines=left,
    68     width=5cm,
    68     width=5cm,
    69     height=4.5cm, 
    69     height=4.5cm, 
    70     legend entries={Python,Ruby},  
    70     legend entries={Python,Ruby},  
    71     legend pos=north west,
    71     legend pos=north west,
    72     legend cell align=left  
    72     legend cell align=left]
    73 ]
       
    74 \addplot[blue,mark=*, mark options={fill=white}] table {re-python.data};
    73 \addplot[blue,mark=*, mark options={fill=white}] table {re-python.data};
    75 \addplot[brown,mark=pentagon*, mark options={fill=white}] table {re-ruby.data};  
    74 \addplot[brown,mark=pentagon*, mark options={fill=white}] table {re-ruby.data};  
    76 \end{axis}
    75 \end{axis}
    77 \end{tikzpicture}
    76 \end{tikzpicture}
    78 &
    77 &
    87     ymax=35,
    86     ymax=35,
    88     ytick={0,5,...,30},
    87     ytick={0,5,...,30},
    89     scaled ticks=false,
    88     scaled ticks=false,
    90     axis lines=left,
    89     axis lines=left,
    91     width=5cm,
    90     width=5cm,
    92     height=4.5cm
    91     height=4.5cm,
    93 ]
    92     legend entries={Scala V2,Scala V3},
       
    93     legend pos=north west,
       
    94     legend cell align=left]
    94 \addplot[green,mark=square*,mark options={fill=white}] table {re2.data};
    95 \addplot[green,mark=square*,mark options={fill=white}] table {re2.data};
    95 \addplot[black,mark=square*,mark options={fill=white}] table {re3.data};
    96 \addplot[black,mark=square*,mark options={fill=white}] table {re3.data};
    96 \end{axis}
    97 \end{axis}
    97 \end{tikzpicture}
    98 \end{tikzpicture}
    98 \end{tabular}
    99 \end{tabular}
    99 \end{center}
   100 \end{center}
   100 
   101 
   101 \small
   102 \small
   102 In the handouts is a similar graph with \bl{$(a^*)^* \cdot b$} for Java.
   103 In the handouts is a similar graph for \bl{$(a^*)^* \cdot b$} and Java.
   103 
   104 
   104 \end{frame}
   105 \end{frame}
   105 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   106 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   106 
   107 
   107 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   108 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   173 \end{center}\bigskip
   174 \end{center}\bigskip
   174 
   175 
   175 \item[] For example
   176 \item[] For example
   176 
   177 
   177 \begin{center}
   178 \begin{center}
   178 \begin{tabular}{lcll}
   179 \begin{tabular}{lcl@{\hspace{10mm}}l}
   179 \bl{$A^4$} & \bl{$=$} & \bl{$A \,@\, A \,@\, A \,@\, A$} & \bl{$(\{[]\})$}\\
   180 \bl{$A^4$} & \bl{$=$} & \bl{$A \,@\, A \,@\, A \,@\, A$} & \bl{$(@\,\{[]\})$}\\
   180 \bl{$A^1$} & \bl{$=$} & \bl{$A$} & \bl{$(\{[]\})$}\\
   181 \bl{$A^1$} & \bl{$=$} & \bl{$A$} & \bl{$(@\,\{[]\})$}\\
   181 \bl{$A^0$} & \bl{$=$} & \bl{$\{[]\}$}\\
   182 \bl{$A^0$} & \bl{$=$} & \bl{$\{[]\}$}\\
   182 \end{tabular}
   183 \end{tabular}
   183 \end{center}
   184 \end{center}
   184 
   185 
   185 \end{itemize}  
   186 \end{itemize}  
   213 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   214 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   214 \begin{frame}[c]
   215 \begin{frame}[c]
   215 \frametitle{The Star Operation}
   216 \frametitle{The Star Operation}
   216 
   217 
   217 \begin{itemize}
   218 \begin{itemize}
   218 \item The \alert{\bf Star} of a \underline{language}:
   219 \item The \alert{\bf Kleene Star} of a \underline{language}:
   219 \bigskip
   220 \bigskip
   220 
   221 
   221 \begin{center}
   222 \begin{center}
   222 \begin{tabular}{c}
   223 \begin{tabular}{c}
   223 \bl{$A\star \dn \bigcup_{0\le n} A^n$}
   224 \bl{$A\star \dn \bigcup_{0\le n} A^n$}
   255  \bl{$L(r_1 \cdot r_2)$} & \bl{$\dn$} & \bl{$\{ s_1 \,@\, s_2 \;|\; s_1 \in L(r_1) \wedge s_2 \in L(r_2) \}$}\\
   256  \bl{$L(r_1 \cdot r_2)$} & \bl{$\dn$} & \bl{$\{ s_1 \,@\, s_2 \;|\; s_1 \in L(r_1) \wedge s_2 \in L(r_2) \}$}\\
   256  \bl{$L(r^*)$}           & \bl{$\dn$} & \bl{$(L(r))\star \quad\dn \bigcup_{0 \le n} L(r)^n$}\\
   257  \bl{$L(r^*)$}           & \bl{$\dn$} & \bl{$(L(r))\star \quad\dn \bigcup_{0 \le n} L(r)^n$}\\
   257   \end{tabular}
   258   \end{tabular}
   258 \end{textblock}
   259 \end{textblock}
   259 
   260 
   260 \begin{textblock}{6}(9,12)\small
   261 \begin{textblock}{9}(6,12)\small
   261 \bl{$L$} is a function from regular expressions to 
   262 \bl{$L$} is a function from regular expressions to 
   262 sets of strings\\
   263 sets of strings (languages):\smallskip\\
   263 \bl{$L$ : Rexp $\Rightarrow$ Set$[$String$]$}
   264 \bl{$L$ : Rexp $\Rightarrow$ Set$[$String$]$}
   264 \end{textblock}
   265 \end{textblock}
   265 
   266 
   266 \end{frame}
   267 \end{frame}
   267 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   268 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   330 Their inductive definition:
   331 Their inductive definition:
   331 
   332 
   332 
   333 
   333 \begin{textblock}{6}(2,7.5)
   334 \begin{textblock}{6}(2,7.5)
   334   \begin{tabular}{@ {}rrl@ {\hspace{13mm}}l}
   335   \begin{tabular}{@ {}rrl@ {\hspace{13mm}}l}
   335   \bl{$r$} & \bl{$::=$}  & \bl{$\ZERO$}  & null\\
   336   \bl{$r$} & \bl{$::=$}  & \bl{$\ZERO$}  & nothing\\
   336          & \bl{$\mid$} & \bl{$\ONE$}       & empty string / \pcode{""} / $[]$\\
   337          & \bl{$\mid$} & \bl{$\ONE$}       & empty string / \pcode{""} / $[]$\\
   337          & \bl{$\mid$} & \bl{$c$}              & character\\
   338          & \bl{$\mid$} & \bl{$c$}              & single character\\
   338          & \bl{$\mid$} & \bl{$r_1 \cdot r_2$}  & sequence\\
   339          & \bl{$\mid$} & \bl{$r_1 \cdot r_2$}  & sequence\\
   339          & \bl{$\mid$} & \bl{$r_1 + r_2$}      & alternative / choice\\
   340          & \bl{$\mid$} & \bl{$r_1 + r_2$}      & alternative / choice\\
   340          & \bl{$\mid$} & \bl{$r^*$}            & star (zero or more)\\
   341          & \bl{$\mid$} & \bl{$r^*$}            & star (zero or more)\\
   341   \end{tabular}
   342   \end{tabular}
   342 \end{textblock}
   343 \end{textblock}
   612 
   613 
   613 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   614 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   614 \begin{frame}[c]
   615 \begin{frame}[c]
   615 \frametitle{Solving the Problem}
   616 \frametitle{Solving the Problem}
   616 
   617 
   617 What happens if we extend our regular expressions
   618 What happens if we extend our regular expressions with explicit 
       
   619 constructors
   618 
   620 
   619 \begin{center}
   621 \begin{center}
   620 \begin{tabular}{rcl}
   622 \begin{tabular}{rcl}
   621 \bl{$r$} & \bl{$::=$} & \bl{\ldots}\\
   623 \bl{$r$} & \bl{$::=$} & \bl{\ldots}\\
   622              & \bl{$\mid$} & \bl{$r^{\{n\}}$}\\
   624              & \bl{$\mid$} & \bl{$r^{\{n\}}$}\\
   744 
   746 
   745 \end{frame}
   747 \end{frame}
   746 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   748 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
   747 
   749 
   748 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   750 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   751 %\begin{frame}[c]
       
   752 %\frametitle{\bl{$(a^*)^* \cdot b$}}
       
   753 %
       
   754 %\begin{center}
       
   755 %\begin{tikzpicture}
       
   756 %  \begin{axis}[
       
   757 %    xlabel={$n$},
       
   758 %    x label style={at={(1.09,0.0)}},
       
   759 %    ylabel={time in secs},
       
   760 %    enlargelimits=false,
       
   761 %    xmax=27,
       
   762 %    xtick={0,5,...,20},
       
   763 %    ytick={0,5,...,25},
       
   764 %    ymax=13,
       
   765 %    scaled ticks=false,
       
   766 %    axis lines=left,
       
   767 %    width=9cm,
       
   768 %    height=5cm, 
       
   769 %    legend entries={Scala V2},
       
   770 %    legend pos=north west,
       
   771 %    legend cell align=left]
       
   772 %\addplot[green,mark=square*,mark options={fill=white}] table {re2a.data};
       
   773 %% still needs to be done
       
   774 %%\addplot[black,mark=square*,mark options={fill=white}] table {re3a.data};
       
   775 %\end{axis}
       
   776 %\end{tikzpicture}
       
   777 %\end{center}
       
   778 %
       
   779 %\end{frame}
       
   780 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   781 
       
   782 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   749 \begin{frame}[c]
   783 \begin{frame}[c]
   750 \frametitle{\bl{$(a^*)^* \cdot b$}}
   784 \frametitle{\bl{$(a^*)^* \cdot b$}}
   751 
   785 
   752 \begin{center}
   786 \begin{center}
   753 \begin{tikzpicture}
   787 \begin{tikzpicture}
   754   \begin{axis}[
   788   \begin{axis}[
   755     xlabel={$n$},
   789     xlabel={$n$},
   756     x label style={at={(1.09,0.0)}},
   790     x label style={at={(1.09,0.0)}},
   757     ylabel={time in secs},
   791     ylabel={time in secs},
   758     enlargelimits=false,
   792     enlargelimits=false,
   759     xmax=27,
   793     ytick={0,10,...,30},
   760     xtick={0,5,...,20},
   794     ymax=35,
   761     ytick={0,5,...,25},
       
   762     ymax=13,
       
   763     scaled ticks=false,
       
   764     axis lines=left,
       
   765     width=9cm,
       
   766     height=5cm, 
       
   767     legend entries={Scala V2},
       
   768     legend pos=north west,
       
   769     legend cell align=left]
       
   770 \addplot[green,mark=square*,mark options={fill=white}] table {re2a.data};
       
   771 %% still needs to be done
       
   772 %%\addplot[black,mark=square*,mark options={fill=white}] table {re3a.data};
       
   773 \end{axis}
       
   774 \end{tikzpicture}
       
   775 \end{center}
       
   776 
       
   777 \end{frame}
       
   778 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
       
   779 
       
   780 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   781 \begin{frame}[c]
       
   782 \frametitle{\bl{$(a^*)^* \cdot b$}}
       
   783 
       
   784 \begin{center}
       
   785 \begin{tikzpicture}
       
   786   \begin{axis}[
       
   787     xlabel={$n$},
       
   788     x label style={at={(1.09,0.0)}},
       
   789     ylabel={time in secs},
       
   790     enlargelimits=false,
       
   791     ytick={0,10,...,60},
       
   792     ymax=65,
       
   793     axis lines=left,
   795     axis lines=left,
   794     width=9cm,
   796     width=9cm,
   795     height=5cm, 
   797     height=5cm, 
   796     legend entries={Scala V3},
   798     legend entries={Scala V3},
   797     legend pos=north west,
   799     legend pos=north east,
   798     legend cell align=left]
   800     legend cell align=left]
   799 \addplot[green,mark=square*,mark options={fill=white}] table {re2a.data};
   801 %\addplot[green,mark=square*,mark options={fill=white}] table {re2a.data};
   800 \addplot[black,mark=square*,mark options={fill=white}] table {re3a.data};
   802 \addplot[black,mark=square*,mark options={fill=white}] table {re3a.data};
   801 \end{axis}
   803 \end{axis}
   802 \end{tikzpicture}
   804 \end{tikzpicture}
   803 \end{center}
   805 \end{center}
   804 
   806 
   816 \bl{$\sim r$}
   818 \bl{$\sim r$}
   817 
   819 
   818 \item is easy to implement in a functional language
   820 \item is easy to implement in a functional language
   819 
   821 
   820 \item the algorithm is already quite old; there is still
   822 \item the algorithm is already quite old; there is still
   821   work to be done to use it as a tokenizer (that is brand new work)
   823   work to be done to use it as a tokenizer (that is relatively new work)
   822 
   824 
   823 \item we can prove its correctness\ldots
   825 \item we can prove its correctness\ldots
   824 \end{itemize}
   826 \end{itemize}
   825 
   827 
   826 \end{frame}
   828 \end{frame}