slides/irif.tex
author Christian Urban <christian.urban@kcl.ac.uk>
Wed, 30 Sep 2026 20:06:53 +0100
changeset 1048 34cbdb1178b7
parent 1039 86d59b074abe
permissions -rw-r--r--
updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
     1
% !TEX program = xelatex
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
     2
\documentclass[dvipsnames,14pt,t,xelatex,aspectratio=169,xcolor={table}]{beamer}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
     3
\usepackage{../slides}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
     4
\usepackage{../graphicss}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
     5
\usepackage{../langs}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
     6
\usepackage{../data}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
     7
\usetikzlibrary{cd}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
     8
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
     9
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    10
\usepackage{tcolorbox}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    11
\newtcolorbox{mybox}{colback=red!5!white,colframe=red!75!black}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    12
\newtcolorbox{mybox2}[1]{colback=red!5!white,colframe=red!75!black,fonttitle=\bfseries,title=#1}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    13
\newtcolorbox{mybox3}[1]{colback=Cyan!5!white,colframe=Cyan!75!black,fonttitle=\bfseries,title=#1}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    14
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    15
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
    16
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    17
\setbeamersize{text margin left=2mm} % <- like this
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    18
\hfuzz=220pt
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    19
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    20
\lstset{language=Scala,
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    21
        style=mystyle,
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    22
        numbersep=0pt,
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    23
        numbers=none,
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    24
        xleftmargin=0mm}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    25
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    26
\pgfplotsset{compat=1.17}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    27
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    28
\newcommand{\bl}[1]{\textcolor{blue}{#1}}
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    29
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    30
% beamer stuff
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
    31
\renewcommand{\slidecaption}{Christian Urban, King's College London}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    32
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    33
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    34
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    35
\begin{document}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    36
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    37
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    38
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    39
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    40
\begin{frame}[t]
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    41
\frametitle{%
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    42
  \begin{tabular}{@ {}c@ {}}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    43
    \\[8mm]
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
    44
    \LARGE POSIX Matching\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
    45
    \LARGE using Regular Expressions\\[5mm]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
    46
    \normalsize\textcolor{gray}{Meshal Binnasban\;\; Christian Urban}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    47
  \end{tabular}}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    48
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    49
\end{frame}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    50
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
    51
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    52
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    53
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    54
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    55
\frametitle{Quiz 1}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    56
\begin{bubble}[10cm]\it
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    57
  There are many, many regular expression libraries.\bigskip\\
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    58
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    59
  \textbf{Given a regular expression \bl{r} and a string \bl{s}, what is the
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    60
  difficulty / complexity of the problem deciding whether \bl{r} matches \bl{s}?}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    61
\end{bubble}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    62
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    63
\begin{textblock}{12}(2,9)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    64
\begin{tikzpicture}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    65
  \draw(0,0)  node[rotate=20]{linear};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    66
  \draw(3,0)  node[rotate=-20]{\bl{$O(n \log n)$}};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    67
  \draw(3,-2) node[rotate=10]{quadratic};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    68
  \draw(6,0) node[rotate=20]{P};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    69
  \draw(7,0) node[rotate=-20]{NP};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    70
  \draw(7,-1) node[rotate=0]{\bl{$O(2^n)$}};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    71
\end{tikzpicture}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    72
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    73
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    74
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    75
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    76
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    77
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    78
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    79
\frametitle{Quiz 2}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    80
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    81
\begin{textblock}{12}(2,2.5)
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
    82
A typical regular expression for (some) email addresses:
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    83
\begin{center}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    84
  ($\underbrace{\bl{[a\mbox{-}z0\mbox{-}9\_\!\!\_\,.-]^+}}_{\textrm{name}}$)\bl{$\,@\,$}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    85
  ($\underbrace{\bl{[a\mbox{-}z0\mbox{-}9\,-]^+}}_{\textrm{domain}}$) \bl{$\,.\,$}
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
    86
  ($\underbrace{\bl{[a\mbox{-}z\,.]^{\{2..6\}}}}_{\textrm{top-level domain}}$)
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    87
\end{center}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    88
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    89
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    90
\only<2>{
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    91
\begin{textblock}{10}(4,8)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    92
bounded regular expressions:\medskip\\
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
    93
\begin{tabular}{ll}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    94
  \bl{$r^{\{n\}}$}     & exactly n-times \bl{$r$}\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    95
  \bl{$r^{\{n..m\}}$}  & between n and m-times\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    96
  \bl{$r^{\{n..\}}$}   & from n-times\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    97
  \bl{$r^{\{..m\}}$}   & upto m-times\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    98
\end{tabular}\smallskip\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
    99
\footnotesize\hfill ${}^*$ in some applications the counters can be in the millions
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   100
\end{textblock}}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   101
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   102
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   103
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   104
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   105
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   106
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   107
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   108
\frametitle{Quiz 2}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   109
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   110
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   111
\begin{textblock}{12}(2,2.5)
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   112
  \onslide<1->{Thompson construction for $r_1 \cdot r_2$: By recursion we are given two NFAs for $r_1$ and $r_2$.\medskip\\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   113
    \onslide<2->{For $r_1\cdot r_2$:}\bigskip}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   114
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   115
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   116
\begin{textblock}{12}(2,6)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   117
\onslide<1>{
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   118
\begin{tikzpicture}[node distance=3mm,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   119
    >=stealth',very thick,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   120
    every state/.style={minimum size=3pt,draw=blue!50,very thick,fill=blue!20}]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   121
\node[state, initial]  (Q_0)  {$\mbox{}$};
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   122
\node[state, initial]  (Q_01) [below=1mm of Q_0] {$\mbox{}$};
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   123
\node[state, initial]  (Q_02) [above=1mm of Q_0] {$\mbox{}$};
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   124
\node (R_1)  [right=of Q_0] {$\ldots$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   125
\node[state, accepting]  (T_1)  [right=of R_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   126
\node[state, accepting]  (T_2)  [above=of T_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   127
\node[state, accepting]  (T_3)  [below=of T_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   128
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   129
\node (A_0)  [right=2.5cm of T_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   130
\node[state, initial]  (A_01)  [above=1mm of A_0] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   131
\node[state, initial]  (A_02)  [below=1mm of A_0] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   132
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   133
\node (b_1)  [right=of A_0] {$\ldots$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   134
\node[state, accepting]  (c_1)  [right=of b_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   135
\node[state, accepting]  (c_2)  [above=of c_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   136
\node[state, accepting]  (c_3)  [below=of c_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   137
\begin{pgfonlayer}{background}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   138
  \node (1) [rounded corners, inner sep=1mm, thick,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   139
    draw=black!60, fill=black!20, fit= (Q_0) (R_1) (T_1) (T_2) (T_3)] {};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   140
  \node (2) [rounded corners, inner sep=1mm, thick,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   141
    draw=black!60, fill=black!20, fit= (A_0) (b_1) (c_1) (c_2) (c_3)] {};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   142
\node [yshift=2mm] at (1.north) {$r_1$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   143
\node [yshift=2mm] at (2.north) {$r_2$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   144
\end{pgfonlayer}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   145
\end{tikzpicture}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   146
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   147
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   148
\begin{textblock}{12}(2,6)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   149
\onslide<2>{
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   150
\begin{tikzpicture}[node distance=3mm,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   151
    >=stealth',very thick,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   152
    every state/.style={minimum size=3pt,draw=blue!50,very thick,fill=blue!20},]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   153
\node[state, initial]  (Q_0)  {$\mbox{}$};
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   154
\node[state, initial]  (Q_01) [below=1mm of Q_0] {$\mbox{}$};
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   155
\node[state, initial]  (Q_02) [above=1mm of Q_0] {$\mbox{}$};
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   156
\node (r_1)  [right=of Q_0] {$\ldots$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   157
\node[state]  (t_1)  [right=of r_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   158
\node[state]  (t_2)  [above=of t_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   159
\node[state]  (t_3)  [below=of t_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   160
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   161
\node  (A_0)  [right=2.5cm of t_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   162
\node[state]  (A_01)  [above=1mm of A_0] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   163
\node[state]  (A_02)  [below=1mm of A_0] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   164
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   165
\node (b_1)  [right=of A_0] {$\ldots$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   166
\node[state, accepting]  (c_1)  [right=of b_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   167
\node[state, accepting]  (c_2)  [above=of c_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   168
\node[state, accepting]  (c_3)  [below=of c_1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   169
\path[->] (t_1) edge (A_01);
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   170
\path[->] (t_2) edge node [above]  {$\varepsilon$\footnotesize{}s} (A_01);
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   171
\path[->] (t_3) edge (A_01);
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   172
\path[->] (t_1) edge (A_02);
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   173
\path[->] (t_2) edge (A_02);
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   174
\path[->] (t_3) edge node [below]  {$\varepsilon$\footnotesize{}s} (A_02);
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   175
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   176
\begin{pgfonlayer}{background}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   177
  \node (3) [rounded corners, inner sep=1mm, thick,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   178
    draw=black!60, fill=black!20, fit= (Q_0) (c_1) (c_2) (c_3)] {};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   179
\node [yshift=2mm] at (3.north) {$r_1\cdot r_2$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   180
\end{pgfonlayer}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   181
\end{tikzpicture}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   182
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   183
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   184
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   185
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   186
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   187
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   188
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   189
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   190
\frametitle{Quiz 2}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   191
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   192
\begin{textblock}{12}(2,2.5)
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   193
  \onslide<1->{Thompson construction for $r^*$: By recursion we have a NFA for $r$.\medskip\\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   194
  \onslide<2->{For $r^*$:\bigskip}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   195
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   196
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   197
\begin{textblock}{12}(4,6)
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   198
\onslide<1>{
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   199
\begin{tikzpicture}[node distance=3mm,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   200
    >=stealth',very thick,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   201
    every state/.style={minimum size=3pt,draw=blue!50,very thick,fill=blue!20},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   202
    baseline=(current bounding box.north)]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   203
\node (2)  {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   204
\node[state, initial]  (4)  [above=1mm of 2] {$\mbox{}$};
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   205
\node[state, initial]  (5)  [below=1mm of 2] {$\mbox{}$};
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   206
\node (a)  [right=of 2] {$\ldots$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   207
\node[state, accepting]  (a1)  [right=of a] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   208
\node[state, accepting]  (a2)  [above=of a1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   209
\node[state, accepting]  (a3)  [below=of a1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   210
\begin{pgfonlayer}{background}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   211
\node (1) [rounded corners, inner sep=1mm, thick, draw=black!60, fill=black!20, fit= (2) (a1) (a2) (a3)] {};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   212
\node [yshift=3mm] at (1.north) {$r$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   213
\end{pgfonlayer}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   214
\end{tikzpicture}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   215
\end{textblock}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   216
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   217
\begin{textblock}{12}(2,6)
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   218
\onslide<2->{
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   219
\begin{tikzpicture}[node distance=3mm,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   220
    >=stealth',very thick,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   221
    every state/.style={minimum size=3pt,draw=blue!50,very thick,fill=blue!20},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   222
    baseline=(current bounding box.north)]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   223
\node at (0,0) [state, initial,accepting]  (1)  {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   224
\node (2)  [right=16mm of 1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   225
\node[state]  (4)  [above=1mm of 2] {$\mbox{}$};
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   226
\node[state]  (5)  [below=1mm of 2] {$\mbox{}$};
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   227
\node (a)  [right=of 2] {$\ldots$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   228
\node[state]  (a1)  [right=of a] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   229
\node[state]  (a2)  [above=of a1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   230
\node[state]  (a3)  [below=of a1] {$\mbox{}$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   231
\path[->] (1) edge node [below]  {$\varepsilon$} (4);
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   232
\path[->] (1) edge node [below]  {$\varepsilon$} (5);
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   233
\path[->] (a1) edge [bend left=45] node [below]  {$\varepsilon$} (1);
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   234
\path[->] (a2) edge [bend right] node [below]  {$\varepsilon$} (1);
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   235
\path[->] (a3) edge [bend left=45] node [below]  {$\varepsilon$} (1);
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   236
\begin{pgfonlayer}{background}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   237
\node (2) [rounded corners, inner sep=1mm, thick, draw=black!60, fill=black!20, fit= (1) (a2) (a3)] {};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   238
\node [yshift=3mm] at (2.north) {$r^*$};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   239
\end{pgfonlayer}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   240
\end{tikzpicture}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   241
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   242
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   243
\begin{textblock}{12}(2,12)
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   244
\onslide<3->{
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   245
  \begin{bubble}[9.5cm]\it
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   246
  Quiz:\smallskip\\
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   247
  \textbf{What is the Thompson construction for \bl{$r^{\{n\}}$} ?}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   248
\end{bubble}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   249
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   250
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   251
\end{frame}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   252
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   253
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   254
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   255
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   256
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   257
  \frametitle{Quiz 3}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   258
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   259
Hierarchy of Languages:
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   260
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   261
\begin{center}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   262
\begin{tikzpicture}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   263
[rect/.style={draw=black!50,
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   264
              top color=white,
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   265
              bottom color=black!20,
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   266
              rectangle,
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   267
              very thick,
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   268
              rounded corners}, scale=1.2]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   269
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   270
\draw (0,0) node [rect, text depth=39mm, text width=68mm] {all languages};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   271
\draw (0,-0.4) node [rect, text depth=28.5mm, text width=64mm] {decidable languages};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   272
\draw (0,-0.85) node [rect, text depth=17mm] {\;\;context sensitive languages\;\;};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   273
\draw (0,-1.14) node [rect, text depth=9mm, text width=50mm] {context-free languages};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   274
\draw (0,-1.4) node [rect] {regular languages};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   275
\end{tikzpicture}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   276
\end{center}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   277
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   278
\begin{textblock}{12}(2,11.5)
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   279
\onslide<2->{
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   280
  \begin{bubble}[9.5cm]\it
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   281
    Quiz:\smallskip\\
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   282
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   283
    \textbf{Can we use standard parsing algorithms for matching / lexing\,?}
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   284
    Say CYK, LL(1), LR(k), PEG, \ldots
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   285
\end{bubble}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   286
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   287
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   288
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   289
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   290
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   291
\defverbatim{\foo}{\footnotesize%
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   292
\begin{verbatim}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   293
(?:(?:\"|'|\]|\}|\\|\d|(?:nan|infinity|true|false|
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   294
null|undefined|symbol|math)|\`|\-|\+)+[)]*;?((?:\s
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   295
| -|~|!|{}|\|\||\+)*.*(?:.*=.*)))
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   296
\end{verbatim}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   297
}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   298
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   299
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   300
\begin{frame}[t,fragile]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   301
\frametitle{Quiz 4}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   302
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   303
\begin{textblock}{12}(2,2.5)
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   304
\begin{bubble}[10.5cm]\it
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   305
  Quiz:\smallskip\\
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   306
  \textbf{Do regular expressions have any security relevance\,?}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   307
\end{bubble}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   308
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   309
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   310
\only<2->{
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   311
\begin{textblock}{2}(1,6)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   312
\includegraphics[scale=0.8]{../pics/zeek.png}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   313
\includegraphics[scale=0.17]{../pics/snort.png}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   314
\end{textblock}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   315
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   316
\only<3->{
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   317
\begin{textblock}{7}(7,5.6)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   318
  \includegraphics[scale=0.14]{../pics/cloudflare.png}\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   319
    \footnotesize
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   320
    It serves more web traffic than Twitter, Amazon, Apple,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   321
    Instagram, Bing \& Wikipedia combined.\medskip\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   322
    Web Application Firewall filters out
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   323
    SQL injection attacks, XSS attacks etc
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   324
\end{textblock}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   325
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   326
\only<3->{
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   327
  \begin{textblock}{13}(4,12.3)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   328
  \footnotesize
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   329
  \hspace{1.5cm}a global outage on 2 July 2019 (first one for six years)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   330
  \color{blue}\foo\color{black}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   331
   \end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   332
}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   333
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   334
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   335
\end{frame}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   336
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   337
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   338
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   339
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   340
  \frametitle{Quiz 3}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   341
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   342
\begin{textblock}{12}(2,2)
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   343
  \begin{bubble}[9.5cm]\it
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   344
    Quiz:\smallskip\\
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   345
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   346
    \textbf{Can we use standard parsing algorithms for matching / lexing\,?}
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   347
    Say CYK, LL(1), LR(k), PEG, \ldots
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   348
\end{bubble}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   349
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   350
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   351
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   352
\begin{textblock}{12}(1,7)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   353
\textbf{POSIX lexing}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   354
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   355
\begin{tabular}{@ {}ll}
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   356
  Assume you have: & \bl{$r_{key} \dn \texttt{if} + \texttt{then} + \texttt{while} + \ldots$}\\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   357
                   & \bl{$r_{id\;} \,\dn \texttt{[a-z]} \cdot \texttt{[a-z0-9\_]}^*$}\medskip\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   358
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   359
  Lex a string with  & \bl{$(r_{key} + r_{id})^*$}\medskip\\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   360
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   361
  What should be & \\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   362
  the result for:  & \bl{\texttt{"iffoo"}} \;\;\; \bl{\texttt{"if"}}\\
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   363
\end{tabular}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   364
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   365
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   366
\only<2->{
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   367
\begin{textblock}{13.5}(1.5,4)
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   368
  \begin{mybox3}{POSIX rules}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   369
    \begin{itemize}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   370
    \item \textbf{The Longest Match Rule:} The longest initial
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   371
      substring matched by any regular expression is taken as next token.
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   372
    \item \textbf{Priority Rule:}  For a particular longest initial
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   373
      substring, the first (leftmost) regular expression that can match
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   374
      determines the token.
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   375
    \item \ldots
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   376
    \end{itemize}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   377
    \begin{center}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   378
    \bl{$(a + ab) \cdot (bc + c)$} \;\;and\;\; \bl{\texttt{"}$abc$\texttt{"}}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   379
    \end{center}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   380
  \end{mybox3}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   381
\end{textblock}}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   382
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   383
\end{frame}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   384
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   385
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   386
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   387
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   388
\frametitle{Quiz 1}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   389
\begin{bubble}[10cm]\it
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   390
  There are many, many regular expression libraries.\bigskip\\
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   391
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   392
  \textbf{Given a regular expression \bl{r} and a string \bl{s}, what is the
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   393
  difficulty / complexity of the problem deciding whether \bl{r} matches \bl{s}?}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   394
\end{bubble}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   395
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   396
\begin{textblock}{12}(1,9)
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   397
  \begin{tabular}{p{4cm}|p{4cm}|p{5cm}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   398
    atrociously slow (s't) & pretty lazy (s't) & \textcolor{gray}{Off the Beaten Track}\medskip\\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   399
    Python, Ruby, Swift, Dart, JavaScript & Rust, Go, RE2 & \textcolor{gray}{Snort, .Net7}\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   400
  \end{tabular}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   401
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   402
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   403
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   404
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   405
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   406
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   407
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   408
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   409
\mbox{}\\[10mm]
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   410
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   411
\begin{columns}[t,onlytextwidth]
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   412
\begin{column}{.3\textwidth}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   413
\raisebox{-10mm}{
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   414
\hspace{3mm}\begin{tikzpicture}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   415
  \begin{axis}[
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   416
    xlabel={\bl{$n$} \pcode{a}s},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   417
    %%x label style={at={(1.05,0.0)}},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   418
    ylabel={time in secs},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   419
    enlargelimits=false,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   420
    xtick={0,10,...,30},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   421
    xmax=35,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   422
    ymax=35,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   423
    ytick={0,5,...,30},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   424
    scaled ticks=false,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   425
    axis lines=left,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   426
    width=5cm,
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   427
    height=5cm,
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   428
    legend entries={Python,JavaScript,Swift,Dart},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   429
    legend style={font=\small,at={(0.5,-0.39)},anchor=north},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   430
    legend cell align=left]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   431
\addplot[blue,mark=*, mark options={fill=white}] table {re-python2.data};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   432
\addplot[red,mark=*, mark options={fill=white}] table {re-js.data};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   433
\addplot[magenta,mark=*, mark options={fill=white}] table {re-swift.data};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   434
\addplot[brown,mark=*, mark options={fill=white}] table {re-dart.data};
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   435
\end{axis}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   436
\end{tikzpicture}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   437
\end{column}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   438
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   439
\begin{column}{.2\textwidth}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   440
\begin{tikzpicture}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   441
  \begin{axis}[
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   442
    xlabel={\bl{$n$} \pcode{a}s},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   443
    %ylabel={time in secs},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   444
    enlargelimits=false,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   445
    xtick={0,10,...,30},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   446
    xmax=35,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   447
    ymax=35,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   448
    ytick={0,5,...,30},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   449
    scaled ticks=false,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   450
    axis lines=left,
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   451
    width=5cm,
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   452
    height=5cm,
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   453
    legend entries={Python,Ruby},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   454
    legend style={font=\small,at={(0.5,-0.39)},anchor=north},
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   455
    legend cell align=left]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   456
\addplot[blue,mark=*, mark options={fill=white}] table {re-python.data};
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   457
\addplot[brown,mark=pentagon*, mark options={fill=white}] table {re-ruby.data};
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   458
\end{axis}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   459
\end{tikzpicture}
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   460
\end{column}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   461
\end{columns}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   462
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   463
\begin{textblock}{4}(9,1.7)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   464
\textbf{\bl{\texttt{(a?)\boldmath$^{\{n\}}\cdot$(a)\boldmath$^{\{n\}}$}}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   465
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   466
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   467
\begin{textblock}{4}(4,1.7)
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   468
\textbf{\bl{\texttt{(a*)*$\cdot$b}}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   469
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   470
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   471
\begin{textblock}{3.4}(6,11)
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   472
\small{}\textbf{matching with strings}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   473
\textbf{\bl{$\underbrace{\texttt{a}...\texttt{a}}_n$}}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   474
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   475
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   476
\end{frame}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   477
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   478
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   479
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   480
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   481
\frametitle{Quiz 1}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   482
\begin{bubble}[10cm]\it
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   483
  \textbf{Given a regular expression \bl{r} and a string \bl{s}, what is the
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   484
  difficulty / complexity of the problem deciding whether \bl{r} matches \bl{s}?}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   485
\end{bubble}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   486
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   487
\begin{textblock}{12}(1.7,8)
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   488
For \textbf{Perl-style} regular expression matchers (say Python, JavaScript, etc), the
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   489
answer is:
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   490
\only<2->{\begin{center}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   491
\fontspec{Hoefler Text Black}\textcolor{ProcessBlue}{\huge{}NP}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   492
\end{center}}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   493
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   494
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   495
\begin{textblock}{12}(1.7,13)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   496
\only<3->{Groups and Backreferences: \bl{(\ldots)$\,\ldots{}\backslash{}n$}}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   497
\end{textblock}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   498
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   499
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   500
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   501
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   502
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   503
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   504
\begin{frame}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   505
\frametitle{Quiz 2}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   506
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   507
\begin{textblock}{12}(2,2)
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   508
\onslide<1->{
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   509
  \begin{bubble}[9.5cm]\it
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   510
  Quiz:\smallskip\\
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   511
  \textbf{What is the Thompson construction for \bl{$r^{\{n\}}$} ?}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   512
\end{bubble}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   513
\end{textblock}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   514
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   515
\only<2->{
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   516
\begin{textblock}{12}(1,6)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   517
\begin{tabular}{ll}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   518
  Google's RE2 lib & $\Rightarrow$ \bl{$a^{\{1001\}}$} is too big\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   519
  \onslide<3->{Rust Regex lib}    & \onslide<5->{$\Rightarrow$ \bl{$a^{\{1000\}\{100\}\{5\}}$} too big}\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   520
                    & \onslide<6->{$\Rightarrow$ \bl{$a^{\{0\}\{4294967295\}}$} ?}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   521
\end{tabular}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   522
\end{textblock}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   523
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   524
\only<4>{
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   525
\begin{textblock}{13.5}(1.5,4)
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   526
  \begin{mybox3}{From Rust's Regex Description}\it
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   527
    ``\ldots [the] syntax is similar to Perl-style regular expressions, but lacks a few features like look
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   528
    around and backreferences. In exchange, all searches execute in linear time with respect
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   529
    to the size of the regular expression and search text. \ldots''
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   530
  \end{mybox3}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   531
\end{textblock}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   532
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   533
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   534
\end{frame}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   535
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   536
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   537
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   538
\begin{frame}[t]
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   539
\frametitle{\begin{tabular}{l}Regular Expressions \&\\[-2mm]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   540
Brzozowski Derivatives\end{tabular}}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   541
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   542
\begin{textblock}{6}(2,5)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   543
  \begin{tabular}{@ {}rrl@ {\hspace{13mm}}l}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   544
  \bl{$r$} & \bl{$::=$}  & \bl{$\ZERO$}  & nothing\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   545
         & \bl{$\mid$} & \bl{$\ONE$}       & empty string / \pcode{""} \\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   546
         & \bl{$\mid$} & \bl{$c, d, \ldots$}                         & characters\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   547
         & \bl{$\mid$} & \bl{$r_1 + r_2$}  & alternative / choice\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   548
         & \bl{$\mid$} & \bl{$r_1 \cdot r_2$} & sequence\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   549
         & \bl{$\mid$} & \bl{$r^*$}            & star (zero or more)\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   550
  \end{tabular}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   551
  \end{textblock}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   552
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   553
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   554
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   555
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   556
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   557
\begin{frame}[c]
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   558
\frametitle{\begin{tabular}{l}The Derivative of a Rexp\end{tabular}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   559
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   560
\large
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   561
If \bl{$r$} matches the string \bl{$c\!::\!s$}, what is a regular
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   562
expression that matches just \bl{$s$}?\bigskip\bigskip\bigskip\bigskip
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   563
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   564
\small
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   565
\bl{$\der\,c\,r$} gives the answer, Brzozowski 1964\medskip\\
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   566
(``lost in the sands of time'', re-appeared in 2009 in a paper by S.~Owens, J.~Reppy and  A.~Turon)
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   567
\end{frame}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   568
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   569
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   570
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   571
\begin{frame}[c]
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   572
\frametitle{\begin{tabular}{l}The Derivative of a Rexp\end{tabular}}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   573
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   574
\begin{center}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   575
\begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {\hspace{-10mm}}l@ {}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   576
  \bl{$\der\, c\, (\ZERO)$}      & \bl{$\dn$} & \bl{$\ZERO$} & \\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   577
  \bl{$\der\, c\, (\ONE)$}           & \bl{$\dn$} & \bl{$\ZERO$} & \\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   578
  \bl{$\der\, c\, (d)$}                     & \bl{$\dn$} & \bl{if $c = d$ then $\ONE$ else $\ZERO$} & \\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   579
  \bl{$\der\, c\, (r_1 + r_2)$}        & \bl{$\dn$} & \bl{$\der\, c\, r_1 + \der\, c\, r_2$} & \\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   580
  \bl{$\der\, c\, (r_1 \cdot r_2)$}  & \bl{$\dn$}  & \bl{if $nullable (r_1)$}\\
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   581
  & & \bl{then $(\der\,c\,r_1) \cdot r_2 + \der\, c\, r_2$}\\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   582
  & & \bl{else $(\der\, c\, r_1) \cdot r_2$}\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   583
  \bl{$\der\, c\, (r^*)$}  & \bl{$\dn$} & \bl{$(\der\,c\,r) \cdot (r^*)$} &\medskip\bigskip\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   584
  \end{tabular}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   585
\end{center}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   586
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   587
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   588
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   589
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   590
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   591
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   592
\frametitle{\begin{tabular}{l}Brzozowski matcher\end{tabular}}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   593
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   594
Does \bl{$r_1$} match \bl{"$abc$"}?
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   595
\begin{center}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   596
\begin{tabular}{@{}rl@{}l@{}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   597
Step 1: & build derivative of \bl{$a$} and \bl{$r_1$} & \bl{$(r_2 = \der\,a\,r_1)$}\smallskip\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   598
Step 2: & build derivative of \bl{$b$} and \bl{$r_2$} & \bl{$(r_3 = \der\,b\,r_2)$}\smallskip\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   599
Step 3: & build derivative of \bl{$c$} and \bl{$r_3$} & \bl{$(r_4 = \der\,c\,r_3)$}\smallskip\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   600
Step 4: & the string is exhausted: & \bl{($nullable(r_4))$}\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   601
        & test whether \bl{$r_4$} can recognise\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   602
        & the empty string\medskip\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   603
Output: & result of the test\\
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   604
        & $\Rightarrow \bl{\textit{true}} \,\text{or}\,
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   605
                       \bl{\textit{false}}$\\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   606
\end{tabular}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   607
\end{center}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   608
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   609
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   610
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   611
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   612
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   613
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   614
\begin{frame}[c]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   615
\frametitle{\mbox{Nullable}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   616
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   617
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   618
\ldots{}whether a regular expression can match the empty string:
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   619
\begin{center}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   620
\begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   621
\bl{$nullable(\ZERO)$}    & \bl{$\dn$} & \bl{\textit{false}}\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   622
\bl{$nullable(\ONE)$}       & \bl{$\dn$} & \bl{\textit{true}}\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   623
\bl{$nullable (c)$}             & \bl{$\dn$} & \bl{\textit{false}}\\
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   624
\bl{$nullable (r_1 + r_2)$}     & \bl{$\dn$} & \bl{$nullable(r_1) \vee nullable(r_2)$} \\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   625
\bl{$nullable (r_1 \cdot r_2)$} & \bl{$\dn$} & \bl{$nullable(r_1) \wedge nullable(r_2)$} \\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   626
\bl{$nullable (r^*)$}           & \bl{$\dn$} & \bl{\textit{true}}\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   627
\end{tabular}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   628
\end{center}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   629
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   630
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   631
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   632
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   633
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   634
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   635
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   636
\begin{frame}[t]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   637
\frametitle{\begin{tabular}{l}Correctness of Brozowski Der's\end{tabular}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   638
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   639
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   640
\begin{bubble}[7cm]\it
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   641
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   642
  \begin{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   643
     \item \bl{$nullable(r)$} \;iff\; \bl{$[] \in L(r)$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   644
     \item \bl{$L(\der\;c\;r)$} \;iff\; \bl{$Der\;c\;(L(r))$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   645
  \end{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   646
\end{bubble}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   647
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   648
\begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   649
\bl{$Der\,c\,A \,\dn\, \{s\;|\;c::s \in A\}$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   650
\end{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   651
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   652
\begin{textblock}{10}(1,10)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   653
\begin{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   654
\item The beauty is that this only involves functional programs that can be conveniently reasoned about in theorem provers
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   655
\item Very nice first example for teaching theorem provers
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   656
%%\item POSIX lexing can be done via an extension by Sulzmann and Lu
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   657
\end{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   658
\end{textblock}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   659
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   660
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   661
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   662
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   663
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   664
\begin{frame}[t]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   665
\frametitle{\begin{tabular}{l}Extensions\end{tabular}}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   666
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   667
\begin{center}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   668
\begin{tabular}{@ {\hspace{-4mm}}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {\hspace{-10mm}}l@ {}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   669
  \bl{$\der\, c\, (r^{\{n\}})$}      & \bl{$\dn$} & \bl{$if\;n=0\;then\;\ZERO\;else\; (der\,c\,r)\cdot r^{\{n-1\}}$} & \\
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   670
  \bl{$\der\, c\, (r^{\{..n\}})$}    & \bl{$\dn$} & \bl{$if\;n=0\;then\;\ZERO\;else\; (der\,c\,r)\cdot r^{\{..n-1\}}$} & \\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   671
  \bl{$\der\, c\, (r^{\{n..\}})$}    & \bl{$\dn$} & \bl{$if\;n=0\;then\;(der\,c\,r)\cdot r^*$} \\
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   672
                                    &            & \bl{$else\; (der\,c\,r)\cdot r^{\{n-1..\}}$} & \\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   673
  \bl{$\der\, c\, (r^{\{n..m\}})$}   & \bl{$\dn$} & \bl{$if\;n=0 \wedge m=0\;then\;\ZERO\;else$} & \\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   674
                                     &           & \bl{$if \;n=0 \wedge 0<m\; then\;(der\,c\,r)\cdot r^{\{..m-1\}}$} & \\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   675
                                     &           & \bl{$else\; (der\,c\,r)\cdot r^{\{n-1..m-1\}}$} & \\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   676
  \bl{$\der\, c\, (\neg{}r)$}            & \bl{$\dn$}  & \bl{$\neg(der\,c\,r)$}\\
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   677
  \bl{$\der\, c\, (r_1 \,\&\, r_2)$}            & \bl{$\dn$}  & \bl{$\der\,c\,r_1 \;\&\;\der\;c\;r_2$}\\
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   678
  \end{tabular}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   679
\end{center}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   680
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   681
also works for lookarounds, various anchors, etc, but \textbf{not} for backreferences
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   682
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   683
\begin{textblock}{3}(11,13)
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   684
\onslide<2>{
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   685
  \begin{bubble}[3cm]
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   686
  \bl{$a^{\{0\}\{4294967295\}}$}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   687
\end{bubble}}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   688
\end{textblock}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   689
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   690
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   691
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   692
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   693
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   694
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   695
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   696
\begin{frame}{\begin{tabular}{l} Sulzmann and Lu's Addition (2014)\end{tabular}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   697
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   698
\begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   699
  ($\underbrace{\bl{[a\mbox{-}z0\mbox{-}9\_\!\!\_\,.-]^+}}_{\textrm{name}}$)\bl{$\,@\,$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   700
  ($\underbrace{\bl{[a\mbox{-}z0\mbox{-}9\,-]^+}}_{\textrm{domain}}$) \bl{$\,.\,$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   701
  ($\underbrace{\bl{[a\mbox{-}z\,.]^{\{2..5\}}}}_{\textrm{top-level domain}}$)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   702
\end{center}\bigskip
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   703
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   704
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   705
\begin{center}\small
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   706
\begin{tikzpicture}[node distance=1.1cm,every node/.style={minimum size=7mm}]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   707
\node (r1)  {\bl{$r_1$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   708
\node (r2) [right=of r1] {\bl{$r_2$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   709
\draw[->,-{Computer Modern Rightarrow[length=3mm, width=4mm]},line width=1mm]  (r1) -- (r2) node[above,midway] {\bl{$der\,a$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   710
\node (r3) [right=of r2] {\bl{$r_3$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   711
\draw[->,-{Computer Modern Rightarrow[length=3mm, width=4mm]},line width=1mm]  (r2) -- (r3) node[above,midway] {\bl{$der\,b$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   712
\node (r4) [right=of r3] {\bl{$r_4$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   713
\draw[->,-{Computer Modern Rightarrow[length=3mm, width=4mm]},line width=1mm]  (r3) -- (r4) node[above,midway] {\bl{$der\,c$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   714
\draw (r4) node[anchor=west] {\;\raisebox{3mm}{\bl{$nullable$}}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   715
\node (v4) [below=of r4] {\bl{$v_4$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   716
\draw[->,-{Computer Modern Rightarrow[length=3mm, width=4mm]},line width=1mm]  (r4) -- (v4);
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   717
\node (v3) [left=of v4] {\bl{$v_3$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   718
\draw[->,-{Computer Modern Rightarrow[length=3mm, width=4mm]},line width=1mm]  (v4) -- (v3) node[below,midway] {\bl{$inj\,c$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   719
\node (v2) [left=of v3] {\bl{$v_2$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   720
\draw[->,-{Computer Modern Rightarrow[length=3mm, width=4mm]},line width=1mm]  (v3) -- (v2) node[below,midway] {\bl{$inj\,b$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   721
\node (v1) [left=of v2] {\bl{$v_1$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   722
\draw[->,-{Computer Modern Rightarrow[length=3mm, width=4mm]}, line width=1mm]  (v2) -- (v1) node[below,midway] {\bl{$inj\,a$}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   723
%\draw[->,line width=0.5mm]  (r3) -- (v3);
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   724
%\draw[->,line width=0.5mm]  (r2) -- (v2);
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   725
%\draw[->,line width=0.5mm]  (r1) -- (v1);
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   726
\draw (r4) node[anchor=north west] {\;\raisebox{-8mm}{\bl{$mkeps$}}};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   727
\end{tikzpicture}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   728
\end{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   729
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   730
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   731
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   732
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   733
\begin{frame}[c]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   734
\frametitle{Regexes and Values}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   735
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   736
\mbox{Regular expressions and their corresponding values (``lexing trees''):}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   737
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   738
\begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   739
\begin{columns}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   740
\begin{column}{3cm}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   741
\begin{tabular}{@{}rrl@{}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   742
  \bl{$r$} & \bl{$::=$}  & \bl{$\ZERO$}\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   743
           & \bl{$\mid$} & \bl{$\ONE$}   \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   744
           & \bl{$\mid$} & \bl{$c$}          \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   745
           & \bl{$\mid$} & \bl{$r_1 \cdot r_2$}\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   746
           & \bl{$\mid$} & \bl{$r_1 + r_2$}   \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   747
  \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   748
           & \bl{$\mid$} & \bl{$r^*$}         \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   749
  \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   750
  \end{tabular}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   751
\end{column}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   752
\begin{column}{3cm}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   753
\begin{tabular}{@{\hspace{-7mm}}rrl@{}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   754
  \bl{$v$} & \bl{$::=$}  & \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   755
           &             & \bl{$Empty$}   \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   756
           & \bl{$\mid$} & \bl{$Char(c)$}          \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   757
           & \bl{$\mid$} & \bl{$Seq(v_1,v_2)$}\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   758
           & \bl{$\mid$} & \bl{$Left(v)$}   \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   759
           & \bl{$\mid$} & \bl{$Right(v)$}  \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   760
           & \bl{$\mid$} & \bl{$Stars\,[]$}      \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   761
           & \bl{$\mid$} & \bl{$Stars\,[v_1,\ldots\,v_n]$} \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   762
  \end{tabular}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   763
\end{column}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   764
\end{columns}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   765
\end{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   766
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   767
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   768
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   769
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   770
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   771
\begin{frame}[c]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   772
\frametitle{POSIX Values / Injection}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   773
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   774
\begin{textblock}{12}(1,5)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   775
\begin{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   776
\item Sulzmann and Lu's second phase calculates POSIX values:
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   777
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   778
  \begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   779
  \begin{tabular}{l}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   780
  \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   781
  \bl{$(a + ab) \cdot (bc + c)$} and \bl{$abc$}\\[3mm]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   782
  \bl{$\Rightarrow \;Seq(Right(..ab..), Right(..c..))$}\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   783
  \mbox{}\\  
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   784
  \end{tabular}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   785
  \end{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   786
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   787
\item All is still just simple recursive functions and ``algebraic'' 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   788
  reasoning (easy in theorem provers because people make mistakes)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   789
\end{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   790
\end{textblock}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   791
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   792
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   793
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   794
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   795
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   796
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   797
\begin{frame}[c]{\begin{tabular}{c}\mbox{}\\[15mm]\fontsize{96}{104}\textcolor{red}{\selectfont BUT\ldots}\end{tabular}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   798
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   799
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   800
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   801
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   802
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   803
\begin{frame}[t]
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   804
\frametitle{\mbox{Problems with ders}}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   805
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   806
\textcolor{blue}{
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   807
\small
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   808
\def\ll{\stackrel{der\,a}{\longrightarrow}}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   809
\begin{center}
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   810
\begin{tabular}{@{\hspace{0mm}}rll}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   811
$(a + aa)^*$ & $\ll$ & $(\ONE + \ONE{}a) \cdot (a + aa)^*$\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   812
& $\ll$ & $(\ZERO + \ZERO{}a + \ONE) \cdot (a + aa)^* \;+\; (\ONE + \ONE{}a) \cdot (a + aa)^*$\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   813
& $\ll$ & $(\ZERO + \ZERO{}a + \ZERO) \cdot (a + aa)^* + (\ONE + \ONE{}a) \cdot (a + aa)^* \;+\; $\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   814
& & $\qquad(\ZERO + \ZERO{}a + \ONE) \cdot (a + aa)^* + (\ONE + \ONE{}a) \cdot (a + aa)^*$\\
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   815
& $\ll$ & \ldots\\ \hspace{15mm}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   816
\end{tabular}
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   817
\end{center}}
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   818
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   819
\begin{textblock}{13.5}(1.5,12)
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   820
(regular expressions of sizes 98, 169, 283, 468, 767, \ldots)
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
   821
\end{textblock}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   822
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   823
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
   824
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   825
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   826
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
   827
\begin{frame}[c]
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   828
\frametitle{Possible Simplifications}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   829
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   830
\def\arraystretch{1.05}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   831
\begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   832
\begin{tabular}{l@{\hspace{2mm}}c@{\hspace{2mm}}l@{\hspace{8mm}}l}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   833
\bl{$r \cdot \ZERO$} & $\mapsto$ & \bl{$\ZERO$} & \\ 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   834
\bl{$\ZERO \cdot r$} & $\mapsto$ & \bl{$\ZERO$} & \\ 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   835
\bl{$r \cdot \ONE$} & $\mapsto$ & \bl{$r$} & \\ 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   836
\bl{$\ONE \cdot r$} & $\mapsto$ & \bl{$r$} & \\ 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   837
\bl{$r + \ZERO$} & $\mapsto$ & \bl{$r$}   & \\ 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   838
\bl{$\ZERO + r$} & $\mapsto$ & \bl{$r$}   & \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   839
\bl{$r + r$} & $\mapsto$ & \bl{$r$} &
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   840
\end{tabular}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   841
\end{center}\medskip
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   842
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   843
\small
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   844
\hspace{5mm}\mbox{this gets you off the ground, but there are still catastrophic cases}\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   845
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   846
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   847
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   848
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   849
\begin{frame}[t]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   850
\frametitle{\,Antimirov's Partial Derivatives}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   851
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   852
\begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   853
\bl{$pder\;s\;r \;\dn\; \{\only<1>{r_1, r_2, \ldots, r_n}\only<2->{\underbrace{r_1, r_2, \ldots, r_n}_{}}\}$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   854
\end{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   855
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   856
\only<2->{
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   857
\begin{textblock}{6}(5,5)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   858
\begin{bubble}[7cm]\it
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   859
    Antimirov impressively showed that there can only be 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   860
    a maximum of \bl{$n$}-terms where \bl{$n$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   861
    is the number of character occurrences in \bl{$r$}.
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   862
\end{bubble}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   863
\end{textblock}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   864
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   865
\only<3>{
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   866
\begin{textblock}{11}(1,11)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   867
\begin{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   868
\item pie in the sky / un rêve éveillé:\smallskip\\ 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   869
\begin{quotation}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   870
\noindent{}Brzozowski derivatives plus some clever-to-be-worked-out simplification grow regular expressions 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   871
at maximum \underline{cubically}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   872
\end{quotation} 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   873
\end{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   874
\end{textblock}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   875
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   876
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   877
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   878
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   879
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   880
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   881
\begin{frame}{Two White Knights ??}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   882
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   883
\only<2->{%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   884
\begin{textblock}{12}(1,3)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   885
\begin{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   886
\item A Play on Regular Expressions (functional pearl at ICFP 2010) by S.~Fischer, F.~Huch and T.~Wilke
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   887
\item Regular Expressions, Au Point (technical report in arXiv 2010) by A.~Asperti, C.~Sacerdoti 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   888
  Coen and E.~Tassi
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   889
\end{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   890
\end{textblock}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   891
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   892
\only<3-6>{%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   893
\begin{textblock}{12}(1,8)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   894
\begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   895
  shift:\;\; \bl{$a\cdot (b\cdot c)$} \;\;and\;\; 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   896
  \only<3>{``$\textcolor{gray}{abc}$''}%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   897
  \only<4>{``$\textcolor{red}{a}\textcolor{gray}{bc}$''}%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   898
  \only<5>{``$\textcolor{red}{ab}\textcolor{gray}{c}$''}%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   899
  \only<6>{``$\textcolor{red}{abc}$''}\\[3mm]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   900
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   901
  \begin{tikzpicture}[nodes={circle,draw}, level distance=1cm, ultra thick]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   902
  \node {$\cdot$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   903
    child { node{\makebox[0.8em]{\bl{$\alt<4>{\textcolor{black}{\bullet}a}{\phantom{\bullet}a}$}}}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   904
    child { node{$\cdot$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   905
      child { node{\makebox[0.8em]{\bl{$\alt<5>{\textcolor{black}{\bullet}b}{\phantom{\bullet}b}$}}}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   906
      child { node{\makebox[0.8em]{\bl{$\alt<6>{\textcolor{black}{\bullet}c}{\phantom{\bullet}c}$}}}} 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   907
    };
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   908
\end{tikzpicture}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   909
\end{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   910
\end{textblock}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   911
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   912
\only<7->{%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   913
\begin{textblock}{12}(1,8)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   914
\begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   915
  shift:\;\; \bl{$ac + ab$} \;\;and\;\; 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   916
  \only<7>{``$\textcolor{gray}{ab}$''}%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   917
  \only<8>{``$\textcolor{red}{a}\textcolor{gray}{b}$''}%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   918
  \only<9>{``$\textcolor{red}{ab}$''}\\[3mm]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   919
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   920
  \begin{tikzpicture}[nodes={circle,draw}, level distance=1.5cm, ultra thick]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   921
  \node {$+$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   922
    child { node{\makebox[0.8em]{\bl{$\alt<8>{\textcolor{black}{\bullet}ac}{a\phantom{\bullet}c}$}}}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   923
    child { node{\only<7>{\makebox[0.8em]{\bl{$\phantom{\bullet}ab$}}}%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   924
                 \only<8>{\makebox[0.8em]{\bl{$\textcolor{black}{\bullet}ab$}}}%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   925
                 \only<9>{\makebox[0.8em]{\bl{$a\textcolor{black}{\bullet}b$}}}}%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   926
                };
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   927
\end{tikzpicture}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   928
\end{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   929
\end{textblock}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   930
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   931
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   932
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   933
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   934
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   935
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   936
\begin{frame}{Marked Regular Expressions}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   937
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   938
\begin{textblock}{12}(1,3)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   939
\begin{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   940
\item \ldots{}work great for the basic regexes
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   941
\item problems already with \bl{$\&$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   942
\item no solution yet how to do \bl{$r^{\{n\}}$} efficiently
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   943
\item not to mention generating POSIX values
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   944
\end{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   945
\end{textblock}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   946
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   947
\begin{textblock}{12}(1,8)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   948
\begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   949
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   950
  \begin{tikzpicture}[nodes={circle,draw}, level distance=1.2cm, ultra thick]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   951
  \node {$+$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   952
    child { node{{\makebox[0.8em]{\bl{$\textcolor{black}{\bullet}a$}}}}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   953
    child { node{$\cdot$}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   954
      child { node{\bl{$\ONE$}}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   955
      child { node{\makebox[0.8em]{\bl{$\textcolor{black}{\bullet}a$}}}} 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   956
    };
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   957
\end{tikzpicture}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   958
\end{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   959
\end{textblock}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   960
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   961
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   962
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   963
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   964
\begin{frame}{More Interesting Marks}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   965
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   966
\begin{textblock}{12}(1,3)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   967
\begin{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   968
\item Our version of the marked algorithm:
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   969
\item[] Marks are of the form $\bullet_s$ where $s$ is a string
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   970
\end{itemize}\bigskip
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   971
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   972
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   973
\begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   974
\begin{tabular}{ll@{\hspace{10mm}}l}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   975
1) & $\left|_{\{\bullet_{abc}\}} \bl{(a + ab)  \cdot (c + bc)}\right.$ & (start)\medskip\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   976
2) & $\bl{(a + ab)}\left|_{\{\bullet_{bc}, \bullet_{c}\}}  \bl{\;\cdot\; (c + bc)}\right.$ & (after first sequence)\medskip\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   977
3) & $\bl{(a + ab)  \cdot (c + bc)} \left|_{\{\bullet_{[]}, \bullet_{[]}\}}\right.$ & (end)\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   978
\end{tabular}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   979
\end{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   980
\end{textblock}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   981
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   982
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   983
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   984
\newcommand{\shifts}{\textit{shifts}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   985
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   986
\begin{frame}{Shifting Sets of Marks}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   987
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   988
\begin{textblock}{12}(1,1)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   989
\begin{center}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   990
\bl{\begin{tabular}{@{}lcl@{}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   991
$\shifts\;ms\;\ZERO$ & $\dn$ & $\{\}$\\    
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   992
$\shifts\;ms\;\ONE$  & $\dn$ & $\{\}$\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   993
$\shifts\;ms\;c$ & $\dn$ & $\{\bullet_s \mid\bullet_{c::s}\in ms\}$\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   994
$\shifts\;ms\;(r_1+r_2)$ & $\dn$ & $\shifts\;ms\;r_1 \;\cup\; \shifts\;ms\;r_2$\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   995
$\shifts\;ms\;(r_1\cdot r_2)$ & $\dn$ & let $ms' = \shifts\;ms\;r_1$ in\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   996
& & 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   997
$\;\;\begin{cases}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   998
(\shifts\;(ms' \;\cup\; ms)\;r_2) \;\cup\; ms' &  \textit{if}\;r_1 \wedge r_2 \;\textit{null}\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
   999
(\shifts\;(ms' \;\cup\; ms)\;r_2) & \textit{if}\;r_1\;\textit{null}\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1000
(\shifts\;ms'\;r_2) \;\cup\; ms' & \textit{if}\;r_2\;\textit{null}\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1001
(\shifts\;ms'\;r_2) & \textit{o'wise} \\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1002
\end{cases}$\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1003
$\shifts\;ms\;(r^*)$ & $\dn$ & let $ms' = \shifts\;ms\;r$ in\\   
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1004
& & $\;\;\text{if}\; ms' = \{\} \;\text{then}\; \{\} \;\text{else}\;\; \shifts\;ms'\;(r^*) \;\cup\;ms'$\\  
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1005
\end{tabular}}    
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1006
\end{center} 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1007
\end{textblock}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1008
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1009
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1010
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1011
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1012
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1013
\begin{frame}{Matcher}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1014
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1015
\[\bl{\begin{array}{lcl}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1016
\textit{matcher}\;s\;r & \dn & \textit{if}\;s = []\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1017
                       &     &\textit{then}\;\textit{nullable}(r)\\
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1018
                       &     &\textit{else}\;\bullet_{[]} \in \shifts\;\{\bullet_s\}\; r
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1019
\end{array}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1020
\]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1021
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1022
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1023
\begin{textblock}{12}(1,10)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1024
\begin{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1025
\item can be made to work for \bl{$r_1 \,\&\, r_2$} and \bl{$r^{\{n\}}$} etc
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1026
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1027
\item no idea if this is already known
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1028
\item Meshal has now a good idea how to extract POSIX values
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1029
\end{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1030
\end{textblock}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1031
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1032
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1033
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1034
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1035
\begin{frame}[c]
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
  1036
\frametitle{\mbox{Conclusion}}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1037
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1038
\begin{textblock}{12}(1,3)
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1039
\begin{itemize}
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1040
\item The beauty of all this is that this only involves functional 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1041
  programs that can be conveniently reasoned about in theorem provers 
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1042
  (opinions differ, but this is \textbf{not} the case with automata)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1043
\item POSIX lexing can be done via an extension by Sulzmann and Lu or using our \shifts{}\bigskip
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1044
\item How surprising that one can still do new work on regular expressions
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
  1045
\end{itemize}
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1046
\end{textblock}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1047
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1048
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1049
\end{frame}
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
  1050
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1051
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1052
\begin{frame}[c]{\begin{tabular}{c}\mbox{}\\[15mm]\fontsize{48}{52}\textcolor{red}{\selectfont Questions}\end{tabular}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1053
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1054
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1055
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1056
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
  1057
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1058
913
8f07908dec8d updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 906
diff changeset
  1059
\begin{frame}<1-10>
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
  1060
\end{frame}
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1061
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1062
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1063
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
  1064
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1065
\end{document}
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1066
1039
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1067
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1068
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1069
\begin{frame}[t]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1070
\frametitle{\begin{tabular}{@ {\hspace{8mm}}c@ {}}Fast Regular Expression Matching\end{tabular}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1071
\mbox{}\\[1mm]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1072
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1073
\begin{columns}[t,onlytextwidth]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1074
\begin{column}{.2\textwidth}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1075
\raisebox{-10mm}{
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1076
\begin{tikzpicture}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1077
  \begin{axis}[
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1078
    xlabel={size of strings},
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1079
    x label style={at={(0.45,-0.16)}},
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1080
    ylabel={time in secs},
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1081
    enlargelimits=false,
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1082
    xtick={0,10,...,30},
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1083
    xmax=35,
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1084
    ymax=35,
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1085
    ytick={0,10,...,30},
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1086
    scaled ticks=false,
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1087
    axis lines=left,
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1088
    width=5cm,
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1089
    height=4.5cm,
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1090
    legend entries={Python,JavaScript,Swift,Dart},
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1091
    legend style={font=\footnotesize,at={(0.45,-0.48)},anchor=north},
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1092
    legend cell align=left]
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1093
\addplot[blue,mark=*, mark options={fill=white}] table {re-python2.data};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1094
\addplot[red,mark=*, mark options={fill=white}] table {re-js.data};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1095
\addplot[magenta,mark=*, mark options={fill=white}] table {re-swift.data};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1096
\addplot[brown,mark=*, mark options={fill=white}] table {re-dart.data};
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1097
\end{axis}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1098
\end{tikzpicture}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1099
\end{column}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1100
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1101
\end{columns}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1102
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1103
\begin{textblock}{4}(3.5,3.2)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1104
{\bl{\texttt{(a*)*$\cdot$b}}}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1105
\end{textblock}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1106
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1107
\begin{textblock}{7.5}(8,3)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1108
\begin{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1109
\item use \textbf{Brzozowski derivatives} for regex matching rather\\ than NFAs/DFAs% and lexing
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1110
\item based on work by \textbf{Christian Urban} and \textbf{Roy Dyckhoff}\bigskip
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1111
\item applications in network security (traffic filtering)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1112
\item formal verification of correctness and speed (\textbf{Isabelle} theorem prover)
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1113
\end{itemize}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1114
\end{textblock}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1115
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1116
\end{frame}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1117
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1118
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1119
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1120
%%\end{document}
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1121
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1122
86d59b074abe updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 959
diff changeset
  1123
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
  1124
%%% Local Variables:
876
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1125
%%% mode: latex
09e4ca6d00a0 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 871
diff changeset
  1126
%%% TeX-master: t
959
787ef75ec006 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 913
diff changeset
  1127
%%% End: