University of Leicester –
Department of Computer Science
CO7206 - Fall 2003 –
Assignment #4 (8%)
Due on Jan. 12, 2003 at 11:00 am
For this assignment, you have two
options to choose from as described shortly. This is meant to value the effort
by those who invested significant time and effort in the mini-project if they
choose option one below. This assignment is optional. This means that according
to the method of assessment described below, you have submitted 6 pieces of
coursework that cover 50% of the mark of this module. If you like to eliminate
you worst coursework mark and replace it with a better mark, then you can do
this assignment. If you are happy with your coursework marks, you do not need
to do it. However, this assignment is meant to be a practice on TXL programming
and a reminder of the clone detection concept in preparation for the exam.
Method of Assessment for this Course
(A little modification):
In the light of your feedback,
the coursework weight was reduced to 50%, divided over 7 pieces of course work
(3 Quizzes and 4 Assignments). Slightly different from what was suggested in an
earlier email, the best 6 pieces of coursework will be selected for the student
(this is 6*8 = 48%). Then the best of these six pieces will be scaled up from
8% to 10%. For example, if Ali got the following seven marks (3, 5, 8, 5.5, 7,
6, 7.5), the mark 3 will be excluded. His best mark is 8, and hence this will
be scaled up by a factor 10/8, meaning he gets 10%. Thus his total will be 5 +
10 + 5.5 + 7 + 6 + 7.5 = 41.
Option 1:
If you have completed any of the two parts
of the cancelled Mini-project, you can submit this as your assignment
4. This means you have to submit the full deliverables of this part. For the
reverse engineering task, this means submitting Report 1. For the Web-enabling
activity, this means submitting Report 2 and presenting the Web-enabled version
of Indent to the lecturer.
Option 2:
Write a
clone detector using TXL. It should satisfy the following requirements:
2.
Your clone detector should implement the basic
functionality and one of the optional functionalities.
3.
The
basic functionality: It should be able to discover exact clones of some
length, say 3, that you can specify in your program or pass as an input. We
will not worry about counting how many copies are there, just any 2 similar fragments
of the code that are of the same length are going to be reported. For example,
the code below may result in discovering 3 clones, which are the 1st
with the 2nd, the 1st with the 3rd and the 2nd
with the 3rd. If you can do better and avoid this by reporting that there
are 3 copies of the same fragment, this is better.
x:=x+1; % First Copy
y:=y+1;
:
x:=x+1; % Second
y:=y+1;
:
x:=x+1; % Third
y:=y+1;
:
4.
The
optional functionalities: Implement one of these functionalities.
·
Omitting
labels: Omit labels and discover clones without labels, that
would not be discovered otherwise. For example, your program should be able to discover
that these two fragments are the same without labels.
SomeLabel: x:=x+1; % First Copy
y:=y+1;
:
OtherLabel:x:=x+1; % First Copy
y:=y+1;
:
·
Discover
near clones with similar assignment statements if the left hand side is
the same. For example, your program should be able to discover that these two
fragments are similar.
x:=x+1; % First Copy
y:=y+1;
if x>0 then goto b;
:
x:=z; % Second
y:=y+1;
if x>0 then goto b;
·
Discover
exact clones even those within loops or if statements. For example, your
program should be able to discover that the two bold underlined fragments are similar.
z:=x-1;
x:=x+1;
y:=y-1;
a: if x>0 then goto b;
z:=x-1;
x:=x+1;
y:=y-1;
m: if y>0 then goto n;
o:=y;
goto m;
endif
n: goto a;
endif
b: x:=99;
Resources:
q
Amble
Resources are found on the TXL
page
q
TXL Documentation
q
A
brief guide on how to write a TXL program
q
More examples