Labs and Projects

Project 2: An abc Music Player


The purpose of this project is to help you gain experience in (1) designing and implementing programs in the functional style (that is, making extensive use of functions over immutable types); (2) designing and implementing abstract types; and (3) using common design patterns for constructing and traversing structures (such as Variant as Class, Interpreter, Iterator, and Visitor). It also introduces you to the fundamentals of compilation, in particular: (4) expressing a language as a grammar; (5) converting a text to an abstract syntax tree; and (5) organizing a compiler into phases (lexing, parsing, static semantic analysis, etc). Finally, the project will give you further practice in software engineering fundamentals, such as (6) clarifying a problem statement; (7) inventing clear and simple interfaces to minimize coupling, and identifying and resolving undesirable dependences; (8) structuring a program to make it easily testable, organizing, executing and evaluating test suites; and (9) working collaboratively in a team.

Course Info

Learning Resource Types

assignment Problem Sets
notes Lecture Notes
group_work Projects
assignment_turned_in Programming Assignments with Examples