probleme grammaire linéaire en C

probleme grammaire linéaire en C - C - Programmation

Marsh Posté le 07-12-2008 à 18:14:54    

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 :
  1. int bP(int eR, int *peS)
  2. {
  3.     //P => R + B
  4.     int  bPSucces;
  5.     bPSucces = (bR(eR,peS)) || (bB(eR,peS));
  6.      if(bPSucces)
  7. {
  8.  *peS = eR + 1;
  9.  printf("la condition P est vraie\n" );
  10.  return 1;
  11. }
  12. else{
  13.     *peS = eR ;
  14.     printf("la condition P est fausse\n" );
  15.  return 0;}
  16. }
  17. int bR(int eS, int *peT)
  18. {
  19.     //R => B . P
  20.     int  bRSucces,eJ;
  21.     bRSucces = (bB(eS,&eJ)) && (bP(eJ,peT));
  22.      if(bRSucces)
  23. {
  24.  *peT = eS +1;
  25.  printf("la condition R est vraie\n" );
  26.  return 1;
  27. }
  28. else{
  29.     *peT = eS ;
  30.     printf("la condition R est fausse\n" );
  31.  return 0;}
  32. }


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 :
  1. int bO (int eP, int *peQ)
  2. {
  3. // O => P.A
  4. int bOSucces,peO;
  5. bOSucces =( (bP(eP,&peO)) && (bA(peO,peQ)) );
  6.     if(bOSucces)
  7. {
  8.  *peQ = eP +1;
  9.  printf("la condition O est vraie\n" );
  10.  return 1;
  11. }
  12. else{
  13.          *peQ = eP;
  14.          printf("la condition O est fausse\n" );
  15.  return 0;}


 
 
merci d'avance (dsl je suis vraiment pas au point en récursivité)

Reply

Marsh Posté le 07-12-2008 à 18:14:54   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed