| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Mon, 10 Oct 2022 15:06:41 +0100 | |
| changeset 886 | 7a8187cf5bb3 | 
| parent 877 | a8a4ca890f56 | 
| child 918 | 19a5d332cb49 | 
| permissions | -rw-r--r-- | 
| 630 | 1  | 
% !TEX program = xelatex  | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
2  | 
\documentclass{article}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
3  | 
\usepackage{../style}
 | 
| 
216
 
f5ec7c597c5b
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
4  | 
\usepackage{../langs}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
5  | 
|
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
6  | 
\begin{document}
 | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
7  | 
|
| 748 | 8  | 
\section*{Coursework 2}
 | 
| 
198
 
f54972b0f641
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
182 
diff
changeset
 | 
9  | 
|
| 835 | 10  | 
\noindent This coursework is worth 10\% and is due on \cwTWO{} at
 | 
| 877 | 11  | 
16:00. You are asked to implement the Sulzmann \& Lu lexer for the  | 
| 748 | 12  | 
WHILE language. You can do the implementation in any programming  | 
13  | 
language you like, but you need to submit the source code with which  | 
|
14  | 
you answered the questions, otherwise a mark of 0\% will be  | 
|
15  | 
awarded. You can submit your answers in a txt-file or as pdf. Code  | 
|
16  | 
submit as code. Please package everything in a zip-file that creates a  | 
|
17  | 
directory with the name \texttt{YournameYourfamilyname} on my end. Thanks!
 | 
|
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
18  | 
|
| 750 | 19  | 
\subsection*{Disclaimer\alert}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
20  | 
|
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
21  | 
It should be understood that the work you submit represents  | 
| 
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
22  | 
your own effort. You have not copied from anyone else. An  | 
| 
363
 
0d6deecdb2eb
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
358 
diff
changeset
 | 
23  | 
exception is the Scala code from KEATS and the code I showed  | 
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
24  | 
during the lectures, which you can both freely use. You can  | 
| 886 | 25  | 
also use your own code from the CW~1. But do not  | 
26  | 
be tempted to ask Github Copilot for help or do any other  | 
|
27  | 
shenanigans like this!  | 
|
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
28  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
29  | 
\subsection*{Question 1}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
30  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
31  | 
To implement a lexer for the WHILE language, you first  | 
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
32  | 
need to design the appropriate regular expressions for the  | 
| 748 | 33  | 
following eleven syntactic entities:  | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
34  | 
|
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
35  | 
\begin{enumerate}
 | 
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
36  | 
\item keywords are  | 
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
37  | 
|
| 748 | 38  | 
\begin{center}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
39  | 
\texttt{while}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
40  | 
\texttt{if}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
41  | 
\texttt{then}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
42  | 
\texttt{else}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
43  | 
\texttt{do}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
44  | 
\texttt{for}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
45  | 
\texttt{to}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
46  | 
\texttt{true}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
47  | 
\texttt{false}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
48  | 
\texttt{read}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
49  | 
\texttt{write},
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
50  | 
\texttt{skip}
 | 
| 748 | 51  | 
\end{center} 
 | 
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
52  | 
|
| 748 | 53  | 
\item operators are:  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
54  | 
\texttt{+}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
55  | 
\texttt{-}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
56  | 
\texttt{*}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
57  | 
\texttt{\%},
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
58  | 
\texttt{/},
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
59  | 
\texttt{==}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
60  | 
\texttt{!=}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
61  | 
\texttt{>}, 
 | 
| 748 | 62  | 
\texttt{<},
 | 
63  | 
\texttt{<=}, 
 | 
|
64  | 
\texttt{>=},
 | 
|
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
65  | 
\texttt{:=},
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
66  | 
\texttt{\&\&},
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
67  | 
\texttt{||}
 | 
| 748 | 68  | 
|
69  | 
\item letters are uppercase and lowercase  | 
|
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
70  | 
|
| 748 | 71  | 
\item symbols are letters plus the characters  | 
72  | 
  \texttt{.},
 | 
|
73  | 
  \texttt{\_},
 | 
|
74  | 
  \texttt{>},
 | 
|
75  | 
  \texttt{<},
 | 
|
76  | 
  \texttt{=},
 | 
|
77  | 
  \texttt{;},
 | 
|
| 850 | 78  | 
  \texttt{,} (comma),
 | 
| 833 | 79  | 
  \texttt{$\backslash$} and
 | 
| 748 | 80  | 
  \texttt{:}
 | 
81  | 
||
| 850 | 82  | 
\item strings are enclosed by double quotes, like \texttt{"\ldots"}, and consisting of
 | 
