Problème avec le bison
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
;
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:
- Problème avec le bison
- Bison cam - Télécharger - Pilotes & Matériel
- Bison futé - Guide
1 réponse
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).
Bonne chance
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