0% found this document useful (0 votes)
130 views9 pages

Analysis Phases:: The Structure of A Compiler

The document describes the structure and phases of a compiler. A compiler consists of six main phases - lexical analysis, syntax analysis, semantic analysis, intermediate code generation, code optimization, and code generation. It breaks down programs into tokens, checks syntax and semantics, generates intermediate code, optimizes it, and finally produces the target code. Each phase passes its output to the next while a symbol table and error handler support the overall compilation process.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
130 views9 pages

Analysis Phases:: The Structure of A Compiler

The document describes the structure and phases of a compiler. A compiler consists of six main phases - lexical analysis, syntax analysis, semantic analysis, intermediate code generation, code optimization, and code generation. It breaks down programs into tokens, checks syntax and semantics, generates intermediate code, optimizes it, and finally produces the target code. Each phase passes its output to the next while a symbol table and error handler support the overall compilation process.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 9

The Structure of a Compiler

The process of compilation is so complex to be achieved in one single step,


either from a logical point of view or from an implementation point of view. For
this reason it is partition into a series of sub processes called Phases.
The different phases of a compiler are as follows
Analysis Phases:
1. Lexical Analysis
2. Syntax Analysis
3. Semantic Analysis
Synthesis Phases:
4. Intermediate Code generator
5. Code Optimization
6. Code generation..
The typical compiler consists of several phases each of which passes its output to the next phase plus
symbol table manager and an error handler as shown below:
The Structure of a Compiler

Lexical Analyzer (Scanner):


It is the first phase of the complier and also called scanner, which represent the interface between source
program and the compiler. where the Lexical will read the source program by one letter at a time and
decomposed it into group of letters called TOKEN that is logically interrelated between them. This token
represent string of characters that can be processed together as a logical input.
In others words, lexical Separates characters of the source language program into groups (sets) that logically
belong together. These groups are called Tokens.
Tokens are Keywords, Identifiers, Operator Symbols, and Punctuation Symbols. The output of the analyzer is stream of
tokens, which is passed to the syntax analyzer.

Tokens: groups of characters of source language program logically belong together.


The Structure of a Compiler

Type of tokens
There are five types of token as below:

.
The Structure of a Compiler
Syntax Analyzer (Parser):
Groups tokens together into syntactic structures called Expressions. Expressions might further be combined to
form Statements. Often the syntactic structure can be regarded as a Tree (parse tree) whose leaves are the tokens.
The interior nodes of the tree represent strings of tokens that logically belong together.
Every programming language has rules that prescribe the syntactic structure of well –formed programs. Syntax
analysis takes an out of lexical analyzer and produce a large tree call parse tree

Semantics:.
is a term used to describe "meaning", and so the constraint analyzer is often called the static semantic analyzer,
or simply the semantic analyzer. Semantic analyzer takes the output of syntax analyzer and produces another
tree.The output of the syntax analyzer and semantic analyzer phases is sometimes expressed in the form of a
Abstract Syntax Tree (AST). This is a very useful representation, as it can be used in clever ways to optimize
code generation at a later phase.
The Structure of a Compiler

It is Recently added a stage to analyze in terms of sentence meaning, in other words, will reject the sentence in
the case of the discovery of the meaning of error (Note: The sentence can be true in terms of the syntax but have
no meaning).
For example the English sentence : "The man eat the house " This is in the natural language, put in
programming languages ​can either write inter correct the hand, but wrong in the sense rules .
The Structure of a Compiler
Intermediate Code Generator:
Create a stream of simple instructions. Many style of intermediate code are possible. One common style uses
instructions with one operator and a small number of operands.
This phase is used structures built in the previous stages and convert them into intermediate codes by using a
most famous meta language such as:

- Postfix notation
- Polish notation

In some versions be enforceable as is the case in the interpreter for the BASIC language and commands
interpreter of the DOS operating system
The Structure of a Compiler

Code Optimization:
Is an optional phase designed to improve the intermediate code so that the ultimate object
program runs faster and/or takes less space.

Code Generation:
In a real compiler this phase takes the output from the previous phase and produces the object
code, by deciding on the memory locations for data, generating code to access such locations,
selecting registers for intermediate calculations and indexing, and so on.
The Structure of a Compiler

Table Management:
Portion of the compiler keeps tracks of the name used by the program and records essential
information about each, such as its type integer, real, … etc. the data structure used to record
this information is called a Symbolic Table.

Error Handler:
One of the most important functions of a compiler is the detection and reporting of errors in
the source program. The error messages should allow the programmer to determine exactly
where the errors have occurred. Whenever a phase of the compiler discovers an error, it must
report the error to the error handler, which issues an appropriate diagnostic message.

You might also like