3 \usepackage{../style} |
3 \usepackage{../style} |
4 \usepackage{../langs} |
4 \usepackage{../langs} |
5 |
5 |
6 \begin{document} |
6 \begin{document} |
7 |
7 |
8 \section*{Coursework 2 (Strand 1)} |
8 \section*{Coursework 2} |
9 |
9 |
10 \noindent This coursework is worth 5\% and is due on |
10 \noindent This coursework is worth 8\% and is due on \cwTWO{} at |
11 \cwTWO{} at 18:00. You are asked to implement the Sulzmann \& |
11 18:00. You are asked to implement the Sulzmann \& Lu lexer for the |
12 Lu lexer for the WHILE language. You can do the |
12 WHILE language. You can do the implementation in any programming |
13 implementation in any programming language you like, but you |
13 language you like, but you need to submit the source code with which |
14 need to submit the source code with which you answered the |
14 you answered the questions, otherwise a mark of 0\% will be |
15 questions, otherwise a mark of 0\% will be awarded. You can |
15 awarded. You can submit your answers in a txt-file or as pdf. Code |
16 submit your answers in a txt-file or as pdf. Code submit as |
16 submit as code. Please package everything in a zip-file that creates a |
17 code. |
17 directory with the name \texttt{YournameYourfamilyname} on my end. Thanks! |
18 |
18 |
19 \subsection*{Disclaimer} |
19 \subsection*{Disclaimer} |
20 |
20 |
21 It should be understood that the work you submit represents |
21 It should be understood that the work you submit represents |
22 your own effort. You have not copied from anyone else. An |
22 your own effort. You have not copied from anyone else. An |
44 \texttt{true}, |
44 \texttt{true}, |
45 \texttt{false}, |
45 \texttt{false}, |
46 \texttt{read}, |
46 \texttt{read}, |
47 \texttt{write}, |
47 \texttt{write}, |
48 \texttt{skip} |
48 \texttt{skip} |
49 \end{quote} |
49 \end{center} |
50 |
50 |
51 \item operators are |
51 \item operators are: |
52 |
|
53 \begin{quote} |
|
54 \texttt{+}, |
52 \texttt{+}, |
55 \texttt{-}, |
53 \texttt{-}, |
56 \texttt{*}, |
54 \texttt{*}, |
57 \texttt{\%}, |
55 \texttt{\%}, |
58 \texttt{/}, |
56 \texttt{/}, |
59 \texttt{==}, |
57 \texttt{==}, |
60 \texttt{!=}, |
58 \texttt{!=}, |
61 \texttt{>}, |
59 \texttt{>}, |
62 \texttt{<}, |
60 \texttt{<}, |
|
61 \texttt{<=}, |
|
62 \texttt{>=}, |
63 \texttt{:=}, |
63 \texttt{:=}, |
64 \texttt{\&\&}, |
64 \texttt{\&\&}, |
65 \texttt{||} |
65 \texttt{||} |
66 \end{quote} |
66 |
67 |
67 \item letters are uppercase and lowercase |
68 \item strings are enclosed by \texttt{"\ldots"} |
68 |
|
69 \item symbols are letters plus the characters |
|
70 \texttt{.}, |
|
71 \texttt{\_}, |
|
72 \texttt{>}, |
|
73 \texttt{<}, |
|
74 \texttt{=}, |
|
75 \texttt{;}, |
|
76 \texttt{,} and |
|
77 \texttt{:} |
|
78 |
|
79 \item strings are enclosed by \texttt{"\ldots"} and consisting of |
|
80 symbols, whitespaces and digits |
69 \item parentheses are \texttt{(}, \texttt{\{}, \texttt{)} and \texttt{\}} |
81 \item parentheses are \texttt{(}, \texttt{\{}, \texttt{)} and \texttt{\}} |
70 \item there are semicolons \texttt{;} |
82 \item there are semicolons \texttt{;} |
71 \item whitespaces are either \texttt{" "} (one or more) or \texttt{$\backslash$n} or |
83 \item whitespaces are either \texttt{" "} (one or more) or \texttt{$\backslash$n} or |
72 \texttt{$\backslash$t} |
84 \texttt{$\backslash$t} |
73 \item identifiers are letters followed by underscores \texttt{\_\!\_}, letters |
85 \item identifiers are letters followed by underscores \texttt{\_\!\_}, letters |
74 or digits |
86 or digits |
75 \item numbers are \pcode{0}, \pcode{1}, \ldots and so on; give |
87 \item numbers are \pcode{0}, \pcode{1}, \ldots and so on; give |
76 a regular expression that can recognise \pcode{0}, but not numbers |
88 a regular expression that can recognise \pcode{0}, but not numbers |
77 with leading zeroes, such as \pcode{001} |
89 with leading zeroes, such as \pcode{001} |
|
90 \item comments start with \texttt{//} and contain symbols, spaces and digits until the end of the line |
78 \end{enumerate} |
91 \end{enumerate} |
79 |
92 |
80 \noindent |
93 \noindent |
81 You can use the basic regular expressions |
94 You can use the basic regular expressions |
82 |
95 |
167 and use your \pcode{env} function to give the token sequence. |
180 and use your \pcode{env} function to give the token sequence. |
168 |
181 |
169 |
182 |
170 \subsection*{Question 3} |
183 \subsection*{Question 3} |
171 |
184 |
172 Extend your lexer from Q2 to also simplify regular expressions |
185 Extend your lexer from Q2 to also simplify regular expressions after |
173 after each derivation step and rectify the computed values after each |
186 each derivation step and rectify the computed values after each |
174 injection. Use this lexer to tokenize the programs in |
187 injection. Use this lexer to tokenize the programs in |
175 Figure~\ref{fib}, \ref{loop} and \ref{factors}. Give the tokens of these |
188 Figures~\ref{fib} -- \ref{collatz}. You can find the programms also on |
176 programs where whitespaces are filtered out. Make sure you can |
189 KEATS. Give the tokens of these programs where whitespaces are |
177 tokenise \textbf{exactly} these programs.\bigskip |
190 filtered out. Make sure you can tokenise \textbf{exactly} these |
178 |
191 programs.\bigskip |
179 |
192 |
180 \begin{figure}[h] |
193 |
181 \mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../progs/fib.while}} |
194 \begin{figure}[h] |
|
195 \mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../progs/while-tests/fib.while}} |
182 \caption{Fibonacci program in the WHILE language.\label{fib}} |
196 \caption{Fibonacci program in the WHILE language.\label{fib}} |
183 \end{figure} |
197 \end{figure} |
184 |
198 |
185 \begin{figure}[h] |
199 \begin{figure}[h] |
186 \mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../progs/loops.while}} |
200 \mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../progs/while-tests/loops.while}} |
187 \caption{The three-nested-loops program in the WHILE language. |
201 \caption{The three-nested-loops program in the WHILE language. |
188 (Usually used for timing measurements.)\label{loop}} |
202 (Usually used for timing measurements.)\label{loop}} |
189 \end{figure} |
203 \end{figure} |
190 |
204 |
191 \begin{figure}[h] |
205 \begin{figure}[h] |
192 \mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../progs/factors.while}} |
206 \mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../progs/while-tests/factors.while}} |
193 \caption{A program that calculates factors for numbers in the WHILE |
207 \caption{A program that calculates factors for numbers in the WHILE |
194 language.\label{factors}} |
208 language.\label{factors}} |
|
209 \end{figure} |
|
210 |
|
211 \begin{figure}[h] |
|
212 \mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../progs/while-tests/collatz2.while}} |
|
213 \caption{A program that calculates the Collatz series for numbers |
|
214 between 1 and 100.\label{collatz}} |
195 \end{figure} |
215 \end{figure} |
196 |
216 |
197 \end{document} |
217 \end{document} |
198 |
218 |
199 %%% Local Variables: |
219 %%% Local Variables: |