| 748 | 83  | 
symbols, whitespaces and digits  | 
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
84  | 
\item parentheses are \texttt{(}, \texttt{\{}, \texttt{)} and \texttt{\}}
 | 
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
85  | 
\item there are semicolons \texttt{;}
 | 
| 
447
 
68769db65185
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
428 
diff
changeset
 | 
86  | 
\item whitespaces are either \texttt{" "} (one or more) or \texttt{$\backslash$n} or
 | 
| 845 | 87  | 
  \texttt{$\backslash$t} or \texttt{$\backslash$r}
 | 
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
88  | 
\item identifiers are letters followed by underscores \texttt{\_\!\_}, letters
 | 
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
89  | 
or digits  | 
| 
396
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
90  | 
\item numbers are \pcode{0}, \pcode{1}, \ldots and so on; give 
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
91  | 
a regular expression that can recognise \pcode{0}, but not numbers 
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
92  | 
with leading zeroes, such as \pcode{001}
 | 
| 748 | 93  | 
\item comments start with \texttt{//} and contain symbols, spaces and digits until the end of the line
 | 
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
94  | 
\end{enumerate}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
95  | 
|
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
96  | 
\noindent  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
97  | 
You can use the basic regular expressions  | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
98  | 
|
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
99  | 
\[  | 
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
100  | 
\ZERO,\; \ONE,\; c,\; r_1 + r_2,\; r_1 \cdot r_2,\; r^*  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
101  | 
\]  | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
102  | 
|
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
103  | 
\noindent  | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
104  | 
but also the following extended regular expressions  | 
| 
182
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
105  | 
|
| 
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
106  | 
\begin{center}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
107  | 
\begin{tabular}{ll}
 | 
| 494 | 108  | 
$[c_1,c_2,\ldots,c_n]$ & a set of characters\\  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
109  | 
$r^+$ & one or more times $r$\\  | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
110  | 
$r^?$ & optional $r$\\  | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
111  | 
$r^{\{n\}}$ & n-times $r$\\
 | 
| 
182
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
112  | 
\end{tabular}
 | 
| 
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
113  | 
\end{center}
 | 
| 
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
114  | 
|
| 458 | 115  | 
\noindent  | 
| 473 | 116  | 
Later on you will also need the record regular expression:  | 
| 458 | 117  | 
|
118  | 
\begin{center}
 | 
|
119  | 
\begin{tabular}{ll}
 | 
|
120  | 
$REC(x:r)$ & record regular expression\\  | 
|
121  | 
\end{tabular}
 | 
|
122  | 
\end{center}
 | 
|
123  | 
||
| 
396
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
124  | 
\noindent Try to design your regular expressions to be as  | 
| 494 | 125  | 
small as possible. For example you should use character sets  | 
126  | 
for identifiers and numbers. Feel free to use the general  | 
|
127  | 
character constructor \textit{CFUN} introduced in CW 1.
 | 
|
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
128  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
129  | 
\subsection*{Question 2}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
130  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
131  | 
Implement the Sulzmann \& Lu lexer from the lectures. For  | 
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
132  | 
this you need to implement the functions $nullable$ and $der$  | 
| 
369
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
133  | 
(you can use your code from CW~1), as well as $mkeps$ and  | 
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
134  | 
$inj$. These functions need to be appropriately extended for  | 
| 
369
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
135  | 
the extended regular expressions from Q1. Write down the  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
136  | 
clauses for  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
137  | 
|
| 
369
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
138  | 
\begin{center}
 | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
139  | 
\begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
 | 
| 494 | 140  | 
$mkeps([c_1,c_2,\ldots,c_n])$ & $\dn$ & $?$\\  | 
| 
369
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
141  | 
$mkeps(r^+)$ & $\dn$ & $?$\\  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
142  | 
$mkeps(r^?)$ & $\dn$ & $?$\\  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
143  | 
$mkeps(r^{\{n\}})$             & $\dn$ & $?$\medskip\\
 | 
| 494 | 144  | 
$inj\, ([c_1,c_2,\ldots,c_n])\,c\,\ldots$ & $\dn$ & $?$\\  | 
| 
369
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
145  | 
$inj\, (r^+)\,c\,\ldots$ & $\dn$ & $?$\\  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
146  | 
$inj\, (r^?)\,c\,\ldots$ & $\dn$ & $?$\\  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
147  | 
$inj\, (r^{\{n\}})\,c\,\ldots$             & $\dn$ & $?$\\
 | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
148  | 
\end{tabular}
 | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
149  | 
\end{center}
 | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
150  | 
|
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
151  | 
\noindent where $inj$ takes three arguments: a regular  | 
| 
396
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
152  | 
expression, a character and a value. Test your lexer code  | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
153  | 
with at least the two small examples below:  | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
154  | 
|
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
155  | 
\begin{center}
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
156  | 
\begin{tabular}{ll}
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
157  | 
regex: & string:\smallskip\\  | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
158  | 
$a^{\{3\}}$ & $aaa$\\
 | 
| 458 | 159  | 
$(a + \ONE)^{\{3\}}$ & $aa$
 | 
| 
396
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
160  | 
\end{tabular}
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
161  | 
\end{center}
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
162  | 
|
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
163  | 
|
| 598 | 164  | 
\noindent Both strings should be successfully lexed by the  | 
| 
396
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
165  | 
respective regular expression, that means the lexer returns  | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
166  | 
in both examples a value.  | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
167  | 
|
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
168  | 
|
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
169  | 
Also add the record regular expression from the  | 
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
170  | 
lectures to your lexer and implement a function, say  | 
| 
396
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
171  | 
\pcode{env}, that returns all assignments from a value (such
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
172  | 
that you can extract easily the tokens from a value).\medskip  | 
| 
369
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
173  | 
|
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
174  | 
\noindent  | 
| 
384
 
4629448c1bd9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
369 
diff
changeset
 | 
175  | 
Finally give the tokens for your regular expressions from Q1 and the  | 
| 
369
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
176  | 
string  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
177  | 
|
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
178  | 
\begin{center}
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
179  | 
\code{"read n;"}
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
180  | 
\end{center} 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
181  | 
|
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
182  | 
\noindent  | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
183  | 
and use your \pcode{env} function to give the token sequence.
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
184  | 
|
| 
333
 
8890852e18b7
updated coursework
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
328 
diff
changeset
 | 
185  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
186  | 
\subsection*{Question 3}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
187  | 
|
| 748 | 188  | 
Extend your lexer from Q2 to also simplify regular expressions after  | 
189  | 
each derivation step and rectify the computed values after each  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
190  | 
injection. Use this lexer to tokenize the programs in  | 
| 748 | 191  | 
Figures~\ref{fib} -- \ref{collatz}. You can find the programms also on
 | 
192  | 
KEATS. Give the tokens of these programs where whitespaces are  | 
|
193  | 
filtered out. Make sure you can tokenise \textbf{exactly} these
 | 
|
194  | 
programs.\bigskip  | 
|
| 
182
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
195  | 
|
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
196  | 
|
| 578 | 197  | 
\begin{figure}[h]
 | 
| 860 | 198  | 
\mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../cwtests/cw02/fib.while}}
 | 
