Introduction to Compiler
Construction
Robert van Engelen
http://www.cs.fsu.edu/~engelen/courses/COP5621
COP5621 Compiler Construction, Spring 2018
Copyright Robert van Engelen, Florida State University, 2007-2018
Syllabus
• Prerequisites: COP4020 or equivalent
• Textbook: “Compilers: Principles, Techniques,
and Tools” by Aho, Sethi, and Ullman, 2nd edition
• Other material: “The JavaTM Virtual Machine
Specification” SE 8 and class handouts
• Grade breakdown:
– Exams (three midterm, one final) (60%)
– Four project assignments (40%)
– Homework for extra credit (at most 4%)
2
Syllabus, Assignments, and
Schedule
http://www.cs.fsu.edu/~engelen/courses/COP5621
3
Objectives
• Be able to build a compiler for a (simplified)
(programming) language
• Know how to use compiler construction tools,
such as generators of scanners and parsers
• Be familiar with assembly code and virtual
machines, such as the JVM, and bytecode
• Be able to define LL(1), LR(1), and LALR(1)
grammars
• Be familiar with compiler analysis and
optimization techniques
• … learn how to work on a larger software project!
4
Compilers and Interpreters
• “Compilation”
– Translation of a program written in a source
language into a semantically equivalent
program written in a target language
– Oversimplified view:
Compiler
Error messages
Target
Program
Input
Output
5
Source
Program
Compilers and Interpreters
(cont’d)
Interpreter
Input
Output
Error messages
• “Interpretation”
– Performing the operations implied by the
source program
– Oversimplified view:
6
Source
Program
The Analysis-Synthesis Model of
Compilation
• There are two parts to compilation:
– Analysis determines the operations implied by
the source program which are recorded in a tree
structure
– Synthesis takes the tree structure and translates
the operations therein into the target program
7
Other Tools that Use the
Analysis-Synthesis Model
• Editors (syntax highlighting)
• Pretty printers (e.g. Doxygen)
• Static checkers (e.g. Lint and Splint)
• Interpreters
• Text formatters (e.g. TeX and LaTeX)
• Silicon compilers (e.g. VHDL)
• Query interpreters/compilers (Databases)
8
Preprocessors, Compilers,
Assemblers, and Linkers
Preprocessor
Compiler
Assembler
Linker
Skeletal Source Program
Source Program
Target Assembly Program
Relocatable Object Code
Absolute Machine Code
Libraries and
Relocatable Object Files
Try for example:
gcc -v myprog.c
9
The Phases of a Compiler
Phase Output Sample
Programmer (source code producer) Source string A=B+C;
Scanner (performs lexical analysis) Token string ‘A’, ‘=’, ‘B’, ‘+’, ‘C’, ‘;’
And symbol table with names
Parser (performs syntax analysis
based on the grammar of the
programming language)
Parse tree or abstract syntax tree ;
|
=
/ 
A +
/ 
B C
Semantic analyzer (type checking,
etc)
Annotated parse tree or abstract
syntax tree
Intermediate code generator Three-address code, quads, or
RTL
int2fp B t1
+ t1 C t2
:= t2 A
Optimizer Three-address code, quads, or
RTL
int2fp B t1
+ t1 #2.3 A
Code generator Assembly code MOVF #2.3,r1
ADDF2 r1,r2
MOVF r2,A
Peephole optimizer Assembly code ADDF2 #2.3,r2
MOVF r2,A
10
The Grouping of Phases
• Compiler front and back ends:
– Front end: analysis (machine independent)
– Back end: synthesis (machine dependent)
• Compiler passes:
– A collection of phases is done only once (single pass)
or multiple times (multi pass)
• Single pass: usually requires everything to be defined before
being used in source program
• Multi pass: compiler may have to keep entire program
representation in memory
11
Compiler-Construction Tools
• Software development tools are available to
implement one or more compiler phases
– Scanner generators
– Parser generators
– Syntax-directed translation engines
– Automatic code generators
– Data-flow engines
12
Outline
• Introduction
• A simple One-Pass Compiler for the JVM
• Lexical Analysis and Lex/Flex
• Syntax Analysis and Yacc/Bison
• Syntax-Directed Translation
• Static Semantics and Type Checking
• Run-Time Environments
• Intermediate Code Generation
• Target Code Generation
• Code Optimization
13

