 A per-language front end parses the source code in that language and produces an abstract syntax tree ("tree" for short).These are, if necessary, converted to the middle end's input representation, called "GENERIC" form; the middle end then gradually transforms the program towards its final form.Compiler optimizations and static code analysis techniques (such as FORTIFY_SOURCE, a compiler directive that attempts to discover some buffer overflows) are applied to the code.