Quelques propositions de sujets de travail de session

Compilateur nitc vers llvm

L’objectif est de réaliser une preuve de concept d’un compilateur nitc vers llvm

Note: ce sujet est technique

  • 1: Réaliser le module Nit de génération de code LLVM (texte format .ll pour pouvoir valider)
  • 2: Adapter les compilateur nitc pour générer du LLVM plutôt que du C
  • 3: Note: la génération peut être incrémentale en mélangeant des morceaux compilés en C et d’autres compilés en llvm

Littéraux avec soulignés dans Pharo

L’objectif est de terminer l’implémentation de PhEP5

Note : ce sujet demande de produire du code de qualité

  • 1: Comprendre les classes RBScaner et NumberParser, et la façon dont est implémentée l’analyse lexicale de littéraux numériques
  • 2: Implémenter la gestion des _
  • 3: Ajouter la reconnaissance de jetons « nombre mal formé » pour le source invalide mais qui suffisamment proches d’un truc qui ressemble à un nombre
  • 4: Développer de nombreux cas de tests
  • 5: Soumettre un PR pour intégration
  • 6: Ajouter la représentation flottante hexadécimale (dans une autre PR)

Énumérations en Nit

L’objectif est de permettre la réalisation d’énumérations simple dans le langage Nit

Note: ce sujet est difficile

  • 1: Spécification de la syntaxe et de la sémantique (à l’aide du professeur) + étude du compilateur Nit
  • 2: Modification du frontend pour déclarer et utiliser les énumérations
  • 3: Preuve de concept fonctionnelle dans l’interpréteur
  • 4 bonus : Preuve de concept fonctionnelle dans le compilateur

Implémentations d’analyses et d’optimisations dans MiniCC2

L’objectif est de se faire plaisir et d’implémenter un maximum d’analyses et d’optimisations classiques dans MiniC.

Note : ce sujet est fun

  • Ce sujet peut être pris indépendamment par plusieurs personnes
  • Contrairement à un vrai compilateur, on privilégiera la simplicité et l’élégance du code plutôt que la performance.

RISC-V Analysis

L’objectif est d’implémenter quelques analyses simples Data-Flow pour RARS

Note : ce sujet demande de produire du code de qualité

  • 1: Générer CFG (et basicblocks) à partir du code assembleur
  • 2: Permettre de visualiser le CFG
  • 3: Implémenter quelques analyses. Par exemple, registre utilisé mais non initialisé, code mort ou inutile

Vérificateur de code octet en Pharo

L’objectif est de déterminer les règles de validation du bytecode Pharo et les implémenter

Note :

  • Lire et comprendre les besoins et subtilité d’un vérificateur de bytecode (par exemple celui de Java)
  • Proposer des règles de validation pour le bytecode Pharo
  • Implémenter un validateur de bytecode en Pharo pour le compilateur et/ou la machine virtuelle

Exécution symbolique MiniC

L’objectif est de prototyper un exécuteur symbolique pour MiniC

  • Lire et comprendre à propos de l’exécution symbolique
  • Utiliser JavaSMT par exemple

Étendre le langage MiniC

L’objectif est d’ajouter des traits de langages à MiniC

Par exemple:

  • Ajouter mémoire, tableaux et pointeurs
  • Ajouter les lambdas
  • Ajouter les exceptions
  • Ajouter le multithreads à la go avec des channels
  • Etc.

Tâches:

  • Étendre le parser
  • Étendre et ajouter des analyses sémantiques
  • Étendre l’interpréteur MiniC
  • Étendre le compilateur MiniCC et/ou MiniCC2
  • Faire plein de programmes tests pour valider le comportement et la détections des erreurs

Toute autre sujet intéressant

À discuter avec le professeur.

  • Vaguement en rapport avec la compilation
  • Qui nécessite de développer et/ou utiliser des technos et outils complexes
  • Optionnellement qui soit en rapport avec votre sujet de recherche de maîtrise (afin de factoriser et réutiliser votre travail)