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

Autres éditeurs Discussion :

grammaire yacc lex simili C


Sujet :

Autres éditeurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2004
    Messages : 103
    Par défaut grammaire yacc lex simili C
    voici un morceau de notre grammaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     pg : contpg {printf("analyse terminee")}
               ;
    contpg : defVar contpg 
            | defFct contpg 
            | /*empty*/
            ;
    defVar : type IDF {printf("defvar->%s",$2)} listeIdf  PV 
            ;
    listeIdf : VIRG IDF {printf("listidf->%s",$2)} listIdf
            |  /* empty*/
            ;
    avec PV correspondant au ";"
    VIRG---->","
    IDF ----->nom variable

    notre probleme est que quand on affiche $2 l'idf est bien contenu dans $2 mais avec le point virgule ou la virgule qui est après
    exemple avec ce fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int j,i,p;
    int a;

    sachant que IDF est déclarer en tant que token dans le yacc comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    %union { char* chaine ;}
    %token IDF
    %token <chaine> IDF
    cela donne
    Dans notre lex on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    %{
    #include "y.tab.h"
    %}
    alphanum [a-zA-Z]
    alphanum [a-zA-Z0-9]
    %%
    "int" {return (INT);}
    {alpha}({alphanum})* {yylval.chaine=yytext;return (IDF);}
    %%
    yywrap() {return (1);}
    on sais que le sujet est pointu mais est ce que qq1 peut nous aidez SVP

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 63
    Par défaut
    tu devrais essayer cette gramaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    pg : contpg {printf("analyse terminee")} 
               ; 
    contpg : defVar contpg 
            | defFct contpg 
            | /*empty*/ 
            ; 
    defVar : type listeIdf  PV 
            ; 
    listeIdf : IDF VIRG listeIdf {printf("listidf->%s",$1)} 
                |IDF                   {printf("listidf->%s",$1)} 
                |  /* empty*/ 
            ;
    je pense que ça marchera comme ça et pour le lexeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    %{ 
    #include "y.tab.h" 
    %} 
    blanc  [ \t]
    id       [a-zA-Z][a-zA-Z0-9]* 
    %%
    {blanc} ;   //j'ignore les blancs c'est plus propre
    "int" {return (INT);} 
    {id} {yylval.chaine=strdup(yytext);return (IDF);} 
    %% 
    yywrap() {return (1);}
    j'utilise strdup pour dupliquer la chaine histoire d'eviter de mauvaises surprises c'est conseillé

Discussions similaires

  1. Grammaire Fortran Lex/Yacc
    Par Hisoka_Hunter dans le forum Générateurs de compilateur
    Réponses: 0
    Dernier message: 05/01/2009, 01h18
  2. Erreur de syntaxe dans yacc & lex
    Par zarbiman dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 11/02/2008, 19h25
  3. yacc, lex & yylval
    Par je®ome dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 28/12/2007, 11h18
  4. grammaire yacc langage C
    Par acx01b dans le forum Autres éditeurs
    Réponses: 9
    Dernier message: 14/06/2007, 12h46
  5. Réponses: 1
    Dernier message: 03/01/2007, 15h07

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