cs 320: compiling techniques
DESCRIPTION
CS 320: Compiling Techniques. David Walker. People. David Walker (Professor) 412 Computer Science Building [email protected] office hours: after each class Dan Dantas (TA) 417 Computer Science Building [email protected] office hours: Mondays 2-3 PM . Information. Web site: - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/1.jpg)
CS 320: Compiling Techniques
David Walker
![Page 2: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/2.jpg)
People David Walker (Professor)
412 Computer Science Building [email protected] office hours: after each class
Dan Dantas (TA) 417 Computer Science Building [email protected] office hours: Mondays 2-3 PM
![Page 3: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/3.jpg)
Information Web site:
www.cs.princeton.edu/courses/archive/spring04/cos320/index.htm
Mailing list:
![Page 4: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/4.jpg)
Books Modern Compiler Implementation in
ML Andrew Appel required
Elements of ML Programming Jeffrey D. Ullman also: online references; see Web site
![Page 5: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/5.jpg)
Assignment 0 Write your name and other information
on the sheet circulating Find, skim and bookmark the course
web pages Subscribe to course e-mail list Begin assignment 1
Read chapter 1 Appel Figure out how to run & use SML Due next Thursday 12
![Page 6: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/6.jpg)
onward!
![Page 7: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/7.jpg)
What is a compiler? A compiler is program that
translates a source language into an equivalent target language
![Page 8: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/8.jpg)
What is a compiler?
while (i > 3) { a[i] = b[i]; i ++}
mov eax, ebxadd eax, 1cmp eax, 3jcc eax, edx
C program
assemblyprogram
compiler does this
![Page 9: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/9.jpg)
What is a compiler?
class foo { int bar; ...}
struct foo { int bar; ...}
Java program
compiler does this
C program
![Page 10: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/10.jpg)
What is a compiler?
class foo { int bar; ...}
........
.........
........
Java program
compiler does this
Java virtual machine program
![Page 11: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/11.jpg)
What is a compiler?
\newcommand{....}
\sfd\sf\fadg
Latex program
compiler does this
Tex program
![Page 12: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/12.jpg)
What is a compiler?
\newcommand{....}
\sfd\sf\fadg
Tex program
compiler does this
Postscript program
![Page 13: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/13.jpg)
What is a compiler? Other places:
Web scripts are compiled into HTML assembly language is compiled into
machine language hardware description language is
compiled into a hardware circuit ...
![Page 14: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/14.jpg)
Compilers are complex text file to abstract
syntax lexing; parsing
abstract syntax to intermediate form (IR) analysis; optimizations;
data layout
IR to machine code code generation;
register allocation
front-end
middle-end
back-end
![Page 15: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/15.jpg)
Course project Tiger Source Language
simple imperative language
Instruction Trees as intermediate form (IR) type checking; data layout
on the stack
Code Generation instruction selection
algorithms; register allocation via graph coloring
front-end
middle-end
back-end
![Page 16: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/16.jpg)
Standard ML Standard ML is a domain-specific
language for building compilers Support for
Complex data structures (abstract syntax, compiler intermediate forms)
Memory management like Java Large projects with many modules Advanced type system for error
detection
![Page 17: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/17.jpg)
Introduction to ML You will be responsible for learning
ML on your own. Today I will cover some basics
Resources: Jeffrey Ullman “Elements of ML
Programming” Robert Harper’s “an introduction to ML” See course webpage for pointers and info
about how to get the software
![Page 18: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/18.jpg)
Intro to ML Highlights
Data Structures for compilers Data type definitions Pattern matching
Strongly-typed language Every expression has a type Certain errors cannot occur Polymorphic types provide flexibility
Flexible Module System Abstract Types Higher-order modules (functors)
![Page 19: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/19.jpg)
Intro to ML Interactive Language
Type in expressions Evaluate and print type and result Compiler as well
High-level programming features Data types Pattern matching Exceptions Mutable data discouraged
![Page 20: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/20.jpg)
Preliminaries Read – Eval – Print – Loop
- 3 + 2;
![Page 21: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/21.jpg)
Preliminaries Read – Eval – Print – Loop
- 3 + 2;> 5: int
![Page 22: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/22.jpg)
Preliminaries Read – Eval – Print – Loop
- 3 + 2;> 5: int- it + 7;> 12 : int
![Page 23: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/23.jpg)
Preliminaries Read – Eval – Print – Loop
- 3 + 2;> 5: int- it + 7;> 12 : int- it – 3;> 9 : int- 4 + true;
stdIn:17.1-17.9 Error: operator and operand don't agree [literal]
operator domain: int * int operand: int * bool in expression: 4 + true
![Page 24: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/24.jpg)
Preliminaries Read – Eval – Print – Loop - 3 div 0;
Failure : Div - run-time error
![Page 25: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/25.jpg)
Basic Values- ();> () : unit=> like “void” in C (sort of)
=> the uninteresting value/type
- true;> true : bool- false;> false : bool- if it then 3+2 else 7; “else” clause is always necessary> 7 : int- false andalso loop_Forever;> false : bool and also, or else short-circuit eval
![Page 26: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/26.jpg)
Basic ValuesIntegers- 3 + 2> 5 : int- 3 + (if not true then 5 else 7);> 10 : int No division between expressions
and statementsStrings- “Dave” ^ “ “ ^ “Walker”;> “Dave Walker” : string- print “foo\n”;foo> 3 : int
Reals- 3.14;> 3.14 : real
![Page 27: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/27.jpg)
Using SML/NJ Interactive mode is a good way to
start learning and to debug programs, but…
Type in a series of declarations into a “.sml” file
- use “foo.sml”[opening foo.sml]…
list of declarationswith their types
![Page 28: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/28.jpg)
Larger Projects SML has its own built in interactive
“make” Pros:
It automatically does the dependency analysis for you
No crazy makefile syntax to learn Cons:
May be more difficult to interact with other languages or tools
![Page 29: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/29.jpg)
Compilation Manager
% sml- OS.FileSys.chDir “~/courses/510/a2”;- CM.make(); looks for “sources.cm”, analyzes dependencies
[compiling…] compiles files in group
[wrote…] saves binaries in ./CM/
- CM.make’ “myproj/”(); specify directory
sources.cmc.smlb.smla.sigGroup is
a.sigb.smlc.sml
![Page 30: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/30.jpg)
What is next? ML has a rich set of structured values
Tuples: (17, true, “stuff”) Records: {name = “Dave”, ssn = 332177} Lists: 3::4::5::nil or [3,4]@[5] Datatypes Functions And more!
Rather than list all the details, we will write a couple of programs
![Page 31: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/31.jpg)
An interpreter Interpreters are usually
implemented as a series of transformers:
stream ofcharacters
abstractsyntax
lexing/parsing evaluate
abstractvalue
stream ofcharacters
![Page 32: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/32.jpg)
A little language (LL) An arithmetic expression e is
a boolean value an if statement (if e1 then e2 else e3) an integer an add operation a test for zero (isZero e)
![Page 33: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/33.jpg)
LL abstract syntax in MLdatatype term = Bool of bool| If of term * term * term| Num of int| Add of term * term| IsZero of term
-- constructors are capitalized
-- constructors can take a single argument of a particular type
type of a tupleanother eg: string * char
vertical barseparates alternatives
![Page 34: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/34.jpg)
LL abstract syntax in ML
Add (Num 2, Num 3)
represents the expression “2 + 3”
Add
Num Num
2 3
![Page 35: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/35.jpg)
LL abstract syntax in ML
If (Bool true, Num 0, Add (Num 2, Num 3))
represents
“if true then 0 else 2 + 3”
Add
Num Num
2 3
true
Bool Num
0
If
![Page 36: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/36.jpg)
Function declarations
fun isValue t = case t of Num n => true | Bool b => true | _ => false
function name function parameter
default pattern matches anything
![Page 37: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/37.jpg)
What is the type of the parameter t? Of the function?
fun isValue t = case t of Num n => true | Bool b => true | _ => false
function name function parameter
default pattern matches anything
![Page 38: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/38.jpg)
What is the type of the parameter t? Of the function?
fun isValue (t:term) : bool = case t of Num n => true | Bool b => true | _ => false
val isValue : term -> bool
ML does type inference => you need notannotate functions yourself (but it can be helpful)
![Page 39: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/39.jpg)
A type errorfun isValue t = case t of Num _ => true | _ => false
ex.sml:22.3-24.15 Error: types of rules don't agree [literal] earlier rule(s): term -> int this rule: term -> bool in rule: _ => false
![Page 40: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/40.jpg)
A type errorActually, ML will give you several errors in a row:
ex.sml:22.3-25.15 Error: types of rules don't agree [literal] earlier rule(s): term -> int this rule: term -> bool in rule: Successor t2 => trueex.sml:22.3-25.15 Error: types of rules don't agree [literal] earlier rule(s): term -> int this rule: term -> bool in rule: _ => false
![Page 41: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/41.jpg)
A very subtle error
fun isValue t = case t of num => true | _ => false
The code above type checks. But whenwe test it refined the function always returns “true.”What has gone wrong?
![Page 42: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/42.jpg)
A very subtle error
fun isValue t = case t of Num 0 => 1 | Add(Num t1,Num t2) => t1 + t2 | _ => 0
The code above type checks. But whenwe test it refined the function always returns “true.”What has gone wrong?-- num is not capitalized (and has no argument)-- ML treats it like a variable pattern (matches anything!)
![Page 43: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/43.jpg)
Exceptions
exception Error of string
fun debug s : unit = raise (Error s)
![Page 44: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/44.jpg)
Exceptions
exception Error of string
fun debug s : unit = raise (Error s)
- debug "hello";
uncaught exception Error raised at: ex.sml:15.28-15.35
in SML interpreter:
![Page 45: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/45.jpg)
Evaluator
fun isValue t = ...
exception NoRule
fun eval t = case t of Bool _ | Num _ => t | ...
![Page 46: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/46.jpg)
Evaluator...
fun eval t = case t of Bool _ | Num _ => t | If(t1,t2,t3) => let val v = eval t1 in case v of Bool b => if b then (eval t2) else (eval t3) | _ => raise NoRule end
let statementfor rememberingtemporaryresults
![Page 47: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/47.jpg)
Evaluatorexception NoRule
fun eval1 t = case t of Bool _ | Num _ => ... | ... | Add (t1,t2) => case (eval v1, eval v2) of (Num n1, Num n2) => Num (n1 + n2) | (_,_) => raise NoRule
![Page 48: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/48.jpg)
Finishing the Evaluatorfun eval1 t = case t of ... | ... | Add (t1,t2) => ... | IsZero t => ...
be sure yourcase isexhaustive
![Page 49: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/49.jpg)
Finishing the Evaluatorfun eval1 t = case t of ... | ... | Add (t1,t2) => ... What if we
forgot a case?
![Page 50: CS 320: Compiling Techniques](https://reader030.vdocuments.us/reader030/viewer/2022033023/56815d4c550346895dcb5460/html5/thumbnails/50.jpg)
Finishing the Evaluator
ex.sml:25.2-35.12 Warning: match nonexhaustive (Bool _ | Zero) => ... If (t1,t2,t3) => ... Add (t1,t2) => ...
fun eval1 t = case t of ... | ... | Add (t1,t2) => ... What if we
forgot a case?