as a result of the modular architecture, any component can be replaced without affecting the rest of the system. for example, to target the compiler to a different architecture, only the file writer specific to the architecture needs to be changed, keeping the rest of the stack unchanged. to create a compiler for a new language, only the readers need to be provided.