Académique Documents
Professionnel Documents
Culture Documents
Comme c’est indiqué dans le sujet du TP n°2, on associe une fonction à chaque non terminal.
#include <stdio.h>
#include <stdlib.h>
#define N 20
#define NMots 200;
char M[N]="";
int i, nm, NmMots = NMots;
n = strlen(M);
// application de la règle S aA :
M1[n] = 'a';
M1[n+1] = '\0';
A(M1); // appel de A
} // Fin de la fonction S
n = strlen(M);
r = rand()%3; // nombre aléatoire entre 0 et 2 inclus
strcpy(M1,M) ;
switch (r) {
case 0 : // application de la règle A bA :
M1[n] = 'b';
M1[n+1] = '\0';
A(M1); // appel de A
break;
case 1 : // application de la règle A cA :
M1[n] = 'c';
M1[n+1] = '\0';
A(M1); // appel de A
break;
main ()
{
do {
printf(" nombre de mots a generer : ");
scanf("%d",&nm);
} while ((nm<1)||(nm>NmMots));
printf("mots du langage : \n");
i = 0;
while (i<nm) {
strcpy(M,"");
S(M); // appel de S
i++;
}
printf("\n");
}
Remarque :
Tel qu’écrit, ce programme peut générer des mots dupliqués (affichage d’un même mot plusieurs fois).
Il serait intéressent de lui rajouter une fonctionnalité pour éviter cette duplication.