From ca4eb22716a278de54305d48e87ac30d189c693b Mon Sep 17 00:00:00 2001 From: Notkea Date: Tue, 5 Jun 2018 15:37:05 +0200 Subject: Blah. --- doc/rapport.md | 21 +++++++++++++++------ 1 file 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. On déclare donc `%left ,` pour l'indiquer à Bison. +# Génération de code cible + +## Gestion de la mémoire + +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. + +## Fonctions + +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. + +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. + +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. + + # Améliorations enviseageables ## Récupération sur erreur 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`. Il est possible de réaliser ceci en modifiant le code de `yyerror()` par exemple. - -## Numérotation des lignes - -En complément de la précédente amélioration, nous pourrions imaginer donner les lignes dans le message d'erreur de syntaxe. -Il suffit de maintenir une variable globale incrémentée à chaque saut de ligne `\n` - -- cgit v1.2.3