CS-320 / 6 crédits

Enseignant: Kuncak Viktor

Langue: Anglais


Summary

We teach the fundamental aspects of analyzing and interpreting computer languages, including the techniques to build compilers. You will build a working compiler from an elegant functional language into machine code using a popular backend called LLVM (https://llvm.org)

Content

For more accurate description see course web page

1. Overview, source languages and run-time models

2. Review of formal languages

3. Lexical analysis

4. Syntactic analysis (parsing)

5. Name analysis

6. Type checking

7. Code generation

8. Correctness of compilers

 

Keywords

programming language; compiler; interpreter; regular expression; context-free grammar;
type system; code generation; static code analysis

 

Learning Prerequisites

Recommended courses

MATH-260(a) Discrete Mathematics

CS-251 Theory of Computation

CS-214 Software Construction

CS-200 Computer Architecture

 

Learning Outcomes

By the end of the course, the student must be able to:

  • Design a programming language
  • Construct a compiler
  • Coordinate development with project partner
  • Formulate correctness conditions for compiler
  • Estimate time to implement a programming language feature
  • Produce a working programming language implementation
  • Decide which language features make implementation difficult
  • Specify programming language and compiler functionality

Transversal skills

  • Assess progress against the plan, and adapt the plan as appropriate.
  • Evaluate one's own performance in the team, receive and respond appropriately to feedback.
  • Respect the rules of the institution in which you are working.
  • Continue to work through difficulties or initial failure to find optimal solutions.
  • Demonstrate a capacity for creativity.
  • Take feedback (critique) and respond in an appropriate manner.
  • Make an oral presentation.
  • Write a scientific or technical report.

Teaching methods

Lectures, exercises, labs

Expected student activities

  • Follow lectures
  • Project work, independently and under supervision of assistants

Assessment methods

See https://gitlab.epfl.ch/lara/cs320/-/blob/main/info/grading.md

Supervision

Office hours Yes
Assistants Yes
Forum Yes

Resources

Bibliography

See https://gitlab.epfl.ch/lara/cs320/-/blob/main/info/books.md

including

Andrew W. Appel, Modern compiler implementation in Java (or ML), Addison-Wesley 1997 (full PDF available from EPFL library)

Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: Compilers: Principles, Techniques, and Tools (2nd Edition, 2006)

 

Notes/Handbook

See slides on the course web page

Websites

Videos

Dans les plans d'études

  • Semestre: Printemps
  • Forme de l'examen: Pendant le semestre (session d'été)
  • Matière examinée: Computer language processing
  • Cours: 2 Heure(s) hebdo x 14 semaines
  • Exercices: 2 Heure(s) hebdo x 14 semaines
  • Projet: 2 Heure(s) hebdo x 14 semaines
  • Type: optionnel
  • Semestre: Printemps
  • Forme de l'examen: Pendant le semestre (session d'été)
  • Matière examinée: Computer language processing
  • Cours: 2 Heure(s) hebdo x 14 semaines
  • Exercices: 2 Heure(s) hebdo x 14 semaines
  • Projet: 2 Heure(s) hebdo x 14 semaines
  • Type: optionnel
  • Semestre: Printemps
  • Forme de l'examen: Pendant le semestre (session d'été)
  • Matière examinée: Computer language processing
  • Cours: 2 Heure(s) hebdo x 14 semaines
  • Exercices: 2 Heure(s) hebdo x 14 semaines
  • Projet: 2 Heure(s) hebdo x 14 semaines
  • Type: optionnel

Semaine de référence

Cours connexes

Résultats de graphsearch.epfl.ch.