| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Fri, 02 Dec 2022 16:26:20 +0000 | |
| changeset 901 | 01b481e47887 | 
| parent 886 | 7a8187cf5bb3 | 
| child 942 | 7f52427568ff | 
| permissions | -rw-r--r-- | 
| 630 | 1  | 
% !TEX program = xelatex  | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
2  | 
\documentclass{article}
 | 
| 
299
 
6322922aa990
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
298 
diff
changeset
 | 
3  | 
\usepackage{../style}
 | 
| 
216
 
f5ec7c597c5b
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
214 
diff
changeset
 | 
4  | 
\usepackage{../langs}
 | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
5  | 
|
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
6  | 
\begin{document}
 | 
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
7  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
358 
diff
changeset
 | 
8  | 
\section*{Coursework 3}
 | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
9  | 
|
| 722 | 10  | 
|
11  | 
||
| 750 | 12  | 
\noindent This coursework is worth 10\% and is due on \cwTHREE{} at
 | 
| 877 | 13  | 
16:00. You are asked to implement a parser for the WHILE language and  | 
| 748 | 14  | 
also an interpreter. You can do the implementation in any programming  | 
15  | 
language you like, but you need to submit the source code with which  | 
|
16  | 
you answered the questions, otherwise a mark of 0\% will be  | 
|
17  | 
awarded. You should use the lexer from the previous coursework for the  | 
|
18  | 
parser. Please package everything(!) in a zip-file that creates a  | 
|
19  | 
directory with the name \texttt{YournameYourFamilyname} on my end.
 | 
|
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
20  | 
|
| 750 | 21  | 
\subsection*{Disclaimer\alert}
 | 
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
22  | 
|
| 750 | 23  | 
It should be understood that the work you submit represents your own  | 
24  | 
effort. You have not copied from anyone else. An exception is the  | 
|
25  | 
Scala code I showed during the lectures or uploaded to KEATS, which  | 
|
26  | 
you can both use. You can also use your own code from the CW~1 and  | 
|
| 886 | 27  | 
CW~2. But do not  | 
28  | 
be tempted to ask Github Copilot for help or do any other  | 
|
29  | 
shenanigans like this!  | 
|
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
30  | 
|
| 
299
 
6322922aa990
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
298 
diff
changeset
 | 
31  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
358 
diff
changeset
 | 
32  | 
\subsection*{Question 1}
 | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
33  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
358 
diff
changeset
 | 
34  | 
Design a grammar for the WHILE language and give the grammar  | 
| 544 | 35  | 
rules. The main categories of non-terminals should be:  | 
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
36  | 
|
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
37  | 
\begin{itemize}
 | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
38  | 
\item arithmetic expressions (with the operations from the  | 
| 682 | 39  | 
  previous coursework, that is \pcode{+}, \pcode{-}, \pcode{*},
 | 
40  | 
  \pcode{/} and \pcode{\%})
 | 
|
41  | 
\item boolean expressions (with the operations \pcode{==}, \pcode{<}, \pcode{>},
 | 
|
| 686 | 42  | 
  \code{>=}, \code{<=}, 
 | 
| 682 | 43  | 
  \code{!=}, \pcode{&&}, \pcode{||}, \pcode{true} and \pcode{false})
 | 
44  | 
\item single statements (that is \pcode{skip}, assignments, \pcode{if}s,
 | 
|
45  | 
  \pcode{while}-loops, \pcode{read} and \pcode{write})
 | 
|
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
46  | 
\item compound statements separated by semicolons  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
47  | 
\item blocks which are enclosed in curly parentheses  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
48  | 
\end{itemize}
 | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
49  | 
|
| 683 | 50  | 
\noindent  | 
51  | 
Make sure the grammar is not left-recursive.  | 
|
52  | 
||
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
358 
diff
changeset
 | 
53  | 
\subsection*{Question 2}
 | 
| 
201
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
54  | 
|
| 684 | 55  | 
You should implement a parser for the WHILE language using parser  | 
56  | 
combinators. Be careful that the parser takes as input a stream, or  | 
|
| 750 | 57  | 
list, of \emph{tokens} generated by the tokenizer from the previous
 | 
| 684 | 58  | 
coursework. For this you might want to filter out whitespaces and  | 
59  | 
comments. Your parser should be able to handle the WHILE programs in  | 
|
| 801 | 60  | 
Figures~\ref{fib} -- \ref{collatz}.  In addition give the
 | 
| 901 | 61  | 
parse tree according to your grammar for the statement:  | 
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
62  | 
|
| 
301
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
63  | 
\begin{lstlisting}[language=While,numbers=none]
 | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
64  | 
if (a < b) then skip else a := a * b + 1  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
65  | 
\end{lstlisting}
 | 
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
66  | 
|
| 
301
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
67  | 
\noindent  | 
| 901 | 68  | 
The output of the parser is an abstract syntax tree (AST).  | 
69  | 
A (possibly incomplete) datatype for ASTs of the WHILE language  | 
|
70  | 
is shown in Figure~\ref{trees}.
 | 
|
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
71  | 
|
| 750 | 72  | 
\begin{figure}[p]
 | 
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
73  | 
\begin{lstlisting}[language=Scala]
 | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
