I have co-authored with a good friend (Edgard Lindner), a tool to help students understand Programming Languages operational semantics and implementation. This tool helps students to understand the effect of each sintactical construction (like a function call), on hardware resources (i.e. memory) .
The tool, which we called LaST (Language Study Tool) comes with four compilers for four different languages (based on Carlo Ghezzi’s book: Programming Language Concepts). Each compiler implements different features described below:
- C2C is a compiler for a static language. The total amount of memory that a program will be used can be determined at compile time. Its main purpose is to help to learn the semantics of languages with pure static memory management.
- C3C is a compiler for a stack based language (Algol based languages). It supports direct and indirect recursion. Its main purpose is to help to learn the semantics of stack based languages and recursion.
- C4C is a compiler for a block structure language (like Pascal). Its supports the ability to nest subprograms. Its main purpose is to help to learn the semantics of a block structure languages.
- C5C is a compiler that adds more dynamic behaviors to C4. Its main purpose is to help to learn heap allocations.
If you want to read more, if you want to try the tool yourself (it is an Applet), or if you want to extend the tool with, for instance, an object oriented language (would be nice to see dynamic dispatch in action), go to LaST.