57 are extremely useful for many text-processing tasks, such as finding patterns in texts, |
57 are extremely useful for many text-processing tasks, such as finding patterns in texts, |
58 lexing programs, syntax highlighting and so on. Given that regular expressions were |
58 lexing programs, syntax highlighting and so on. Given that regular expressions were |
59 introduced in 1950 by <A HREF="http://en.wikipedia.org/wiki/Stephen_Cole_Kleene">Stephen Kleene</A>, |
59 introduced in 1950 by <A HREF="http://en.wikipedia.org/wiki/Stephen_Cole_Kleene">Stephen Kleene</A>, |
60 you might think regular expressions have since been studied and implemented to death. But you would definitely be |
60 you might think regular expressions have since been studied and implemented to death. But you would definitely be |
61 mistaken: in fact they are still an active research area. On the top of my head, I can give |
61 mistaken: in fact they are still an active research area. On the top of my head, I can give |
62 you at least research papers that appeared in the last few years. |
62 you at least ten research papers that appeared in the last few years. |
63 For example |
63 For example |
64 <A HREF="http://www.home.hs-karlsruhe.de/~suma0002/publications/regex-parsing-derivatives.pdf">this paper</A> |
64 <A HREF="http://www.home.hs-karlsruhe.de/~suma0002/publications/regex-parsing-derivatives.pdf">this paper</A> |
65 about regular expression matching and derivatives was presented just last summer at the international |
65 about regular expression matching and derivatives was presented at the international |
66 FLOPS'14 conference. The task in this project is to implement their results and use them for lexing.</p> |
66 FLOPS'14 conference. The task in this project is to implement their results and use them for lexing.</p> |
67 |
67 |
68 <p>The background for this project is that some regular expressions are |
68 <p>The background for this project is that some regular expressions are |
69 “<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>” |
69 “<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>” |
70 and can “stab you in the back” according to |
70 and can “stab you in the back” according to |
124 I used derivatives very successfully once for something completely different in a |
124 I used derivatives very successfully once for something completely different in a |
125 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/Publications/rexp.pdf">paper</A> |
125 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/Publications/rexp.pdf">paper</A> |
126 about the <A HREF="http://en.wikipedia.org/wiki/Myhill–Nerode_theorem">Myhill-Nerode theorem</A>. |
126 about the <A HREF="http://en.wikipedia.org/wiki/Myhill–Nerode_theorem">Myhill-Nerode theorem</A>. |
127 So I know they are worth their money. Still, it would be interesting to actually compare their results |
127 So I know they are worth their money. Still, it would be interesting to actually compare their results |
128 with my simple rainy-afternoon matcher and potentially “blow away” the regular expression matchers |
128 with my simple rainy-afternoon matcher and potentially “blow away” the regular expression matchers |
129 in Python and Ruby (and possibly in Scala too). The application would be to implement a fast lexer for |
129 in Python, Ruby and Java (and possibly in Scala too). The application would be to implement a fast lexer for |
130 programming languages. |
130 programming languages. |
131 </p> |
131 </p> |
132 |
132 |
133 <p> |
133 <p> |
134 <B>Literature:</B> |
134 <B>Literature:</B> |
151 regular expressions can be obtained from <A HREF="http://www.haskell.org/haskellwiki/Regex_Posix">here</A>. |
151 regular expressions can be obtained from <A HREF="http://www.haskell.org/haskellwiki/Regex_Posix">here</A>. |
152 </p> |
152 </p> |
153 |
153 |
154 <p> |
154 <p> |
155 <B>Skills:</B> |
155 <B>Skills:</B> |
156 This is a project for a student with an interest in theory and some |
156 This is a project for a student with an interest in theory and with |
157 good programming skills. The project can be easily implemented |
157 good programming skills. The project can be easily implemented |
158 in functional languages like |
158 in functional languages like |
159 <A HREF="http://www.scala-lang.org/">Scala</A>, |
159 <A HREF="http://www.scala-lang.org/">Scala</A>, |
160 <A HREF="http://fsharp.org">F#</A>, |
160 <A HREF="http://fsharp.org">F#</A>, |
161 <A HREF="http://en.wikipedia.org/wiki/Standard_ML">ML</A>, |
161 <A HREF="http://en.wikipedia.org/wiki/Standard_ML">ML</A>, |
327 appropriate libraries. Tutorials for JavaScript are <A HREF="http://www.w3schools.com/js/">here</A>. |
327 appropriate libraries. Tutorials for JavaScript are <A HREF="http://www.w3schools.com/js/">here</A>. |
328 A parser generator for JavaScript is <A HREF="http://pegjs.majda.cz">here</A>. There are probably also |
328 A parser generator for JavaScript is <A HREF="http://pegjs.majda.cz">here</A>. There are probably also |
329 others. If you want to avoid JavaScript there are a number of alternatives: for example the |
329 others. If you want to avoid JavaScript there are a number of alternatives: for example the |
330 <A HREF="http://elm-lang.org">Elm</A> |
330 <A HREF="http://elm-lang.org">Elm</A> |
331 language has been especially designed for implementing with ease interactive animations, which would be |
331 language has been especially designed for implementing with ease interactive animations, which would be |
332 very convenient for this project. |
332 very convenient for this project. A nice slide making project done by a previous student is |
|
333 <A HREF=" http://www.markslides.org/src/markslides.html">MarkSlides</A> by Oleksandr Cherednychenko. |
333 </p> |
334 </p> |
334 |
335 |
335 <li> <H4>[CU4] An Online Student Voting System</H4> |
336 <li> <H4>[CU4] An Online Student Voting System</H4> |
336 |
337 |
337 <p> |
338 <p> |
620 <li> <H4>Earlier Projects</H4> |
621 <li> <H4>Earlier Projects</H4> |
621 |
622 |
622 I am also open to project suggestions from you. You might find some inspiration from my earlier projects: |
623 I am also open to project suggestions from you. You might find some inspiration from my earlier projects: |
623 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/bsc-projects-12.html">BSc 2012/13</A>, |
624 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/bsc-projects-12.html">BSc 2012/13</A>, |
624 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/msc-projects-12.html">MSc 2012/13</A>, |
625 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/msc-projects-12.html">MSc 2012/13</A>, |
625 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/bsc-projects-13.html">BSc 2013/14</A> |
626 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/bsc-projects-13.html">BSc 2013/14</A>, |
626 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/msc-projects-13.html">MSc 2013/14</A> |
627 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/msc-projects-13.html">MSc 2013/14</A>, |
627 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/bsc-projects-14.html">BSc 2014/15</A> |
628 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/bsc-projects-14.html">BSc 2014/15</A>, |
628 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/msc-projects-14.html">MSc 2014/15</A> |
629 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/msc-projects-14.html">MSc 2014/15</A>, |
|
630 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/bsc-projects-15.html">BSc 2015/16</A>, |
|
631 <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/msc-projects-15.html">MSc 2015/16</A> |
629 </ul> |
632 </ul> |
630 </TD> |
633 </TD> |
631 </TR> |
634 </TR> |
632 </TABLE> |
635 </TABLE> |
633 |
636 |