74  | 
abstract class Stmt  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
75  | 
abstract class AExp  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
76  | 
abstract class BExp  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
77  | 
|
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
78  | 
type Block = List[Stmt]  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
79  | 
|
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
80  | 
case object Skip extends Stmt  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
81  | 
case class If(a: BExp, bl1: Block, bl2: Block) extends Stmt  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
82  | 
case class While(b: BExp, bl: Block) extends Stmt  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
83  | 
case class Assign(s: String, a: AExp) extends Stmt  | 
| 750 | 84  | 
case class Read(s: String) extends Stmt  | 
85  | 
case class WriteVar(s: String) extends Stmt  | 
|
86  | 
case class WriteStr(s: String) extends Stmt  | 
|
87  | 
// for printing variables and strings  | 
|
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
88  | 
|
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
89  | 
case class Var(s: String) extends AExp  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
90  | 
case class Num(i: Int) extends AExp  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
91  | 
case class Aop(o: String, a1: AExp, a2: AExp) extends AExp  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
92  | 
|
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
93  | 
case object True extends BExp  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
94  | 
case object False extends BExp  | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
95  | 
case class Bop(o: String, a1: AExp, a2: AExp) extends BExp  | 
| 682 | 96  | 
case class Lop(o: String, b1: BExp, b2: BExp) extends BExp  | 
| 750 | 97  | 
// logical operations: and, or  | 
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
98  | 
\end{lstlisting}
 | 
| 901 | 99  | 
\caption{The datatype for abstract syntax trees in Scala.\label{trees}}
 | 
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
100  | 
\end{figure}
 | 
| 
201
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
101  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
358 
diff
changeset
 | 
102  | 
\subsection*{Question 3}
 | 
| 
205
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
103  | 
|
| 
301
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
104  | 
Implement an interpreter for the WHILE language you designed  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
105  | 
and parsed in Question 1 and 2. This interpreter should take  | 
| 901 | 106  | 
as input an AST. However be careful because, programs  | 
| 
301
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
107  | 
contain variables and variable assignments. This means  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
108  | 
you need to maintain a kind of memory, or environment,  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
109  | 
where you can look up a value of a variable and also  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
110  | 
store a new value if it is assigned. Therefore an  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
111  | 
evaluation function (interpreter) needs to look roughly as  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
112  | 
follows  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
113  | 
|
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
114  | 
\begin{lstlisting}[numbers=none]
 | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
115  | 
eval_stmt(stmt, env)  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
116  | 
\end{lstlisting}
 | 
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
117  | 
|
| 
301
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
118  | 
\noindent  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
119  | 
where \pcode{stmt} corresponds to the parse tree
 | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
120  | 
of the program and \pcode{env} is an environment
 | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
121  | 
acting as a store for variable values.  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
122  | 
Consider the Fibonacci program in Figure~\ref{fib}.
 | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
123  | 
At the beginning of the program this store will be  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
124  | 
empty, but needs to be extended in line 3 and 4 where  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
125  | 
the variables \pcode{minus1} and \pcode{minus2}
 | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
126  | 
are assigned values. These values need to be reassigned in  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
127  | 
lines 7 and 8. The program should be interpreted  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
128  | 
according to straightforward rules: for example an  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
129  | 
if-statement will ``run'' the if-branch if the boolean  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
130  | 
evaluates to \pcode{true}, otherwise the else-branch.
 | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
131  | 
Loops should be run as long as the boolean is \pcode{true}.
 | 
| 750 | 132  | 
Programs you should be able to run are shown in  | 
133  | 
Figures \ref{fib} -- \ref{collatz}.
 | 
|
| 684 | 134  | 
|
135  | 
||
| 
301
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
136  | 
Give some time measurements for your interpreter  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
137  | 
and the loop program in Figure~\ref{loop}. For example
 | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
138  | 
how long does your interpreter take when \pcode{start}
 | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
139  | 
is initialised with 100, 500 and so on. How far can  | 
| 
 
e8c0269c8ff5
update
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
300 
diff
changeset
 | 
140  | 
you scale this value if you are willing to wait, say  | 
| 473 | 141  | 
1 Minute?  | 
| 
202
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
142  | 
|
| 750 | 143  | 
\begin{figure}[h]
 | 
| 860 | 144  | 
\lstinputlisting[language=while,xleftmargin=20mm]{../cwtests/cw03/fib.while}
 | 
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
145  | 
\caption{Fibonacci program in the WHILE language.\label{fib}}
 | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
146  | 
\end{figure}
 | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
147  | 
|
| 750 | 148  | 
\begin{figure}[h]
 | 
| 860 | 149  | 
\lstinputlisting[language=while,xleftmargin=20mm]{../cwtests/cw03/loops.while}
 | 
| 
300
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
150  | 
\caption{The three-nested-loops program in the WHILE language. 
 | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
151  | 
Usually used for timing measurements.\label{loop}}
 | 
| 
 
08d99acd35e8
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
299 
diff
changeset
 | 
152  | 
\end{figure}
 | 
| 
214
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
153  | 
|
| 750 | 154  | 
\begin{figure}[h]
 | 
| 860 | 155  | 
\lstinputlisting[language=while,xleftmargin=0mm]{../cwtests/cw03/primes.while}
 | 
| 750 | 156  | 
\caption{Prime number program.\label{primes}}
 | 
157  | 
\end{figure}
 | 
|
158  | 
||
159  | 
||
| 684 | 160  | 
\begin{figure}[p]
 | 
| 860 | 161  | 
\lstinputlisting[language=while,xleftmargin=0mm]{../cwtests/cw03/collatz2.while}
 | 
| 750 | 162  | 
\caption{Collatz series program.\label{collatz}}
 | 
| 684 | 163  | 
\end{figure}
 | 
164  | 
||
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
165  | 
\end{document}
 | 
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
166  | 
|
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
167  | 
%%% Local Variables:  | 
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
168  | 
%%% mode: latex  | 
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
169  | 
%%% TeX-master: t  | 
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
170  | 
%%% End:  |