PLD_COMP
📢 Note importante pour les correcteurs
Le projet se poursuit après la date de rendu du projet uniquement par plaisir. Un git tag v1.0.0
a été créé marquant le rendu du projet, avant le vendredi 6 avril 20h.
Vous pouvez accéder à cette version ici, en téléchargeant un dossier compressé, ou en clonant le dépôt et en accédant à cette release avec
$ git checkout v1.0.0
Bien que la création de la release est postérieure à la date limite, il est possible de s'assurer de la date du dernier commit avec git log
Usage
$ ./bin/app source.c [-o/-oout/-Sout] [source.c]
# Par défaut, génère uniquement l'assembleur dans le chemin ./target.prog.s
$ ./bin/app source.c
# -o génère l'exécutable dans le chemin ./target/prog.out
$ ./bin/app source.c -o
# -Sout pour choisir l'emplacement du fichier assembleur généré
$ ./bin/app source.c -Sout path/to/file.s
# -oout pour choisir l'emplacement de l'exécutable généré
$ ./bin.app source.c -oout path/to/exe.out
Installation sur Linux
Pré requis
- gcc version 5.x.x ou plus récent
- CMake
- Installer les dépendances suivantes
$ sudo apt-get install uuid-dev
$ sudo apt-get install libgflags-dev
Compilation
$ mkdir build
$ cd build
$ cmake ..
$ make
Tests
Tous les tests sont dans le dossier tests
, et doivent être exécutés depuis ce dossier
symbols-test.sh
eterrors-test
testent les fonctionnalités du front endasm-test.sh
teste les fichiers assembleurs généréscli-test.sh
teste le comportement des options du programmeexec-test.sh
teste l'exécution des programmes générés
$ cd tests
$ ./symbols-test.sh -v
$ ./asm-test.sh -v
$ ./errors-test.sh -v
$ ./cli-test.sh -v
$ ./exec-test.sh -v
Fonctionnalités
Front-end
âś… Fonctionnel
- Programme avec plusieurs déclarations et plusieurs fonctions
Include
Putchar()
- Variables globales
- Types de variables :
int32_t
,int64_t
etchar
- Fonction avec plusieurs paramètres
- Instructions :
- multiples : déclarations, affectations, initialisations (avec prise en charge des tableaux); expression
- appel fonction, retour fonction
if-else
,while
- Opérations présentes dans les fichiers de test.
- binaires, unaires et les post-pré/incrémentations-décrémentations
- Expressions pouvant ĂŞtre :
- (expr), variable, appelfonction, operationunaire expr, expr operationbinaire expr.
❌ Non implémenté
for
- Opérateur comma
,
Back-end
âś… Fonctionnel
- 5.3 : Compiler un programme qui fait un
putchar()
- 5.4 : Compiler l’affectation vers une variable
- 5.5 : Compiler des expressions (- comma et {in/de}crémentations)
- 5.6 : Compiler le
if ... else
- 5.7 : Compiler les boucles
while
- 5.8 : Retour de valeur
- 5.9 : Compiler l’affectation à une
lvalue
quelconque - 5.11 : Compiler les appels de fonction ayant jusqu’à 6 arguments
- 5.13 : Test sur des programmes complexes (Factorielle)
- 5.15 : Compiler les appels de fonction ayant plus de 6 arguments
❌ Non implémenté
- Variables globales
- Gestion des erreurs
- BasicBlocks
- Optimisations
- Initialisation (HĂ©ritage)
- Opérateurs (comma et {in/de}crémentations)
- Déclaration hors des blocs principaux des fonctions (Parcours déclaration en amont)
- Returns multiples (Double Ă©pilogue) Retours fonctionnels sur la branche
FixReturn
, mais les tests ne passent pas, car l'épilogue des fonctions peut être généré 2 fois, mais ne perturbe pas l'exécution du programme - 5.10 : Compiler des tableaux (Accès Mémoire)
- 5.12 : Compiler les boucles for (Temps)
- 5.14 : Gestion correcte des types (Evaluation Taille)