| author | Christian Urban <urbanc@in.tum.de> | 
| Mon, 05 Feb 2018 10:58:48 +0000 | |
| changeset 547 | 36f937b42675 | 
| parent 545 | 56e054d84be2 | 
| child 556 | 4b0fffaef849 | 
| permissions | -rw-r--r-- | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 1 | \documentclass{article}
 | 
| 253 
75c469893514
added coursework
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
216diff
changeset | 2 | \usepackage{../style}
 | 
| 216 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 3 | \usepackage{../langs}
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 4 | |
| 492 | 5 | \usepackage{array}
 | 
| 6 | ||
| 7 | ||
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 8 | \begin{document}
 | 
| 492 | 9 | \newcolumntype{C}[1]{>{\centering}m{#1}}
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 10 | |
| 260 
65d1ea0e989f
updated cws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
259diff
changeset | 11 | \section*{Coursework 1 (Strand 1)}
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 12 | |
| 499 | 13 | This coursework is worth 4\% and is due on 19 October at | 
| 358 
b3129cff41e9
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
351diff
changeset | 14 | 16:00. You are asked to implement a regular expression matcher | 
| 
b3129cff41e9
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
351diff
changeset | 15 | and submit a document containing the answers for the questions | 
| 
b3129cff41e9
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
351diff
changeset | 16 | below. You can do the implementation in any programming | 
| 
b3129cff41e9
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
351diff
changeset | 17 | language you like, but you need to submit the source code with | 
| 
b3129cff41e9
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
351diff
changeset | 18 | which you answered the questions, otherwise a mark of 0\% will | 
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 19 | be awarded. You can submit your answers in a txt-file or pdf. | 
| 418 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 20 | Code send as code. | 
| 358 
b3129cff41e9
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
351diff
changeset | 21 | |
| 
b3129cff41e9
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
351diff
changeset | 22 | |
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 23 | |
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 24 | \subsubsection*{Disclaimer}
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 25 | |
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 26 | It should be understood that the work you submit represents | 
| 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 27 | your own effort. You have not copied from anyone else. An | 
| 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 28 | exception is the Scala code I showed during the lectures or | 
| 418 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 29 | uploaded to KEATS, which you can freely use.\bigskip | 
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 30 | |
| 512 | 31 | \noindent | 
| 32 | If you have any questions, please send me an email in \textbf{good}
 | |
| 33 | time.\bigskip | |
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 34 | |
| 492 | 35 | \subsection*{Task}
 | 
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 36 | |
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 37 | The task is to implement a regular expression matcher based on | 
| 418 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 38 | derivatives of regular expressions. The implementation should | 
| 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 39 | be able to deal with the usual (basic) regular expressions | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 40 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 41 | \[ | 
| 418 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 42 | \ZERO,\; \ONE,\; c,\; r_1 + r_2,\; r_1 \cdot r_2,\; r^* | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 43 | \] | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 44 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 45 | \noindent | 
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 46 | but also with the following extended regular expressions: | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 47 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 48 | \begin{center}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 49 | \begin{tabular}{ll}
 | 
| 492 | 50 | $[c_1,c_2,\ldots,c_n]$ & a set of characters---for character ranges\\ | 
| 51 | $r^+$ & one or more times $r$\\ | |
| 52 | $r^?$ & optional $r$\\ | |
| 53 |   $r^{\{n\}}$ & exactly $n$-times\\
 | |
| 54 |   $r^{\{..m\}}$ & zero or more times $r$ but no more than $m$-times\\
 | |
| 55 |   $r^{\{n..\}}$ & at least $n$-times $r$\\
 | |
| 56 |   $r^{\{n..m\}}$ & at least $n$-times $r$ but no more than $m$-times\\
 | |
| 57 |   $\sim{}r$ & not-regular-expression of $r$\\
 | |
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 58 | \end{tabular}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 59 | \end{center}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 60 | |
| 492 | 61 | \noindent You can assume that $n$ and $m$ are greater or equal than | 
| 62 | $0$. In the case of $r^{\{n,m\}}$ you can also assume $0 \le n \le m$.\bigskip
 | |
| 63 | ||
| 64 | \noindent {\bf Important!} Your implementation should have explicit
 | |
| 494 | 65 | cases for the basic regular expressions, but also for explicit cases for | 
| 492 | 66 | the extended regular expressions. That means do not treat the extended | 
| 67 | regular expressions by just translating them into the basic ones. See | |
| 545 | 68 | also Question 3, where you are asked to explicitly give the rules for | 
| 492 | 69 | \textit{nullable} and \textit{der} for the extended regular
 | 
| 70 | expressions.\newpage | |
| 71 | ||
| 72 | \noindent | |
| 73 | The meanings of the extended regular expressions are | |
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 74 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 75 | \begin{center}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 76 | \begin{tabular}{r@{\hspace{2mm}}c@{\hspace{2mm}}l}
 | 
| 492 | 77 |   $L([c_1,c_2,\ldots,c_n])$ & $\dn$ & $\{[c_1], [c_2], \ldots, [c_n]\}$\\ 
 | 
| 78 |   $L(r^+)$                  & $\dn$ & $\bigcup_{1\le i}.\;L(r)^i$\\
 | |
| 79 |   $L(r^?)$                  & $\dn$ & $L(r) \cup \{[]\}$\\
 | |
| 80 |   $L(r^{\{n\}})$             & $\dn$ & $L(r)^n$\\
 | |
| 81 |   $L(r^{\{..m\}})$           & $\dn$ & $\bigcup_{0\le i \le m}.\;L(r)^i$\\
 | |
| 82 |   $L(r^{\{n..\}})$           & $\dn$ & $\bigcup_{n\le i}.\;L(r)^i$\\
 | |
| 83 |   $L(r^{\{n..m\}})$          & $\dn$ & $\bigcup_{n\le i \le m}.\;L(r)^i$\\
 | |
| 84 |   $L(\sim{}r)$              & $\dn$ & $\Sigma^* - L(r)$
 | |
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 85 | \end{tabular}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 86 | \end{center}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 87 | |
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 88 | \noindent whereby in the last clause the set $\Sigma^*$ stands | 
| 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 89 | for the set of \emph{all} strings over the alphabet $\Sigma$
 | 
| 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 90 | (in the implementation the alphabet can be just what is | 
| 418 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 91 | represented by, say, the type \pcode{Char}). So $\sim{}r$
 | 
| 492 | 92 | means in effect ``all the strings that $r$ cannot match''.\medskip | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 93 | |
| 492 | 94 | \noindent | 
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 95 | Be careful that your implementation of \textit{nullable} and
 | 
| 492 | 96 | \textit{der} satisfies for every regular expression $r$ the following
 | 
| 545 | 97 | two properties (see also Question 3): | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 98 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 99 | \begin{itemize}
 | 
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 100 | \item $\textit{nullable}(r)$ if and only if $[]\in L(r)$
 | 
| 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 101 | \item $L(der\,c\,r) = Der\,c\,(L(r))$ | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 102 | \end{itemize}
 | 
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 103 | |
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 104 | |
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 105 | |
| 512 | 106 | \subsection*{Question 1 (Unmarked)}
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 107 | |
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 108 | What is your King's email address (you will need it in | 
| 545 | 109 | Question 5)? | 
| 110 | ||
| 111 | \subsection*{Question 2 (Unmarked)}
 | |
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 112 | |
| 545 | 113 | In which programming languages have you written a program (like spent | 
| 114 | at least a day working on the program)? | |
| 115 | ||
| 116 | \subsection*{Question 3}
 | |
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 117 | |
| 473 | 118 | From the | 
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 119 | lectures you have seen the definitions for the functions | 
| 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 120 | \textit{nullable} and \textit{der} for the basic regular
 | 
| 473 | 121 | expressions. Implement the rules for the extended regular | 
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 122 | expressions: | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 123 | |
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 124 | \begin{center}
 | 
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 125 | \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
 | 
| 492 | 126 |   $\textit{nullable}([c_1,c_2,\ldots,c_n])$  & $\dn$ & $?$\\
 | 
| 127 |   $\textit{nullable}(r^+)$                   & $\dn$ & $?$\\
 | |
| 128 |   $\textit{nullable}(r^?)$                   & $\dn$ & $?$\\
 | |
| 129 |   $\textit{nullable}(r^{\{n\}})$              & $\dn$ & $?$\\
 | |
| 130 |   $\textit{nullable}(r^{\{..m\}})$            & $\dn$ & $?$\\
 | |
| 131 |   $\textit{nullable}(r^{\{n..\}})$            & $\dn$ & $?$\\
 | |
| 132 |   $\textit{nullable}(r^{\{n..m\}})$           & $\dn$ & $?$\\
 | |
| 133 |   $\textit{nullable}(\sim{}r)$              & $\dn$ & $?$
 | |
| 134 | \end{tabular}
 | |
| 135 | \end{center}
 | |
| 136 | ||
| 137 | \begin{center}
 | |
| 138 | \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
 | |
| 139 | $der\, c\, ([c_1,c_2,\ldots,c_n])$ & $\dn$ & $?$\\ | |
| 140 | $der\, c\, (r^+)$ & $\dn$ & $?$\\ | |
| 141 | $der\, c\, (r^?)$ & $\dn$ & $?$\\ | |
| 142 |   $der\, c\, (r^{\{n\}})$              & $\dn$ & $?$\\
 | |
| 143 |   $der\, c\, (r^{\{..m\}})$           & $\dn$ & $?$\\
 | |
| 144 |   $der\, c\, (r^{\{n..\}})$           & $\dn$ & $?$\\
 | |
| 145 |   $der\, c\, (r^{\{n..m\}})$           & $\dn$ & $?$\\
 | |
| 146 |   $der\, c\, (\sim{}r)$               & $\dn$ & $?$\\
 | |
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 147 | \end{tabular}
 | 
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 148 | \end{center}
 | 
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 149 | |
| 333 
8890852e18b7
updated coursework
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
328diff
changeset | 150 | \noindent | 
| 
8890852e18b7
updated coursework
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
328diff
changeset | 151 | Remember your definitions have to satisfy the two properties | 
| 
8890852e18b7
updated coursework
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
328diff
changeset | 152 | |
| 
8890852e18b7
updated coursework
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
328diff
changeset | 153 | \begin{itemize}
 | 
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 154 | \item $\textit{nullable}(r)$ if and only if $[]\in L(r)$
 | 
| 333 
8890852e18b7
updated coursework
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
328diff
changeset | 155 | \item $L(der\,c\,r)) = Der\,c\,(L(r))$ | 
| 
8890852e18b7
updated coursework
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
328diff
changeset | 156 | \end{itemize}
 | 
