Problème avec le bison

Fermé
yous18 Messages postés 7 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 8 mars 2009 - 29 mai 2008 à 23:15
mamiemando Messages postés 32298 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 mars 2023 - 30 mai 2008 à 10:58
Bonjour,
dans ce exemple simple de bison qui calcule la somme d'une expression arithmetique
%start input
%token NUMBER A S M NL

%left A S
%left M

%%
input : /**/
| input formule
;
formule : NL
| exp NL { printf("Resul ==> %d\n",$1);
printf("Donnez une expression arithmetique : ") ; }
;
exp : NUMBER A NUMBER {$$ = $1 + $3 ; }
| exp A NUMBER {$$ = $1 + $3 ; }
;
%%
main()
{
printf("Donnez une expression arithmetique : ");
yyparse();
}


j'ai pas compri cette ligne
input : /**/
| input formule
;

1 réponse

mamiemando Messages postés 32298 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 mars 2023 7 575
30 mai 2008 à 10:58
Il faudrait le fichier flex pour être sûr mais voilà comment je l'interprète.
La récursivité sur input correspond à un while(1){ lire expression;} puisqu'il n'y a pas de cas d'arrêt.
Pour quitter tu es donc obligé de faire ctrl c.

Attention ton main est sensé retourner un type (normalement int mais sinon il faut au moins mettre void).
int main(){
  printf("Donnez une expression arithmetique : ");
  yyparse(); 
  return 0;
}

Bonne chance
0