This is maybe a livelong pet-project. It started around 1983 when I was given the book "algorithms + data structures = programs", written by Nikolaus Wirth. I was fascinated by the PL/0 compiler example and extended into what I called PL/Z (programming language for Z80) because my idea mainly was to be able to switch from assembler programming to high level language, but being able to use low-level hardware-related constructs (does this sound like C to you? - Well NOW I know ...).
PL/Z is written in Turbo Pascal (later continued in Delphi) and I tried to use it's evolving features to structure the growing program. When I was done extending the syntax I added the first attempt of a code generator. It generated assmbler source which could be fed into Z80 Asm. To be able to better test the code generating functions, I added the generation of Intel 8086 assembler code which could be tested on the PC platform.
Another step was to build a simple character-UI based IDE around the compiler to be able to view PL/Z source, generated Assember source and the symbol table built during the compilation. I started an halve-harted attempt to port this IDE to Borland Delphi later. These steps spanned a good 15 years and recently I bought the "Dragon book" on compilers. Let's see if I come up with some new ideas. Maybe adding code generation for AVR Atmegas?