0% found this document useful (0 votes)
15 views

Lec 1 2

Compiler Design

Uploaded by

bffs814
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)
15 views

Lec 1 2

Compiler Design

Uploaded by

bffs814
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/ 24

102046704 Compiler Design

LECTURE 1
Preliminaries Required
■ Basic knowledge of programming languages.
■ Basic knowledge of FSA and CFG.
■ Knowledge of a high programming language for
the programming assignments.

Textbook:
Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman,
“Compilers: Principles, Techniques, and Tools”
Addison-Wesley, 1986.
Lex & Yacc. John R. Levine, Tony Mason, Doug
Brown. O'Reilly & Associates
102046704 1992.
Compiler
ISBN:1565920007
Design 2
Examination Scheme

■Internal Tests : 40 Marks


■Assignments and Term work : 20 Marks
■External Theory : 60 Marks
■External Practical : 30 Marks
■Total : 150

102046704 Compiler Design 3


Course Outline
■ Introduction
■ Lexical Analysis
■ Syntax Analysis
■Context Free Grammars
■Top-Down Parsing, LL Parsing
■Bottom-Up Parsing, LR Parsing
■ Syntax-Directed Translation
■Attribute Definitions
■Evaluation of Attribute Definitions

102046704 Compiler Design 4


Course Outline
■ Semantic Analysis, Type Checking
■ Run-Time Organization
■ Intermediate Code Generation
■ Optimizations

102046704 Compiler Design 5


COMPILERS

source COMPILE target program


( Normally the equivalent program in
program
( Normally a program written in R machine code – relocatable object file)
a high-level programming language)

error
messages

102046704 Compiler Design 6


Other Applications
■ In addition to the development of a compiler, the
techniques used in compiler design can be
applicable to many problems in computer science.
■Techniques used in a lexical analyzer can be
used in text editors, information retrieval
system, and pattern recognition programs.

■Techniques used in a parser can be used in a


query processing system such as SQL.

■Many software having a complex front-end may


need techniques used in compiler design.
102046704 Compiler Design 7
Other Applications
■A symbolic equation solver which takes an
equation as input. That program should parse
the given input equation.

■Most of the techniques used in compiler design


can be used in Natural Language Processing
(NLP) systems.

102046704 Compiler Design 8


Major Parts of Compilers
■ There are two major parts of a compiler: Analysis
and Synthesis

■ In analysis phase, an intermediate representation


is created from the given source program.
■Lexical Analyzer, Syntax Analyzer and Semantic
Analyzer are the parts of this phase.

■ In synthesis phase, the equivalent target program


is created from this intermediate representation.
■ Intermediate Code Generator, Code Generator, and Code
Optimizer are the parts of this phase.

102046704 Compiler Design 9


Phases of A Compiler
Source Lexical Syntax Semantic Intermediate Code Code Target
Program Analyzer Analyzer Analyzer Code Generator Optimizer Generator Program

• Each phase transforms the source program from one representation


into another representation.

• They communicate with error handlers.

• They communicate with the symbol table.

102046704 Compiler Design 10


Lexical Analyzer
■ Lexical Analyzer reads the source program
character by character and returns the tokens of
the source program.

■ A token describes a pattern of characters having


same meaning in the source program. (such as
identifiers, operators, keywords, numbers,
delimeters and so on)
Ex: newval := oldval + 12
⇒ tokens:
⇒ newval – identifier
⇒ := - assignment operator
102046704 Compiler
⇒ Oldval – identifier
Design 11
Lexical Analyzer

■ Puts information about identifiers into the symbol


table.
■ Regular expressions are used to describe tokens
(lexical constructs).
■ A (Deterministic) Finite State Automaton can be
used in the implementation of a lexical analyzer.

102046704 Compiler Design 12


Syntax Analyzer
■ A Syntax Analyzer creates the syntactic structure
(generally a parse tree) of the given program.
■ A syntax analyzer is also called as a parser.
■ A parse tree describes a syntactic structure.
assgstmt • In a parse tree, all terminals are at leaves.

identifier := expression • All inner nodes are non-terminals in


a context free grammar.
newval expression + expression

identifier number

oldval 12

102046704 Compiler Design 13


Syntax Analyzer (CFG)
■ The syntax of a language is specified by a context
free grammar (CFG).
■ The rules in a CFG are mostly recursive.
■ A syntax analyzer checks whether a given program
satisfies the rules implied by a CFG or not.
■If it satisfies, the syntax analyzer creates a
parse tree for the given program.
■ Ex: We use BNF (Backus Naur Form) to specify a
CFG
assgstmt -> identifier := expression
expression -> identifier
expression -> number
102046704 Compiler
expression Design + expression
-> expression 14
Syntax Analyzer versus
Lexical Analyzer
■ Which constructs of a program should be
recognized by the lexical analyzer, and which ones
by the syntax analyzer?

■Both of them do similar things; But the lexical


analyzer deals with simple non-recursive
constructs of the language.

■The syntax analyzer deals with recursive


constructs of the language.

■The lexical102046704
analyzer Compiler
simplifies the job of the
syntax analyzer.
Design 15
Parsing Techniques
■Depending on how the parse tree is
created, there are different parsing
techniques.

■These parsing techniques are categorized


into two groups:
■Top-Down Parsing, Bottom-Up Parsing

102046704 Compiler Design 16


Parsing Techniques
■ Top-Down Parsing:
■Construction of the parse tree starts at
the root, and proceeds towards the
leaves.

■Efficient top-down parsers can be easily


constructed by hand.

■Recursive Predictive Parsing, Non-


Recursive Predictive Parsing (LL Parsing).
102046704 Compiler Design 17
Parsing Techniques
■ Bottom-Up Parsing:
■Construction of the parse tree starts at
the leaves, and proceeds towards the
root.

■Normally efficient bottom-up parsers are


created with the help of some software
tools.

■Bottom-up parsing is also known as shift-


reduce parsing.
102046704 Compiler Design 18
Parsing Techniques
■Operator-Precedence Parsing – simple,
restrictive, easy to implement

■LR Parsing – much general form of shift-


reduce parsing, LR, SLR, LALR

102046704 Compiler Design 19


Semantic Analyzer
■ A semantic analyzer checks the source program for
semantic errors and collects the type information
for the code generation.

■ Type-checking is an important part of semantic


analyzer.

102046704 Compiler Design 20


Semantic Analyzer
■ Normally semantic information cannot be
represented by a context-free language used in
syntax analyzers.

■ Context-free grammars used in the syntax analysis


are integrated with attributes (semantic rules)
■ the result is a syntax-directed translation,
■ Attribute grammars
■ Ex:
newval := oldval + 12

■The type of the identifier newval must match with


type of the expression (oldval+12)
102046704 Compiler Design 21
Intermediate Code
Generation
■ A compiler may produce an explicit intermediate
codes representing the source program.
■ These intermediate codes are generally machine
(architecture independent). But the level of
intermediate codes is close to the level of
machine codes.
■ Ex:
newval := oldval * fact + 1

id1 := id2 * id3 + 1

MULT id2,id3,temp1 Intermediates Codes


(Quadraples)102046704 Compiler
ADD Design
temp1,#1,temp2 22
Code Optimizer (for
Intermediate Code
Generator)
■ The code optimizer optimizes the code produced
by the intermediate code generator in the terms of
time and space.

■ Ex:

MULT id2,id3,temp1
ADD temp1,#1,id1

102046704 Compiler Design 23


Code Generator
■ Produces the target language in a specific
architecture.
■ The target program is normally is a relocatable
object file containing the machine codes.

■ Ex:
( assume that we have an architecture with instructions whose at
least one of its operands is
a machine register)

MOVE id2,R1
MULT id3,R1
ADD #1,R1
MOVE102046704
R1,id1 Compiler Design 24

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy