Compliers (typically 3 stages)
1) Frontend
> Lexical analyzer (or "lexer") separates the input source code text into recognizable language elements (like variable names, operations, compiler directives,etc) called tokens
> Lexer and parser construct a symbol table
2) Middle Stage
> This stage is optional
3) Backend
> The backend first chooses the layout of data memory, organizing variables and functions, then constructs sequences of instructions that will execute the specified behavior.
** Assemblers translate between assebly language code to machine code