Courses/CcmpTylaLogAppIng2016 (AppIng1 students)


This page contains the log of the topics of

for AppIng1 students of class EPITA 2016 (i.e., from January 2014 to May 2014). The topic was started with the Formal Languages Lecture (THL).


Lecture 1: 2014-02-14, 3 hours: Introduction to Compilers

  1. Introduction to Compilers. See the lecture notes: tiger-project-intro.pdf, tiger-project-intro-handout.pdf and tiger-project-intro-handout-4.pdf (except parts specific to the Tiger Project).
    1. Ressources (
    2. C Compilation model (cpp, cc1, as, ld).
    3. Width of a compiler (granularity of compiled entities).
    4. Tiger Compiler pipeline (front end only)
    5. Compilers handling multiple input (sources languages) and multiple outputs (target assembly languages/processors).
      1. The case of GCC.
      2. Factoring the compiler components: intermediate representation(s).
      3. Front-end and back-ends.
    6. The Tiger Compiler pipe (annotated with tools and steps).
      1. Front-end: TC-0 - TC-3 (mandatory part), TC-4 - TC-5 (optional part).
      2. Back-end: TC-6 - TC-9 (optional part).
    7. Other compilation strategies.

Lecture 2: 2014-02-20, 3 hours: Introduction to Compilers (cont.), Autoconf and Automake

  1. Introduction to Compilers (remaining slides). See the lecture notes: tiger-project-intro.pdf, tiger-project-intro-handout.pdf and tiger-project-intro-handout-4.pdf.
  2. Development Tools. See the lecture notes (section 2 and most of section 3): dev-tools.pdf, dev-tools-handout.pdf and dev-tools-handout-4.pdf.
  3. Autoconf and Automake
    1. History: Unix, Unices, configuration systems (imake, configure), portability issues (broken tools, broken/missing functions, libraries, etc.).
    2. Generating configure with Autoconf
      1. The choice of (a subset of) the Bourne Shell for portability reasons.
      2. Generating to encapsulate tests, simplify, shorten and reuse shell script bits.
      3. Using the M4 macro language.
      4. Autotools Diagram: Autoconf.
    3. Generating Makefile (s) with Automake and configure.
      1. Generating to simplify and shorten portable Makefile bits.
      2. Substituting variables (@VAR@) in using configure (BTW: variables listed in configure --help).
      3. Completing the Autotools diagram: Automake.
      4. Developer side vs User side.
    4. A word on aclocal.

Lecture 3 : 2014-03-06, 3 hours: Development Tools (cont.), Autoconf and Automake (cont.), Abstract Syntax

  1. Development Tools (cont.). See the lecture notes: dev-tools.pdf, dev-tools-handout.pdf and dev-tools-handout-4.pdf.
  2. Autoconf and Automake (cont.).
    1. Hands-on example.
      1. A simple program.
        1. Writing
        2. Adding
        3. Running autoscan.
        4. Adjusting config.scan to create (initializing Automake, avoiding autoheader).
        5. Running alocal, automake -a -c (and installing helpers) and autoconf.
        6. Running ./configure.
        7. Running make.
        8. Running ./hello-world.
      2. Adding a (static) library.
        1. Writing the client ( and the library (greet.hh and
        2. Adjusting (lib_LIBRARIES vs noinst_LIBRARIES), and (AC_PROG_RANLIB).
        3. Updating by running make (and not the Autotools).
        4. Compiling the client (hello) by adjusting (in particular, link to libgreet.a using hello_LDADD).
        5. Running make again.
        6. Running ./hello.
      3. Installing.
        1. make install.
        2. configure --prefix, $prefix, $bindir, $libdir, etc. and bin_, lib_ prefixes of primaries (PROGRAMS, LIBRARIES, etc.).
      4. Distributing.
        1. make dist.
        2. make distcheck.
        3. Don't forget to adjust the arguments of AC_INIT in
  3. Introduction to abstract syntax: Bison grammar, semantic values, semantic actions, parse tree vs abstract syntax tree.

Lecture 4 : 2014-03-13, 3 hours: Abstract Syntax

Lecture 5: 2014-03-20, 3 hours: Abstract Syntax, Names, Identifiers and Bindings


Lecture 1: 2014-03-21, 3 hours: History of Computing

Lecture 2: 2014-04-03, 3 hours: History of Computing, History of Computing and Programming Languages

  1. History of Computing: Some Early Machines (section 2). See the lecture notes, history.pdf, history-handout.pdf and history-handout-4.pdf.
  2. History of Programming Languages: See the lecture notes, early-languages.pdf, early-languages-handout.pdf and early-languages-handout-4.pdf.

Lecture 3: 2014-04-11, 3 hours: A Short Introduction to Types, Object-Oriented History

  1. A Short Introduction to Types. See the lecture notes: type-checking.pdf, type-checking-handout.pdf and type-checking-handout-4.pdf.
  2. Object-Oriented History: Simula, Smalltalk-72. See the lecture notes, object.pdf, object-handout.pdf and object-handout-4.pdf.

Lecture 4: 2014-04-25, 2.5 hours: Object-Oriented History (cont.)

  1. Object-Oriented History: Smalltalk-76, Smalltalk-80, C++. See the lecture notes, object.pdf, object-handout.pdf and object-handout-4.pdf.

Lecture 5: 2014-05-15, 2 hours: Subprograms

  1. Subprograms. See the lecture notes, subprograms.pdf, subprograms-handout.pdf and subprograms-handout-4.pdf.