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
les fonction bB et bA sont de type A=>a et B=>b
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;} }
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
Partager