<\body> ||>>> Les indications et contraintes données par le sujet ont été suivies et devraient être facilement compréhensibles. Voici quelques précisions sur certaines décisions prises à l'élaboration des lexer/parser. <\itemize> La règle du lexer permet de traîter les séquences d'échappement dans les chaînes de caractères. Le , permettant de remédier aux ambiguïtés de la grammaire, est défini : lorsque le parser rencontre une occurence , il ajoute l'identificateur à la table d'association contenant les types, partagée par le parser et le lexer dans l'AST. Les occurences suivantes de seront donc prises comme des identificateurs de type. L'associativité à droite des opérateurs unaires est traduite par les dérivations dans la grammaire définies par . La localisation d'erreur de compilation est traitée pour tous les non-terminaux dont la dérivation contient au moins un non-terminal. Des structures intermédiaires sont définies pour traduire les occurences type\ \var\, \type\ \var\+, \type\ \qvar\>. \ La fonction définie au début du parser permet d'inverser le sens de et (et de préciser le type pointeur ou référence) si on a par exemple une expression de la forme , pour que la compilation traite la sémantique souhaitée lors du codage. Les se traduisent en une paire : le premier membre indique l'identificateur (peut être un pointeur ou une référence vers un identificateur) et le second indique s'il s'agit d'une classe, et précise la classe le cas échéant. Le non-terminal fait appel à deux non-terminaux pour différents statements : <\itemize> Ceux ne contenant pas d'instruction : ;\ Ceux ne contenant pas d'instruction , , ou : La construction permet de traduire le fait que lorsqu'un peut se rapporter à plusieurs , il se rapporte au le plus proche. Les expressions sont décomposées elles aussi en plusieurs sous-structures pour une exploitation plus pratique. Dans , les dérivations où apparaît zéro ou une fois une expression sont traitées de façon séparée : avec , puis , puis . \ Certaines érivations inutiles de la grammaire sont ainsi évitées : par exemple, dans ident> ou , ne peut pas se dériver en une assignation e1\ = \e2\> (à moins qu'elle soit entre parenthèses), mais qu'en une expression "primaire" (identificateur, this, NULL, constante, booléen ou expression entre parenthèse), ce qui résoud un certain nombre de conflits de la grammaire. évite que la grammaire crée une dérivation produisant l'appel d'une classe lors de la définition d'une autre. En effet, lors d'une telle définition, il faut rappeler que l'on ne doit pas avoir accès à d'autres classes externes. Tous les tests fournis ont été vérifiés corrects. \; \; \; <\initial> <\collection>