[yacc] Probleme yacc

Probleme yacc [yacc] - Divers - Programmation

Marsh Posté le 07-06-2004 à 12:13:12    

Bjr,
 
Dans mon fichier yacc j ai cette regle, la partie en gras pose probleme à la compilation  :??: , un idée pourquoi ca marche po ?
 
merci d avance
 

Citation :

structureIteratif:
 
SI  PAREN_GAUCHE  {  printf(" si(" );  }  entre_parenthese PAREN_DROITE ALORS Input FINSI { printf(" si \(" ); }
|SI PAREN_GAUCHE entre_parenthese PAREN_DROITE ALORS texte SINON texte FINSI  {;}
 ;


Message édité par sbucci2 le 07-06-2004 à 12:13:51
Reply

Marsh Posté le 07-06-2004 à 12:13:12   

Reply

Marsh Posté le 07-06-2004 à 12:16:22    

C'est normal.
Quand yacc va détecter un  SI  suivit d'un PAREN_GAUCHE que doit-il faire ? Faire ton printf ou passer à la deuxième règle ? Il sait pas donc il doit te sortir un avertissement shift/reduce, non ?
 

Reply

Marsh Posté le 07-06-2004 à 12:24:39    

exact, comment faire laors ?


Message édité par sbucci2 le 07-06-2004 à 12:25:31
Reply

Marsh Posté le 07-06-2004 à 14:00:36    

sbucci2 a écrit :

exact, comment faire laors ?


 
A mon avis, tu es coincé car les deux règles sont trop proches.
Il te faut réécrire la grammaire. Un truc du style :
 


exp : SI  PAREN_GAUCHE {printf(" si(" );}  entre_parenthese PAREN_DROITE ALORS fin_du_si { printf(" si \(" ); }
 
 
fin_du_si :  Input FINSI ;
          |  texte SINON texte FINSI ;


 
mais ça affiche les printf aux deux règles.

Reply

Marsh Posté le 07-06-2004 à 14:14:42    

j avais pas corrigé mais ca change quelque chose avec la deucieme comme ca :
|SI PAREN_GAUCHE entre_parenthese PAREN_DROITE ALORS Input SINON Input FINSI  {;}

Reply

Marsh Posté le 07-06-2004 à 14:29:56    

Merci ca marche, voila ce que ca donne
 

Citation :

structureIteratif:
 
 SI   PAREN_GAUCHE  { ecritureFichier("#SI(#" );  } entre_parenthese PAREN_DROITE ALORS { ecritureFichier("#ALORS#" );  } fin_si  
 
 ;
 
fin_si:
 Input FINSI { ecritureFichier("#FINSI#" ); }
 |Input SINON { ecritureFichier("#SINON#" ); } Input FINSI { ecritureFichier("#FINSI#" ); }
 ;

Reply

Marsh Posté le 07-06-2004 à 16:58:13    

sbucci2 a écrit :

Bjr,
 
Dans mon fichier yacc j ai cette regle, la partie en gras pose probleme à la compilation  :??: , un idée pourquoi ca marche po ?
 
merci d avance
 

Citation :

structureIteratif:
 
SI  PAREN_GAUCHE  {  printf(" si(" );  }  entre_parenthese PAREN_DROITE ALORS Input FINSI { printf(" si \(" ); }
|SI PAREN_GAUCHE entre_parenthese PAREN_DROITE ALORS texte SINON texte FINSI  {;}
 ;




A la base ca ne marchait probablement pas parce que tu n'avait pas escapé une parenthese:
SI  PAREN_GAUCHE  {  printf(" si\(" );  }...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 07-06-2004 à 18:59:37    

gilou a écrit :

A la base ca ne marchait probablement pas parce que tu n'avait pas escapé une parenthese:
SI  PAREN_GAUCHE  {  printf(" si\(" );  }...
A+,


 
:??: entre les accolades, c'est du C, hein...
Donc printf( " si(" ); est valide....

Reply

Sujets relatifs:

Leave a Replay

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