program flow block diagram

[parser]
 |
 v
(AST)                    input/* modules
 |
 v
[translator]
 |            -------------------------
 v
(IR) <-> [factoriser]    main, ir
 |         
 v            -------------------------
[generator]
 |
 v
(TR) <-> [optimiser]     output/* targets
 |
 v
[emitter]
