The need for compilers arises from the need for high-level languages, which are more relevant for problem solving and software development by humans. Moreover, high-level languages are machine independent.
Since development of a compiler is a relatively complex system-development effort, typically having many users and developers, and will be maintained over a life of many years, a formal process should be used for its development. The development process should extend from requirements through verification and validation, and should include reviews, tests, analysis and measures, quality assurance, configuration control, and key documentation. The development process is a part of the overall system life cycle process, which additionally, includes deployment, maintenance, disposal and archival storage. The compiler development process should consist of procedures for writing and documenting the needs and requirements, the architecture and design, construction, integration, and verification and validation of the compiler. Documentation should also include the formal foundations and techniques used, tradeoffs made, alternatives evaluated, and the chosen alternative for design or implementation. Full coverage of all of these in detail is beyond the scope of this course. As we proceed through this course, however, we include high-level needs, requirements, functions, performance considerations, and verification and validation issues for a compiler and its parts.