| 
181
 
1f98d215df71
added material
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
180 
diff
changeset
 | 
199  | 
\caption{Fibonacci program in the WHILE language.\label{fib}}
 | 
| 
 
1f98d215df71
added material
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
180 
diff
changeset
 | 
200  | 
\end{figure}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
201  | 
|
| 578 | 202  | 
\begin{figure}[h]
 | 
| 860 | 203  | 
\mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../cwtests/cw02/loops.while}}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
204  | 
\caption{The three-nested-loops program in the WHILE language. 
 | 
| 578 | 205  | 
(Usually used for timing measurements.)\label{loop}}
 | 
| 
181
 
1f98d215df71
added material
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
180 
diff
changeset
 | 
206  | 
\end{figure}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
207  | 
|
| 659 | 208  | 
\begin{figure}[h]
 | 
| 860 | 209  | 
\mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../cwtests/cw02/factors.while}}
 | 
| 659 | 210  | 
\caption{A program that calculates factors for numbers in the WHILE
 | 
211  | 
  language.\label{factors}}
 | 
|
212  | 
\end{figure}
 | 
|
213  | 
||
| 748 | 214  | 
\begin{figure}[h]
 | 
215  | 
\mbox{\lstinputlisting[language=While,xleftmargin=10mm]{../progs/while-tests/collatz2.while}}
 | 
|
216  | 
\caption{A program that calculates the Collatz series for numbers
 | 
|
217  | 
  between 1 and 100.\label{collatz}}
 | 
|
218  | 
\end{figure}
 | 
|
219  | 
||
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
220  | 
\end{document}
 | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
221  | 
|
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
222  | 
%%% Local Variables:  | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
223  | 
%%% mode: latex  | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
224  | 
%%% TeX-master: t  | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
225  | 
%%% End:  |