CATEGORY: Language Processing SH or JH: SH

Project: ?	Supervisor: PJJ 	Grading: UF

Enhancing the "Cocktail" Compiler-Compiler Toolkit

Cocktail is a software toolbox designed to simplify writing compilers and translators. It includes replacements for lex and yacc (rex and lalr), but also provides tools to describe, create and manipulate attributed parse trees (cg/ag/ast and puma). It is an enormous improvement over Lex and Yacc, but even so has many limitations and drawbacks.

REFERENCES:
A short introduction to Cocktail: http://www.cs.man.ac.uk/~pjj/projects/cocktail
COURSE PREREQUISITES: CS2112 and/or CS3041 will help

CATEGORY: Language Processing SH or JH: SH

Project: ?	Supervisor: PJJ 	Grading: LF

Implementation of a simple text-processing language, TRAC.

This project consists of implementing an interpreter for the text-processing language TRAC. As an example of TRAC, the following:

	#(ds,factorial,(#(eq,x,1,1,(#(ml,x,#(cl,factorial,#(su,x,1)))))))'
	#(ss,factorial,x)'
defines the equivalent of a function, factorial, with one parameter, and:
	#(cl,factorial,5)'
invokes it to calculate 5!.

Initially you will concentrate on implementing the kernel of the interpreter, subsequently progressing to implementing some of the other primitive operations, or maybe even designing your own. You will have to write significant test programs in TRAC at all stages of the work. Alternatively, once you have implemented sufficient of TRAC, you could concentrate on writing a significant program in TRAC itself, such as a text processor.

REFERENCES:
A short introduction to TRAC: http://www.cs.man.ac.uk/~pjj/projects/trac.doc


CATEGORY: Language Processing SH or JH: SH

Project: ?	Supervisor: PJJ 	Grading: LF

Design and Implementation of a Forth-like language.

Threaded code is a technique for implementing interpreters for computer languages, and is especially suitable for reverse-polish notation. (It has nothing to do with using "threads" to get the effect of multiple processes running in parallel.) This project consists of designing and implementing a threaded code language and system based on the paper reference, available from me.

Initially you can implement any sensible subset of 'Generalisations' 1 to 11 and any 'Advanced Concepts', including those from the bibliography, such as 'defining words'. It would be reasonable to aim initially at about generalisation 8 but to design your program to be easily extended. You will have to select your own set of primitive commands, including integer arithmetic and input-output. You should expect to enhance your language by implement new facilities such as virtual memory, filestore, parallelism, data structures, or any other features to be found in computer languages.

REFERENCES:
What is threaded code: http://www.complang.tuwien.ac.at/forth/threaded-code.html
Kogge P.M. An Architectural Trail to Threaded-Code Systems IEEE computer March 1982 pp22-31


CATEGORY: Teaching Tools SH or JH: SH

Project: ?	Supervisor: PJJ 	Grading: F

CS2112 web pages

Use JAVA to add extra facilities to the WWW pages for CS2112. I would expect them to mainly be complementary to lectures (e.g. algorithm animation), but facilities to help with lab work (e.g. understanding error messages) would also be useful. Some facilities, like a searchable glossary or FAQ, might be suitable for either kind of use - these could have a fixed content, or perhaps students could add questions and eventually receive new answers. The algorithms I would like to see animated include parsing using lex and yacc, building parse trees, compiling code, and building dictionaries.

REFERENCES:

COURSE PREREQUISITES: CS2112 and/or CS3041 will help

CATEGORY: Information Systems SH or JH: SH

Project: ?	Supervisor: PJJ 	Grading: F

Creating Departmental Timetables

Timetabling for this department is very tedious and currently performed with the minimum of computer assistance. It is not practical to try to create a complete timetable automatically, but it is practical to automate some of the activities I perform each year to "rough-out" the new timetable:
Each year I collect information about groups of students, the courses they can attend and the likely numbers of students, who lectures them, and which rooms are suitable for them. I then create summaries, which enable me to pick out the best patterns of use for the big lecture theatre and the labs. I can then proceed to the smaller lectures and other activities, like tutorials and examples classes, and divide the labs times into groups etc.

