videos/02-algo1.srt
author Christian Urban <christian.urban@kcl.ac.uk>
Sat, 03 Oct 2020 00:51:47 +0100
changeset 769 b153de5339bc
parent 766 ef7a7c4b24b7
permissions -rw-r--r--
updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     1
1
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     2
00:00:05,880 --> 00:00:09,700
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     3
Welcome back.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     4
Remember this slide.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     5
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     6
2
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     7
00:00:09,700 --> 00:00:11,500
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
     8
This slide said what is
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     9
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    10
3
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    11
00:00:11,500 --> 00:00:14,500
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    12
our regular expression matcher
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    13
actually supposed to do?
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    14
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    15
4
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    16
00:00:14,500 --> 00:00:16,570
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    17
It will take two arguments,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    18
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    19
5
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    20
00:00:16,570 --> 00:00:18,670
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    21
a regular expression r and a string s.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    22
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    23
6
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    24
00:00:18,670 --> 00:00:21,580
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    25
And it's supposed to say yes,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    26
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    27
7
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    28
00:00:21,580 --> 00:00:23,440
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    29
the regular expression matches
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    30
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    31
8
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    32
00:00:23,440 --> 00:00:26,920
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    33
the string if and only
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    34
if the string is in
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    35
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    36
9
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    37
00:00:26,920 --> 00:00:28,855
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    38
the language of r.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    39
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    40
10
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    41
00:00:28,855 --> 00:00:32,410
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    42
And if the string is not
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    43
in the language of r,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    44
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    45
11
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    46
00:00:32,410 --> 00:00:35,515
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    47
then our algorithm has to say no.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    48
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    49
12
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    50
00:00:35,515 --> 00:00:37,210
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    51
And we can't use
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    52
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    53
13
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    54
00:00:37,210 --> 00:00:39,565
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    55
this specification
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    56
directly because remember,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    57
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    58
14
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    59
00:00:39,565 --> 00:00:43,305
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    60
this L sometimes
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    61
produces infinite sets.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    62
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    63
15
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    64
00:00:43,305 --> 00:00:47,585
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    65
And we can't test whether a
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    66
string is in infinite set,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    67
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    68
16
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    69
00:00:47,585 --> 00:00:50,090
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    70
at least not easily.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    71
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    72
17
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    73
00:00:50,090 --> 00:00:52,340
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    74
And so what we have to do
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    75
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    76
18
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    77
00:00:52,340 --> 00:00:54,260
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    78
instead is we have
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    79
to be a bit more
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    80
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    81
19
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    82
00:00:54,260 --> 00:00:57,050
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    83
clever and implement
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    84
some operations
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    85
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    86
20
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    87
00:00:57,050 --> 00:00:59,284
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    88
on regular expressions instead,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    89
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    90
21
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    91
00:00:59,284 --> 00:01:03,275
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
    92
