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 :
- 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 :
- 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é)