Traduction

Licence Informatique 3ème année --- TD 7

Appel de fonctions


Dans ce TP, nous allons voir comment compiler des programmes contenant de petites fonctions arithmétiques. Nous utiliserons pour cela une extension du langage défini dans le TD 6 que nous compilerons en du code exécutable par la machine virtuelle présentée dans le même TD.

Le résultat de ce TD doit être envoyé par mail avant vendredi 9 avril minuit à votre chargé de TD. Le titre du mail doit être Traduction TD7 XXX, où XXX est votre nom de famille.

\noindent On souhaite écrire des fonctions très simples, prenant en paramètres des valeurs entières, et retournant des expressions arithmétiques. Pour cela, on utilisera le mot-clé function et la syntaxe suivante:

function boum(x,y)=x+y;
function rend_sept()=7;

On veut également pouvoir définir des variables, en utilisant le mot-clé var:

var garder=4-boum(4,2*3)*rend_sept();
et afficher des expressions avec le mot-clé print:
print garder+boum(7,8);


Exercice n°1 : Table des symboles

On veut pouvoir tester si un programme est syntaxiquement correct. Pour cela, il faut vérifier, entre autres, que les identificateurs sont correctement utilisés. Les contraintes que l'on veut respecter sont les suivantes:
  1. Définissez une structure de table des symboles permettant de gérer ces différentes contraintes.
  2. Écrivez les programmes flex et bison permettant de tester si un programme est syntaxiquement correct. En cas d'erreur, un message indiquant la nature de l'erreur doit être indiqué. Par exemple, l'analyse du programme suivant:
    var tutu=60+titi;
    function hypercube(y)=y*y*y*y;
    function toto(x,y)=tutu()+hypercube(x,y);
    
    devrait provoquer l'affichage de messages d'erreur tels que:
    Ligne 1: variable 'titi' non declaree
    Ligne 3: 'tutu' est une variable et non une fonction
    Ligne 3: nombre de parametres incorrect pour 'hypercube'
    

Exercice n°2 : Génération de code

Modifiez votre compilateur pour qu'il produise en sortie du code exécutable par la machine virtuelle.

Si vous avez terminé...

Ajoutez la création et la gestion des tableaux:

var tab[10];
tab[2]=4;
La taille du tableau doit être une constante entière strictement positive, un tableau n'est pas initialisé.

Gérez les variables locales en permettant les expressions de la forme var ident in exp.