Bonjour ! j'essaye actuellement de construire un AFN en c. Enfaite il faut je complete des fonctions donnée par mon prof mais je m'en sort pas.
voici ce que nous a donner mon prof
je voulais commencer avec afn_init qui initialise un AFN et voici ce que j'ai fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #ifndef AFN_H #define AFN_H #define ASCII_FIRST 38 #define ASCII_LAST 127 #define MAX_SYMBOLES 90 struct AFN{ int Q,lenI,lenF,lenSigma; int *I,*F; char * Sigma; char dico[MAX_SYMBOLES]; int ***delta; }; typedef struct AFN * AFN; AFN afn_init(int Q, int nbInitiaux,int * listInitiaux, int nbFinals, int * listFinals, char *Sigma); void afn_print(AFN A); void afn_free(AFN A); void afn_ajouter_transition(AFN A, int q1, char s, int q2); AFN afn_finit(char *file); int * afn_epsilon_fermeture(AFN A, int *R); int afn_simuler(AFN A, char *s); #endif
mon problème dans cette fonction c'est que je dois rajouter les transitions et les epsilones transition mais je ne sais pas comment faire...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 AFN afn_finit(char *file){ FILE* fichier=NULL; fichier=fopen(file,"r"); char chaine[100]=""; int Q,q0,nbeFinal; if (fichier != NULL) { fgets(chaine,10,fichier); //3 sscanf(chaine,"%d",&Q);//nb d'etats fgets(chaine,10,fichier);//0 sscanf(chaine,"%d",&q0); //nb etats initiaux int* ini=malloc(sizeof(int)*q0); // reccupere les états initiaux fgets(chaine,10,fichier); int i=0,tmp,lig=0; for(i=0;i<q0;i++) { sscanf(&chaine[lig],"%d",&tmp); ini[i]=tmp; lig=lig+tmp/10+1; } fgets(chaine,10,fichier);//2 sscanf(chaine,"%d",&nbeFinal); // les etats finaux int* f=malloc(sizeof(int)*nbeFinal); //03 fgets(chaine,10,fichier); //les etats finaux (0 et 3) i=0,tmp=0,lig=0; for(i=0;i<nbeFinal;i++){ sscanf(&chaine[lig],"%d",&tmp); f[i]=tmp; lig=lig+tmp/10+1; } fgets(chaine,10,fichier); //reccuperation des symboles char* alphabet =malloc(sizeof(char)*strlen(chaine)); //motifab strcpy(alphabet,chaine); alphabet[strlen(alphabet)-1]='\0'; AFN A=afn_init(Q,q0,ini,nbeFinal,f,alphabet); fclose(fichier); return A; }
Je vous remercie d'avance pour votre aide![]()
Partager