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.