DAT2 Project Proposals (Spring 2008)
#1: Multi-paradigmmatic programming
language and environment
Project course: Syntax and Semantics, or Programming Languages and
Compilers
Description: Visual modelling languages such as Statecharts, Live
Sequence Charts (LSCs) and their UML variants are good means for early
architecting and prototyping software systems. Since they describe the
intra-object and inter-object behavior respectively and have executable
semantics, in this respect they can be viewed as programming languages. It
has been envisioned that futuristic systems can be written in a combination
of these languages: the "code" are just the models.
Statecharts describe the possible state transitions of individual system
components upon receiving external stimuli. LSCs describe how a collection
of system components interact with each other by sending massages. Although
some existing tools support inter-object and intra-object behavior
description at the same time (e.g., IBM Rational Rose supports UML
Statecharts and Sequence Diagrams), there are very limited support for
complete "compilation" and execution, or no such support at all.
In this project you are to develop a (small) visual programming language for
the collaborative and synergic specification of inter-object and
intra-object behavior, to define its semantics, and to build a compiler for
its simulated execution. Some language constructs and semantics can be
tailored from Statecharts and LSCs. You are also challenged to some new
constructs or elements if necessary.
#2: Programmable Calculator
Project course: Syntax and Semantics, or Programming Languages and
Compilers
Description: As we know an electronic calculator is inexpensive but
usually conducts only "single-step" computations and has very limited
support for user programming or no support at all. On the other hand, a
mobile device such as a PDA or a pocket PC is programmable, but it is much
more expensive. When there are a variety of small-to-middle scale
computation tasks to be accomplished, a small general-purpose "programmable
calculator" might well come in handy.
In this project you are supposed to design a small imperative programming
language for calculator-like palm devices, which has the basic
characteristics of such as basic data types, sequential control structure,
branching, loop, subroutine and etc. There should be a well-defined grammar,
and a clear, consistent and coherent semantics that is suitable for
implementation.
You are also supposed to write a compiler for the small language. To enable
code generation, a hardware platform is to be defined, such as the number of
registers, the instruction set, the word length, etc. A very nice property
of the compiler is that it is parameterized, i.e., by changing some
configurable parameters the compiler can generate different object codes for
different target processors. This feature is very useful and is especially
desirable in embedded system developments.
#3: Quantitative Programming
Language
Project course: Syntax and Semantics, or Programming Languages and
Compilers
Description: Quantitative aspects such as timing constraints and
probabilistic choices are indispensable for precise specification of
embedded system behaviors. Timing and probability can be well supported by a
variety of formal or semi-formal system models. However, these quantitative
characteristics are not directly supported by some system implementation
languages, e.g. the C language.
To facilitate natural characterizations of quantitative behavior of the
systems and to enable smooth transitions from modelling to implementation of
systems with quantitative behavior, a programming language with these
quantitative features is necessary.
In this project you are supposed to make quantitative extensions to a
selected subset of some high level programming language. The extensions
could be embodied in a formal grammar and an appropriate semantics. A
compiler for this extended language could also be implemented.