because regular expressions
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    93
are always finite trees.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    94
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    95
22
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    96
00:01:03,275 --> 00:01:05,870
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    97
I should say the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    98
person who has been
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    99
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   100
23
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   101
00:01:05,870 --> 00:01:08,150
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   102
clever is called Brzozowski.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   103
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   104
24
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   105
00:01:08,150 --> 00:01:11,435
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   106
It's his algorithm
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   107
I'm introducing here.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   108
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   109
25
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   110
00:01:11,435 --> 00:01:15,515
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   111
And his algorithm consists
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   112
of two functions.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   113
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   114
26
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   115
00:01:15,515 --> 00:01:17,840
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   116
One is called
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   117
nullable and it takes
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   118
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   119
27
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   120
00:01:17,840 --> 00:01:20,104
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   121
a regular expression as argument.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   122
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   123
28
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   124
00:01:20,104 --> 00:01:24,155
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   125
And the idea is that
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   126
this function nullable is
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   127
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   128
29
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   129
00:01:24,155 --> 00:01:26,450
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   130
testing whether
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   131
the regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   132
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   133
30
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   134
00:01:26,450 --> 00:01:27,950
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   135
can match the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   136
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   137
31
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   138
00:01:27,950 --> 00:01:30,305
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   139
So 0 cannot match any string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   140
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   141
32
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   142
00:01:30,305 --> 00:01:33,275
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   143
So it cannot match the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   144
empty string either.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   145
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   146
33
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   147
00:01:33,275 --> 00:01:35,465
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   148
So that's defined as false.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   149
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   150
34
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   151
00:01:35,465 --> 00:01:37,775
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   152
This regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   153
the whole purpose
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   154
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   155
35
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   156
00:01:37,775 --> 00:01:39,680
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   157
is that it can match
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   158
the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   159
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   160
36
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   161
00:01:39,680 --> 00:01:41,645
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   162
So it's defined as true.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   163
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   164
37
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   165
00:01:41,645 --> 00:01:44,599
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   166
If a regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   167
can match a character,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   168
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   169
38
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   170
00:01:44,599 --> 00:01:47,045
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   171
then it cannot match
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   172
the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   173
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   174
39
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   175
00:01:47,045 --> 00:01:49,445
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   176
So that is defined as false.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   177
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   178
40
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   179
00:01:49,445 --> 00:01:53,180
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   180
If an alternative can
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   181
match the empty string,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   182
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   183
41
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   184
00:01:53,180 --> 00:01:56,960
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   185
then either r1 can
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   186
match the empty string,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   187
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   188
42
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   189
00:01:56,960 --> 00:01:59,720
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   190
or r2 can match the empty string.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   191
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   192
43
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   193
00:01:59,720 --> 00:02:03,110
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   194
So either nullable
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   195
of r1 has to hold,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   196
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   197
44
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   198
00:02:03,110 --> 00:02:06,945
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   199
or nullable of r2 has to hold.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   200
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   201
45
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   202
00:02:06,945 --> 00:02:09,925
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   203
In this sequence, it's
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   204
the other way around.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   205
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   206
46
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   207
00:02:09,925 --> 00:02:12,790
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   208
If this regular expression can
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   209
match the empty string,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   210
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   211
47
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   212
00:02:12,790 --> 00:02:16,615
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   213
then r1 has to be able to
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   214
match the empty string,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   215
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   216
48
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   217
00:02:16,615 --> 00:02:20,290
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   218
and r2 has to be able to
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   219
match the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   220
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   221
49
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   222
00:02:20,290 --> 00:02:22,555
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   223
So here it's just the opposite.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   224
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   225
50
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   226
00:02:22,555 --> 00:02:25,660
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   227
In one case it is or and
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   228
the other case it is and.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   229
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   230
51
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   231
00:02:25,660 --> 00:02:27,970
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   232
The star regular
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   233
expression can match
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   234
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   235
52
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   236
00:02:27,970 --> 00:02:30,445
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   237
always the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   238
So that is true.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   239
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   240
53
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   241
00:02:30,445 --> 00:02:33,340
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   242
So this is a simple
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   243
recursive function
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   244
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   245
54
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   246
00:02:33,340 --> 00:02:37,179
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   247
and it should not be too
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   248
difficult to implement.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   249
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   250
55
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   251
00:02:37,179 --> 00:02:42,025
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   252
Okay, this nullable function
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   253
that is easy-peasy.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   254
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   255
56
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   256
00:02:42,025 --> 00:02:44,604
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   257
The second function, however,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   258
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   259
57
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   260
00:02:44,604 --> 00:02:49,155
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   261
is a bit more involved and
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   262
that's just to be expected.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   263
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   264
58
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   265
00:02:49,155 --> 00:02:53,075
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   266
Remember people working in
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   267
this area already for decades.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   268
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   269
59
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   270
00:02:53,075 --> 00:02:57,305
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   271
If they have some problems
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   272
with runtime, for example,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   273
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   274
60
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   275
00:02:57,305 --> 00:02:58,940
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   276
we can't expect that 
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   277
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   278
61
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   279
00:02:58,940 --> 00:03:03,260
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   280
a simple fix will solve all
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   281
the problems in the world.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   282
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   283
62
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   284
00:03:03,260 --> 00:03:06,530
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   285
So I admit the second
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   286
function is a bit more
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   287
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   288
63
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   289
00:03:06,530 --> 00:03:10,085
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   290
complicated and make sure
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   291
that you understand it.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   292
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   293
64
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   294
00:03:10,085 --> 00:03:12,140
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   295
And it also just
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   296
shows this Brzozowski
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   297
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   298
65
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   299
00:03:12,140 --> 00:03:14,345
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   300
is a very clever guy.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   301
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   302
66
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   303
00:03:14,345 --> 00:03:15,800
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   304
Actually, I have to say he was
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   305
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   306
67
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   307
00:03:15,800 --> 00:03:17,720
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   308
a clever guy because
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   309
I think he either
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   310
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   311
68
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   312
00:03:17,720 --> 00:03:21,650
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   313
died last year or
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   314
the year before.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   315
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   316
69
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   317
00:03:21,650 --> 00:03:25,505
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   318
And he came up with this
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   319
algorithm already in 1964.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   320
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   321
70
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   322
00:03:25,505 --> 00:03:27,260
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   323
It somehow got lost,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   324
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   325
71
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   326
00:03:27,260 --> 00:03:30,305
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   327
but has been rediscovered
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   328
in the last ten years.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   329
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   330
72
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   331
00:03:30,305 --> 00:03:34,685
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   332
So the idea of the second
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   333
function is the following.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   334
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   335
73
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   336
00:03:34,685 --> 00:03:38,120
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   337
Imagine you have a
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   338
regular expression and it can
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   339
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   340
74
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   341
00:03:38,120 --> 00:03:41,930
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   342
match a string of the
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   343
form c followed by s.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   344
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   345
75
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   346
00:03:41,930 --> 00:03:44,810
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   347
So the c is the first
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   348
character of that string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   349
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   350
76
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   351
00:03:44,810 --> 00:03:48,605
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   352
So I imagine that r can
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   353
match this kind of string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   354
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   355
77
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   356
00:03:48,605 --> 00:03:50,330
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   357
The question is now,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   358
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   359
78
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   360
00:03:50,330 --> 00:03:52,400
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   361
what would a regular
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   362
expression look
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   363
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   364
79
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   365
00:03:52,400 --> 00:03:54,695
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   366
like that can match just
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   367
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   368
80
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   369
00:03:54,695 --> 00:03:57,140
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   370
s. You probably remember
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   371
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   372
81
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   373
00:03:57,140 --> 00:03:59,300
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   374
that from the semantic
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   375
derivative,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   376
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   377
82
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   378
00:03:59,300 --> 00:04:00,860
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   379
there was also
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   380
something of chopping
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   381
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   382
83
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   383
00:04:00,860 --> 00:04:02,210
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   384
off the first character.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   385
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   386
84
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   387
00:04:02,210 --> 00:04:04,940
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   388
Here it's the same.
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   389
If a regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   390
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   391
85
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   392
00:04:04,940 --> 00:04:07,835
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   393
can match a string
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   394
starting with a c,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   395
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   396
86
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   397
00:04:07,835 --> 00:04:11,090
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   398
we're looking for a regular
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   399
expression which can match
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   400
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   401
87
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   402
00:04:11,090 --> 00:04:15,215
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   403
the rest of the string where
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   404
the c has been chopped off.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   405
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   406
88
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   407
00:04:15,215 --> 00:04:17,690
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   408
And this operation will be called
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   409
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   410
89
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   411
00:04:17,690 --> 00:04:21,049
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   412
the derivative of a
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   413
regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   414
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   415
90
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   416
00:04:21,049 --> 00:04:22,205
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   417
And it will also take
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   418
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   419
91
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   420
00:04:22,205 --> 00:04:25,460
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   421
a character as argument
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   422
and a regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   423
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   424
92
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   425
00:04:25,460 --> 00:04:28,730
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   426
And in contrast to
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   427
the semantic 
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   428
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   429
93
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   430
00:04:28,730 --> 00:04:31,310
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   431
derivative, which works
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   432
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   433
94
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   434
00:04:31,310 --> 00:04:34,430
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   435
over languages or
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   436
sets of strings,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   437
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   438
95
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   439
00:04:34,430 --> 00:04:39,620
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   440
this derivative works
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   441
over regular expressions.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   442
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   443
96
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   444
00:04:39,620 --> 00:04:41,330
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   445
Okay, here's this function.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   446
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   447
97
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   448
00:04:41,330 --> 00:04:43,970
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   449
It's defined recursively over
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   450
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   451
98
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   452
00:04:43,970 --> 00:04:46,370
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   453
the structure of regular expressions.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   454
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   455
99
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   456
00:04:46,370 --> 00:04:48,814
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   457
The first argument
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   458
is the character,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   459
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   460
100
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   461
00:04:48,814 --> 00:04:52,700
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   462
and the second one is
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   463
a regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   464
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   465
101
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   466
00:04:52,700 --> 00:04:56,510
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   467
And remember the idea
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   468
is we're looking for
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   469
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   470
102
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   471
00:04:56,510 --> 00:05:00,680
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   472
a regular expression that
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   473
can match everything
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   474
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   475
103
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   476
00:05:00,680 --> 00:05:03,125
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   477
this regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   478
as argument can match
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   479
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   480
104
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   481
00:05:03,125 --> 00:05:07,040
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   482
except for the c. So now let's
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   483
look at this first case.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   484
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   485
105
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   486
00:05:07,040 --> 00:05:10,550
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   487
So this reg expression
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   488
cannot match any string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   489
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   490
106
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   491
00:05:10,550 --> 00:05:14,270
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   492
So it certainly cannot
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   493
match any string starting
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   494
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   495
107
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   496
00:05:14,270 --> 00:05:16,910
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   497
a c. So we have to look
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   498
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   499
108
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   500
00:05:16,910 --> 00:05:20,090
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   501
for a regular expression which
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   502
can not match anything.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   503
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   504
109
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   505
00:05:20,090 --> 00:05:22,700
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   506
Well, that's the purpose
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   507
of this regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   508
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   509
110
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   510
00:05:22,700 --> 00:05:24,815
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   511
so we define it as 0.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   512
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   513
111
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   514
00:05:24,815 --> 00:05:28,130
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   515
In the next case,
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   516
this regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   517
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   518
112
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   519
00:05:28,130 --> 00:05:30,440
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   520
can match the empty string,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   521
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   522
113
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   523
00:05:30,440 --> 00:05:33,440
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   524
but it cannot match
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   525
any string that starts
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   526
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   527
114
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   528
00:05:33,440 --> 00:05:36,350
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   529
with c. So also in this case,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   530
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   531
115
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   532
00:05:36,350 --> 00:05:39,560
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   533
we just define it as
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   534
the regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   535
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   536
116
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   537
00:05:39,560 --> 00:05:41,615
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   538
which cannot match anything.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   539
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   540
117
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   541
00:05:41,615 --> 00:05:45,170
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   542
In the next case, this
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   543
c is the argument to
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   544
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   545
118
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   546
00:05:45,170 --> 00:05:48,335
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   547
the derivative and this d
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   548
is the regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   549
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   550
119
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   551
00:05:48,335 --> 00:05:50,225
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   552
So now there are two cases.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   553
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   554
120
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   555
00:05:50,225 --> 00:05:53,525
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   556
If this c and this d
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   557
is actually equal,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   558
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   559
121
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   560
00:05:53,525 --> 00:05:55,970
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   561
Thaat means this regular
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   562
expression can match
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   563
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   564
122
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   565
00:05:55,970 --> 00:05:59,240
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   566
a string which just contains c.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   567
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   568
123
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   569
00:05:59,240 --> 00:06:01,505
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   570
So if we strip that off,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   571
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   572
124
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   573
00:06:01,505 --> 00:06:04,790
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   574
what remains is
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   575
the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   576
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   577
125
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   578
00:06:04,790 --> 00:06:06,890
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   579
What is a regular expression
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   580
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   581
126
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   582
00:06:06,890 --> 00:06:09,170
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   583
look like that can
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   584
match the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   585
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   586
127
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   587
00:06:09,170 --> 00:06:11,915
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   588
Well, that's the
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   589
purpose of the 1.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   590
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   591
128
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   592
00:06:11,915 --> 00:06:15,440
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   593
And if c is not equal to d,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   594
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   595
129
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   596
00:06:15,440 --> 00:06:17,630
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   597
then this regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   598
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   599
130
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   600
00:06:17,630 --> 00:06:19,220
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   601
cannot match anything
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   602
which starts with
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   603
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   604
131
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   605
00:06:19,220 --> 00:06:23,780
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   606
a c. So again it will
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   607
be defined as just 0.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   608
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   609
132
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   610
00:06:23,780 --> 00:06:29,390
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   611
Now, the alternative case,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   612
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   613
133
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   614
00:06:29,390 --> 00:06:31,970
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   615
if this regular expression can
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   616
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   617
134
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   618
00:06:31,970 --> 00:06:36,050
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   619
match strings
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   620
starting with c,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   621
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   622
135
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   623
00:06:36,050 --> 00:06:40,820
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   624
then it can either be
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   625
matched by the r1
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   626
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   627
136
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   628
00:06:40,820 --> 00:06:44,495
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   629
or it can be matched by the r2.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   630
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   631
137
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   632
00:06:44,495 --> 00:06:50,090
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   633
If the r1 can match c
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   634
and then following a string,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   635
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   636
138
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   637
00:06:50,090 --> 00:06:53,975
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   638
then we just have to recursively
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   639
call the derivative for
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   640
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   641
139
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   642
00:06:53,975 --> 00:06:56,570
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   643
r1 to get a regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   644
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   645
140
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   646
00:06:56,570 --> 00:06:59,135
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   647
that can match the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   648
rest of the string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   649
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   650
141
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   651
00:06:59,135 --> 00:07:02,690
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   652
And the same we can do with r2.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   653
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   654
142
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   655
00:07:02,690 --> 00:07:06,110
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   656
You can find a regular expression
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   657
which can match everything
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   658
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   659
143
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   660
00:07:06,110 --> 00:07:07,850
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   661
this r2 can match,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   662
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   663
144
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   664
00:07:07,850 --> 00:07:09,710
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   665
starting with c, but
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   666
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   667
145
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   668
00:07:09,710 --> 00:07:12,590
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   669
we are chopping off this c. 
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   670
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   671
146
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   672
00:07:12,590 --> 00:07:16,370
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   673
So now if you have to find
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   674
the regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   675
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   676
147
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   677
00:07:16,370 --> 00:07:20,030
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   678
which can match all the strings
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   679
where c is chopped off,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   680
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   681
148
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   682
00:07:20,030 --> 00:07:22,295
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   683
then we just have to
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   684
take the alternative
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   685
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   686
149
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   687
00:07:22,295 --> 00:07:24,965
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   688
of these two derivatives.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   689
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   690
150
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   691
00:07:24,965 --> 00:07:29,390
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   692
Now to sequence case.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   693
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   694
151
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   695
00:07:29,390 --> 00:07:33,005
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   696
This sequence case is the
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   697
most complicated one.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   698
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   699
152
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   700
00:07:33,005 --> 00:07:35,180
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   701
And let's look first at
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   702
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   703
153
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   704
00:07:35,180 --> 00:07:39,335
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   705
the second case, in the
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   706
else branch.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   707
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   708
154
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   709
00:07:39,335 --> 00:07:42,830
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   710
So if this
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   711
regular expression
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   712
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   713
155
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   714
00:07:42,830 --> 00:07:46,145
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   715
can match a string
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   716
starting with c,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   717
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   718
156
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   719
00:07:46,145 --> 00:07:48,155
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   720
then the following
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   721
must have happened.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   722
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   723
157
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   724
00:07:48,155 --> 00:07:51,905
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   725
First, the r1 must have matched
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   726
a string starting with c
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   727
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   728
158
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   729
00:07:51,905 --> 00:07:56,420
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   730
and then anything coming
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   731
afterwards with r2.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   732
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   733
159
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   734
00:07:56,420 --> 00:07:59,660
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   735
So in this case I only
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   736
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   737
160
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   738
00:07:59,660 --> 00:08:03,260
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   739
have to call this
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   740
derivative for this r1,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   741
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   742
161
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   743
00:08:03,260 --> 00:08:06,830
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   744
and find the regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   745
which can match everything
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   746
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   747
162
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   748
00:08:06,830 --> 00:08:11,555
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   749
this r1 can match except
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   750
for this c chopped off.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   751
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   752
163
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   753
00:08:11,555 --> 00:08:15,830
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   754
And I have to build the
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   755
sequence derivative of that.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   756
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   757
164
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   758
00:08:15,830 --> 00:08:18,260
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   759
So that's what the else branch says:
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   760
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   761
165
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   762
00:08:18,260 --> 00:08:21,860
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   763
I take the
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   764
derivative of r1 and I
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   765
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   766
166
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   767
00:08:21,860 --> 00:08:23,480
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   768
put the r2 on
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   769
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   770
167
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   771
00:08:23,480 --> 00:08:25,865
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   772
the back because that's
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   773
the rest of the string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   774
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   775
168
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   776
00:08:25,865 --> 00:08:29,240
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   777
So that's the only
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   778
case we have to consider
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   779
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   780
169
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   781
00:08:29,240 --> 00:08:32,750
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   782
this sequence case
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   783
except if not the
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   784
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   785
170
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   786
00:08:32,750 --> 00:08:37,895
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   787
r1 can match the
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   788
c and something else.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   789
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   790
171
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   791
00:08:37,895 --> 00:08:42,965
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   792
But if r1 is matching
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   793
actually the empty string.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   794
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   795
172
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   796
00:08:42,965 --> 00:08:48,890
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   797
In this case actually the r2
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   798
is in charge of matching
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   799
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   800
173
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   801
00:08:48,890 --> 00:08:51,590
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   802
the string starting with c. So in
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   803
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   804
174
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   805
00:08:51,590 --> 00:08:55,490
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   806
this case we have to call
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   807
the derivative for r2.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   808
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   809
175
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   810
00:08:55,490 --> 00:08:57,875
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   811
So that's why we have
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   812
these two cases.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   813
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   814
176
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   815
00:08:57,875 --> 00:09:00,455
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   816
So if r1 is nullable,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   817
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   818
177
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   819
00:09:00,455 --> 00:09:03,245
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   820
then it can match
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   821
the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   822
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   823
178
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   824
00:09:03,245 --> 00:09:05,330
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   825
And we have to
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   826
consider the case that
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   827
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   828
179
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   829
00:09:05,330 --> 00:09:08,045
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   830
this r2 is matching a string
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   831
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   832
180
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   833
00:09:08,045 --> 00:09:10,700
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   834
starting with c. And so we have
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   835
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   836
181
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   837
00:09:10,700 --> 00:09:14,210
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   838
to call the derivative
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   839
for this r2 in this case.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   840
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   841
182
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   842
00:09:14,210 --> 00:09:18,680
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   843
Otherwise, the r1 will
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   844
be in charge of matching
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   845
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   846
183
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   847
00:09:18,680 --> 00:09:20,840
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   848
a part of that
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   849
string starting with
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   850
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   851
184
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   852
00:09:20,840 --> 00:09:24,695
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   853
c. And I have to call the
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   854
derivative on this r1.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   855
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   856
185
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   857
00:09:24,695 --> 00:09:30,670
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   858
I hope this makes sense.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   859
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   860
186
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   861
00:09:30,670 --> 00:09:34,150
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   862
Go over that and
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   863
also the handouts
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   864
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   865
187
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   866
00:09:34,150 --> 00:09:37,465
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   867
again. That case
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   868
is really subtle.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   869
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   870
188
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   871
00:09:37,465 --> 00:09:40,945
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   872
And how do I remember this case?
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   873
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   874
189
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   875
00:09:40,945 --> 00:09:42,430
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   876
Well, I know it's
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   877
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   878
190
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   879
00:09:42,430 --> 00:09:45,310
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   880
an if condition and the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   881
condition is nullable,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   882
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   883
191
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   884
00:09:45,310 --> 00:09:48,160
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   885
then I will always remember
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   886
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   887
192
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   888
00:09:48,160 --> 00:09:53,275
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   889
the else branch where it pushes
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   890
the derivative over the r1.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   891
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   892
193
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   893
00:09:53,275 --> 00:09:55,780
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   894
So I usually write
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   895
down the else branch first,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   896
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   897
194
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   898
00:09:55,780 --> 00:09:59,650
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   899
and then construct
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   900
the then branch by saying,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   901
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   902
195
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   903
00:09:59,650 --> 00:10:01,525
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   904
well, I just repeat this.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   905
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   906
196
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   907
00:10:01,525 --> 00:10:03,760
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   908
And I have to remember
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   909
in that case I
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   910
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   911
197
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   912
00:10:03,760 --> 00:10:06,580
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   913
have to build also
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   914
derivative of r2.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   915
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   916
198
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   917
00:10:06,580 --> 00:10:12,695
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   918
Finally, the star case.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   919
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   920
199
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   921
00:10:12,695 --> 00:10:15,665
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   922
So here again
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   923
we're looking for
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   924
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   925
200
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   926
00:10:15,665 --> 00:10:17,300
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   927
a regular expression which
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   928
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   929
201
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   930
00:10:17,300 --> 00:10:19,745
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   931
can match the string
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   932
starting with c,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   933
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   934
202
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   935
00:10:19,745 --> 00:10:22,355
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   936
except that the c has
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   937
been chopped off.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   938
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   939
203
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   940
00:10:22,355 --> 00:10:28,640
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   941
So if r* has to match
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   942
a string starting with c,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   943
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   944
204
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   945
00:10:28,640 --> 00:10:32,735
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   946
then at least we need one
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   947
copy of this r. 
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   948
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   949
205
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   950
00:10:32,735 --> 00:10:34,310
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   951
So at least one copy of
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   952
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   953
206
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   954
00:10:34,310 --> 00:10:37,010
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   955
this r has matched
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   956
something which starts with
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   957
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   958
207
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   959
00:10:37,010 --> 00:10:38,870
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   960
a c and then afterwards
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   961
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   962
208
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   963
00:10:38,870 --> 00:10:41,570
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   964
come 0 more copies
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   965
of this r*.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   966
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   967
209
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   968
00:10:41,570 --> 00:10:45,530
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   969
What we do there
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   970
is we are trying to find
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   971
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   972
210
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   973
00:10:45,530 --> 00:10:47,960
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   974
the regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   975
which can match
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   976
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   977
211
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   978
00:10:47,960 --> 00:10:50,915
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   979
this first part of the string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   980
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   981
212
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   982
00:10:50,915 --> 00:10:53,255
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   983
However, where the
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
   984
c is chopped off.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   985
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   986
213
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   987
00:10:53,255 --> 00:10:55,130
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   988
And then we just say, well,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   989
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   990
214
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   991
00:10:55,130 --> 00:10:57,050
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   992
the rest has to be
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   993
matched again with
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   994
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   995
215
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   996
00:10:57,050 --> 00:10:59,030
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   997
0 or more copies of
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   998
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   999
216
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1000
00:10:59,030 --> 00:11:02,600
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1001
this r. So that's why
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1002
it's defined like this.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1003
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1004
217
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1005
00:11:02,600 --> 00:11:09,050
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1006
Okay? ...As said, please take care
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1007
with this definition.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1008
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1009
218
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1010
00:11:09,050 --> 00:11:11,435
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1011
That's not so simple.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1012
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1013
219
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1014
00:11:11,435 --> 00:11:13,250
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1015
Once you get a hang of it,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1016
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1017
220
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1018
00:11:13,250 --> 00:11:15,170
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1019
however, it makes perfect sense.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1020
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1021
221
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1022
00:11:15,170 --> 00:11:17,210
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1023
So let me explain it in
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1024
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1025
222
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1026
00:11:17,210 --> 00:11:20,825
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1027
different ways in
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1028
the next slides.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1029
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1030
223
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1031
00:11:20,825 --> 00:11:24,695
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1032
Let's look
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1033
first at some examples.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1034
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1035
224
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1036
00:11:24,695 --> 00:11:27,140
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1037
So here is a regular expression,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1038
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1039
225
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1040
00:11:27,140 --> 00:11:29,390
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1041
r. And let's have
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1042
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1043
226
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1044
00:11:29,390 --> 00:11:32,450
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1045
a look at these three
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1046
derivatives according to a,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1047
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1048
227
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1049
00:11:32,450 --> 00:11:38,405
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1050
b, and c. And we shall do
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1051
the one for a. 
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1052
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1053
228
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1054
00:11:38,405 --> 00:11:42,379
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1055
So here is our regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1056
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1057
229
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1058
00:11:42,379 --> 00:11:45,334
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1059
and I was very generous
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1060
with parentheses.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1061
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1062
230
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1063
00:11:45,334 --> 00:11:48,140
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1064
And the outermost is a star.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1065
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1066
231
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1067
00:11:48,140 --> 00:11:52,550
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1068
So we now build the
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1069
derivative according to a,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1070
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1071
232
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1072
00:11:52,550 --> 00:11:55,474
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1073
the character a, of
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1074
that regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1075
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1076
233
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1077
00:11:55,474 --> 00:11:57,380
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1078
So the first thing we
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1079
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1080
234
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1081
00:11:57,380 --> 00:11:59,555
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1082
have to analyse is the case star.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1083
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1084
235
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1085
00:11:59,555 --> 00:12:04,370
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1086
So here's the regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1087
which we are looking at.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1088
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1089
236
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1090
00:12:04,370 --> 00:12:09,170
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1091
This r and the outermost
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1092
constructor is this star.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1093
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1094
237
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1095
00:12:09,170 --> 00:12:11,510
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1096
If you go back to the definition,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1097
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1098
238
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1099
00:12:11,510 --> 00:12:13,625
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1100
I hope you have it next to you,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1101
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1102
239
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1103
00:12:13,625 --> 00:12:16,340
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1104
then this star-case is defined
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1105
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1106
240
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1107
00:12:16,340 --> 00:12:20,000
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1108
as you're taking just the
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1109
inside of the star
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1110
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1111
241
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1112
00:12:20,000 --> 00:12:23,030
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1113
and apply this derivative and
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1114
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1115
242
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1116
00:12:23,030 --> 00:12:26,765
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1117
leave the r on the
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1118
outside at the end.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1119
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1120
243
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1121
00:12:26,765 --> 00:12:29,990
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1122
Ok. So that's the first step.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1123
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1124
244
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1125
00:12:29,990 --> 00:12:32,030
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1126
Now we have to analyze
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1127
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1128
245
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1129
00:12:32,030 --> 00:12:36,035
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1130
the derivative according to
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1131
a of this regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1132
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1133
246
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1134
00:12:36,035 --> 00:12:38,000
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1135
which is an alternative.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1136
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1137
247
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1138
00:12:38,000 --> 00:12:39,665
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1139
So the outermost is a plus.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1140
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1141
248
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1142
00:12:39,665 --> 00:12:41,375
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1143
Ok, that's very easy again,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1144
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1145
249
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1146
00:12:41,375 --> 00:12:45,185
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1147
we just have to push the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1148
derivative into each component,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1149
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1150
250
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1151
00:12:45,185 --> 00:12:47,705
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1152
into the a followed by b.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1153
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1154
251
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1155
00:12:47,705 --> 00:12:49,145
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1156
And into the second
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1157
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1158
252
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1159
00:12:49,145 --> 00:12:51,185
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1160
alternative, into b. 
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1161
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1162
253
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1163
00:12:51,185 --> 00:12:56,030
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1164
We take the derivative
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1165
of each according to a.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1166
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1167
254
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1168
00:12:56,030 --> 00:13:00,635
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1169
Now this one is a sequence
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1170
regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1171
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1172
255
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1173
00:13:00,635 --> 00:13:02,210
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1174
This was the complicated case.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1175
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1176
256
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1177
00:13:02,210 --> 00:13:04,160
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1178
First of all
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1179
we have to test is
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1180
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1181
257
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1182
00:13:04,160 --> 00:13:07,910
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1183
the first component
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1184
nullable of this sequence?
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1185
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1186
258
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1187
00:13:07,910 --> 00:13:09,200
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1188
Well, that is a,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1189
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1190
259
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1191
00:13:09,200 --> 00:13:12,740
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1192
in this case, a on its
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1193
own is not nullable.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1194
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1195
260
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1196
00:13:12,740 --> 00:13:14,210
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1197
So we are the easy case,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1198
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1199
261
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1200
00:13:14,210 --> 00:13:17,000
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1201
we only have a single derivative
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1202
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1203
262
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1204
00:13:17,000 --> 00:13:19,370
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1205
pushed in the first component.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1206
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1207
263
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1208
00:13:19,370 --> 00:13:25,160
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1209
So we have the derivative
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1210
of a with the character a.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1211
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1212
264
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1213
00:13:25,160 --> 00:13:27,920
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1214
Okay, that's now
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1215
the character case.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1216
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1217
265
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1218
00:13:27,920 --> 00:13:29,720
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1219
And in this case the character
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1220
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1221
266
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1222
00:13:29,720 --> 00:13:31,715
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1223
and the regular expression agree.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1224
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1225
267
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1226
00:13:31,715 --> 00:13:33,890
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1227
So it's defined as one.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1228
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1229
268
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1230
00:13:33,890 --> 00:13:37,550
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1231
Ok? In the other case,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1232
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1233
269
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1234
00:13:37,550 --> 00:13:39,710
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1235
the regular expression is b,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1236
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1237
270
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1238
00:13:39,710 --> 00:13:41,675
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1239
but the characters a.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1240
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1241
271
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1242
00:13:41,675 --> 00:13:46,385
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1243
So in this case
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1244
it's defined as 0.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1245
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1246
272
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1247
00:13:46,385 --> 00:13:50,630
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1248
Okay? So that's what the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1249
derivative would be.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1250
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1251
273
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1252
00:13:50,630 --> 00:13:52,160
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1253
This r is there
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1254
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1255
274
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1256
00:13:52,160 --> 00:13:55,280
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1257
because originally we
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1258
started with a star.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1259
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1260
275
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1261
00:13:55,280 --> 00:13:58,295
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1262
This regular expression is that star.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1263
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1264
276
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1265
00:13:58,295 --> 00:14:02,780
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1266
So the derivative
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1267
according to a
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1268
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1269
277
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1270
00:14:02,780 --> 00:14:07,610
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1271
of that regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1272
is this expression.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1273
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1274
278
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1275
00:14:07,610 --> 00:14:10,970
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1276
We just have to
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1277
substitute this r back in.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1278
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1279
279
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1280
00:14:10,970 --> 00:14:13,745
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1281
Just coming back to this slide.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1282
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1283
280
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1284
00:14:13,745 --> 00:14:16,160
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1285
So far, we only analyzes
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1286
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1287
281
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1288
00:14:16,160 --> 00:14:19,505
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1289
the derivative according
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1290
to a single character.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1291
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1292
282
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1293
00:14:19,505 --> 00:14:23,960
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1294
But we can also very easily
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1295
extend that to whole strings.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1296
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1297
283
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1298
00:14:23,960 --> 00:14:26,360
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1299
So if you build the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1300
derivative according
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1301
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1302
284
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1303
00:14:26,360 --> 00:14:27,905
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1304
to the empty string,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1305
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1306
285
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1307
00:14:27,905 --> 00:14:30,875
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1308
we just return the
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1309
regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1310
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1311
286
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1312
00:14:30,875 --> 00:14:35,585
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1313
If we have a string
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1314
starting with character c,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1315
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1316
287
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1317
00:14:35,585 --> 00:14:37,850
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1318
remember that can
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1319
be any character,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1320
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1321
288
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1322
00:14:37,850 --> 00:14:42,170
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1323
then we build first the simple
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1324
derivative according to
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1325
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1326
289
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1327
00:14:42,170 --> 00:14:44,360
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1328
that first character and
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1329
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1330
290
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1331
00:14:44,360 --> 00:14:46,925
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1332
continue with the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1333
rest of the string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1334
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1335
291
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1336
00:14:46,925 --> 00:14:50,615
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1337
So here you see again,
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1338
my personal convention:
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1339
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1340
292
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1341
00:14:50,615 --> 00:14:54,365
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1342
everything which works on
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1343
lists has this s at the end.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1344
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1345
293
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1346
00:14:54,365 --> 00:14:57,125
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1347
So this function is
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1348
for single characters.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1349
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1350
294
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1351
00:14:57,125 --> 00:14:59,179
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1352
This one is for strings,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1353
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1354
295
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1355
00:14:59,179 --> 00:15:02,450
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1356
but it uses the one
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1357
for the character.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1358
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1359
296
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1360
00:15:02,450 --> 00:15:04,025
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1361
Essentially what it does is
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1362
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1363
297
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1364
00:15:04,025 --> 00:15:06,185
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1365
it chops off the first character,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1366
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1367
298
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1368
00:15:06,185 --> 00:15:09,800
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1369
builds the derivative, then
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1370
chops off the next character,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1371
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1372
299
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1373
00:15:09,800 --> 00:15:13,760
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1374
builds the derivative of
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1375
the result, and so on.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1376
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1377
300
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1378
00:15:13,760 --> 00:15:17,000
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1379
Having this function,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1380
we can actually now
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1381
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1382
301
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1383
00:15:17,000 --> 00:15:20,600
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1384
state what the algorithm
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1385
is, the complete algorithm.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1386
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1387
302
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1388
00:15:20,600 --> 00:15:23,465
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1389
So the Brzozowski matcher
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1390
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1391
303
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1392
00:15:23,465 --> 00:15:24,860
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1393
takes a regular expression as
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1394
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1395
304
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1396
00:15:24,860 --> 00:15:26,915
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1397
argument and a
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1398
string as argument.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1399
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1400
305
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1401
00:15:26,915 --> 00:15:30,920
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1402
And is supposed to say yes if
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1403
the regular expression matches
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1404
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1405
306
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1406
00:15:30,920 --> 00:15:33,560
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1407
the string or no
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1408
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1409
307
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1410
00:15:33,560 --> 00:15:36,065
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1411
if the regular expression does
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1412
not match the string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1413
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1414
308
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1415
00:15:36,065 --> 00:15:37,715
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1416
And how does it do that?
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1417
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1418
309
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1419
00:15:37,715 --> 00:15:42,560
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1420
Well, it takes this string
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1421
s and this regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1422
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1423
310
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1424
00:15:42,560 --> 00:15:43,925
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1425
and it first builds
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1426
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1427
311
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1428
00:15:43,925 --> 00:15:48,845
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1429
successive derivatives until
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1430
that string is exhausted.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1431
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1432
312
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1433
00:15:48,845 --> 00:15:52,115
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1434
Then you have
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1435
a final derivative,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1436
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1437
313
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1438
00:15:52,115 --> 00:15:53,839
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1439
a final regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1440
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1441
314
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1442
00:15:53,839 --> 00:15:55,370
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1443
and you test whether
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1444
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1445
315
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1446
00:15:55,370 --> 00:15:57,920
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1447
this regular expression can
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1448
match the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1449
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1450
316
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1451
00:15:57,920 --> 00:16:01,370
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1452
If yes, then the
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1453
original regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1454
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1455
317
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1456
00:16:01,370 --> 00:16:03,245
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1457
this r, can match the string.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1458
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1459
318
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1460
00:16:03,245 --> 00:16:05,210
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1461
If no, if it cannot match
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1462
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1463
319
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1464
00:16:05,210 --> 00:16:08,030
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1465
the final derivative
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1466
with the empty string,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1467
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1468
320
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1469
00:16:08,030 --> 00:16:10,280
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1470
then no this
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1471
regular expression r
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1472
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1473
321
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1474
00:16:10,280 --> 00:16:12,905
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1475
cannot match that string.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1476
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1477
322
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1478
00:16:12,905 --> 00:16:16,010
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1479
I know it looks
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1480
very anticlimactic,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1481
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1482
323
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1483
00:16:16,010 --> 00:16:19,625
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1484
but that's actually the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1485
beauty of this algorithm,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1486
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1487
324
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1488
00:16:19,625 --> 00:16:22,760
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1489
that it's not that complicated.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1490
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1491
325
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1492
00:16:22,760 --> 00:16:25,340
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1493
So how does the algorithm work
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1494
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1495
326
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1496
00:16:25,340 --> 00:16:27,634
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1497
in a concrete example?
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1498
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1499
327
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1500
00:16:27,634 --> 00:16:31,580
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1501
Imagine you have a string, abc
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1502
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1503
328
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1504
00:16:31,580 --> 00:16:34,370
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1505
and you have a regular
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1506
expression, say r1.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1507
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1508
329
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1509
00:16:34,370 --> 00:16:37,520
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1510
And you want to find out
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1511
whether this r1 can match
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1512
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1513
330
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1514
00:16:37,520 --> 00:16:41,300
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1515
that string abc or not.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1516
How do you do that?
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1517
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1518
331
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1519
00:16:41,300 --> 00:16:45,140
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1520
Well, you would first
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1521
take this r1 and you
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1522
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1523
332
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1524
00:16:45,140 --> 00:16:47,150
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1525
build the derivative according
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1526
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1527
333
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1528
00:16:47,150 --> 00:16:49,880
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1529
to the first character, the a.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1530
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1531
334
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1532
00:16:49,880 --> 00:16:53,015
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1533
Okay? You get the derivative,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1534
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1535
335
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1536
00:16:53,015 --> 00:16:55,294
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1537
which I call here r2.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1538
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1539
336
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1540
00:16:55,294 --> 00:16:58,640
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1541
Then you take the next
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1542
character, the b.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1543
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1544
337
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1545
00:16:58,640 --> 00:17:04,535
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1546
You now build the derivative
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1547
according to b of this r2.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1548
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1549
338
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1550
00:17:04,535 --> 00:17:07,460
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1551
Okay? So you take the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1552
result of the first step,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1553
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1554
339
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1555
00:17:07,460 --> 00:17:09,530
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1556
you feed it into the second step,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1557
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1558
340
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1559
00:17:09,530 --> 00:17:11,810
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1560
and you take the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1561
second character.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1562
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1563
341
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1564
00:17:11,810 --> 00:17:17,075
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1565
Then you do this also with c.
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1566
So you get a derivative r3,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1567
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1568
342
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1569
00:17:17,075 --> 00:17:22,460
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1570
and you build the derivative
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1571
of r3 according to c,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1572
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1573
343
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1574
00:17:22,460 --> 00:17:24,185
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1575
you get an r4.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1576
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1577
344
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1578
00:17:24,185 --> 00:17:26,300
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1579
Okay, so that's the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1580
final derivative.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1581
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1582
345
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1583
00:17:26,300 --> 00:17:27,530
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1584
The string is exhausted.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1585
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1586
346
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1587
00:17:27,530 --> 00:17:29,570
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1588
We build derivatives
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1589
according to a, b,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1590
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1591
347
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1592
00:17:29,570 --> 00:17:34,610
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1593
and c. Now we just test whether
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1594
this r4 is nullable.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1595
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1596
348
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1597
00:17:34,610 --> 00:17:37,175
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1598
If it says yes,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1599
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1600
349
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1601
00:17:37,175 --> 00:17:41,510
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1602
then the regular expression matcher
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1603
will just say true, yes,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1604
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1605
350
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1606
00:17:41,510 --> 00:17:43,340
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1607
this original regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1608
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1609
351
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1610
00:17:43,340 --> 00:17:47,270
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1611
the r1, will be able to
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1612
match that string abc.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1613
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1614
352
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1615
00:17:47,270 --> 00:17:50,585
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1616
And if this test returns false,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1617
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1618
353
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1619
00:17:50,585 --> 00:17:53,015
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1620
then the algorithm says false.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1621
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1622
354
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1623
00:17:53,015 --> 00:17:56,975
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1624
This regular expression will
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1625
not match the string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1626
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1627
355
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1628
00:17:56,975 --> 00:18:00,260
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1629
Ok, you might ask:
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1630
Why on earth does
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1631
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1632
356
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1633
00:18:00,260 --> 00:18:02,960
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1634
that algorithm
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1635
actually work?
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1636
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1637
357
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1638
00:18:02,960 --> 00:18:06,515
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1639
Here's anather explanation
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1640
for why it works.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1641
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1642
358
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1643
00:18:06,515 --> 00:18:10,190
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1644
Imagine you have a regular
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1645
expression r1, okay?
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1646
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1647
359
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1648
00:18:10,190 --> 00:18:13,220
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1649
And you have a string abc,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1650
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1651
360
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1652
00:18:13,220 --> 00:18:14,270
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1653
and you want to find out
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1654
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1655
361
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1656
00:18:14,270 --> 00:18:17,180
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1657
whether r1 can
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1658
match that string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1659
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1660
362
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1661
00:18:17,180 --> 00:18:18,799
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1662
And for the moment,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1663
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1664
363
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1665
00:18:18,799 --> 00:18:22,610
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1666
let's assume that it
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1667
can match that string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1668
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1669
364
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1670
00:18:22,610 --> 00:18:26,315
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1671
Ok? So the language L of
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1672
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1673
365
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1674
00:18:26,315 --> 00:18:30,185
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1675
r1 will actually
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1676
contain that string,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1677
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1678
366
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1679
00:18:30,185 --> 00:18:31,805
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1680
otherwise it wouldn't match that.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1681
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1682
367
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1683
00:18:31,805 --> 00:18:36,710
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1684
Okay? So abc is in
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1685
this language, okay?
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1686
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1687
368
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1688
00:18:36,710 --> 00:18:39,785
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1689
If I now take the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1690
semantic derivative,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1691
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1692
369
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1693
00:18:39,785 --> 00:18:43,145
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1694
that means I look at all
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1695
the strings in this L(r1)
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1696
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1697
370
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1698
00:18:43,145 --> 00:18:46,820
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1699
and filter out
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1700
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1701
371
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1702
00:18:46,820 --> 00:18:48,740
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1703
all the ones which
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1704
do not start with
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1705
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1706
372
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1707
00:18:48,740 --> 00:18:51,260
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1708
an a, I discharge them.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1709
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1710
373
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1711
00:18:51,260 --> 00:18:54,545
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1712
And I only look at the ones
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1713
which start with an a.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1714
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1715
374
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1716
00:18:54,545 --> 00:18:56,465
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1717
And of those strings,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1718
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1719
375
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1720
00:18:56,465 --> 00:18:58,475
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1721
I chop off this a.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1722
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1723
376
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1724
00:18:58,475 --> 00:19:01,025
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1725
So after this
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1726
semantic derivative,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1727
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1728
377
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1729
00:19:01,025 --> 00:19:05,735
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1730
this set of strings will
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1731
contain just bc.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1732
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1733
378
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1734
00:19:05,735 --> 00:19:12,830
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1735
Ok. Now if I build the next
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1736
semantic derivative of that,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1737
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1738
379
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1739
00:19:12,830 --> 00:19:14,345
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1740
then I would look at
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1741
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1742
380
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1743
00:19:14,345 --> 00:19:16,850
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1744
all the strings which
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1745
start with a b,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1746
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1747
381
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1748
00:19:16,850 --> 00:19:21,350
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1749
and forget about everything
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1750
else. Of the remaining ones
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1751
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1752
382
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1753
00:19:21,350 --> 00:19:27,905
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1754
I know they start with b.
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1755
I just chop of the b. Ok.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1756
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1757
383
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1758
00:19:27,905 --> 00:19:31,655
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1759
So in this whole set here,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1760
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1761
384
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1762
00:19:31,655 --> 00:19:33,785
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1763
in this whole set here,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1764
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1765
385
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1766
00:19:33,785 --> 00:19:39,030
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1767
there will be now a string
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1768
which is just c. Okay?
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1769
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1770
386
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1771
00:19:39,190 --> 00:19:44,420
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1772
Then I built the third
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1773
semantic derivative
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1774
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1775
387
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1776
00:19:44,420 --> 00:19:47,300
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1777
because I want to find out
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1778
whether abc is matched.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1779
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1780
388
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1781
00:19:47,300 --> 00:19:50,540
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1782
Okay? So now I look
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1783
at all the strings in
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1784
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1785
389
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1786
00:19:50,540 --> 00:19:52,820
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1787
here and look at
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1788
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1789
390
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1790
00:19:52,820 --> 00:19:55,340
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1791
them whether they start
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1792
with a c. If yes,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1793
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1794
391
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1795
00:19:55,340 --> 00:19:56,885
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1796
I chop off the c.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1797
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1798
392
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1799
00:19:56,885 --> 00:19:59,120
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1800
And put in what is remaining.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1801
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1802
393
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1803
00:19:59,120 --> 00:20:00,425
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1804
So in this case,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1805
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1806
394
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1807
00:20:00,425 --> 00:20:02,510
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1808
if I have the string c
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1809
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1810
395
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1811
00:20:02,510 --> 00:20:04,550
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1812
in this language and
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1813
I chop off this c,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1814
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1815
396
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1816
00:20:04,550 --> 00:20:07,700
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1817
what is remaining
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1818
is the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1819
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1820
397
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1821
00:20:07,700 --> 00:20:09,695
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1822
So we have to check of
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1823
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1824
398
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1825
00:20:09,695 --> 00:20:14,510
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1826
that language whether it
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1827
contains the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1828
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1829
399
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1830
00:20:14,510 --> 00:20:18,800
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1831
If yes, then the
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1832
original r1 can match
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1833
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1834
400
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1835
00:20:18,800 --> 00:20:21,050
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1836
this abc because this abc
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1837
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1838
401
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1839
00:20:21,050 --> 00:20:24,119
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1840
must have been in this language.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1841
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1842
402
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1843
00:20:24,130 --> 00:20:28,565
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1844
And if in the end there wasn't
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1845
the empty string, then
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1846
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1847
403
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1848
00:20:28,565 --> 00:20:33,575
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1849
this abs was not in
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1850
this language of r1.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1851
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1852
404
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1853
00:20:33,575 --> 00:20:36,260
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1854
And so the lexer must have,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1855
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1856
405
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1857
00:20:36,260 --> 00:20:38,880
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1858
or the matcher must have failed.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1859
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1860
406
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1861
00:20:39,040 --> 00:20:42,530
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1862
The clever bit is that here
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1863
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1864
407
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1865
00:20:42,530 --> 00:20:45,530
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1866
the explanation is for languages.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1867
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1868
408
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1869
00:20:45,530 --> 00:20:49,835
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1870
Remember, this
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1871
semantic derivative
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1872
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1873
409
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1874
00:20:49,835 --> 00:20:53,450
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1875
works over languages and they
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1876
sometimes can be in finite.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1877
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1878
410
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1879
00:20:53,450 --> 00:20:55,730
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1880
So that's not really
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1881
an algorithm.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1882
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1883
411
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1884
00:20:55,730 --> 00:20:58,880
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1885
That's just
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1886
explaining the idea. 
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1887
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1888
412
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1889
00:20:58,880 --> 00:21:02,525
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1890
What Brzozowski
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1891
achieved was that he
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1892
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1893
413
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1894
00:21:02,525 --> 00:21:06,440
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1895
now works with this derivative
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1896
regular expressions and
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1897
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1898
414
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1899
00:21:06,440 --> 00:21:10,715
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1900
somehow imitates what
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1901
happens on these languages.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1902
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1903
415
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1904
00:21:10,715 --> 00:21:14,135
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1905
Because remember if you
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1906
have a regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1907
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1908
416
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1909
00:21:14,135 --> 00:21:17,405
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1910
and you want to test
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1911
whether it can match abc,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1912
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1913
417
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1914
00:21:17,405 --> 00:21:22,550
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1915
then you take first
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1916
derivative according to a.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1917
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1918
418
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1919
00:21:22,550 --> 00:21:25,760
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1920
So you will get a regular
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1921
expression which can match b
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1922
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1923
419
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1924
00:21:25,760 --> 00:21:29,464
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1925
and c, if r could match abc.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1926
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1927
420
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1928
00:21:29,464 --> 00:21:31,430
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1929
So after the first derivative,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1930
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1931
421
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1932
00:21:31,430 --> 00:21:33,620
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1933
you will get a regular expression
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1934
which can match b and
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1935
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1936
422
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1937
00:21:33,620 --> 00:21:37,070
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1938
c. If you take the
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1939
second derivative,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1940
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1941
423
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1942
00:21:37,070 --> 00:21:41,225
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1943
you will get a regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1944
which can match c alone.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1945
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1946
424
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1947
00:21:41,225 --> 00:21:44,180
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1948
And if you take the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1949
final derivative,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1950
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1951
425
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1952
00:21:44,180 --> 00:21:46,070
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1953
then you will get
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1954
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1955
426
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1956
00:21:46,070 --> 00:21:48,260
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1957
a regular expression which hopefully
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1958
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1959
427
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1960
00:21:48,260 --> 00:21:49,715
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1961
can match the empty string.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1962
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1963
428
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1964
00:21:49,715 --> 00:21:53,780
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1965
If it does, then this
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1966
r can match the abc.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1967
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1968
429
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1969
00:21:53,780 --> 00:21:55,655
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1970
And if it doesn't, then
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1971
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1972
430
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1973
00:21:55,655 --> 00:21:58,680
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1974
abc couldn't be
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1975
matched by this r.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1976
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1977
431
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1978
00:21:58,900 --> 00:22:02,990
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1979
Okay, let's have a look
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1980
how this pans out in code.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1981
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1982
432
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1983
00:22:02,990 --> 00:22:06,050
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1984
Here's the file re1.sc.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1985
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1986
433
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1987
00:22:06,050 --> 00:22:07,940
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1988
It's also uploaded on KEATS,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1989
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1990
434
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1991
00:22:07,940 --> 00:22:10,625
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1992
so you can see exactly
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1993
what I'm doing.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1994
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1995
435
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1996
00:22:10,625 --> 00:22:13,970
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  1997
And actually you already saw
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1998
that file because I showed you
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  1999
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2000
436
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2001
00:22:13,970 --> 00:22:15,710
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2002
how my regular expressions are
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2003
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2004
437
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2005
00:22:15,710 --> 00:22:17,960
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2006
defined, with the
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2007
abstract classes here.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2008
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2009
438
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2010
00:22:17,960 --> 00:22:21,155
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2011
And here, the six cases
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2012
for 0, 1, character,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2013
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2014
439
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2015
00:22:21,155 --> 00:22:23,540
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2016
alternative, 
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2017
sequence and star.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2018
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2019
440
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2020
00:22:23,540 --> 00:22:26,705
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2021
Ok. So the first
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2022
function nullable,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2023
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2024
441
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2025
00:22:26,705 --> 00:22:28,760
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2026
the simple one, takes
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2027
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2028
442
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2029
00:22:28,760 --> 00:22:32,120
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2030
a regular expression as
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2031
argument and returns a boolean.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2032
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2033
443
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2034
00:22:32,120 --> 00:22:34,280
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2035
And then with this
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2036
pattern matching,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2037
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2038
444
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2039
00:22:34,280 --> 00:22:37,040
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2040
we just go through
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2041
all these six cases
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2042
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2043
445
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2044
00:22:37,040 --> 00:22:38,900
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2045
0 is defined as false.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2046
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2047
446
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2048
00:22:38,900 --> 00:22:43,234
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2049
One is defined as true.
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2050
Character, for any character,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2051
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2052
447
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2053
00:22:43,234 --> 00:22:45,455
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2054
this nullable will return false.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2055
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2056
448
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2057
00:22:45,455 --> 00:22:47,540
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2058
The alternative is defined here,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2059
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2060
449
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2061
00:22:47,540 --> 00:22:50,000
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2062
so that's the or in Scala.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2063
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2064
450
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2065
00:22:50,000 --> 00:22:52,700
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2066
And for the sequence,
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2067
that's the and.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2068
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2069
451
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2070
00:22:52,700 --> 00:22:56,180
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2071
And this star, no matter
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2072
what the regular expression is,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2073
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2074
452
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2075
00:22:56,180 --> 00:22:59,540
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2076
it will always match the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2077
empty string, so true.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2078
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2079
453
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2080
00:22:59,540 --> 00:23:02,225
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2081
So nullable is very easy.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2082
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2083
454
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2084
00:23:02,225 --> 00:23:07,430
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2085
The derivative is also not
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2086
so much more complicated.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2087
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2088
455
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2089
00:23:07,430 --> 00:23:08,974
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2090
It takes two arguments,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2091
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2092
456
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2093
00:23:08,974 --> 00:23:11,810
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2094
a character and the
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2095
regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2096
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2097
457
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2098
00:23:11,810 --> 00:23:14,405
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2099
and returns a regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2100
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2101
458
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2102
00:23:14,405 --> 00:23:16,340
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2103
So now we just have to analyze
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2104
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2105
459
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2106
00:23:16,340 --> 00:23:18,890
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2107
what's that regular
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2108
expression looks like.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2109
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2110
460
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2111
00:23:18,890 --> 00:23:23,870
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2112
If it's 0, we return
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2113
0; if it's 1 we return 0.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2114
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2115
461
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2116
00:23:23,870 --> 00:23:26,990
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2117
If the character... If the
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2118
regular expressions character
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2119
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2120
462
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2121
00:23:26,990 --> 00:23:30,260
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2122
d, we test whether it's
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2123
equal to this character
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2124
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2125
463
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2126
00:23:30,260 --> 00:23:32,225
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2127
we want to take the
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2128
derivative off.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2129
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2130
464
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2131
00:23:32,225 --> 00:23:36,185
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2132
If yes, return 1, otherwise 0.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2133
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2134
465
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2135
00:23:36,185 --> 00:23:38,600
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2136
The alternative which has pushed
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2137
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2138
466
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2139
00:23:38,600 --> 00:23:39,860
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2140
the derivative under
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2141
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2142
467
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2143
00:23:39,860 --> 00:23:42,710
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2144
this alternative,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2145
that's the easy one.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2146
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2147
468
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2148
00:23:42,710 --> 00:23:44,690
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2149
Here's the sequence case where we
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2150
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2151
469
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2152
00:23:44,690 --> 00:23:47,015
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2153
first have to test
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2154
if it's nullable,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2155
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2156
470
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2157
00:23:47,015 --> 00:23:49,040
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2158
If it's not the have to push
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2159
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2160
471
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2161
00:23:49,040 --> 00:23:52,160
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2162
the derivative over
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2163
the first, the r1.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2164
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2165
472
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2166
00:23:52,160 --> 00:23:56,135
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2167
And otherwise if it is nullable,
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2168
we have two cases.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2169
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2170
473
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2171
00:23:56,135 --> 00:24:00,605
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2172
Either you have to push
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2173
it over the r1 or r2.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2174
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2175
474
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2176
00:24:00,605 --> 00:24:03,860
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2177
And a star case, this one.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2178
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2179
475
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2180
00:24:03,860 --> 00:24:07,160
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2181
We just build the sequence
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2182
of the derivative of
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2183
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2184
476
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2185
00:24:07,160 --> 00:24:11,600
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2186
r1 and append the
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2187
r1 as a sequence,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2188
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2189
477
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2190
00:24:11,600 --> 00:24:14,195
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2191
put the star at the end.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2192
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2193
478
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2194
00:24:14,195 --> 00:24:19,430
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2195
Okay, so here's the
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2196
function for strings.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2197
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2198
479
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2199
00:24:19,430 --> 00:24:21,740
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2200
So a list of characters.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2201
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2202
480
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2203
00:24:21,740 --> 00:24:23,870
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2204
This function takes an s,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2205
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2206
481
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2207
00:24:23,870 --> 00:24:26,480
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2208
a list of characters as argument
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2209
and a regular expression
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2210
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2211
482
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2212
00:24:26,480 --> 00:24:29,360
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2213
as argument and returns
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2214
a regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2215
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2216
483
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2217
00:24:29,360 --> 00:24:31,460
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2218
And we just have to
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2219
pattern match what
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2220
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2221
484
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2222
00:24:31,460 --> 00:24:34,055
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2223
that string looks like
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2224
or this list looks like.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2225
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2226
485
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2227
00:24:34,055 --> 00:24:35,360
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2228
If it's the empty list,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2229
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2230
486
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2231
00:24:35,360 --> 00:24:38,030
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2232
it just immediately
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2233
return the r. If
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2234
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2235
487
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2236
00:24:38,030 --> 00:24:42,020
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2237
it's something of the
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2238
form c followed by s,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2239
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2240
488
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2241
00:24:42,020 --> 00:24:45,050
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2242
then we build first the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2243
derivative according
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2244
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2245
489
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2246
00:24:45,050 --> 00:24:48,345
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2247
to c. And then
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2248
the result of that,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2249
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2250
490
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2251
00:24:48,345 --> 00:24:50,090
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2252
we recursively call
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2253
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2254
491
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2255
00:24:50,090 --> 00:24:53,675
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2256
the derivative
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2257
according to s. Okay?
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2258
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2259
492
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2260
00:24:53,675 --> 00:24:56,060
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2261
And now the main matcher,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2262
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2263
493
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2264
00:24:56,060 --> 00:24:59,360
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2265
it takes a regular
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2266
expression and takes
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2267
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2268
494
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2269
00:24:59,360 --> 00:25:02,870
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2270
a string and returns a
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2271
boolean, true or false.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2272
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2273
495
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2274
00:25:02,870 --> 00:25:05,705
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2275
And it first builds
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2276
the derivative.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2277
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2278
496
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2279
00:25:05,705 --> 00:25:07,430
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2280
The only thing I have to do here
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2281
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2282
497
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2283
00:25:07,430 --> 00:25:09,410
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2284
because I'm implementing
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2285
it in Scala,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2286
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2287
498
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2288
00:25:09,410 --> 00:25:15,064
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2289
I have to coerce between strings
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2290
and lists of characters.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2291
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2292
499
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2293
00:25:15,064 --> 00:25:16,580
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2294
So he, I take first
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2295
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2296
500
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2297
00:25:16,580 --> 00:25:20,810
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2298
the toList of the s. That
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2299
gives me a list of characters.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2300
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2301
501
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2302
00:25:20,810 --> 00:25:23,135
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2303
Then I build this derivative
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2304
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2305
502
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2306
00:25:23,135 --> 00:25:26,045
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2307
with the s, because I'm
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2308
looking at strings.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2309
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2310
503
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2311
00:25:26,045 --> 00:25:28,160
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2312
And then at the end,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2313
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2314
504
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2315
00:25:28,160 --> 00:25:33,050
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2316
built the nullable of
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2317
the final derivative.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2318
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2319
505
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2320
00:25:33,050 --> 00:25:37,310
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2321
The beauty of all this
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2322
is that in Scala,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2323
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2324
506
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2325
00:25:37,310 --> 00:25:40,085
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2326
these definition which
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2327
I had on the slides
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2328
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2329
507
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2330
00:25:40,085 --> 00:25:43,835
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2331
go almost one-to-one into code.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2332
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2333
508
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2334
00:25:43,835 --> 00:25:45,605
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2335
And that's of course,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2336
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2337
509
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2338
00:25:45,605 --> 00:25:47,480
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2339
makes it very easy
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2340
to implement in
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2341
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2342
510
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2343
00:25:47,480 --> 00:25:49,730
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2344
a functional language like Scala.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2345
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2346
511
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2347
00:25:49,730 --> 00:25:52,865
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2348
We can also now try
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2349
out some examples.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2350
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2351
512
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2352
00:25:52,865 --> 00:25:56,960
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2353
This was the example
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2354
I had on the slide.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2355
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2356
513
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2357
00:25:56,960 --> 00:25:58,370
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2358
And we could now calculate
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2359
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2360
514
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2361
00:25:58,370 --> 00:26:00,305
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2362
what's the derivative
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2363
according to a,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2364
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2365
515
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2366
00:26:00,305 --> 00:26:02,720
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2367
b, and c of this
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2368
regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2369
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2370
516
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2371
00:26:02,720 --> 00:26:07,040
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2372
And I hope you didn't
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2373
make any mistake.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2374
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2375
517
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2376
00:26:07,040 --> 00:26:09,260
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2377
Now of course we want
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2378
to see whether we
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2379
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2380
518
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2381
00:26:09,260 --> 00:26:11,390
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2382
do any better with
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2383
this algorithm...
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2384
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2385
519
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2386
00:26:11,390 --> 00:26:13,715
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2387
than Python and Ruby.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2388
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2389
520
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2390
00:26:13,715 --> 00:26:16,070
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2391
And let's first have a
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2392
look at this example.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2393
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2394
521
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2395
00:26:16,070 --> 00:26:18,079
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2396
So this regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2397
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2398
522
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2399
00:26:18,079 --> 00:26:19,880
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2400
The problem is that in
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2401
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2402
523
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2403
00:26:19,880 --> 00:26:22,070
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2404
our regular expression
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2405
matcher so far we have
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2406
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2407
524
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2408
00:26:22,070 --> 00:26:24,530
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2409
the sequence rregular
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2410
expression, but we
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2411
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2412
525
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2413
00:26:24,530 --> 00:26:27,200
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2414
don't have this optional
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2415
regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2416
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2417
526
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2418
00:26:27,200 --> 00:26:30,800
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2419
And we don't have this n
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2420
times regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2421
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2422
527
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2423
00:26:30,800 --> 00:26:36,605
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2424
but we can quickly implement
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2425
that in our implementation.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2426
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2427
528
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2428
00:26:36,605 --> 00:26:40,549
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2429
So if you want to build the
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2430
optional regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2431
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2432
529
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2433
00:26:40,549 --> 00:26:41,870
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2434
which is defined here,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2435
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2436
530
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2437
00:26:41,870 --> 00:26:44,570
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2438
a little function which
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2439
takes a reg expression and
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2440
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2441
531
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2442
00:26:44,570 --> 00:26:47,360
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2443
returns the alternative of r and 1.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2444
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2445
532
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2446
00:26:47,360 --> 00:26:49,624
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2447
So it essentially
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2448
takes the definition
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2449
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2450
533
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2451
00:26:49,624 --> 00:26:53,240
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2452
of optional r and
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2453
replaces it by that.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2454
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2455
534
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2456
00:26:53,240 --> 00:26:56,150
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2457
The n-times what we
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2458
essentially do there is
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2459
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2460
535
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2461
00:26:56,150 --> 00:27:01,535
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2462
we built n copies of this r. Ok?
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2463
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2464
536
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2465
00:27:01,535 --> 00:27:04,745
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2466
So if this n-times was 0,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2467
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2468
537
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2469
00:27:04,745 --> 00:27:06,245
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2470
we just return one.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2471
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2472
538
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2473
00:27:06,245 --> 00:27:11,570
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2474
If it's one, then we return
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2475
just the regular expression.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2476
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2477
539
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2478
00:27:11,570 --> 00:27:15,575
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2479
And if it's something
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2480
bigger than one,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2481
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2482
540
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2483
00:27:15,575 --> 00:27:18,560
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2484
then we just built the
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2485
sequence of one of
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2486
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2487
541
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2488
00:27:18,560 --> 00:27:20,270
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2489
these copies and call
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2490
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2491
542
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2492
00:27:20,270 --> 00:27:22,925
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2493
this function again
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2494
with n - 1.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2495
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2496
543
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2497
00:27:22,925 --> 00:27:26,330
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2498
So we just build now n-copies of that.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2499
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2500
544
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2501
00:27:26,330 --> 00:27:30,710
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2502
Okay, so we can look
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2503
at our first example.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2504
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2505
545
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2506
00:27:30,710 --> 00:27:32,629
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2507
This is the regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2508
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2509
546
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2510
00:27:32,629 --> 00:27:36,035
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2511
and I call that here
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2512
evil regular expression1.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2513
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2514
547
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2515
00:27:36,035 --> 00:27:37,670
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2516
It doesn't look as beautiful
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2517
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2518
548
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2519
00:27:37,670 --> 00:27:39,140
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2520
as what we write down on paper.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2521
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2522
549
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2523
00:27:39,140 --> 00:27:41,240
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2524
We will actually look
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2525
at this later on
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2526
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2527
550
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2528
00:27:41,240 --> 00:27:43,640
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2529
if this can be improved.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2530
But here it is.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2531
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2532
551
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2533
00:27:43,640 --> 00:27:45,724
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2534
Here's the regular expression,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2535
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2536
552
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2537
00:27:45,724 --> 00:27:49,520
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2538
and here's a little function
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2539
which measures the time.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2540
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2541
553
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2542
00:27:49,520 --> 00:27:53,180
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2543
And we can now start testing
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2544
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2545
554
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2546
00:27:53,180 --> 00:27:57,845
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2547
this regular expression with
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2548
strings just containing a's.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2549
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2550
555
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2551
00:27:57,845 --> 00:28:00,020
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2552
And we are first a bit cautious,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2553
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2554
556
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2555
00:28:00,020 --> 00:28:04,985
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2556
we test it between 0 and 20,
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2557
and we count by two.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2558
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2559
557
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2560
00:28:04,985 --> 00:28:08,330
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2561
And I actually will not
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2562
start that within Scala,
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2563
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2564
558
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2565
00:28:08,330 --> 00:28:12,965
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2566
but actually use Ammonite.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2567
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2568
559
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2569
00:28:12,965 --> 00:28:15,305
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2570
And that's out.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2571
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2572
560
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2573
00:28:15,305 --> 00:28:17,269
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2574
And that calculates
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2575
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2576
561
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2577
00:28:17,269 --> 00:28:20,675
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2578
for 18 a's. It's pretty fast.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2579
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2580
562
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2581
00:28:20,675 --> 00:28:24,815
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2582
But for 20 it already
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2583
needs 2 seconds.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2584
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2585
563
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2586
00:28:24,815 --> 00:28:28,265
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2587
And you can see
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2588
actually this jump from
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2589
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2590
564
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2591
00:28:28,265 --> 00:28:32,825
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2592
18 to 20 in the runtime
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2593
is pretty bad too.
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2594
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2595
565
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2596
00:28:32,825 --> 00:28:37,460
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2597
And if we actually measure
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2598
it more accurately,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2599
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2600
566
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2601
00:28:37,460 --> 00:28:39,770
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2602
then we get this picture.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2603
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2604
567
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2605
00:28:39,770 --> 00:28:41,255
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2606
And what turns out,
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2607
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2608
568
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2609
00:28:41,255 --> 00:28:45,830
769
b153de5339bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 766
diff changeset
  2610
we are actually worse than Python
766
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2611
and Ruby in this example.
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2612
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2613
569
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2614
00:28:45,830 --> 00:28:49,230
ef7a7c4b24b7 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
  2615
So I guess that's a fail.