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

Choisir un environnement de développement Discussion :

Lex/Yacc et différents compilateurs


Sujet :

Choisir un environnement de développement

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut Lex/Yacc et différents compilateurs
    Bonjour tout le monde,

    Je viens solliciter votre aide puisque je me trouve confronté à un problème qui me bloque depuis quelques jours maintenant.

    J'utilise les utilitaires Flex 2.5.31 et Bison 2.1 dans un projet écrit principalement en C++ pour générer un analyseur lexical et un analyseur syntaxique.
    Je ne rencontre pas de problème particulier à la compilation de ce fichiers avec g++.
    Or j'ai besoin de compiler mon projet avec d'autres compilateurs que sont icc ou mpicxx.

    icc me sort des warning du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    omission of exception specification is incompatible with previous function "malloc" (declared at line 589 of "/usr/include/stdlib.h")  void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
    omission of exception specification is incompatible with previous function "free" (declared at line 603 of "/usr/include/stdlib.h")  void free (void *); /* INFRINGES ON USER NAME SPACE */
    omission of exception specification is incompatible with previous function "isatty" (declared at line 743 of "/usr/include/unistd.h")  extern int isatty YY_PROTO(( int ));
    ..mais la compilation s'effectue tout de mêm.

    Alors que mpicxx me sort les erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "malloc(unsigned long)" has a conflicting declaration.
    "/usr/include/stdlib.h", line 589.14: 1540-0424 (I) "malloc" is declared on line 589 of "/usr/include/stdlib.h".
     "free(void *)" has a conflicting declaration.
    "/usr/include/stdlib.h", line 603.13: 1540-0424 (I) "free" is declared on line 603 of "/usr/include/stdlib.h".
    Je vois bien qu'il s'agit d'un problème de déclaration multiple et j'aimerais bien savoir comment rectifier ce souci sachant que les fonctions free et malloc sont redéfinies par lex et yacc.

    Si vous avez déjà rencontré ce souci, je veux bien un coup de pouce.
    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut
    J'ai du nouveau.

    J'arrive à passer outre les warning de icc en englobant mes fonctions Lex/Yacc dans un namespace qui leur est dédié.

    Ce qui est surprenant c'est que mpicxx s'en moque et me sort la même erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "A::malloc(unsigned long)" has a conflicting declaration.
    "malloc" is declared on line 589 of "/usr/include/stdlib.h".
    (si mon namespace s'appelle A)

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut
    Je tâtonne toujours.

    Les erreurs que j'obtiens sont dues aux fichiers produits par Lex et Yacc.
    J'utilise bison dans sa version 2.1 : échec
    J'utilise bison dans sa version 1.875c : victoire

    Du coup j'ai regardé les différences entre les fichiers c issus des différentes versions et j'en conclus que pour pouvoir utiliser bison v2.1 je dois rajouter dans l'entête de mon fichier yacc un :
    #define YYSTACK_ALLOC alloca 1
    et dans mon fichier lex un :
    #define YY_ALWAYS_INTERACTIVE 1

    Bon, ça compile et ça marche mais ça me semble un peu tricky.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut
    Bien avec la dernière version de bison, le souci disparait. Etrange non ?

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

Discussions similaires

  1. Lex/yacc avec c# ?
    Par must19 dans le forum C#
    Réponses: 2
    Dernier message: 03/06/2017, 18h52
  2. [Lex/Yacc] Aide traduction des structures de contrôle
    Par pelo68 dans le forum Générateurs de compilateur
    Réponses: 2
    Dernier message: 07/12/2010, 10h26
  3. Probleme compilateur C pour lex yacc
    Par benjamin1985 dans le forum Linux
    Réponses: 2
    Dernier message: 01/05/2007, 12h23
  4. visual studio 2005 (c++) et parser generator (lex / yacc)
    Par must19 dans le forum Visual C++
    Réponses: 3
    Dernier message: 26/03/2007, 10h31
  5. [Lex & Yacc] Gestion des ensembles d'entiers
    Par innosang dans le forum Générateurs de compilateur
    Réponses: 7
    Dernier message: 28/11/2005, 19h26

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