The set of project topics is open-ended. For inspiration you may want
to look at the three examples in the 'materials' directory: network,
tuples, and GAS. Here is a list of project suggestions, use them
directly or for inspiration.
- Friendly GUI helpers: use DSL to describe a wizard that helps users
achieve a specific task, generate implementation of the wizard.
- Network protocol fun: use DSL to describe network protocol at a
fairly high level, generate a dedicated implementation of the network stack.
- Programmers assistant: use DSL to describe design
pattern or architectural pattern implementations in a system, generate classes with specific purposes tailored
to the programmers concrete needs.
- Course project generator: take a project from another course,
define a program family where it is a member, generate multiple
implementations (in addition to software courses, AI or robotics courses are also an option).
In general, a good project has a well-defined program family where the
generated code interfaces directly with custom code. Feel free to
reuse any part of the example programs, for example by building on top
of them (all of them lack significant features).
(*) More advanced projects can also include some
kind of abstract analysis at the level of the DSL. For example, the
wizard could include a verification step that the wizard always can
terminate and that all pages are included in some sequence. (The
asterix (*) is used to denote parts of the project
that are more difficult, see exam for
details.)
Note that we use eclipse and JET for code generation, meaning that the code generator
is written in Java. The generated code can however be in any language.