diff -r 1933e88cb73e -r 95ee5cc5c05d handouts/ho01.tex --- a/handouts/ho01.tex Fri Sep 27 11:01:31 2013 +0100 +++ b/handouts/ho01.tex Fri Sep 27 11:49:44 2013 +0100 @@ -4,9 +4,47 @@ \usepackage{amssymb} \usepackage{amsmath} \usepackage[T1]{fontenc} +\usepackage{listings} +\usepackage{xcolor} \newcommand{\dn}{\stackrel{\mbox{\scriptsize def}}{=}}% +\definecolor{javared}{rgb}{0.6,0,0} % for strings +\definecolor{javagreen}{rgb}{0.25,0.5,0.35} % comments +\definecolor{javapurple}{rgb}{0.5,0,0.35} % keywords +\definecolor{javadocblue}{rgb}{0.25,0.35,0.75} % javadoc + +\lstdefinelanguage{scala}{ + morekeywords={abstract,case,catch,class,def,% + do,else,extends,false,final,finally,% + for,if,implicit,import,match,mixin,% + new,null,object,override,package,% + private,protected,requires,return,sealed,% + super,this,throw,trait,true,try,% + type,val,var,while,with,yield}, + otherkeywords={=>,<-,<\%,<:,>:,\#,@}, + sensitive=true, + morecomment=[l]{//}, + morecomment=[n]{/*}{*/}, + morestring=[b]", + morestring=[b]', + morestring=[b]""" +} + +\lstset{language=Scala, + basicstyle=\ttfamily, + keywordstyle=\color{javapurple}\bfseries, + stringstyle=\color{javagreen}, + commentstyle=\color{javagreen}, + morecomment=[s][\color{javadocblue}]{/**}{*/}, + numbers=left, + numberstyle=\tiny\color{black}, + stepnumber=1, + numbersep=10pt, + tabsize=2, + showspaces=false, + showstringspaces=false} + \begin{document} \section*{Handout 1} @@ -238,15 +276,40 @@ \noindent This means we can now precisely state what the meaning, for example, of the regular expression ${\it h} \cdot {\it e} \cdot {\it l} \cdot {\it l} \cdot {\it o}$ is, namely -$L({\it h} \cdot {\it e} \cdot {\it l} \cdot {\it l} \cdot {\it o}) = \{\text{\it"hello"}\}$. Similarly if we have the choice -$a + b$, the meaning is $L(a + b) = \{\text{\it"a"}, \text{\it"b"}\}$, namely the only two strings which can possibly -be matched by this choice. +$L({\it h} \cdot {\it e} \cdot {\it l} \cdot {\it l} \cdot {\it o}) = \{\text{\it"hello"}\}$...as expected. Similarly if we have the +choice-regular-expression $a + b$, its meaning is $L(a + b) = \{\text{\it"a"}, \text{\it"b"}\}$, namely the only two strings which can possibly +be matched by this choice. You can now also conclude why we do not make a difference +between the different regular expressions $(r_1 + r_2) + r_3$ and $r_1 + (r_2 + r_3)$....they +are not the same regular expression, but have the same meaning. -The point of this definition is that we can now precisely specify when a string is matched by a -regular expression, namely a string, say $s$, is matched by a regular expression, say $r$, if -and only if $s \in L(r)$. In fact we will write a program {\it match} that takes any string $s$ and +The point of the definition of $L$ is that we can now precisely specify when a string $s$ is matched by a +regular expression $r$, namely only when $s \in L(r)$. In fact we will write a program {\it match} that takes any string $s$ and any regular expression $r$ as argument and returns \emph{yes}, if $s \in L(r)$ and \emph{no}, if $s \not\in L(r)$. We leave this for the next lecture. + +\begin{figure}[p] +{\lstset{language=Scala}\texttt{\lstinputlisting{../progs/crawler1.scala}}} +\caption{Scala code for a web-crawler that can detect broken links in a web-page. It uses +the regular expression {\tt http\_pattern} in Line~15 for recognising URL-addresses. It finds +all links using the library function {\tt findAllIn} in Line~21.} +\end{figure} + +\begin{figure}[p] +{\lstset{language=Scala}\texttt{\lstinputlisting{../progs/crawler2.scala}}} +\caption{A version of the web-crawler which only follows links in ``my'' domain---since these are the +ones I am interested in to fix. It uses the regular expression {\tt my\_urls} in Line~16. +The main change is in Line~26 where we test whether URL is in our domain or not.} + +\end{figure} + +\begin{figure}[p] +{\lstset{language=Scala}\texttt{\lstinputlisting{../progs/crawler3.scala}}} +\caption{A small email harvester---whenever we download a web-page, we also check whether +it contains any email addresses. For this we use the regular expression {\tt email\_pattern} in +Line~17. The main change is in Lines 33 and 34 where we print all email addresses +we can find in a page.} +\end{figure} + \end{document} %%% Local Variables: