# HG changeset patch # User Christian Urban # Date 1696163751 -3600 # Node ID 4d9674598682946d4f4d797f4a69af1f0c7b97f8 # Parent c54e0c4728918d31ad3e1d1d9de1f298b572326e updated diff -r c54e0c472891 -r 4d9674598682 cws/cw01.pdf Binary file cws/cw01.pdf has changed diff -r c54e0c472891 -r 4d9674598682 cws/cw02.pdf Binary file cws/cw02.pdf has changed diff -r c54e0c472891 -r 4d9674598682 cws/cw02.tex --- a/cws/cw02.tex Sun Oct 01 12:04:51 2023 +0100 +++ b/cws/cw02.tex Sun Oct 01 13:35:51 2023 +0100 @@ -15,8 +15,9 @@ you answered the questions, otherwise a mark of 0\% will be awarded. You need to submit your written answers as pdf---see attached questionaire. Code send as code. If you use -Scala in your code, a good place to start is the file \texttt{re3.sc} -that is uploaded to Github. +Scala in your code, a good place to start is the file \texttt{lexer.sc} +and \texttt{token.sc} +that are uploaded to Github. \subsection*{Disclaimer\alert} @@ -83,18 +84,20 @@ \texttt{$\backslash$} and \texttt{:} -\item strings are enclosed by double quotes, like \texttt{"\ldots"}, and consisting of - symbols, whitespaces and digits \item parentheses are \texttt{(}, \texttt{\{}, \texttt{)} and \texttt{\}} +\item digits are \pcode{0} to \pcode{9} \item there are semicolons \texttt{;} \item whitespaces are either \texttt{" "} (one or more) or \texttt{$\backslash$n} or \texttt{$\backslash$t} or \texttt{$\backslash$r} \item identifiers are letters followed by underscores \texttt{\_\!\_}, letters -or digits -\item numbers are \pcode{0}, \pcode{1}, \ldots and so on; give + or digits +\item numbers for numbers give a regular expression that can recognise \pcode{0}, but not numbers with leading zeroes, such as \pcode{001} -\item comments start with \texttt{//} and contain symbols, spaces and digits until the end of the line +\item strings are enclosed by double quotes, like \texttt{"\ldots"}, and consisting of + symbols, digits, parentheses, whitespaces and \texttt{$\backslash$n} (note the latter is not the escaped version but \texttt{$\backslash$} followed by \texttt{n}, otherwise we would not be able to indicate in our strings when to write a newline). +\item comments start with \texttt{//} and contain symbols, spaces and digits until the end-of-the-line markers +\item endo-of-line-markers are \texttt{$\backslash$n} and \texttt{$\backslash$r$\backslash$n} \end{enumerate} \noindent @@ -177,7 +180,7 @@ that you can extract easily the tokens from a value).\medskip \noindent -Finally give the tokens for your regular expressions from Q1 and the +Finally give \textbf{all} the tokens for your regular expressions from Q1 and the string \begin{center} @@ -192,9 +195,10 @@ Extend your lexer from Q2 to also simplify regular expressions after each derivation step and rectify the computed values after each -injection. Use this lexer to tokenize the programs in -Figures~\ref{fib} -- \ref{collatz}. You can find the programms also on -KEATS. Give the tokens of these programs where whitespaces are +injection. Use this lexer to tokenize six WHILE programs some of which +are given in Figures~\ref{fib} -- \ref{collatz}. You can find these programms also on +Github under the \texttt{cw2} directory. Give the tokens of these +programs where whitespaces and comments are filtered out. Make sure you can tokenise \textbf{exactly} these programs.\bigskip @@ -217,7 +221,7 @@ \end{figure} \begin{figure}[h] -\mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../progs/while-tests/collatz2.while}} +\mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../cwtests/cw02/collatz2.while}} \caption{A program that calculates the Collatz series for numbers between 1 and 100.\label{collatz}} \end{figure} @@ -229,7 +233,7 @@ \mbox{} \noindent -\textbf{Question 2:} +\textbf{Question 2:}\\ (Use mathematical notation, such as $r^+$, rather than code, such as \code{PLUS(r)}) \begin{center} \def\arraystretch{1.6} diff -r c54e0c472891 -r 4d9674598682 cwtests/cw02/factors.while --- a/cwtests/cw02/factors.while Sun Oct 01 12:04:51 2023 +0100 +++ b/cwtests/cw02/factors.while Sun Oct 01 13:35:51 2023 +0100 @@ -1,13 +1,13 @@ // Find all factors of a given input number - +// by J.R. Cordy August 2005 -write "Input n please: "; +write "Input n please"; read n; -write "The factors of n are: \n"; +write "The factors of n are:\n"; f := 2; while (f < n / 2 + 1) do { if ((n / f) * f == n) - then { write(f); write("\n") } + then { write(f); write "\n" } else { skip }; f := f + 1 -} \ No newline at end of file +} diff -r c54e0c472891 -r 4d9674598682 cwtests/cw02/fib.while --- a/cwtests/cw02/fib.while Sun Oct 01 12:04:51 2023 +0100 +++ b/cwtests/cw02/fib.while Sun Oct 01 13:35:51 2023 +0100 @@ -9,6 +9,5 @@ n := n - 1 }; write "Result: "; -write minus2 ; -write "\n" +write minus2