In practice, an interpreter can be implemented for compiled languages and compilers can be implemented for interpreted languages.
The name compiler is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language, object code, or machine code) to create an executable program.
However, there are many different types of compilers.
A compiler is likely to perform many or all of the following operations: preprocessing, lexical analysis, parsing, semantic analysis (syntax-directed translation), conversion of input programs to an intermediate representation, code optimization and code generation.
Compilers implement these operations in phases that promote efficient design and correct transformations of source input to target output.
Still several research and industry efforts began the shift toward high-level systems programming languages, for example, BCPL, BLISS, B, and C.
BCPL (Basic Combined Programming Language) designed in 1966 by Martin Richards at the University of Cambridge was originally developed as a compiler writing tool.but also provided a basis for the design of B and C languages.BLISS (Basic Language for Implementation of System Software) was developed for a Digital Equipment Corporation (DEC) PDP-10 Minicomputer by W. Wulf's Carnegie Mellon University (CMU) research team.Limited memory capacity of early computers led to substantial technical challenges when the first compilers were designed.Therefore, the compilation process needed to be divided into several small programs.Program faults caused by incorrect compiler behavior can be very difficult to track down and work around; therefore, compiler implementers invest significant effort to ensure compiler correctness.