From f16b5e2e18e06ec1fb14c7f29a560c3ca596b576 Mon Sep 17 00:00:00 2001 From: Alex AUVOLAT Date: Thu, 28 Nov 2013 18:02:33 +0100 Subject: Ajout du rapport... --- .gitignore | 3 ++ Rapport.tm | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 Rapport.tm diff --git a/.gitignore b/.gitignore index df88ea1..3fa6770 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,8 @@ _build *.byte .depend *.swp +*~ +*.ps +*.pdf src/parser.automaton src/parser.conflicts diff --git a/Rapport.tm b/Rapport.tm new file mode 100644 index 0000000..a50062a --- /dev/null +++ b/Rapport.tm @@ -0,0 +1,94 @@ + + + + +<\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> + + + \ No newline at end of file -- cgit v1.2.3