slt
je me retrouve confronté à un petit problème de compréhension sut un TP de grammaire linéaire à faire
le but de ce TP et de faire un programme qui reconnaît un langage de type a.b* .a² + b.....b.a (* désigne ici 0 b à l'infini de b soit 1.......b)
je l'est simplifié en ca : (a^3 + a^3 . b.....b) + b.....b.a

soit
M => N + O
O => P.A
P => R + B
R => B.P

N => V + T
V => A.A.A
T => V.P

mon problème est lors de la récursivité ( P et R) ci dessous le code de P et R
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
 
int bP(int eR, int *peS)
{
    //P => R + B
    int  bPSucces;
    bPSucces = (bR(eR,peS)) || (bB(eR,peS));
    	if(bPSucces)
	{
		*peS = eR + 1;
		printf("la condition P est vraie\n");
		return 1;
	}
	else{
	    *peS = eR ;
	    printf("la condition P est fausse\n");
		return 0;}
} 
 
int bR(int eS, int *peT)
{
    //R => B . P
    int  bRSucces,eJ;
    bRSucces = (bB(eS,&eJ)) && (bP(eJ,peT));
    	if(bRSucces)
	{
		*peT = eS +1;
		printf("la condition R est vraie\n");
		return 1;
	}
	else{
	    *peT = eS ;
	    printf("la condition R est fausse\n");
		return 0;}
}
les fonction bB et bA sont de type A=>a et B=>b
j'arrive enfin au problème si je lui demande de reconnaître la règle bbba il ne me la reconnaît pas. il reconnaît bien les 3b mais en moment de faire le test du A (dans le O voir code ci dessous) il effectue la recherche du A à partir du deuxième caractère (soit le 2nd b) et non à partir du A, la regle O et donc fausse alors quelle devrait etre vrai

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
int bO (int eP, int *peQ)
{
	// O => P.A
 
	int bOSucces,peO;
	bOSucces =( (bP(eP,&peO)) && (bA(peO,peQ)) );
    if(bOSucces)
	{
		*peQ = eP +1;
		printf("la condition O est vraie\n");
 
		return 1;
	}
	else{
         *peQ = eP;
         printf("la condition O est fausse\n");
		return 0;}

merci d'avance (dsl je suis vraiment pas au point en récursivité)
si vous avez besoin de précision bien évidement ne pas hésiter