A compiler is a computer program which helps you transform source code written in a high-level language into low-level machine language. It translates the code written in one programming language to some other language without changing the meaning of the code. The compiler also makes the end code efficient, which is optimized for execution time and memory space.
The compiling process includes basic translation mechanisms and error detection. The compiler process goes through lexical, syntax, and semantic analysis at the front end and code generation and optimization at the back-end.
In this Compiler Design tutorial, you will learn
- What is a Compiler?
- Features of Compilers
- Types of Compiler
- Tasks of Compiler
- History of Compiler
- Steps for Language processing systems
- Compiler Construction Tools
- Why use a Compiler?
- Application of Compilers
- Speed of compilation
- Preserve the correct the meaning of the code
- The speed of the target code
- Recognize legal and illegal program constructs
- Good error reporting/handling
- Code debugging help
Following are the different types of Compiler:
- Single Pass Compilers
- Two Pass Compilers
- Multipass Compilers
Single Pass Compiler
In single pass Compiler source code directly transforms into machine code. For example, Pascal language.
Two Pass Compiler
Two pass Compiler is divided into two sections, viz.
- Front end: It maps legal code into Intermediate Representation (IR).
- Back end: It maps IR onto the target machine
The Two pass compiler method also simplifies the retargeting process. It also allows multiple front ends.
The multipass compiler processes the source code or syntax tree of a program several times. It divided a large program into multiple small programs and process them. It develops multiple intermediate codes. All of these multipass take the output of the previous phase as an input. So it requires less memory. It is also known as ‘Wide Compiler’.
The main tasks performed by the Compiler are:
- Breaks up the up the source program into pieces and impose grammatical structure on them
- Allows you to construct the desired target program from the intermediate representation and also create the symbol table
- Compiles source code and detects errors in it
- Manage storage of all variables and codes.
- Support for separate compilation
- Read, analyze the entire program, and translate to semantically equivalent
- Translating the source code into object code depending upon the type of machine
Important Landmark of Compiler’s history is as follows:
- The “compiler” word was first used in the early 1950s by Grace Murray Hopper.
- The first compiler was build by John Backum and his group between 1954 and 1957 at IBM.
- COBOL was the first programming language which was compiled on multiple platforms in 1960
- The study of the scanning and parsing issues were pursued in the 1960s and 1970s to provide a complete solution.
Before knowing about the concept of compilers, you first need to understand a few other tools which work with compilers.
- Preprocessor: The preprocessor is considered as a part of the Compiler. It is a tool which produces input for Compiler. It deals with macro processing, augmentation, language extension, etc.
- Interpreter: An interpreter is like Compiler which translates high-level language into low-level machine language. The main difference between both is that interpreter reads and transforms code line by line. Compiler reads the entire code at once and creates the machine code.
- Assembler: It translates assembly language code into machine understandable language. The output result of assembler is known as an object file which is a combination of machine instruction as well as the data required to store these instructions in memory.
- Linker: The linker helps you to link and merge various object files to create an executable file. All these files might have been compiled with separate assemblers. The main task of a linker is to search for called modules in a program and to find out the memory location where all modules are stored.
- Loader: The loader is a part of the OS, which performs the tasks of loading executable files into memory and run them. It also calculates the size of a program which creates additional memory space.
- Cross-compiler: A Cross compiler in compiler design is a platform which helps you to generate executable code.
- Source-to-source Compiler: Source to source compiler is a term used when the source code of one programming language is translated into the source of another language.
Compiler construction tools were introduced as computer-related technologies spread all over the world. They are also known as a compiler- compilers, compiler- generators or translator.
These tools use specific language or algorithm for specifying and implementing the component of the compiler. Following are the example of compiler construction tools.
- Scanner generators: This tool takes regular expressions as input. For example LEX for Unix Operating System.
- Syntax-directed translation engines: These software tools offer an intermediate code by using the parse tree. It has a goal of associating one or more translations with each node of the parse tree.
- Parser generators: A parser generator takes a grammar as input and automatically generates source code which can parse streams of characters with the help of a grammar.
- Automatic code generators: Takes intermediate code and converts them into Machine Language.
- Data-flow engines: This tool is helpful for code optimization. Here, information is supplied by the user, and intermediate code is compared to analyze any relation. It is also known as data-flow analysis. It helps you to find out how values are transmitted from one part of the program to another part.
- Compiler verifies entire program, so there are no syntax or semantic errors.
- The executable file is optimized by the compiler, so it is executes faster.
- Allows you to create internal structure in memory.
- There is no need to execute the program on the same machine it was built.
- Translate entire program in other language.
- Generate files on disk.
- Link the files into an executable format.
- Check for syntax errors and data types.
- Helps you to enhance your understanding of language semantics.
- Helps to handle language performance issues.
- Opportunity for a non-trivial programming project.
- The techniques used for constructing a compiler can be useful for other purposes as well.
- Compiler design helps full implementation Of High-Level Programming Languages.
- Support optimization for Computer Architecture Parallelism.
- Design of New Memory Hierarchies of Machines.
- Widely used for Translating Programs.
- Used with other Software Productivity Tools.
- A compiler is a computer program which helps you transform source code written in a high-level language into low-level machine language.
- Correctness, speed of compilation, preserve the correct the meaning of the code are some important features of compiler design.
- Compilers are divided into three parts 1) Single Pass Compilers 2)Two Pass Compilers, and 3) Multipass Compilers.
- The “compiler” was word first used in the early 1950s by Grace Murray Hopper.
- Steps for Language processing system are: Preprocessor, Interpreter, Assembler, Linker/Loader.
- Important compiler construction tools are 1) Scanner generators, 2)Syntax-3) directed translation engines, 4) Parser generators, 5) Automatic code generators.
- The main task of the compiler is to verify the entire program, so there are no syntax or semantic errors.