| 
8890852e18b7
updated coursework
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
328diff
changeset | 157 | |
| 473 | 158 | \noindent | 
| 492 | 159 | Given the definitions of \textit{nullable} and \textit{der}, it is
 | 
| 160 | easy to implement a regular expression matcher. Test your regular | |
| 161 | expression matcher with (at least) the examples: | |
| 162 | ||
| 163 | ||
| 164 | \begin{center}
 | |
| 165 | \def\arraystretch{1.2}  
 | |
| 166 | \begin{tabular}{r|m{12mm}|m{12mm}|m{12mm}|m{12mm}|m{12mm}|m{12mm}}
 | |
| 167 |   string & $a^{\{3\}}$ & $(a^?)^{\{3\}}$ & $a^{\{..3\}}$ &
 | |
| 168 |      $(a^?)^{\{..3\}}$ & $a^{\{3..5\}}$ & $(a^?)^{\{3..5\}}$\\\hline
 | |
| 169 | $[]$ &&&&&& \\\hline | |
| 170 |   \texttt{a}     &&&&&& \\\hline 
 | |
| 171 |   \texttt{aa}    &&&&&& \\\hline 
 | |
| 172 |   \texttt{aaa}   &&&&&& \\\hline 
 | |
| 173 |   \texttt{aaaaa} &&&&&& \\\hline 
 | |