This project should create software that is compatible with the exisiting system, and that can help me perform this timetable prototyping. You may want to investigate re-implementing the existing system to use a proper database and graphical user interface (in which case you may also get some supervision from Carole Goble). Alternatively, if you progress well, you may even want to go on to automate the allocation of activities to times, using ideas from the reference.

Visualisation: We can consider this problem as if rooms, time-slots, (groups of) students, staff, and course-units, are the co-ordinates in a 5-D sparse matrix. What I need to be able to do is visualise various projections of the data - e.g. keep students & course-units and ignore the rest to check that every student is timetabled for every activity, keep students and time-slots to ensure that no student is double-booked (& similarly for staff and rooms). However, I would also like to be able to view more complex data e.g. time-slots against activities, with the number of students as the height of the columns, stripes of various colours to indicate the different groups, and different shapes of columns to indicate different kinds of activities (e.g. lectures, labs, examples classes). For most axes I also want to be able to rearrange neighbours to try out new combinations. As well as visualisation, I need to be able to modify the data, moving objects on the screen to try out some options, and be able to reset back to a previous version if it turns out worse.

This project should create software that is compatible with the exisiting system, and that can help me perform this timetable prototyping.

Analysis: roughly speaking, the starting data includes maps:

and we have to create a map for CS course-units:
(course-unit, activity) -> (room, slot)-list

An important part of the timetable prototyping process is to create maps:

and then to count, compare and report on the number of slots required with the number of slots available in each category (taking supersets/subsets into account). This allows you to rank the courses or course-units or roooms or whatever, so we deal with the trickiest ones first. (note that the first of these maps means you probably also need to create groups of courses and years e.g. all 2nd year courses, all 2nd years except CM, CS course-units taken by all 2nd years, course-units taken by all 2nd years except CM, etc.)

REFERENCES:
Timetabling Resources on the Internet: http://tawny.cs.nott.ac.uk/ASAP/ttg/resources.html


CATEGORY: Information Systems SH or JH: SH

Project: ?	Supervisor: PJJ 	Grading: LF

A Student Database

There is a great deal of useful information about students in the existing departmental database. However, this is inaccessible to most staff, as it runs on a separate Mac-based network in the departmental office. The best we can manage at present is to dump the (non-sensitive) information in two text files onto a PC disc, and then Kermit it to the Suns via an Atari, where I have written a C program that makes some use of the data (and various other members of staff have written other, similar programs). This is obviously silly, and we want to improve both the route from the Macs to the Suns, and the way in which the information is held and made available on the Suns.

This project will identify a reliable database system accessible from the departmental research and teaching suns that can be used to hold the student data, and provide a sensible front-end that supplies any information currently used by the various ad-hoc programs, but also provides a general purpose user-friendly mechanism for interrogating the database. The various existing programs perform various checks of the data (e.g. making sure every student is registered for the right number of modules, and that the combination is legal for the particular honours school) and the new system should be capable of performing similar checks, driven by easily modified tables.

This project may be supervised in part by Carole Goble.


CATEGORY: Information Systems SH or JH: SH

Project: ?	Supervisor: PJJ 	Grading: LF

Exam Mark Input and Tabulation

Several times each year, staff of this department have to input the marks from exams and labs and generate and tabulate the overall results for various groups of students. The results have to be generated in several different formats, depending on how they are to be used, but similar information is present in each format. This project should use existing tools (e.g. a database and a form/query front-end) to create a user-friendly system to help with this task.

Users, such as lecturers and clerical staff, need to be able to:

Furthermore, users need to be able to work with incomplete marks, adding to them and changing them over many weeks.

This project may be supervised in part by Carole Goble.


CATEGORY: ? SH or JH: ?

Project: ?	Supervisor: PJJ 	Grading: ?

Othello


CATEGORY: ? SH or JH: ?

Project: ?	Supervisor: PJJ 	Grading: ?

Artificial Life