Salut, je développe un analyseur lexical pour mon cours de compilation, et j'ai un problème...

Pour mon analyseur, j'utilise lex et une liste chaînée pour conserver les tokens, et le problème c'est que la valeur du token est modifée par lex !

Voici une partie du code dans mon main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
// j'ajoute le premier élément de la liste chainée avant de boucler sur yylex()
table *tete = NULL;	// table est la structure pour ma liste chaînée
ajoute(&tete, "", "");
while(eof == 0)
{
	// ici la valeur du dernier token est correcte
	printf("1 -> %s\n", tete->value);
	yylex();
}
yylex() va reconnaître les expressions réguilières que je lui donne et exécuter le code correspondant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
[expression_reguliere]	printf("2 -> %s\n", tete->value); ajoute(&teteTable, yytext); return;

Et si je prend comme exemple le code suivant : int main (...)
Alors j'aurais à l'affichage :
1 -> int
2 -> int main

Pour ce qui concerne la méthode ajoute(), voilà le code (je me suis inspiré du tutoriel sur les listes chaînées de developpez.com) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
void ajoute(table **t, char *val)
{
	table *element = malloc(sizeof(table));
	// Si l'allocation a échouée
	if(!element)	exit(1);
	if(*t == NULL)	element->id = 0;
	else			element->id = (*t)->id + 1;
	element->value = val;
 
	element->precedent = *t;
	// Le pointeur pointe sur le dernier élément
	*t = element;
}
Je pense que le problème vient de là : element->value = val; car val pointe vers yytext qui va être modifié à la boucle suivante... J'ai essayé de remplacer cette ligne par un strcpy mais j'ai du mal m'y prendre car alors tous les éléments de la liste chaînée étaient remplacés par le token en cours (et donc à la fin du fichier, j'avais une liste avec uniquement le dernier token...)


Quelqu'un a une idée ?


Merci d'avance !!