Sounds cool. Do you have any requirements other than what you outlined above such as any grammar examples? Reading this brought me back to my compiler days at uni. We used Oberon and had to create a compiler. It was quite the process! I remember abstract syntax trees that held the program and as we proceeded through the compilation steps that ast was passed around and inspected for all steps. This I found helpful:
https://dev.to/villyp/how-to-build-a-compiler-a-step-by-step...