Problème pour conserver une valeur dans ma liste chainée
	
	
		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:
	
| 12
 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:
	
[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 :
	Citation:
	
		
		
			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:
	
| 12
 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 !!