IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

problème avec un code généré par bison


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 8
    Points
    8
    Par défaut problème avec un code généré par bison
    Bonjour,

    J'utilise Visual C++ 6.0 sous windows XP, et je suis en train d'apprendre à utiliser Bison. J'ai recopié un code Yacc du tutoriel fourni avec Bison pour générer une simple calculatrice (j'appelle le fichier Yacc calc.y), et ai pu générer un fichier en language C.
    J'y ai ajouté la fonction yylex(void), toujours prise du meme tutorial, dont voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    int yylex (void)
    {
    	int c;
    	// Skip white space. 
    	while ((c = getchar ()) == ' ' || c == '\t')
    	;
    	// Process numbers. 
    	if (c == '.' || isdigit (c))
    	{
    	ungetc (c, stdin);
    	scanf ("%lf", &yylval);
    	return NUM;
    	}
    	// Return end-of-input. 
    	if (c == EOF)
    	return 0;
    	 //Return a single char. 
    	return c;
    }
    Malgré cela, le programme ainsi compilé me retourne toujours une "syntax error" lorsque je tente d'entrer une formule mathématique à parser.

    Il m'est par ailleurs impossible de débugger le code c++, le debugger de visual c++ rentrant systématiquement dans le fichier calc.y, et ignorant le fichier calc.cpp contenant le code en c (les points d'arrêt sont ignorés).

    Je remercie quiconque pourrait suggérer un moyen de remédier à ce problème.

    Merci d'avance,

    Samuel

    P.S: je suis conscient que mon problème est basique et il est très possible qu'il existe une solution détaillée quelque part sur le net. Si c'est le cas je m'excuse de ce post inutile et espère une réponse incluant un lien vers cette solution.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Montre ton fichier bison, ton fichier lex entier.

    Comme ca nous aurons un code compilable qu'on peut tester.

    Jc

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci pour la réponse rapide.

    voici mon fichier bison:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    /* Infix notation calculator. */
    %{
    #define YYSTYPE double
    #include <math.h>
    #include <stdio.h>
    int yylex (void);
    void yyerror (char const *);
    %}
    /* Bison declarations. */
    %token NUM
    %left "-" "+"
    %left "*" "/"
    %left NEG /* negation--unary minus */
    %right "^" /* exponentiation */
    %% /* The grammar follows. */
    input: /* empty */
    | input line
    ;
    line: "\n"
    | exp "\n" { printf ("\t%.10g\n", $1); }
    ;
    exp: NUM { $$ = $1; }
    | exp "+" exp { $$ = $1 + $3; }
    | exp "-" exp { $$ = $1 - $3; }
    | exp "*" exp { $$ = $1 * $3; }
    | exp "/" exp { $$ = $1 / $3; }
    | "-" exp %prec NEG { $$ = -$2; }
    | exp "^" exp { $$ = pow ($1, $3); }
    | "(" exp ")" { $$ = $2; }
    ;
    %%
    Je n'ai pas fait de fichier lex, je pensais que la fonction yylex() faisait l'affaire.

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Il faut mettre des ' à la place des tes ".


    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    | exp '+' exp { $$ = $1 + $3; }
    et non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    | exp "+" exp { $$ = $1 + $3; }
    Jc.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    OK ça marche merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/05/2013, 10h10
  2. [TinyMCE] Problème avec le code généré
    Par anthonycostey dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 17/01/2013, 13h36
  3. Réponses: 1
    Dernier message: 17/07/2006, 17h08
  4. [MySQL] OU est le probléme avec ce code ??
    Par adlich dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/04/2006, 17h47
  5. problème avec un menu généré par MySQL
    Par GhostDady dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 30/03/2006, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo