|
|||||
Compilation 2003/2004: Projet
|
|||||
français
|
Partie 4
A présenter lors de la séance du 9 janvier 2004. Le but de cette partie est d'ajouter la phase d'analyse sémantique au compilateur misc. Cette analyse sémantique effectue deux tâches: l'analyse des noms et l'analyse des types. Au même titre que l'analyse lexicale se basait sur la grammaire lexicale et l'analyse syntaxique sur la grammaire syntaxique, l'analyse sémantique se base sur la grammaire attribuée de misc, qui a été vue au cours. L'analyse des noms consiste à associer à chaque identificateur du programme sa définition, et donc à vérifier que les identificateurs utilisés dans le programme sont effectivement définis. L'analyse des types consiste à vérifier que les types des différentes parties du programme sont corrects. Une fois l'analyse sémantique effectuée avec succès, la production de code pourra enfin commencer, car le programme sera garanti correct par rapport aux règles statiques du langage. L'analyse des noms associe à chaque identificateur du programme sa
définition. Pour ce faire, elle stocke directement dans l'arbre, dans
chaque nœud contenant un identificateur, un symbole qui
contient les informations relatives à l'identificateur. Cela signifie
qu'il vous faudra ajouter un champ de type Chaque symbole contient les informations suivantes :
L'analyse des noms vérifie également que les identificateurs utilisés sont préalablement définis, et qu'un même identificateur n'est pas défini plus d'une fois dans une portée. En misc, les portées suivantes existent :
Le langage misc dispose de 4 fonctions d'entrée-sortie prédéfinies, qui doivent faire partie de la portée principale du programme. Ces fonctions ont le profil suivant :
L'analyse des types calcule le type des différentes parties du programme et vérifie qu'ils sont corrects. Les types existant en misc sont :
t1 <: t2 si
t1 est un sous-type de t2 .
Le type Certains nœuds ne possèdent pas de type, comme par exemple
ceux correspondant aux définitions de fonction ou aux instructions
Lors des phases précédentes, vous étiez autorisé à vous arrêter
après la première erreur. Ceci n'est pas le cas pour cette phase;
cette fois-ci, toutes les erreurs doivent être
signalées. Il peut arriver qu'à cause d'une erreur, il soit impossible de
calculer le type d'un nœud. Dans ce cas, vous pouvez lui
attribuer le type Pour cette partie, nous vous fournissons les fichiers suivants :
|