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 :

flex et bison


Sujet :

Générateurs de compilateur

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Points : 43
    Points
    43
    Par défaut flex et bison
    Bonjour,
    j'ai un projet de calculatrice avec flex et bison
    dans le partie analyse syntaxique il faut arranger les opérateur pour faire le grammaire : entier et () puis * et / puis + et -
    donc le grammaire :

    Input --> Text #
    Text --> ε | op Text
    op --> E =
    E --> E+T | E-T | T
    T --> T*F | T/F | F
    F --> entier | (E)

    je veut ajouter le cos,sin,tan,log,racine,puissance,valeur absolue dans le grammaire
    Qui a la priorité dans la calcule: *,/,+,-,cos,sin,tan,log,racine,puissance,valeur absolue ??

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Bonjour,

    Citation Envoyé par Aymenkn Voir le message
    je veut ajouter le cos,sin,tan,log,racine,puissance,valeur absolue dans le grammaire
    Qui a la priorité dans la calcule: *,/,+,-,cos,sin,tan,log,racine,puissance,valeur absolue ??
    La question ne se pose pas puisque ces nouveaux opérateurs sont en fait des fonctions. Elles attendent un seul opérande (leur argument) et s'évaluent en une fois. Elles se combinent avec les autres opérateurs mais ce sont alors les règles déjà définies qui s'appliquent. Par conséquent, leur grammaire doit se situer à partir de F et se dériver éventuellement en sous-règles si nécessaire.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Points : 43
    Points
    43
    Par défaut Clalculatrice Bison/Flex
    Bonjour,
    [Je ne suis pas sur que ca soit le bon forum, mais je n'ai pas trouvé plus approprié...]
    j'ai un mini projet de créer un calculatrice avec bison et flex mais je ne suis pas sûr que est correct :/
    il m'affiche ces erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /tmp/ccmajE5E.o: dans la fonction « yyparse »:
    cal.tab.c:(.text+0x744): référence indéfinie vers « cos »
    cal.tab.c:(.text+0x765): référence indéfinie vers « sin »
    cal.tab.c:(.text+0x786): référence indéfinie vers « log »
    cal.tab.c:(.text+0x7a7): référence indéfinie vers « cosh »
    cal.tab.c:(.text+0x7c5): référence indéfinie vers « sinh »
    cal.tab.c:(.text+0x7e3): référence indéfinie vers « sqrt »
    cal.tab.c:(.text+0x801): référence indéfinie vers « tan »
    cal.tab.c:(.text+0x81f): référence indéfinie vers « tanh »
    collect2: error: ld returned 1 exit status
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    %{
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int nl=1;
    %}
    chiffre [0-9]
    entier {chiffre}+
    exposant [eE][+-]?{entier}
    reel {entier}("."{entier})?{exposant}?
    valuer "abs"{reel}
    cosinus "cos"{reel}
    sinus "sin"{reel}
    logaritme "log"{reel}
    cosinush "cosh"{reel}
    sinush "sqrt"{reel}
    tangant "tan"{reel}
    tanganth "tanh"{reel}
    %%
    \n nl++ ;
     
    {reel} {
            yylval=atof(yytext);
            return(NOMBRE);
            }
     
    "abs" return(VALUER);
    "cos" return(COSINUS);
    "sin" return(SINUS);
    "log" return(LOGARITME);
    "cosh" return(COSINUSH);
    "sinh" return(SINUSH);
    "sqrt" return(RACINE);
    "tan" return(TANGANT);
    "tanh" return(TANGANTH);
     
    "|" return(OR);
    "&" return(AND);
    "^" return(XOR);
    ">>" return(SHR);
    "<<" return(SHL);
     
    [+()*=/\-] return (yytext[0]);
     
    [ \t]+ ;
     
    [.,;:] ;
     
    "#" return(END);
     
    . printf("%c :erreur lexicale a la ligne %d \n",yytext[0],nl);
    %%
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    %{
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int OK=1;
     
    int yyerror(char const *mes){
     fputs(mes,stderr);
     fputc('\n',stderr);
     return 0;
    }
    %}
     
    %token END
    %token NOMBRE
    %token VAR
    %token VALUER
    %token COSINUS
    %token SINUS
    %token LOGARITME
    %token COSINUSH
    %token SINUSH
    %token RACINE
    %token TANGANT
    %token TANGANTH
    %token OR
    %token AND
    %token XOR
    %token SHR
    %token SHL
     
    %start input
     
    %%
    input : ligne END {printf("Merci et a bientot "); YYACCEPT; }
          ;
     
    ligne :
          | ligne inst
          ;
     
    inst : "si" ins
         | "tant que" '(' condi ')' "faire" '{' ligne '}'
         | "pour" VAR "de" exp 'a' exp "faire" '{' ligne '}'
         | exp { $$ = $1; }
         ;
     
    ins : '(' condi ')' "alors" '{' ligne '}'
          | '(' condi ')' "alors" '{' ligne '}' "sinon" '{' ligne '}'
          ;
     
    exp : exp '=' a { $1 = $3; }
        | exp OR a { $$ =$1 | $3; }
        | exp AND a { $$ = $1 & $3; }
        | exp XOR a { $$ = $1 ^ $3; }
        | exp SHR a { $$ = $1 >> $3; }
        | exp SHL a { $$ = $1 << $3; }
        | a { $$ = $1; }
        ;
     
    a : a '+' b { $$ = $1 + $3; }
      | a '-' b { $$ = $1 - $3; }
      | b { $$ = $1; }
      ;
     
    b : b '/' c {if ($3==0)
                   {printf("nan \n"); OK=0;}
                 else $$=$1/$3; }
      | b '*' c { $$ = $1 * $3; }
      | c { $$ = $1; }
      ;
     
    c : NOMBRE { $$ = $1; }
      | VAR { $$ = $1; }
      | '(' exp ')' { $$ = $2; }
      | VALUER exp { $$ = abs($2); }
      | COSINUS exp { $$ = cos($2); }
      | SINUS exp { $$ = sin($2); }
      | LOGARITME exp { $$ = log($2); }
      | COSINUSH exp { $$ = cosh($2); }
      | SINUSH exp { $$ = sinh($2); }
      | RACINE exp { $$ = sqrt($2); }
      | TANGANT exp { $$ = tan($2); }
      | TANGANTH exp { $$ = tanh($2); }
      ;
     
    condi : exp cond
          ;
     
    cond : "<=" exp
           | ">=" exp
           | "!=" exp
           | '<' exp
           | '>' exp
           | "==" exp
           ;
    %%
    #include "lex.yy.c"

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    il manque le link avec la bibliothèque "math". L'option "-lm" à ta ligne de compilation (et surtout de link) devrait faire tout rentrer dans l'ordre.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. aide lex et yacc/flex et bison
    Par wasdaka dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 02/12/2008, 20h24
  2. flex et bison
    Par awabi dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 26/11/2008, 12h51
  3. Pour tous les experts Flex et Bison
    Par sabri_icone dans le forum Linux
    Réponses: 1
    Dernier message: 09/01/2008, 15h26
  4. Interfacer Flex et Bison
    Par minirop dans le forum Flex
    Réponses: 4
    Dernier message: 15/11/2006, 23h14
  5. Flex et Bison avec Visual
    Par kiroukou dans le forum MFC
    Réponses: 16
    Dernier message: 16/05/2006, 14h47

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