SlideShare uma empresa Scribd logo
1 de 18
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

Mais conteúdo relacionado

Mais procurados

Introduction to Compiler Construction
Introduction to Compiler Construction Introduction to Compiler Construction
Introduction to Compiler Construction Sarmad Ali
 
Unit1 principle of programming language
Unit1 principle of programming languageUnit1 principle of programming language
Unit1 principle of programming languageVasavi College of Engg
 
4 evolution-of-programming-languages
4 evolution-of-programming-languages4 evolution-of-programming-languages
4 evolution-of-programming-languagesRohit Shrivastava
 
Ppl for students unit 1,2 and 3
Ppl for students unit 1,2 and 3Ppl for students unit 1,2 and 3
Ppl for students unit 1,2 and 3Akshay Nagpurkar
 
Fundamentals of Language Processing
Fundamentals of Language ProcessingFundamentals of Language Processing
Fundamentals of Language ProcessingHemant Sharma
 
Code optimization in compiler design
Code optimization in compiler designCode optimization in compiler design
Code optimization in compiler designKuppusamy P
 
Introduction TO Finite Automata
Introduction TO Finite AutomataIntroduction TO Finite Automata
Introduction TO Finite AutomataRatnakar Mikkili
 
Compiler Design Lecture Notes
Compiler Design Lecture NotesCompiler Design Lecture Notes
Compiler Design Lecture NotesFellowBuddy.com
 
Algorithm and pseudocode conventions
Algorithm and pseudocode conventionsAlgorithm and pseudocode conventions
Algorithm and pseudocode conventionssaranyatdr
 
Chomsky classification of Language
Chomsky classification of LanguageChomsky classification of Language
Chomsky classification of LanguageDipankar Boruah
 
Lexical analyzer generator lex
Lexical analyzer generator lexLexical analyzer generator lex
Lexical analyzer generator lexAnusuya123
 
Three Address code
Three Address code Three Address code
Three Address code Pooja Dixit
 

Mais procurados (20)

Introduction to Compiler Construction
Introduction to Compiler Construction Introduction to Compiler Construction
Introduction to Compiler Construction
 
Unit1 principle of programming language
Unit1 principle of programming languageUnit1 principle of programming language
Unit1 principle of programming language
 
Phases of compiler
Phases of compilerPhases of compiler
Phases of compiler
 
4 evolution-of-programming-languages
4 evolution-of-programming-languages4 evolution-of-programming-languages
4 evolution-of-programming-languages
 
Ppl for students unit 1,2 and 3
Ppl for students unit 1,2 and 3Ppl for students unit 1,2 and 3
Ppl for students unit 1,2 and 3
 
Input-Buffering
Input-BufferingInput-Buffering
Input-Buffering
 
Code Optimization
Code OptimizationCode Optimization
Code Optimization
 
Recognition-of-tokens
Recognition-of-tokensRecognition-of-tokens
Recognition-of-tokens
 
Fundamentals of Language Processing
Fundamentals of Language ProcessingFundamentals of Language Processing
Fundamentals of Language Processing
 
Compiler design
Compiler designCompiler design
Compiler design
 
Code optimization in compiler design
Code optimization in compiler designCode optimization in compiler design
Code optimization in compiler design
 
Introduction TO Finite Automata
Introduction TO Finite AutomataIntroduction TO Finite Automata
Introduction TO Finite Automata
 
Types of Compilers
Types of CompilersTypes of Compilers
Types of Compilers
 
Compiler Design Lecture Notes
Compiler Design Lecture NotesCompiler Design Lecture Notes
Compiler Design Lecture Notes
 
Algorithm and pseudocode conventions
Algorithm and pseudocode conventionsAlgorithm and pseudocode conventions
Algorithm and pseudocode conventions
 
MACRO PROCESSOR
MACRO PROCESSORMACRO PROCESSOR
MACRO PROCESSOR
 
Introduction to problem solving in C
Introduction to problem solving in CIntroduction to problem solving in C
Introduction to problem solving in C
 
Chomsky classification of Language
Chomsky classification of LanguageChomsky classification of Language
Chomsky classification of Language
 
Lexical analyzer generator lex
Lexical analyzer generator lexLexical analyzer generator lex
Lexical analyzer generator lex
 
Three Address code
Three Address code Three Address code
Three Address code
 

Destaque

Compiler Design(NANTHU NOTES)
Compiler Design(NANTHU NOTES)Compiler Design(NANTHU NOTES)
Compiler Design(NANTHU NOTES)guest251d9a
 
code optimization
code optimization code optimization
code optimization Sanjeev Raaz
 
Code Optimization
Code OptimizationCode Optimization
Code Optimizationguest9f8315
 
Three address code In Compiler Design
Three address code In Compiler DesignThree address code In Compiler Design
Three address code In Compiler DesignShine Raj
 

Destaque (6)

Compiler Design(NANTHU NOTES)
Compiler Design(NANTHU NOTES)Compiler Design(NANTHU NOTES)
Compiler Design(NANTHU NOTES)
 
Compiler unit 2&3
Compiler unit 2&3Compiler unit 2&3
Compiler unit 2&3
 
