Instructor:

Steve Zdancewic
    e-mail: cis341 (AT) seas.upenn.edu
    office hours: Tues. 4:00-5:00 pm (and by appointment) Levine 511

Teaching Assistants:

Dmitri Garbuzov
      e-mail: cis341 (AT) seas.upenn.edu
      office hours: TBA

Richard Zhang
      e-mail: cis341 (AT) seas.upenn.edu
      office hours: Tues. 12:30-1:30 (Levine 6th floor bump space)

Jae Joon Lee
      e-mail: cis341 (AT) seas.upenn.edu
      office hours: Mon. 7:00-9:00pm JMHH F80

Vivek Raj
      e-mail: cis341 (AT) seas.upenn.edu
      office hours: Fri. 9:00-10:00am and 2:00-3:00pm (Levine 6th floor bump space)

Course information:

  time: TR 9:00am - 10:30am
  room: Meyerson Hall B3
  piazza: cis341

Prerequisites: CIS 121 and CIS 240

Topics:

Reading and References

The following books contain useful course material, and much of the lecture content is derived from them (and other sources).

In addition, the following papers and web sites provide supplementary material. Reading selections from these sources will be announced in class.

Projects: The Quaker OAT Compiler

There are a total of 8 homework projects. Homework 1 is an individual assignment. The rest of the projects are pair-programming projects -- students are strongly encouraged to work in pairs, but may ask permission to work alone on them.

Submit

Here are instructions for getting access to the tools you need to complete course assignments.

Grading Criteria

Check your current scores.

Lecture Slides and Notes

Note: The following schedule is tentative!
--> lec17.zip"
Date Topic Slides Handouts
1/10

1/12
Introductions: Compilers, Interpreters, and OCaml lec01.pdf
lec01.zip
1/17 *
OCaml Crash Course: Translating Simple to OCaml lec02.pdf
lec02.zip
1/19 *
X86lite & metaprogramming lec03.pdf
1/24
X86lite programming / C calling conventions lec04.pdf
lec04.zip
1/26
Intermediate Representations I lec05.pdf
compiler1.zip
1/31
Intermediate Representations II lec06.pdf
lec06.zip
2/2
IRs III / LLVM lec07.pdf
lec07.zip factorial.ll
2/7
Structured Data in the LLVM IR lec08.pdf
struct.c struct64.ll
2/9
NO CLASS! (Snow Day)
2/14
Structured Data II / LLVMlite lec09.pdf
See HW3
2/16
Lexing: DFAs and ocamllex lec10.pdf
lec10.zip
2/21
Parsing I: Context Free Grammars lec11.pdf
lec11.zip
2/23
Parsing II: LL(k) parsing, LR(0) parsing lec12.pdf
parser.ml
2/28
Parsing III: LR(1) Parsing and Menhir lec13.pdf
lec13.zip
3/2
Midterm Exam
3/7
no class
Spring Break
3/9
no class
Spring Break
3/14
NO CLASS! (Snow Day) (none)
3/16
Typechecking: Inference Rules lec14.pdf
3/21
First-class Functions I lec15.pdf
3/23
First-class Functions II: Interpreters lec16.pdf
fun.ml
3/28
Closure Conversion and Types I lec17.pdf
3/30
Types II : Subtyping and Semantics lec18.pdf
4/4
Subtyping and Inheritance lec19.pdf
4/6
OO: Dynamic Dispatch lec20.pdf
4/11
OO: Multiple Inheritance / Optimizations I lec21.pdf
4/13
Optimizations II / Data Flow Analysis lec22.pdf
4/18
Register Allocation lec23.pdf
4/20
Data Flow Analysis II lec24.pdf
4/25
Control Flow Analysis / SSA Revisited lec25.pdf
5/4
Final Exam: noon - 2:00pm, DRLB A4
*Prof. Zdancewic will be absent.

Many of the slides in these lectures have been adapted (with permission) from course materials by Andrew Myers at Cornell University and Greg Morrisett at Harvard University.

Course Policies

General Project Guidelines

Submission Policy

Academic Integrity

This course will abide by the University's Code of Academic Integrity. In particular, for individual projects and group projects, the following guidelines should be followed:
Last modified: Wed May 10 12:06:31 EDT 2017