1 / 16

Chapter 1: Introduction to Compiling (Cont.)

Chapter 1: Introduction to Compiling (Cont.). Phase 3. Semantic Analysis. :=. :=. position. +. position. +. initial. *. initial. *. rate. 60. rate. inttoreal. 60. Find More Complicated Semantic Errors and Support Code Generation Parse Tree Is Augmented With Semantic Actions.

ovid
Download Presentation

Chapter 1: Introduction to Compiling (Cont.)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 1: Introduction to Compiling (Cont.)

  2. Phase 3. Semantic Analysis := := position + position + initial * initial * rate 60 rate inttoreal 60 • Find More Complicated Semantic Errors and Support Code Generation • Parse Tree Is Augmented With Semantic Actions Compressed Tree Conversion Action

  3. Phase 3. Semantic Analysis • Most Important Activity in This Phase: • Type Checking - Legality of Operands • Many Different Situations: Real := int + char ; A[int] := A[real] + int ; while char <> int do …. Etc.

  4. Supporting Phases/ Activities for Analysis • Symbol Table Creation / Maintenance • Contains Info (storage, type, scope, args) on Each “Meaningful” Token, Typically Identifiers • Data Structure Created / Initialized During Lexical Analysis • Utilized / Updated During Later Analysis & Synthesis • Error Handling • Detection of Different Errors Which Correspond to All Phases • What Kinds of Errors Are Found During the Analysis Phase? • What Happens When an Error Is Found?

  5. The Many Phases of a Compiler Source Program 5 1 2 6 Code Optimizer Lexical Analyzer Code Generator Syntax Analyzer 3 Semantic Analyzer Error Handler Symbol-table Manager 4 Intermediate Code Generator Target Program 1, 2, 3 : Analysis - Our Focus 4, 5, 6 : Synthesis

  6. The Synthesis Task For Compilation • Intermediate Code Generation • Abstract Machine Version of Code - Independent of Architecture • Easy to Produce and Do Final, Machine Dependent Code Generation • Code Optimization • Find More Efficient Ways to Execute Code • Replace Code With More Optimal Statements • 2-approaches: High-level Language & “Peephole” Optimization • Final Code Generation • Generate Relocatable Machine Dependent Code

  7. Reviewing the Entire Process intermediate code generator lexical analyzer syntax analyzer semantic analyzer := + id1 id2l * id3 60 := + id1 id2l * id3 inttoreal 60 position := initial + rate * 60 id1 := id2 + id3 * 60 Symbol Table Errors position .... initial …. rate….

  8. Reviewing the Entire Process intermediate code generator code optimizer final code generator Errors Symbol Table position .... initial …. rate…. temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 3 address code temp1 := id3 * 60.0 id1 := id2 + temp1 MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R1, R2 MOVF R1, id1

  9. Assemblers • Assembly code: names are used for instructions, and names are used for memory addresses. • Two-pass Assembly: • First Pass: all identifiers are assigned to memory addresses (0-offset)e.g. substitute 0 for a, and 4 for b • Second Pass: produce relocatable machine code: MOV a, R1 ADD #2, R1 MOV R1, b 0001 01 00 00000000 * 0011 01 10 00000010 0010 01 00 00000100 * relocation bit

  10. Loaders and Link-Editors • Loader: taking relocatable machine code, altering the addresses and placing the altered instructionsinto memory. • Link-editor: taking many (relocatable) machine code programs (with cross-references) and produce a single file. • Need to keep track of correspondence between variable names and corresponding addresses in each piece of code.

  11. Compiler Cousins:PreprocessorsProvide Input to Compilers 1. Macro Processing #define in C: does text substitution before compiling #define X 3 #define Y A*B+C #define Z getchar()

  12. 2. File Inclusion defs.h main.c ////// ////// ////// #include “defs.h” …---…---…--- …---…---…--- …---…---…--- ////// ////// ////// …---…---…--- …---…---…--- …---…---…--- #include in C - bring in another file before compiling

  13. 3. Rational Preprocessors • Augment “Old” Languages With Modern Constructs • Add Macros for If - Then, While, Etc. • #Define Can Make C Code More Pascal-like #define begin { #define end } #define then

  14. 4. Language Extensions for a Database System EQUEL - Database query language embedded in a programming language. C ## Retrieve (DN=Department.Dnum) where ## Department.Dname = ‘Research’ is Preprocessed into: ingres_system(“Retr…..Research’”,____,____); a procedure call in a programming language.

  15. The Grouping of Phases Front End : Analysis + Intermediate Code Generation vs. Back End : Code Generation + Optimization Number of Passes: A pass: requires r/w intermediate files Fewer passes: more efficiency. However: fewer passes require more sophisticated memory management and compiler phase interaction. Tradeoffs ……..

  16. Compiler Construction Tools Parser Generators : Produce Syntax Analyzers Scanner Generators : Produce Lexical Analyzers <= Lex (Flex) Syntax-directed Translation Engines : Generate Intermediate Code <= Yacc (Bison) Automatic Code Generators : Generate Actual Code Data-Flow Engines : Support Optimization

More Related