diff options
author | Adam NAILI | 2018-06-05 17:25:55 +0200 |
---|---|---|
committer | Adam NAILI | 2018-06-05 17:25:55 +0200 |
commit | 244887d732dd410a3621bb7a3b59c9980c0162a8 (patch) | |
tree | b5e5afbdf8d67d41af45a15fd043c772ced8427c /doc/rapport.md | |
parent | f7760de088b7da0bca973fb40ef4112c24775ac4 (diff) | |
parent | 512b1062bacbf3b3feb5d1189302a2acc59527e8 (diff) | |
download | tpc-compiler-244887d732dd410a3621bb7a3b59c9980c0162a8.tar.gz |
Merge branch 'master' of https://github.com/pacien/upem-compil-tpc
Diffstat (limited to 'doc/rapport.md')
-rw-r--r-- | doc/rapport.md | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/doc/rapport.md b/doc/rapport.md index 906d3ec..17a5719 100644 --- a/doc/rapport.md +++ b/doc/rapport.md | |||
@@ -87,15 +87,24 @@ Dans les langages tel que le C, l'associativité se fait à gauche. | |||
87 | On déclare donc `%left ,` pour l'indiquer à Bison. | 87 | On déclare donc `%left ,` pour l'indiquer à Bison. |
88 | 88 | ||
89 | 89 | ||
90 | # Génération de code cible | ||
91 | |||
92 | ## Gestion de la mémoire | ||
93 | |||
94 | Pour des raisons de simplicité, il a été choisi de travailler principalement sur la pile. Son utilisation simplifie le changement de contexte à l'entrée et à la sortie de fonctions, en plus de permettre la réduction aisée des expressions lors de l'exécution. | ||
95 | |||
96 | ## Fonctions | ||
97 | |||
98 | Il a été choisi d'effectuer le passage des paramamètres simples (de types `entier` et `caractere`) par copie pour des raisons de simplicité et de sécurité, pour permettre une certaine isolation des contextes lors de l'entrée dans une fonction. | ||
99 | |||
100 | Les fonction valuées retournent leur valeur en suivant les conventions d'appel des fonctions C, c'est-à-dire en la plaçant dans le registre `rax`. L'appelant récupère ensuite cette valeur pour pouvoir la stocker dans la pile. | ||
101 | |||
102 | L'analyse statique des branchements étant un problème relativement complexe, il a été choisi de retourner une valeur par défaut (`-1`) en cas d'absence d'instruction de retour dans une fonction valuée. | ||
103 | |||
104 | |||
90 | # Améliorations enviseageables | 105 | # Améliorations enviseageables |
91 | 106 | ||
92 | ## Récupération sur erreur | 107 | ## Récupération sur erreur |
93 | 108 | ||
94 | Nous 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`. | 109 | Nous 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`. |
95 | Il est possible de réaliser ceci en modifiant le code de `yyerror()` par exemple. | 110 | Il est possible de réaliser ceci en modifiant le code de `yyerror()` par exemple. |
96 | |||
97 | ## Numérotation des lignes | ||
98 | |||
99 | En complément de la précédente amélioration, nous pourrions imaginer donner les lignes dans le message d'erreur de syntaxe. | ||
100 | Il suffit de maintenir une variable globale incrémentée à chaque saut de ligne `\n` | ||
101 | |||