| 174 |   \texttt{aaaaaa}&&&&&& \\
 | |
| 175 | \end{tabular}
 | |
| 176 | \end{center}
 | |
| 177 | ||
| 178 | \noindent | |
| 179 | Does your matcher produce the expected results? | |
| 473 | 180 | |
| 545 | 181 | \subsection*{Question 4}
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 182 | |
| 494 | 183 | As you can see, there are a number of explicit regular expressions | 
| 184 | that deal with single or several characters, for example: | |
| 492 | 185 | |
| 186 | \begin{center}
 | |
| 187 | \begin{tabular}{ll}
 | |
| 494 | 188 | $c$ & matches a single character\\ | 
| 189 | $[c_1,c_2,\ldots,c_n]$ & matches a set of characters---for character ranges\\ | |
| 190 |   $\textit{ALL}$ & matches any character
 | |
| 492 | 191 | \end{tabular}
 | 
| 192 | \end{center}
 | |
| 193 | ||
| 194 | \noindent | |
| 195 | the latter is useful for matching any string (for example | |
| 494 | 196 | by using $\textit{ALL}^*$). In order to avoid having an explicit constructor
 | 
| 197 | for each case, we can generalise all these cases and introduce a single | |
| 492 | 198 | constructor $\textit{CFUN}(f)$ where $f$ is a function from characters
 | 
