aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/rapport.md48
1 files changed, 43 insertions, 5 deletions
diff --git a/doc/rapport.md b/doc/rapport.md
index 9ac56de..35b23fe 100644
--- a/doc/rapport.md
+++ b/doc/rapport.md
@@ -33,17 +33,55 @@ L'analyse lexicale est réalisée avec Flex et est contenue dans le fichier `tpc
33 33
34- Les types sont `entier` et `caractere` et renvoient le token `TYPE` 34- Les types sont `entier` et `caractere` et renvoient le token `TYPE`
35 35
36//TODO 36- Les mots-clés comme `if else return` (auquels on associe les tokens suivants `IF ELSE RETURN`) doivent être écrit en majuscules et ne peuvent pas être utilisés comme identificateur.
37 37
38- Les commentaires sont délimités par `/*` et `*/` et ne peuvent pas être imbriqués.
38 39
39`print`,`reade` et `readc` sont des identificateurs qui appartiennent au langage tpc, ils ne doivent pas être utilisé pour déclarer des variables. Nous avons donc créer des tokens spécifiques pour leur gestion dans la grammaire. 40- `print`,`reade` et `readc` sont des identificateurs qui appartiennent au langage tpc, ils ne doivent pas être utilisé pour déclarer des variables. Nous avons donc créer des tokens spécifiques pour leur gestion dans la grammaire (respectivement les tokens `PRINT`, `READE` et`READC`)
40 41
41##Analyse syntaxique 42##Analyse syntaxique
42//TODO 43
44La grammaire est celle fournie sur la plateforme elearning.
45
46- Cette grammaire génère un conflit empiler/réduire pour la règle
47
48```yacc
49Instr : IF '('Exp')' Instr
50 | IF '('Exp')' Instr ELSE Instr
51```
52
53Par exemple :
54
55```
56IF '('Exp')' IF '('Exp')' Instr ELSE Instr
57```
58
59*Faut il empiler `ELSE` ? Ou réduire `IF '('Exp')' Instr` ?*
60Pour résoudre le conflit, il faut gérer les `precedences`.
61Nous avons choisi de rentre le `ELSE` plus précédant que `')'` qui est le dernier terminal. Ainsi, Bison va choisir d'empiler en priorité.
62
63- Un autre conflit existe, sur l'associativité de `,`:
64
65```yacc
66ListExp : ListExp ',' Exp
67 | Exp ';'
68```
69
70Par exemple :
71```
72ListExp ',' ListExp ',' ListExp
73```
74
75Doit-on reduire à gauche ? Ou a droite ?
76Dans les langages tel que le C, l'associativité se fait à gauche.
77On déclare donc `%left ,` pour l'indiquer à Bison.
78
79
43##Améliorations enviseageables 80##Améliorations enviseageables
44 81
45- Récupération sur erreur 82- Récupération sur erreur
83Nous pourrions envisager de parser entièrement le fichier et de ne pas s'arrêter dès la première erreur de syntaxe comme le fait gcc. Il est possible de réaliser ceci en modifiant le code de yyerror() par exemple.
46 84
47- Numérotation des lignes 85- Numérotation des lignes
48 86En complément de la précédente amélioration, nous pourrions imaginer donner les lignes dans le message d'erreur de syntaxe.
49//TODO \ No newline at end of file 87Il suffit de maintenir une variable globale incrémentée à chaque saut de ligne `\n`