Metafrastis was a course project to construct a compiler for a limited C-like language called J-- (spec). It generates ARMv15 assembly from the input, and the result can be executed in qemu's ARM semihosting mode.
It uses flex/bison to construct an abstract syntax tree, and has an extremely stupid ad-hoc code generator present. I almost finished data-flow analysis but sadly ran out of time. As is, there's a few half-implemented optimizations floating around in the source tree; but I did finish some basic ones like constant folding and dead-code elimination.
A source snapshot is available, should you be curious.