bsc-projects-16.html
changeset 458 0647d8161a84
parent 457 3feaf8bc3e48
child 459 c27d96cf68a8
equal deleted inserted replaced
457:3feaf8bc3e48 458:0647d8161a84
    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   &ldquo;<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>&rdquo;
    69   &ldquo;<A HREF="http://en.wikipedia.org/wiki/ReDoS#Examples">evil</A>&rdquo;
    70   and can &ldquo;stab you in the back&rdquo; according to
    70   and can &ldquo;stab you in the back&rdquo; 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 &ldquo;blow away&rdquo; the regular expression matchers 
   128   with my simple rainy-afternoon matcher and potentially &ldquo;blow away&rdquo; 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