The architecture of a system can change in response to improvements in technology. This can be seen in the way we think about compilers.
In the 1970s, compilation was regarded as a sequential process, and the organization of a compiler was typically drawn as in Figure 15. Text enters at the left end and is transformed in a variety of ways—to lexical token stream, parse tree, intermediate code—before emerging as machine code on the right. We often refer to this compilation model as a pipeline, even though it was (at least originally) closer to a batch sequential architecture in which each transformation (“pass”) was completed before the next one started.