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 33303 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 octobre 2024 - 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
;
A voir également:

1 réponse

mamiemando Messages postés 33303 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 octobre 2024 7 794
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