Languages and translators

lingi2132  2020-2021  Louvain-la-Neuve

Languages and translators
En raison de la crise du COVID-19, les informations ci-dessous sont susceptibles d’être modifiées, notamment celles qui concernent le mode d’enseignement (en présentiel, en distanciel ou sous un format comodal ou hybride).
6 crédits
30.0 h + 30.0 h
Q2
Enseignants
Laurent Nicolas;
Langue
d'enseignement
Anglais
Thèmes abordés
  • Méthodes d'analyse de langages "context-free", méthodes ascendantes et méthodes descendantes. Applications
  • Générateurs d'analyseurs lexicaux et syntaxiques
  • Sémantique statique et grammaires attribuées
  • Méthode de définition de traduction du code source en code cible et génération du code cible
  • Machine virtuelle et byte-code (JVM)
  • Garbage Collection et gestion mémoire
  • Domain Specific Languages (DSL)
Acquis
d'apprentissage

A la fin de cette unité d’enseignement, l’étudiant est capable de :

1 Eu égard au référentiel AA du programme « Master ingénieur civil en informatique », ce cours contribue au développement, à l'acquisition et à l'évaluation des acquis d'apprentissage suivants :
  • INFO1.1-3
  • INFO2.2-4
  • INFO5.2, INFO5.4, INFO5.5
  • INFO6.1, INFO6.4
Eu égard au référentiel AA du programme « Master [120] en sciences informatiques », ce cours contribue au développement, à l'acquisition et à l'évaluation des acquis d'apprentissage suivants :
  • SINF1.M2
  • SINF2.2-4
  • SINF5.2, SINF5.4, SINF5.5
  • SINF6.1, SINF6.4
Eu égard au référentiel AA du programme « Master [60] en sciences informatiques », ce cours contribue au développement, à l'acquisition et à l'évaluation des acquis d'apprentissage suivants :
  • 1SINF1.M2
  • 1SINF2.2-4
  • 1SINF5.2, 1SINF5.4, 1SINF5.5
  • 1SINF6.1, 1SINF6.4
Les étudiants ayant suivi avec fruit ce cours seront capables de
  • expliquer de façon pratique la structure des compilateurs pour des langages algorithmiques
  • concevoir et implémenter un compilateur pour un langage pratique qui résout un problème à intérêt intrinsèque
  • montrer l'intérêt des techniques de compilation dans la résolution de problèmes dans d'autres domaines
Les étudiants auront développé des compétences méthodologiques et opérationnelles. En particulier, ils ont développé leur capacité à
  • traiter avec rigueur une problématique en justifiant et validant chaque étape d'un projet pour pouvoir s'appuyer sur celle-ci pour mettre en oeuvre la suivante
  • expliquer de façon pratique comment un code-source (Java) est finalement traduit en byte-code.
  • expliquer les mécanismes d'exécution du byte-code par une JVM
  • expliquer la gestion mémoire lors de l'exécution d'un programme
  • expliquer le fonctionnement des mécanismes de garbage collection
 
Contenu
Le cours présente la théorie et la pratique de l'implémentation des langages de programmation, et de l'architecture des compilateurs. Nous balayerons les composants standards d'un compilateur, du front-end (analyse lexicale et syntactique) au back-end (émission de code machine, ou interpréteur) en passant par l'analyse statique et les systèmes de types. A terme, les étudiants seront capables de comprendre les tenants et les aboutissants des différentes méthodes d'implémentation de langage en usage aujourd'hui.
Au cours du quadrimestre, les étudiants seront amenés à implémenter leur propre langage de programmation.
Méthodes d'enseignement

En raison de la crise du COVID-19, les informations de cette rubrique sont particulièrement susceptibles d’être modifiées.

Le cours consiste en une série de cours magistraux, ainsi que de séances de travaux pratiques introductifs aux technologies, et/ou séances de consultation avec les assistants. Durant la période d'enseignement, les étudiants seront amenés à implémenter leur propre langage de programmation.
Les cours en présentiel ainsi que l'enseignement à distance ou un mélange des deux méthodes sont possibles, en fonction des circonstances.
Modes d'évaluation
des acquis des étudiants

En raison de la crise du COVID-19, les informations de cette rubrique sont particulièrement susceptibles d’être modifiées.

La majeure partie de l'évaluation du cours sera faites sur un projet qui consiste à un implémenter un langage de programmation de bout en bout. Un examen écrit est également envisageable, selon les circonstances.
Les modalités pour la seconde session dépendront du nombre d'étudiants concernés. Il pourrait s'agir d'un examen écrit, oral, ou d'un second projet.
En cas de doute sur le travail personnel d'un étudiant lors du projet ou de problèmes techniques, l'enseignant se réserve le droit de faire passer à certains étudiants un examen oral supplémentaire qui complète ou remplace la note obtenue dans le(s) projet(s) et examen(s).
Autres infos
Préalables :
  • LINGI1122 : Méthodes rigoureuses de conception de programmes
  • LSINF1121 : langage de programmation de haut niveau, algorithmique et structures de données
  • LINGI1101 : Logique et structures discrètes
Bibliographie
Ouvrage(s) recommandé(s) :
  • Crafting Interpreters, Bob Nystrom (https://craftinginterpreters.com/)
  • How To Create Pragmatic Lightweight Languages, Federico Tomassetti
  • Introduction to Compiler Construction in a Java World, Bill Campbell, Swamilyer, Bahar Akbal-Deliba
  • Modern Compiler Implementation in Jaav, Andrew W. Appel
Support de cours
  • Supports du cours en ligne
Faculté ou entité
en charge
INFO


Programmes / formations proposant cette unité d'enseignement (UE)

Intitulé du programme
Sigle
Crédits
Prérequis
Acquis
d'apprentissage
Master [120] : ingénieur civil en informatique

Master [120] en sciences informatiques

Master [60] en sciences informatiques