Ch1.ppt

  • 1.
    Introduction to Compiler Construction Robertvan Engelen http://www.cs.fsu.edu/~engelen/courses/COP5621 COP5621 Compiler Construction, Spring 2018 Copyright Robert van Engelen, Florida State University, 2007-2018
  • 2.
    Syllabus • Prerequisites: COP4020or equivalent • Textbook: “Compilers: Principles, Techniques, and Tools” by Aho, Sethi, and Ullman, 2nd edition • Other material: “The JavaTM Virtual Machine Specification” SE 8 and class handouts • Grade breakdown: – Exams (three midterm, one final) (60%) – Four project assignments (40%) – Homework for extra credit (at most 4%) 2
  • 3.
  • 4.
    Objectives • Be ableto build a compiler for a (simplified) (programming) language • Know how to use compiler construction tools, such as generators of scanners and parsers • Be familiar with assembly code and virtual machines, such as the JVM, and bytecode • Be able to define LL(1), LR(1), and LALR(1) grammars • Be familiar with compiler analysis and optimization techniques • … learn how to work on a larger software project! 4
  • 5.
    Compilers and Interpreters •“Compilation” – Translation of a program written in a source language into a semantically equivalent program written in a target language – Oversimplified view: Compiler Error messages Target Program Input Output 5 Source Program
  • 6.
    Compilers and Interpreters (cont’d) Interpreter Input Output Errormessages • “Interpretation” – Performing the operations implied by the source program – Oversimplified view: 6 Source Program
  • 7.
    The Analysis-Synthesis Modelof Compilation • There are two parts to compilation: – Analysis determines the operations implied by the source program which are recorded in a tree structure – Synthesis takes the tree structure and translates the operations therein into the target program 7
  • 8.
    Other Tools thatUse the Analysis-Synthesis Model • Editors (syntax highlighting) • Pretty printers (e.g. Doxygen) • Static checkers (e.g. Lint and Splint) • Interpreters • Text formatters (e.g. TeX and LaTeX) • Silicon compilers (e.g. VHDL) • Query interpreters/compilers (Databases) 8
  • 9.
    Preprocessors, Compilers, Assemblers, andLinkers Preprocessor Compiler Assembler Linker Skeletal Source Program Source Program Target Assembly Program Relocatable Object Code Absolute Machine Code Libraries and Relocatable Object Files Try for example: gcc -v myprog.c 9
  • 10.
    The Phases ofa Compiler Phase Output Sample Programmer (source code producer) Source string A=B+C; Scanner (performs lexical analysis) Token string ‘A’, ‘=’, ‘B’, ‘+’, ‘C’, ‘;’ And symbol table with names Parser (performs syntax analysis based on the grammar of the programming language) Parse tree or abstract syntax tree ; | = / A + / B C Semantic analyzer (type checking, etc) Annotated parse tree or abstract syntax tree Intermediate code generator Three-address code, quads, or RTL int2fp B t1 + t1 C t2 := t2 A Optimizer Three-address code, quads, or RTL int2fp B t1 + t1 #2.3 A Code generator Assembly code MOVF #2.3,r1 ADDF2 r1,r2 MOVF r2,A Peephole optimizer Assembly code ADDF2 #2.3,r2 MOVF r2,A 10
  • 11.
    The Grouping ofPhases • Compiler front and back ends: – Front end: analysis (machine independent) – Back end: synthesis (machine dependent) • Compiler passes: – A collection of phases is done only once (single pass) or multiple times (multi pass) • Single pass: usually requires everything to be defined before being used in source program • Multi pass: compiler may have to keep entire program representation in memory 11
  • 12.
    Compiler-Construction Tools • Softwaredevelopment tools are available to implement one or more compiler phases – Scanner generators – Parser generators – Syntax-directed translation engines – Automatic code generators – Data-flow engines 12
  • 13.
    Outline • Introduction • Asimple One-Pass Compiler for the JVM • Lexical Analysis and Lex/Flex • Syntax Analysis and Yacc/Bison • Syntax-Directed Translation • Static Semantics and Type Checking • Run-Time Environments • Intermediate Code Generation • Target Code Generation • Code Optimization 13