Partage
  • Partager sur Facebook
  • Partager sur Twitter

[BISON] Gestion des erreurs

    6 novembre 2017 à 18:15:18

    Bonjour !

    J'ai une petite calculatrice réalisée avec Flex/Bison. Maintenant j'aimerai afficher des messages d'erreurs "personnalisés" mais je ne sais pas trop où insérer ces messages...

    Par exemple si l'utilisateur oublis le point virgule j'aimerai afficher un message "Oublis de point virgule" etc...

    Voici mon fichier calc.y : 

    %{
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    extern int yylex(void);
    extern char *yytext;
    extern int nlines;
    extern FILE *yyin;
    void yyerror(char *s);
    %}
    %union
    {
    float real;
    }
    %start Calculadora
    %token <real> TKN_NUM
    %token TKN_ASIGN
    %token TKN_PTOCOMA
    %token TKN_MULT
    %token TKN_POW
    %token TKN_DIV
    %token TKN_MAS
    %token TKN_MENOS
    %token TKN_MOD
    %token <real> TKN_ID
    %type <real> Calculadora
    %type <real> Expresion
    %left TKN_MAS TKN_MENOS
    %left TKN_MULT TKN_DIV
    %%
    Calculadora : TKN_ID { printf("El valor de %s es: ", yytext);}
    	      TKN_ASIGN Expresion TKN_PTOCOMA { printf("%5.2f\n", $4);
     } ;
    Expresion : TKN_NUM {$$=$1;}|
    	    Expresion TKN_MAS Expresion {$$=$1+$3;}|
    	    Expresion TKN_MENOS Expresion {$$=$1-$3;}|
    	    Expresion TKN_MULT Expresion {$$=$1*$3;}|
    	    Expresion TKN_DIV Expresion {$$=$1/$3;}|
    	    Expresion TKN_POW Expresion {$$=pow($1,$3);} |
    	    Expresion TKN_MOD Expresion {$$=fmod($1,$3);}
    %%
    void yyerror(char *s)
    {
    printf("Error %s",s);
    }
    int main(int argc,char **argv)
    {
    if (argc>1)
    printf("CALCULADORA\n");
    yyin=fopen(argv[1],"rt");
    else
    yyin=stdin;
    yyparse();
    printf("FIN del Analisis. Entrada CORRECTA\n");
    printf("Numero lineas analizadas: %d\n", nlines);
    return 0;
    }

    Une idée ? Merci !

    • Partager sur Facebook
    • Partager sur Twitter

    [BISON] Gestion des erreurs

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown