SlideShare a Scribd company logo
5
Most read
11
Most read
15
Most read
CS416 Compiler Design




 CS416 Compiler Design   1
Course Information
• Instructor : Dr. Ilyas Cicekli
   – Office: EA504,
   – Phone: 2901589,
   – Email: ilyas@cs.bilkent.edu.tr


• Course Web Page: http://www.cs.bilkent.edu.tr/~ilyas/Courses/CS416




                         CS416 Compiler Design        2
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.




                    CS416 Compiler Design             3
Grading


•   Midterm      : 30%
•   Homeworks : 20%
•   Pop-quizzes : 10%
•   Final       : 40%




                    CS416 Compiler Design   4
Course Outline
• Introduction to Compiling
• 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
• Semantic Analysis, Type Checking
• Run-Time Organization
• Intermediate Code Generation


                          CS416 Compiler Design   5
COMPILERS
• A compiler is a program takes a program written in a source language
  and translates it into an equivalent program in a target language.



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



                                      error messages




                             CS416 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.
       • 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.




                           CS416 Compiler Design                                 7
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.




                          CS416 Compiler Design                           8
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.


                        CS416 Compiler Design                            9
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
                                             oldval   identifier
                                             +        add operator
                                             12       a number


• 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.

                     CS416 Compiler Design                       10
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


       identifier     :=        expression                • In a parse tree, all terminals are at leaves.

       newval              expression    +   expression   • All inner nodes are non-terminals in
                                                            a context free grammar.
                           identifier        number

                           oldval               12




                               CS416 Compiler Design                              11
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
         expression -> expression + expression




                             CS416 Compiler Design                               12
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 lexical analyzer simplifies the job of the syntax analyzer.
   – The lexical analyzer recognizes the smallest meaningful units (tokens) in a source program.
   – The syntax analyzer works on the smallest meaningful units (tokens) in a source program to
     recognize meaningful structures in our programming language.




                          CS416 Compiler Design                            13
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
• 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).
• 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.
   –   Operator-Precedence Parsing – simple, restrictive, easy to implement
   –   LR Parsing – much general form of shift-reduce parsing, LR, SLR, LALR

                           CS416 Compiler Design                              14
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.
• 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)


                             CS416 Compiler Design                                 15
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)
       ADD      temp1,#1,temp2
       MOV      temp2,,id1



                         CS416 Compiler Design                  16
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




                       CS416 Compiler Design            17
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
      MOVE         R1,id1



                              CS416 Compiler Design                                    18

More Related Content

PDF
Lecture 01 introduction to compiler
PPT
Introduction to Compiler design
PPT
Compiler Design Basics
PDF
Compiler Design Lecture Notes
PPTX
Compiler design
PPT
basics of compiler design
PDF
COMPILER DESIGN- Syntax Directed Translation
PPT
1.Role lexical Analyzer
Lecture 01 introduction to compiler
Introduction to Compiler design
Compiler Design Basics
Compiler Design Lecture Notes
Compiler design
basics of compiler design
COMPILER DESIGN- Syntax Directed Translation
1.Role lexical Analyzer

What's hot (20)

PPTX
Input-Buffering
PPTX
Loop optimization
PPTX
Lexical Analysis - Compiler Design
PPTX
Type checking in compiler design
PPTX
Finite automata-for-lexical-analysis
PPTX
Lexical analysis - Compiler Design
PPTX
Compiler construction tools
PPTX
Compiler Chapter 1
PPTX
Analysis and Design of Algorithms
PPT
Compiler Design Unit 1
PPTX
Syntax Analysis in Compiler Design
PDF
Algorithms Lecture 1: Introduction to Algorithms
PPTX
Types of Parser
PPTX
Three Address code
PPTX
Context free grammar
PPTX
MULTILEVEL QUEUE SCHEDULING
PDF
Lecture 1 introduction to parallel and distributed computing
PPTX
Peephole Optimization
PDF
Syntax analysis
PPTX
Recognition-of-tokens
Input-Buffering
Loop optimization
Lexical Analysis - Compiler Design
Type checking in compiler design
Finite automata-for-lexical-analysis
Lexical analysis - Compiler Design
Compiler construction tools
Compiler Chapter 1
Analysis and Design of Algorithms
Compiler Design Unit 1
Syntax Analysis in Compiler Design
Algorithms Lecture 1: Introduction to Algorithms
Types of Parser
Three Address code
Context free grammar
MULTILEVEL QUEUE SCHEDULING
Lecture 1 introduction to parallel and distributed computing
Peephole Optimization
Syntax analysis
Recognition-of-tokens
Ad

Viewers also liked (6)

DOC
Compiler Design(NANTHU NOTES)
PDF
Compiler unit 2&3
DOCX
Compiler Design Material
PPT
code optimization
PPT
Code Optimization
PPTX
Three address code In Compiler Design
Compiler Design(NANTHU NOTES)
Compiler unit 2&3
Compiler Design Material
code optimization
Code Optimization
Three address code In Compiler Design
Ad

Similar to Compiler Design (20)

PPT
Compiler1
PDF
PDF
PPT
Lexical analyzer
PPTX
1 cc
PPTX
1 compiler outline
PPTX
Compiler Engineering Lab#1
PPT
PPT
Compiler Design in Computer Applications
PPT
Introduction to compiler
PDF
lec00-Introduction.pdf
PDF
Principles of compiler design
PPT
Cpcs302 1
PDF
Chapter#01 cc
PPTX
role of lexical anaysis
PPTX
Compilers
PPT
System software
PPTX
Chapter 1.pptx
DOCX
Techniques & applications of Compiler
PPTX
Compiler Design Introduction
Compiler1
Lexical analyzer
1 cc
1 compiler outline
Compiler Engineering Lab#1
Compiler Design in Computer Applications
Introduction to compiler
lec00-Introduction.pdf
Principles of compiler design
Cpcs302 1
Chapter#01 cc
role of lexical anaysis
Compilers
System software
Chapter 1.pptx
Techniques & applications of Compiler
Compiler Design Introduction

More from Mir Majid (20)

DOC
Use case diagrams
PPT
Dfd and flowchart
DOC
.Net framework interview questions
DOC
My sql technical reference manual
PDF
Dotnet basics
DOC
Holographic memory
PPT
Data recovery
RTF
Simulation programs
PPT
8086 assembly language
PDF
Router bridge
PPT
Assembler
PPS
Lessons from life_2
PPS
Child faces 2
PPS
Time management
PPS
Lest weforget
PPT
E hospital manager
PPT
Crypt
PPT
Smart cards
PPT
DOC
Rfid seminar
Use case diagrams
Dfd and flowchart
.Net framework interview questions
My sql technical reference manual
Dotnet basics
Holographic memory
Data recovery
Simulation programs
8086 assembly language
Router bridge
Assembler
Lessons from life_2
Child faces 2
Time management
Lest weforget
E hospital manager
Crypt
Smart cards
Rfid seminar

Compiler Design

  • 1. CS416 Compiler Design CS416 Compiler Design 1
  • 2. Course Information • Instructor : Dr. Ilyas Cicekli – Office: EA504, – Phone: 2901589, – Email: ilyas@cs.bilkent.edu.tr • Course Web Page: http://www.cs.bilkent.edu.tr/~ilyas/Courses/CS416 CS416 Compiler Design 2
  • 3. 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. CS416 Compiler Design 3
  • 4. Grading • Midterm : 30% • Homeworks : 20% • Pop-quizzes : 10% • Final : 40% CS416 Compiler Design 4
  • 5. Course Outline • Introduction to Compiling • 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 • Semantic Analysis, Type Checking • Run-Time Organization • Intermediate Code Generation CS416 Compiler Design 5
  • 6. COMPILERS • A compiler is a program takes a program written in a source language and translates it into an equivalent program in a target language. source program COMPILER target program ( Normally a program written in ( Normally the equivalent program in a high-level programming language) machine code – relocatable object file) error messages CS416 Compiler Design 6
  • 7. 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. • 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. CS416 Compiler Design 7
  • 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. CS416 Compiler Design 8
  • 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. CS416 Compiler Design 9
  • 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 oldval identifier + add operator 12 a number • 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. CS416 Compiler Design 10
  • 11. 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 identifier := expression • In a parse tree, all terminals are at leaves. newval expression + expression • All inner nodes are non-terminals in a context free grammar. identifier number oldval 12 CS416 Compiler Design 11
  • 12. 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 expression -> expression + expression CS416 Compiler Design 12
  • 13. 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 lexical analyzer simplifies the job of the syntax analyzer. – The lexical analyzer recognizes the smallest meaningful units (tokens) in a source program. – The syntax analyzer works on the smallest meaningful units (tokens) in a source program to recognize meaningful structures in our programming language. CS416 Compiler Design 13
  • 14. 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 • 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). • 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. – Operator-Precedence Parsing – simple, restrictive, easy to implement – LR Parsing – much general form of shift-reduce parsing, LR, SLR, LALR CS416 Compiler Design 14
  • 15. 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. • 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) CS416 Compiler Design 15
  • 16. 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) ADD temp1,#1,temp2 MOV temp2,,id1 CS416 Compiler Design 16
  • 17. 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 CS416 Compiler Design 17
  • 18. 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 MOVE R1,id1 CS416 Compiler Design 18