| 494 | 199 | to a boolean. The idea is that the function $f$ determines which character(s) | 
| 200 | are matched, namely those where $f$ returns \texttt{true}.
 | |
| 201 | In this question implement \textit{CFUN} and define
 | |
| 492 | 202 | |
| 203 | \begin{center}
 | |
| 204 | \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
 | |
| 205 |   $\textit{nullable}(\textit{CFUN}(f))$  & $\dn$ & $?$\\
 | |
| 206 |   $\textit{der}\,c\,(\textit{CFUN}(f))$  & $\dn$ & $?$
 | |
| 207 | \end{tabular}
 | |
| 208 | \end{center}
 | |
| 209 | ||
| 494 | 210 | \noindent in your matcher and then also give definitions for | 
| 492 | 211 | |
| 212 | \begin{center}
 | |
| 213 | \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
 | |
| 214 |   $c$  & $\dn$ & $\textit{CFUN}(?)$\\
 | |
| 215 |   $[c_1,c_2,\ldots,c_n]$  & $\dn$ & $\textit{CFUN}(?)$\\
 | |
| 216 |   $\textit{ALL}$  & $\dn$ & $\textit{CFUN}(?)$
 | |
| 217 | \end{tabular}
 | |
| 218 | \end{center}
 | |
| 219 | ||
| 220 | ||
| 545 | 221 | \subsection*{Question 5}
 | 
| 492 | 222 | |
| 223 | Suppose $[a\mbox{-}z0\mbox{-}9\_\,.\mbox{-}]$ stands for the regular expression
 | |
| 224 | ||
| 225 | \[[a,b,c,\ldots,z,0,\dots,9,\_,.,\mbox{-}]\;.\]
 | |
| 226 | ||
| 227 | \noindent | |
| 228 | Define in your code the following regular expression for email addresses | |
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 229 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 230 | \[ | 
| 492 | 231 | ([a\mbox{-}z0\mbox{-}9\_\,.-]^+)\cdot @\cdot ([a\mbox{-}z0\mbox{-}9\,.-]^+)\cdot .\cdot ([a\mbox{-}z\,.]^{\{2,6\}})
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 232 | \] | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 233 | |
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 234 | \noindent and calculate the derivative according to your email | 
| 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 235 | address. When calculating the derivative, simplify all regular | 
| 418 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 236 | expressions as much as possible by applying the | 
| 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 237 | following 7 simplification rules: | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 238 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 239 | \begin{center}
 | 
| 272 
1446bc47a294
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
260diff
changeset | 240 | \begin{tabular}{l@{\hspace{2mm}}c@{\hspace{2mm}}ll}
 | 
| 439 
7611ace6a93b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
418diff
changeset | 241 | $r \cdot \ZERO$ & $\mapsto$ & $\ZERO$\\ | 
| 
7611ace6a93b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
418diff
changeset | 242 | $\ZERO \cdot r$ & $\mapsto$ & $\ZERO$\\ | 
| 
7611ace6a93b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
418diff
changeset | 243 | $r \cdot \ONE$ & $\mapsto$ & $r$\\ | 
| 
7611ace6a93b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
418diff
changeset | 244 | $\ONE \cdot r$ & $\mapsto$ & $r$\\ | 
| 
7611ace6a93b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
418diff
changeset | 245 | $r + \ZERO$ & $\mapsto$ & $r$\\ | 
| 
7611ace6a93b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
418diff
changeset | 246 | $\ZERO + r$ & $\mapsto$ & $r$\\ | 
| 333 
8890852e18b7
updated coursework
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
328diff
changeset | 247 | $r + r$ & $\mapsto$ & $r$\\ | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 248 | \end{tabular}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 249 | \end{center}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 250 | |
| 418 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 251 | \noindent Write down your simplified derivative in a readable | 
| 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 252 | notation using parentheses where necessary. That means you | 
| 
010c5a03dca2
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
395diff
changeset | 253 | should use the infix notation $+$, $\cdot$, $^*$ and so on, | 
| 492 | 254 | instead of code.\bigskip | 
| 395 
e57d3d92b856
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
358diff
changeset | 255 | |
| 492 | 256 | \noindent | 
| 257 | Implement the simplification rules in your regular expression matcher. | |
| 258 | Consider the regular expression $/ \cdot * \cdot | |
| 259 | (\sim{}(\textit{ALL}^* \cdot * \cdot / \cdot \textit{ALL}^*)) \cdot *
 | |
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 260 | \cdot /$ and decide wether the following four strings are matched by | 
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 261 | this regular expression. Answer yes or no. | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 262 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 263 | \begin{enumerate}
 | 
| 216 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 264 | \item \texttt{"/**/"}
 | 
| 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 265 | \item \texttt{"/*foobar*/"}
 | 
| 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 266 | \item \texttt{"/*test*/test*/"}
 | 
| 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 267 | \item \texttt{"/*test/*test*/"}
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 268 | \end{enumerate}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 269 | |
| 545 | 270 | \subsection*{Question 6}
 | 
| 512 | 271 | |
| 272 | Let $r_1$ be the regular expression $a\cdot a\cdot a$ and $r_2$ be | |
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 273 | $(a^{\{19,19\}}) \cdot (a^?)$.  Decide whether the following three
 | 
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 274 | strings consisting of $a$s only can be matched by $(r_1^+)^+$. | 
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 275 | Similarly test them with $(r_2^+)^+$. Again answer in all six cases | 
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 276 | with yes or no. \medskip | 
| 130 
5c4998375c46
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
129diff
changeset | 277 | |
| 
5c4998375c46
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
129diff
changeset | 278 | \noindent | 
| 259 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 279 | These are strings are meant to be entirely made up of $a$s. Be careful | 
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 280 | when copy-and-pasting the strings so as to not forgetting any $a$ and | 
| 
e5f4b8ff23b8
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
253diff
changeset | 281 | to not introducing any other character. | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 282 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 283 | \begin{enumerate}
 | 
| 492 | 284 | \setcounter{enumi}{4}
 | 
| 216 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 285 | \item \texttt{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 286 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\ | 
| 216 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 287 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"} | 
| 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 288 | \item \texttt{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\ 
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 289 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\ | 
| 216 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 290 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"} | 
| 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 291 | \item \texttt{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\ 
 | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 292 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\ | 
| 216 
f5ec7c597c5b
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
133diff
changeset | 293 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"} | 
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 294 | \end{enumerate}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 295 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 296 | |
| 492 | 297 | |
| 127 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 298 | \end{document}
 | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 299 | |
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 300 | %%% Local Variables: | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 301 | %%% mode: latex | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 302 | %%% TeX-master: t | 
| 
41ef073ac6c4
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 303 | %%% End: |