Compilation 2004/2005 |
|||||
French only |
|||||
Partie 3 : Construction de l'arbre
A présenter lors de la séance du 10 décembre 2004. Le but de cette partie est de modifier l'analyseur syntaxique pour qu'il construise l'arbre syntaxique correspondant au programme source. Cet arbre syntaxique sera ensuite utilisé par toutes les phases suivantes du compilateur. La première chose à faire est de choisir une syntaxe abstraite pour le langage eins. Une syntaxe vous est proposée ici, mais vous êtes libres de choisir la vôtre si la nôtre ne vous convient pas. Notez toutefois que les fichiers que nous distribuons utilisent cette syntaxe abstraite.
Une fois la grammaire abstraite choisie, il importe de la
traduire en code Java, en écrivant une sous-classe de la classe
Nous avons introduit dans le langage eins une certaine quantité de sucre syntaxique. On nomme ainsi les constructions d'un langage qui sont strictement équivalentes à d'autres, mais qui ont une syntaxe différente. Le sucre syntaxique n'apporte donc aucune expressivité au langage, mais permet par contre souvent de rendre la vie du programmeur plus douce, en allégeant certaines notations, d'où son nom.
Un exemple de sucre syntaxique en Java est la boucle
for (e1; e2; e3) e4est équivalent à e1; while (e2) { e4; e3; }
La boucle Le sucre syntaxique de eins est défini dans la table ci-dessous. La manière correcte (et simple) de traiter le sucre syntaxique dans un compilateur est de le supprimer totalement, au moment de la construction de l'arbre. Le sucre syntaxique existe donc dans la grammaire concrète, mais pas dans la grammaire abstraite. Cela simplifie grandement les phases ultérieures du compilateur, qui doivent gérer uniquement les constructions de base du langage.
Dans l'équivalence du sucre syntaxique pour les chaînes de caractères, l'expression code(c) représente le code ASCII du caractère c. Le tableau ci-dessous donne quelques exemples de transformation de sucre syntaxique.
Nous vous fournissons les fichiers suivants pour vous aider dans cette partie.
Bien entendu, le gros du travail consiste à modifier votre
analyseur syntaxique (fichier |
|