Multi-pass compilers go through multiple phases, allowing for advanced optimizations but potentially requiring more memory and time. Single-pass compilers process source code sequentially, generating code in a single pass. Compilers can be categorized based on their target languages and usage scenarios: