I had a class where we were given a made-up computer language--had to write the assembler, compiler, linker-loader, and VM within a 10-week quarter. The final was him giving us a program, and running it through all of our projects to produce the desired results. Best CS class I ever took.
An excellent project for a quarter. By the time I was interested in doing that, I had already read through the "Dragon book" and produced code using lex and yacc in UNIX to improve accuracy of inputs to systems used at PacBell. The code delivered by Bellcore was fussy and prone to errant behavior with sloppy input.