Designing the programming assignment for a university compiler design course

This paper analyzes the key properties of a programming assignment for a university compiler design course. After an overview of popular choices used at several universities in the world, we describe the assignment given to students of the Programming Language Translation undergraduate course at the University of Zagreb, Faculty of Electrical Engineering and Computing, and provide the rationale behind several design decisions through an analysis of its evolution in recent years. While most compiler programming assignments are based on tools like lexer and parser generators, our students actually build slightly simplified versions of these tools themselves. We discuss our experiences with this programming assignment over the last three years and qualitative differences in the results between this assignment and the tool based assignment we had been using before.