The analysis phase of a compiler breaks up a source program into constituent
pieces and produces an internal representation for it, called intermediate code.
The synthesis phase translates the intermediate code into the target program.
Analysis is organized around the "syntax" of the language to be compiled.