Compiler Design Material
Compiler Design MaterialCompiler Design Material
Compiler Design Material
 
code optimization
code optimization code optimization
code optimization
 
Code Optimization
Code OptimizationCode Optimization
Code Optimization
 
Three address code In Compiler Design
Three address code In Compiler DesignThree address code In Compiler Design
Three address code In Compiler Design
 

Semelhante a Compiler Design

Semelhante a Compiler Design (20)

Compiler1
Compiler1Compiler1
Compiler1
 
1 cc
1 cc1 cc
1 cc
 
Introduction
IntroductionIntroduction
Introduction
 
Introduction
IntroductionIntroduction
Introduction
 
1 compiler outline
1 compiler outline1 compiler outline
1 compiler outline
 
Techniques & applications of Compiler
Techniques & applications of CompilerTechniques & applications of Compiler
Techniques & applications of Compiler
 
Compier Design_Unit I.ppt
Compier Design_Unit I.pptCompier Design_Unit I.ppt
Compier Design_Unit I.ppt
 
Compier Design_Unit I.ppt
Compier Design_Unit I.pptCompier Design_Unit I.ppt
Compier Design_Unit I.ppt
 
lec00-Introduction.pdf
lec00-Introduction.pdflec00-Introduction.pdf
lec00-Introduction.pdf
 
Compier Design_Unit I_SRM.ppt
Compier Design_Unit I_SRM.pptCompier Design_Unit I_SRM.ppt
Compier Design_Unit I_SRM.ppt
 
Unit1.ppt
Unit1.pptUnit1.ppt
Unit1.ppt
 
Compiler design
Compiler designCompiler design
Compiler design
 
Cd econtent link1
Cd econtent link1Cd econtent link1
Cd econtent link1
 
CD U1-5.pptx
CD U1-5.pptxCD U1-5.pptx
CD U1-5.pptx
 
introduction to computer vision and image processing
introduction to computer vision and image processingintroduction to computer vision and image processing
introduction to computer vision and image processing
 
Compiler Design Basics
Compiler Design BasicsCompiler Design Basics
Compiler Design Basics
 
Lexical analyzer
Lexical analyzerLexical analyzer
Lexical analyzer
 
Plc part 2
Plc  part 2Plc  part 2
Plc part 2
 
Introduction to compiler
Introduction to compilerIntroduction to compiler
Introduction to compiler
 
4_5802928814682016556.pptx
4_5802928814682016556.pptx4_5802928814682016556.pptx
4_5802928814682016556.pptx
 

Mais de Mir Majid

Use case diagrams
Use case diagramsUse case diagrams
Use case diagramsMir Majid
 
Dfd and flowchart
Dfd and flowchartDfd and flowchart
Dfd and flowchartMir Majid
 
.Net framework interview questions
.Net framework interview questions.Net framework interview questions
.Net framework interview questionsMir Majid
 
My sql technical reference manual
My sql technical reference manualMy sql technical reference manual
My sql technical reference manualMir Majid
 
Holographic memory
Holographic memoryHolographic memory
Holographic memoryMir Majid
 
Simulation programs
Simulation programsSimulation programs
Simulation programsMir Majid
 
8086 assembly language
8086 assembly language8086 assembly language
8086 assembly languageMir Majid
 
Lessons from life_2
Lessons from life_2Lessons from life_2
Lessons from life_2Mir Majid
 
Time management
Time managementTime management
Time managementMir Majid
 
Lest weforget
Lest weforget Lest weforget
Lest weforget Mir Majid
 
E hospital manager
E hospital managerE hospital manager
E hospital managerMir Majid
 

Mais de Mir Majid (20)

Use case diagrams
Use case diagramsUse case diagrams
Use case diagrams
 
Dfd and flowchart
Dfd and flowchartDfd and flowchart
Dfd and flowchart
 
.Net framework interview questions
.Net framework interview questions.Net framework interview questions
.Net framework interview questions
 
My sql technical reference manual
My sql technical reference manualMy sql technical reference manual
My sql technical reference manual
 
Dotnet basics
Dotnet basicsDotnet basics
Dotnet basics
 
Holographic memory
Holographic memoryHolographic memory
Holographic memory
 
Data recovery
Data recoveryData recovery
Data recovery
 
Simulation programs
Simulation programsSimulation programs
Simulation programs
 
8086 assembly language
8086 assembly language8086 assembly language
8086 assembly language
 
Router bridge
Router bridgeRouter bridge
Router bridge
 
Assembler
AssemblerAssembler
Assembler
 
Lessons from life_2
Lessons from life_2Lessons from life_2
Lessons from life_2
 
Child faces 2
Child faces 2Child faces 2
Child faces 2
 
Time management
Time managementTime management
Time management
 
Lest weforget
Lest weforget Lest weforget
Lest weforget
 
E hospital manager
E hospital managerE hospital manager
E hospital manager
 
Crypt
CryptCrypt
Crypt
 
Smart cards
Smart cardsSmart cards
Smart cards
 
Rfid
RfidRfid
Rfid
 
Rfid seminar
Rfid seminarRfid seminar
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