Many modern compilers share a common 'two stage' design. The "front end" translates the source language or the high level program into an intermediate representation. The second stage is the "back end", which works with the internal representation to produce code in the output language which is a low level code.
The higher the abstraction a compiler can support, the better it is.
![](images/sanjeev3.gif)
|