Compilers Book Crafting a Compiler with C Author
Compilers Book: Crafting a Compiler with C Author: Charles N. Fischer and Richard J. Le. Blanc, Jr. The Benjamin/Cumming Publishing Company, Inc
Gain Score n n Homework: 10% Project: 40% (Two members in a team) q q q n n Lexical analysis: 10% Syntax analysis: 20% Code generation: 10% Mid Exam: 25% Final Exam: 25%
Contents n n n n n Introduction A Simple Compiler Scanning – Theory and Practice Grammars and Parsing LL(1) Parsing LR Parsing Semantic Processing Symbol Tables Run-time Storage Organization
Contents (Cont’d. ) n n n Processing Declarations Processing Expressions and Data Structure References Translating Control Structure Translating Procedures and Functions Attribute Grammars and Multipass Translation n Code Generation and Local Code Optimization Global Optimization n Parsing in the Real World n
Chapter 1 Introduction
Contents n n n n Overview and History What Do Compilers Do? The Structure of a Compiler The Syntax and Semantics of Programming Languages Compiler Design and Programming Language Design Compiler Classifications Influences on Computer Design
Overview and History n n Compilers are fundamental to modern computing. They act as translators, transforming humanoriented programming languages into computer-oriented machine languages. Programming Language (Source) Compiler Machine Language (Target)
Overview and History (Cont’d. ) n The first real compiler q q n n FORTRAN compilers of the late 1950 s 18 person-years to build Today, we can build a simple compiler in a few month. Crafting an efficient and reliable compiler is still challenging.
Overview and History (Cont’d. ) n Compiler technology is more broadly applicable and has been employed in rather unexpected areas. q q Text-formatting languages, like nroff and troff; preprocessor packages like eqn, tbl, pic Silicon compiler for the creation of VLSI circuits Command languages of OS Query languages of Database systems
What Do Compilers Do? n Compilers may be distinguished according to the kind of target code they generate: q Pure Machine Code n n n q Augmented Machine Code n q Assume there is no run-time OS support. For systems implementation or embedded systems Run on bare machines For hardware + OS + language-specific support routines, e. g. , I/O, math functions, storage allocation, and data transfer. Virtual Machine Code n n JVM, P-code Portable 4 -times slower Code is interpreted.
What Do Compilers Do? (Cont’d. ) n Another way that compilers differ from one another is in the format of the target machine code they generate q Assembly Language Format n n Simplify compilation Use symbolic labels rather than calculating address Pro: good for smaller machines Con: need an additional pass
What Do Compilers Do? (Cont’d. ) q Relocatable Binary Format n n q A linkage step is required Similar to the output of assembler Need a linking step before execution Good for modular compilation, cross-language references, and libraries Memory-Image (Load-and-Go) Format n n n Fast Very limited linking capabilities Good for debugging (frequent changes)
What Do Compilers Do? (Cont’d. ) n Another kind of language processor, called an interpreter, differs from a compiler in that it executes programs without explicitly performing a translation Interpreter Source Program Encoding n Data Advantages and Disadvantages of an interpreter q See page 6 & 7 Output
What Do Compilers Do? (Cont’d. ) n Advantage q Modification to program during execution n n q Dynamic-typed languages n n q Variable types may change at run time, e. g. , LISP. Difficult to compile Better diagnostics n q Interactive debugging Not for every language, e. g. , Basic, Pascal Source code is available. Machine independence n However, the interpreter itself must be portable.
What Do Compilers Do? (Cont’d. ) n Disadvantage q Slower execution due to repeated examination n n q Dynamic (LISP): 100: 1 Static (BASIC): 10: 1 Substantial space overhead
The Structure of a Compiler n Modern compilers are syntax-directed q n Compilation is driven the syntactic structure of programs; i. e. , actions are associated with the structures. Any compiler must perform two major tasks q q Analysis of the source program Synthesis of a machine-language program
The Structure of a Compiler (Cont’d. ) Source Program (Character Stream) Scanner Tokens Syntactic Parser Structure Semantic Routines Intermediate Representation Symbol and Attribute Tables (Used by all Phases of The Compiler) The structure of a Syntax-Directed Compiler Optimizer Code Generator Target Machine Code
The Structure of a Compiler (Cont’d. ) n Scanner q q q n The scanner begins the analysis of the source program by reading the input, character by character, and grouping characters into individual words and symbols (tokens) The tokens are encoded and then are fed to the parser for syntactic analysis For details, see the bottom of page 8. Scanner generators regular exp for tokens lex or scangen finite automata as programs
The Structure of a Compiler (Cont’d. ) n Parser q q q Given a formal syntax specification (typically as a context-free grammar [CFG]), the parse reads tokens and groups them into units as specified by the productions of the CFG being used. While parsing, the parser verifies correct syntax, and if a syntax error is found, it issues a suitable diagnostic. As syntactic structure is recognized, the parser either calls corresponding semantic routines directly or builds a syntax tree. grammar yacc or llgen parser
The Structure of a Compiler (Cont’d. ) n Semantic Routines q Perform two functions n n q n Check the static semantics of each construct Do the actual translation for generating IR The heart of a compiler Optimizer q q q The IR code generated by the semantic routines is analyzed and transformed into functionally equivalent but improved IR code. This phase can be very complex and slow Peephole optimization
The Structure of a Compiler (Cont’d. ) n One-pass compiler q q n Retargetable compiler q q n No optimization is required To merge code generation with semantic routines and eliminate the use of an IR Many machine description files, e. g. , gcc Match IR against target machine patterns. Compiler writing tools q Compiler generators or compiler-compilers n n Lex and Yacc E. g. , scanner and parser generators
Compiler Design and Programming Language Design n n An interesting aspect is how programming language design and compiler design influence one another. Programming languages that are easy to compiler have many advantages q See the 2 nd paragraph of page 16.
Compiler Design and Programming Language Design (Cont’d. ) n n Languages such as Snobol and APL are usually considered noncompilable What attributes must be found in a programming language to allow compilation? q q q Can the scope and binding of each identifier reference be determined before execution begins Can the type of object be determined before execution begins? Can existing program text be changed or added to during execution?
Compiler Classifications n Diagnostic compilers q q n n Optimizing compilers Re-targetable compiler q q q n Report and repair compile-time errors. Add run-time checks, e. g. , array subscripts. should be used in real world. vs. production compiler Localize machine dependence. difficult to implement less efficient object code Integrated programming environments q integrated E-C-D
- Slides: 24