| author | Christian Urban <urbanc@in.tum.de> | 
| Sat, 21 Jan 2017 00:25:09 +0000 | |
| changeset 473 | 99dd9e0f5577 | 
| parent 468 | 276247c863e3 | 
| child 494 | ac370a049359 | 
| permissions | -rw-r--r-- | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
1  | 
\documentclass{article}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
2  | 
\usepackage{../style}
 | 
| 
216
 
f5ec7c597c5b
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
3  | 
\usepackage{../langs}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
4  | 
|
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
5  | 
\begin{document}
 | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
6  | 
|
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
7  | 
\section*{Coursework 2 (Strand 1)}
 | 
| 
198
 
f54972b0f641
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
182 
diff
changeset
 | 
8  | 
|
| 
468
 
276247c863e3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
458 
diff
changeset
 | 
9  | 
\noindent This coursework is worth 5\% and is due on 4  | 
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
10  | 
November at 16:00. You are asked to implement the Sulzmann \&  | 
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
11  | 
Lu lexer for the WHILE language. You can do the  | 
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
12  | 
implementation in any programming language you like, but you  | 
| 
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
13  | 
need to submit the source code with which you answered the  | 
| 
395
 
e57d3d92b856
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
384 
diff
changeset
 | 
14  | 
questions, otherwise a mark of 0\% will be awarded. You can  | 
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
15  | 
submit your answers in a txt-file or as pdf. Code submit as  | 
| 
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
16  | 
code.  | 
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
17  | 
|
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
18  | 
\subsection*{Disclaimer}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
19  | 
|
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
20  | 
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
 | 
21  | 
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
 | 
22  | 
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
 | 
23  | 
during the lectures, which you can both freely use. You can  | 
| 
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
24  | 
also use your own code from the CW~1.  | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
25  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
26  | 
\subsection*{Question 1}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
27  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
28  | 
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
 | 
29  | 
need to design the appropriate regular expressions for the  | 
| 
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
30  | 
following eight syntactic entities:  | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
31  | 
|
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
32  | 
\begin{enumerate}
 | 
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
33  | 
\item keywords are  | 
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
34  | 
|
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
35  | 
\begin{quote}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
36  | 
\texttt{while}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
37  | 
\texttt{if}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
38  | 
\texttt{then}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
39  | 
\texttt{else}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
40  | 
\texttt{do}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
41  | 
\texttt{for}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
42  | 
\texttt{to}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
43  | 
\texttt{true}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
44  | 
\texttt{false}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
45  | 
\texttt{read}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
46  | 
\texttt{write},
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
47  | 
\texttt{skip}
 | 
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
48  | 
\end{quote} 
 | 
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
49  | 
|
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
50  | 
\item operators are  | 
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
51  | 
|
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
52  | 
\begin{quote}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
53  | 
\texttt{+}, 
 | 
| 
 
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{<}, 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
62  | 
\texttt{:=},
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
63  | 
\texttt{\&\&},
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
64  | 
\texttt{||}
 | 
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
65  | 
\end{quote} 
 | 
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
66  | 
|
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
67  | 
\item strings are enclosed by \texttt{"\ldots"} 
 | 
| 
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
68  | 
\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
 | 
69  | 
\item there are semicolons \texttt{;}
 | 
| 
447
 
68769db65185
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
428 
diff
changeset
 | 
70  | 
\item whitespaces are either \texttt{" "} (one or more) or \texttt{$\backslash$n} or
 | 
| 
 
68769db65185
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
428 
diff
changeset
 | 
71  | 
  \texttt{$\backslash$t}
 | 
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
72  | 
\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
 | 
73  | 
or digits  | 
| 
396
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
74  | 
\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
 | 
75  | 
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
 | 
76  | 
with leading zeroes, such as \pcode{001}
 | 
| 
180
 
50e8dcd95ae3
added cw
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
179 
diff
changeset
 | 
77  | 
\end{enumerate}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
78  | 
|
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
79  | 
\noindent  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
80  | 
You can use the basic regular expressions  | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
81  | 
|
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
82  | 
\[  | 
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
83  | 
\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
 | 
84  | 
\]  | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
85  | 
|
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
86  | 
\noindent  | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
87  | 
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
 | 
88  | 
|
| 
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
89  | 
\begin{center}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
90  | 
\begin{tabular}{ll}
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
91  | 
$[c_1 c_2 \ldots c_n]$ & a range of characters\\  | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
92  | 
$r^+$ & one or more times $r$\\  | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
93  | 
$r^?$ & optional $r$\\  | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
94  | 
$r^{\{n\}}$ & n-times $r$\\
 | 
| 
182
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
95  | 
\end{tabular}
 | 
| 
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
96  | 
\end{center}
 | 
| 
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
97  | 
|
| 458 | 98  | 
\noindent  | 
| 473 | 99  | 
Later on you will also need the record regular expression:  | 
| 458 | 100  | 
|
101  | 
\begin{center}
 | 
|
102  | 
\begin{tabular}{ll}
 | 
|
103  | 
$REC(x:r)$ & record regular expression\\  | 
|
104  | 
\end{tabular}
 | 
|
105  | 
\end{center}
 | 
|
106  | 
||
| 
396
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
107  | 
\noindent Try to design your regular expressions to be as  | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
108  | 
small as possible. For example you should use character ranges  | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
109  | 
for identifiers and numbers.  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
110  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
111  | 
\subsection*{Question 2}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
112  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
113  | 
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
 | 
114  | 
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
 | 
115  | 
(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
 | 
116  | 
$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
 | 
117  | 
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
 | 
118  | 
clauses for  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
119  | 
|
| 
369
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
120  | 
\begin{center}
 | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
121  | 
\begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
 | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
122  | 
$mkeps([c_1 c_2 \ldots c_n])$ & $\dn$ & $?$\\  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
123  | 
$mkeps(r^+)$ & $\dn$ & $?$\\  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
124  | 
$mkeps(r^?)$ & $\dn$ & $?$\\  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
125  | 
$mkeps(r^{\{n\}})$             & $\dn$ & $?$\medskip\\
 | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
126  | 
$inj\, ([c_1 c_2 \ldots c_n])\,c\,\ldots$ & $\dn$ & $?$\\  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
127  | 
$inj\, (r^+)\,c\,\ldots$ & $\dn$ & $?$\\  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
128  | 
$inj\, (r^?)\,c\,\ldots$ & $\dn$ & $?$\\  | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
129  | 
$inj\, (r^{\{n\}})\,c\,\ldots$             & $\dn$ & $?$\\
 | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
130  | 
\end{tabular}
 | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
131  | 
\end{center}
 | 
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
132  | 
|
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
133  | 
\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
 | 
134  | 
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
 | 
135  | 
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
 | 
136  | 
|
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
137  | 
\begin{center}
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
138  | 
\begin{tabular}{ll}
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
139  | 
regex: & string:\smallskip\\  | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
140  | 
$a^{\{3\}}$ & $aaa$\\
 | 
| 458 | 141  | 
$(a + \ONE)^{\{3\}}$ & $aa$
 | 
| 
396
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
142  | 
\end{tabular}
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
143  | 
\end{center}
 | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
144  | 
|
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
145  | 
|
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
146  | 
\noindent Both strings should be sucessfully lexed by the  | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
147  | 
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
 | 
148  | 
in both examples a value.  | 
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
149  | 
|
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
150  | 
|
| 
 
4cd75c619e06
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
395 
diff
changeset
 | 
151  | 
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
 | 
152  | 
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
 | 
153  | 
\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
 | 
154  | 
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
 | 
155  | 
|
| 
 
43c0ed473720
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
364 
diff
changeset
 | 
156  | 
\noindent  | 
| 
384
 
4629448c1bd9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
369 
diff
changeset
 | 
157  | 
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
 | 
158  | 
string  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
159  | 
|
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
160  | 
\begin{center}
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
161  | 
\code{"read n;"}
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
162  | 
\end{center} 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
163  | 
|
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
164  | 
\noindent  | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
165  | 
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
 | 
166  | 
|
| 
333
 
8890852e18b7
updated coursework
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
328 
diff
changeset
 | 
167  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
168  | 
\subsection*{Question 3}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
169  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
396 
diff
changeset
 | 
170  | 
Extend your lexer from Q2 to also simplify regular expressions  | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
171  | 
after 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
 | 
172  | 
injection. Use this lexer to tokenize the programs in  | 
| 
364
 
50ce3667c190
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
363 
diff
changeset
 | 
173  | 
Figure~\ref{fib} and \ref{loop}. Give the tokens of these
 | 
| 
 
50ce3667c190
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
363 
diff
changeset
 | 
174  | 
programs where whitespaces are filtered out.  | 
| 
182
 
9ce2414e470e
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
181 
diff
changeset
 | 
175  | 
|
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
176  | 
|
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
177  | 
\begin{figure}[p]
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
178  | 
\begin{center}
 | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
179  | 
\mbox{\lstinputlisting[language=while]{../progs/fib.while}}
 | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
180  | 
\end{center}
 | 
| 
181
 
1f98d215df71
added material
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
180 
diff
changeset
 | 
181  | 
\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
 | 
182  | 
\end{figure}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
183  | 
|
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
184  | 
\begin{figure}[p]
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
185  | 
\begin{center}
 | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
186  | 
\mbox{\lstinputlisting[language=while]{../progs/loops.while}}
 | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
187  | 
\end{center}
 | 
| 
275
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
188  | 
\caption{The three-nested-loops program in the WHILE language. 
 | 
| 
 
618c7640cf66
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
189  | 
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
 | 
190  | 
\end{figure}
 | 
| 
178
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
191  | 
|
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
192  | 
\end{document}
 | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
193  | 
|
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
194  | 
%%% Local Variables:  | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
195  | 
%%% mode: latex  | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
196  | 
%%% TeX-master: t  | 
| 
 
d36363d648e3
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
197  | 
%%% End:  |