Hello,

Envoyé par
jalam
bonsoir tt le monde
alors voila j'essaie d'ecrire un analyseur lexical pr un petit compilateur(projet donnée en classe) tt marche bien(les differents tokens sont reconnus)le pb réside ds la table de symboles;en fait,ce qui arrive c ke tous les tokens sont insérés dans la meme place ds la table.
kelkun pourrait jeter un coup d'oeil sur le .cpp joint?(ça va pas etre rigolo ds la mesure ou je ne suis pas trés ordonnée ds mé progs

mais vous pourriez kan meme fér un ptit effort pour une pauvre nouvelle....hein?
merci d'avance.
Première chose, l'extension cpp est utilisée pour du C++ et la plupart des compilateurs vont compiler par défaut ce fichier en C++ (enlève les cast sur les malloc et tu verras). Passer le fichier en .c
Seconde chose, tu utilises des variables globales (bof bof), et ici ben tu en fais les frais.
Tu as une varible globale de type int initialisée à 4. Lors de l'appel de la fonction inserer(), c'est toujours 4 (position global) qui est passé en argument effectif. Dans la fonction rechercher(), c'est le position global qui est pris et la recherche dans la table des symboles se fait toujours sur les 4 premiers tokens.
Plus grave ensuite, pour revenir à la fonction inserer(), tu utilises le nom position pour l'argument formel, et ce nom masque celui de la variable globale, il prend le dessus.
Vu que ta fonction rechercher() renvoie toujours 0 et que position (argument effectif) vaut toujours 4 au passage dans inserer(),
la ligne
static int indice=position;
fait qu'on affecte 4 à indice à chaque fois. Ensuite, le topo, c'est incrémentation, on passe à 5 que l'on affecte à position (le local, bien évidemment), on écrit toujours à cette position, etc...
A+
Partager