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

Générateurs de compilateur Discussion :

Lex/Yacc et type de données complexe


Sujet :

Générateurs de compilateur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Lex/Yacc et type de données complexe
    Bonjour,

    J'ai une chaine de caractère a parser pour en extraire les données et les stocker dans une structure.
    La ligne étant plutôt compliquée, j'ai décidé de dégainer mes souvenirs de fac avec lex/yacc.

    La ligne est du type:
    operator = <operator_name> ( <liste_de_parametres> ) ? <liste_d_actions> : <liste_d_actions>
    Les operators et les actions prennent évidemment un nombre différent et variable de paramètres histoire de corser la chose.

    Mes fichiers lex et yacc, analysent sans problème ma chaine de caracteres mais je ne sais pas comment remplir ma structure de données.

    en effet, tous les exemples que je trouve sur le net utilisent un type basique pour la variable yylval.
    Dans mon cas, j'ai une structure plutôt complexe du type (exemple non réel mais tres representatif):

    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
    typedef struct {
        char operator_name[ 80 ];
        T_opParam operator_params;
        int nb_action1;
        T_action actions1[ 10 ];
        int nb_action2;
        T_action actions2[ 10 ];
    } T_data;
     
    typedef struct {
        char param1[ 80 ];
        int param2;
        int param3;
    } T_opParam;
     
    typedef struct {
        ...
    } T_action;
    Bref, j'aimerais pouvoir travailler directement dans yacc avec un pointeur sur ma structure T_data et non avec un simple int ou, soyons fou un enum (exemple le plus compliqué que j'ai trouvé)

    Je n'arrive pas trop à m'en sortir et toute idée sera la bienvenue.

    Merci d'avance

    Xavier

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Qu'est ce qui te pose problème exactement ? (j'ai du mal à voir où tu as un problème en fait).

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Mon problème venais que je ne savais pas comment passer un argument supplémentaire à la fonction yyparse().

    En effet, je n'ai pas à décorer l'arbre syntaxique pour executer mon opérateur.
    Je veux juste remplir une structure de données en fonction des différents paramètres rencontrés lors de l'analyse syntaxique.

    Ce matin, j'ai découvert la macro YYPARSE_PARAM qui permet de mofifier la signature de la fonction yyparse(). Mais avec lex/yacc, point de salut, et mes sources générées ne voulaient pas compiler.

    J'ai du passer a flex/bison et ça s'est mis à marcher du premier coup.

    Vous allez me dire que j'aurais du utiliser flex/bison dés le début. Et la, je vous répondrais qu'en environnement industriel, on n'est pas maitre des outils que l'on peut utiliser.

    Merci quand même d'avoir pris le temps de me lire et de tenter de m'aider.

    Xavier

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

Discussions similaires

  1. [Lex/Yacc] Le parseur ne reconnaît pas les tokens de type NUM
    Par krisss dans le forum Générateurs de compilateur
    Réponses: 1
    Dernier message: 21/03/2011, 17h36
  2. [lex/yacc] récupération de données
    Par GouKen dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 19/05/2009, 22h25
  3. [PEAR][SOAP] Support des types de données complexes
    Par elendil dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/12/2007, 10h58
  4. types de données complexes en sql
    Par cestsourire dans le forum Oracle
    Réponses: 1
    Dernier message: 22/02/2007, 13h25
  5. Convertir un type de donnée sous SQL Server
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/08/2003, 15h15

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