aboutsummaryrefslogtreecommitdiff
path: root/doc/rapport.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rapport.md')
-rw-r--r--doc/rapport.md21
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.
87On déclare donc `%left ,` pour l'indiquer à Bison. 87On 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
94Pour 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
98Il 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
100Les 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
102L'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
94Nous 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`. 109Nous 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`.
95Il est possible de réaliser ceci en modifiant le code de `yyerror()` par exemple. 110Il est possible de réaliser ceci en modifiant le code de `yyerror()` par exemple.
96
97## Numérotation des lignes
98
99En complément de la précédente amélioration, nous pourrions imaginer donner les lignes dans le message d'erreur de syntaxe.
100Il suffit de maintenir une variable globale incrémentée à chaque saut de ligne `\n`
101