projet-traduction-langage/rapport.md
Guillotin Damien c0df3ccd47 jnfzefunzun
2022-01-11 15:52:40 +01:00

3.2 KiB

Rapport : Projet de programmation fonctionnelle et de traduction des langages

Faisin Laurent
Guillotin Damien
2SN-M2

Introduction

Lors de nos TP, nous avons écris un compilateur. Ce compilateur part du langage source RAT et le transcrit en TAM. Le langage RAT est un langage assez simple prenant compte différentes fonctionnalités classiques telles que les boucles TantQue ou les blocs conditionnels SiAlorsSinon. Le langage TAM quand a lui est un langage proche de l'assembleur.
Le but de ce projet est d'ajouter différentes fonctionnalités au langage RAT. La première fonctionnalité ajouté est le type pointeur. La deuxième implantation est celle de l'opérateur += qui permet d'additionner et d'affecter en une même instruction. En suite, nous avons ajouté les typedef. Et enfin, nous avons implanté les type struct. Ces trois fonctionnalités permettent au langage RAT d'être plus complet et ainsi plus efficace pour une personne souhaitant l'utiliser.
Pour chacune de ses implantations, il a fallut modiffier les codes correspondants aux différentes étapes de la compilation. La modification du lexer (pour reconnaitre les nouveaux mots), le parser (pour reconnaitre la nouvelle grammaire) et les différentes passes pour vérifier la cohérence sémantique du code RAT à compiler.

Modifications générales de l'AST

Lors de l'ajout des différentes extensions, nous avons évidement du modifier l'AST pour l'adapter aux différents ajouts. Le plus gros ajout, qui est commun a plusieurs extensions, est l'affectable. L'affect, comme son nom l'indique, va désigner un objet pouvant être affecté. Avant l'ajout des différentes expression, il n'y avait que les identificateurs qui pouvaient faire office d'affectbale mais maintenant, il y a les dref, les attribut d'un objet de type struct ou encore les identifiants. De plus, pour chaque nouveau type, il a fallu ajouter dans l'AST de la passe typage, dans les instructions, un type print tel que printStruct pour les structs.

Pointeurs

L'implenation des pointeurs a commencé par l'ajout du type Pointeur of typ. Ainsi, le type pointeur reste assez abstrait pour pouvoir ajouter des types sans avoir a modifier du code au niveau des pointeurs. De plus, cette implentation permet de construire des "pointeurs de pointeurs".
En ce qui concerne les modifications de l'AST, nous avons ajouté la dref pour l'affectable. Les nouvelles expressions apportés sont Null, NewType et Adresse.
Les modifications apportées à la passe TDS est l'utilisation que de dref et d'Adresse doit être utilisé sur des identifiants déjà existant. Dans le cas contraire, une exception d'utilisation d'identifiant est levé.
Le plus gros du travail pour les pointeurs a été réalisé sur la passe de typage. En effet, cette passe doit vérifier que les objets sont typement compatibles. L'expression Null est

Incrémentation

Cette fonctionnalité est très simple à implémenter, on remplace simplement toutes les instances de a += b par a = a + b. On a ainsi dans parler.mly

| aff=a PLUS EQUAL exp=e PV           {Affectation (aff, Binaire (Plus, Affectable(aff), exp))}

Type nommé

Structure