credits to this project: Here
- Vanilla JavaScript
- Compiler Knowledge
- Little LISP knowledge
- Parsing: take raw code and turn it into abstract representation of it
- Transforming: take the abstract representation and manipulates it to do the compiler's actions
- Code Generation: take the transformed representation and turn it into new code