Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3072 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Aide Lex] newbies en lex/yacc

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Aide Lex] newbies en lex/yacc

n°937042
starseb
Posté le 04-01-2005 à 17:57:15  profilanswer
 

bonjour à tous !
 
je me permet de poster ici car j'ai un mini projet à faire pour la fac, je dois faire une calculatrice en lex. le hic c'est que je sais meme pas ce que c'est. j'ai chercher sur ggogle et je pense avoir compris qu'il s'agit en partie de programmation en C et que ca se passe principalement sous linux. est ce qu'il y a moyen de bosser ca sous windows ?
 
Sinon je suis completement paumé et je ne vois pas par quel bout prendre ce petit projet. voici le descriptif du sujet si certains pouvait m'aiguiller un peu ca m'arrangerait bien. :)  
 
Le but de ce mini projet est la réalisation d'une petite calculatrice décrite par l'exemple ci-dessous :
 
$ calcu
> 2 + 3
5
> (2+3) * 7 - 3
32
> 2 + 3 * 7 - 3
20
> fin
bye.
$
 
Vous utiliserez lex pour reconnaître les unités lexicales et yacc pour définir l'analyseur syntaxique.
Extensions du projet
 
Attention, je vous conseille fortement de terminer complètement les premières étapes avant de vous engager dans une extension. Je vous propose pour ce projet l'extension suivante :
 
Faites en sorte que votre calculatrice prenne en compte la notion de variable comme dans l'exemple ci-dessous :
 
$ calcu
> affect cinq = 2 + 3
> affect six = cinq + 1
> (cinq * 7) - 3
32
> var
cinq = 5
six = 6
>
...
 
Une autre extension consiste à pouvoir définir des fonctions réutilisables comme le montre l'exemple ci-dessous :
 
$ calcu
> fonction fois10(p,q) = (p * q) - 10
> fois10(5,6)
20
...
 
Dans ce cas, il est nécessaire de représenter une formule dans une tableau pour la ré-évaluer plus tard. Ce tableau pourrait avoir la forme suivante (c'est une notation post-fixée facile à évaluer) :
 
    $1  $2 * 10 -

 
j'espere que vous allez m'aider a avance. par avance merci
 
PS : etant novice sur le sujet je m'excuse aupres des modos si j'ai mal placé le topic, j'ai pensé que C etait plus aproprié.

mood
Publicité
Posté le 04-01-2005 à 17:57:15  profilanswer
 

n°937051
schnapsman​n
Zaford Beeblefect
Posté le 04-01-2005 à 17:59:23  profilanswer
 

ton prof de TD de compilation il sert à quoi?


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°937056
starseb
Posté le 04-01-2005 à 18:01:08  profilanswer
 

il est en deplacement à barcelone et injoignable par mail pendant 15 jours. :(

n°937096
schnapsman​n
Zaford Beeblefect
Posté le 04-01-2005 à 18:30:48  profilanswer
 

T'as suivi les cours magistraux au moins?
Dans la négative, je ne peux rien pour toi car:
1/ c'est hors charte et j'ai déjà fait ma BA de l'année aujourd'hui
2/ j'ai pas envie de me substituer à un prof pour t'appendre ce qu'est la phase d'analyse lexicale dans un processus de compilation
 
(NB: aide inside quand même :whistle:)


Message édité par schnapsmann le 04-01-2005 à 18:31:37

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°937135
starseb
Posté le 04-01-2005 à 18:53:42  profilanswer
 

reponse a la premiere question : oui
 
deuxiemement, il devait nous filler de la doc qu'il a oublier avant les vacances de noel...
 
troisièment je suis dans une filiere competences complementaire en informatique (commence depuis 3mois) qui fait que nous avons eut des cours de programmations en c uniquement. et des cours generalistes sur unix, histoire de pouvoir se depatouiller un peu.
Hors pour ce projet, je ne vois pas du tout comment le prendre.
 
Quatriement : merci pour l'aide inside.;)

n°937289
pitpoule
Et que le cul te pele....
Posté le 04-01-2005 à 21:53:43  profilanswer
 

starseb a écrit :

bonjour à tous !
 
je me permet de poster ici car j'ai un mini projet à faire pour la fac, je dois faire une calculatrice en lex. le hic c'est que je sais meme pas ce que c'est. j'ai chercher sur ggogle et je pense avoir compris qu'il s'agit en partie de programmation en C et que ca se passe principalement sous linux. est ce qu'il y a moyen de bosser ca sous windows ?
 


 
les concepts sous-jacents à lex et yacc sont beaucoup plus complexes qu'un problème de programmation ou de C. Si les termes analyse lexicale, syntaxique et sémantique, n'évoque rien pour toi, tu vas en chier...

n°937302
starseb
Posté le 04-01-2005 à 22:06:44  profilanswer
 

oups.  
 
bah je vais en chier alors. je vais de ce pas faire une recherche sur google avec ces criteres.
c'est deja un debut.  
mais je sais pas si vu notre niveau, il faut se pencher vers quelque chose d'aussi complexe ?
merci en tout cas. je suis preneur de toute autre info.

n°937327
gilou
Modérateur
Modzilla
Posté le 04-01-2005 à 22:47:15  profilanswer
 

Pour le truc de base (une calculette en lex et yacc) il y a des exemple dans les docs lex et yacc (ou bison & flex) dont tu peux t'inspirer.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°937331
starseb
Posté le 04-01-2005 à 22:49:19  profilanswer
 

j'ai vu ca sur le forum dans mes recherches bison et flex c'est la meme chose que lex et yacc ?
 
je me trompe ou il va falloir que j'installe un linux sur mon pc pour faire ca ? si oui, je crois qu il existe des versions bootable sur cd qui m'eviterais d'avoir tout sur le pc, vous en connaissez une ?


Message édité par starseb le 04-01-2005 à 22:54:01
n°937338
fafounet
Posté le 04-01-2005 à 22:54:18  profilanswer
 

flex et bison sont les versions gnu de lex et yacc.
 
Trouver un exemple de calculette n'est pas tres dur car c'est celui qui est repris partout (la page info de flex sous linux par exemple).
 
Developper ca sous win c'est chiant et tu peux effectivement utiliser un livecd linux (http://www.knoppix.org)
 
Sinon te plains pas trop, moi j'ai un compilateur de pseudo langage à faire (faudrait peut etre que je m'y mette d'ailleurs  :D )


Message édité par fafounet le 04-01-2005 à 22:56:37
mood
Publicité
Posté le 04-01-2005 à 22:54:18  profilanswer
 

n°937375
starseb
Posté le 04-01-2005 à 23:16:54  profilanswer
 

suis aller sur knoppix, bon je me depatouiller de l'allemand et j'ai trouve plusieur version de lnoppix chacune faisant dans les 696mo. je suis en train de telecharger ca : KNOPPIX_V3.7-2004-12-08-EN.iso. c'est la seule que j'ai besoin de graver pour booter sur le cd apres ?

n°937394
Chronoklaz​m
Posté le 04-01-2005 à 23:34:40  profilanswer
 

Knoppix c'est bien mais cygwin c'est mieux :) surtout si t'est sous windowz. Sinon regarde la def des termes token, lexer, parser, analyse LR(1), automate à pile ... et SURTOUT refait des exemples de petits parsers, google en est blindé.
 
Bonne chance.

n°937440
Lam's
Profil: bas.
Posté le 05-01-2005 à 02:58:09  profilanswer
 

Tiens, j'ai écris 2-3 conneries là:
http://forum.hardware.fr/hardwaref [...] 2242-1.htm

n°937453
starseb
Posté le 05-01-2005 à 06:41:42  profilanswer
 

merci à tous, ca va me permettre de déja bien commencé et attaqué, mais je pense revenir à la recharge d'ici quelques jours (ou heures ;))

n°949334
starseb
Posté le 08-01-2005 à 21:37:49  profilanswer
 

bon j'ai un peu avance la calculatrice est faite:  
 
voici le code au passage :  
 
fichier global.h

Code :
  1. * #define YYSTYPE double
  2.     * extern YYSTYPE yylval;


 
 
 
voici mon fichier lex  

Code :
  1. %{
  2. #include "global.h"
  3. #include "calc.h"
  4. #include <stdlib.h>
  5. %}
  6. blancs    [ \t]+
  7. chiffre   [0-9]
  8. entier    {chiffre}+
  9. reel {entier}
  10. %%
  11. {blancs}  { /* On ignore */ }
  12. {reel}    {
  13.       yylval=atof(yytext);
  14.       return(NOMBRE);
  15.     }
  16. "+"   return(PLUS);
  17. "-"   return(MOINS);
  18. "*"   return(FOIS);
  19. "/"   return(DIVISE);
  20. "^"   return(PUISSANCE);
  21. "("   return(PARENTHESE_GAUCHE);
  22. " )"   return(PARENTHESE_DROITE);
  23. "\n"  return(RES);
  24. "fin" {printf("bye.\n" );
  25. return 0;};
  26. %%


 
et mon fichier yacc
 

Code :
  1. %{
  2. #include "global.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6. %}
  7. %token  NOMBRE
  8. %token  PLUS  MOINS FOIS  DIVISE  PUISSANCE
  9. %token  PARENTHESE_GAUCHE PARENTHESE_DROITE
  10. %token  RES
  11. %left PLUS  MOINS
  12. %left FOIS  DIVISE
  13. %left NEG
  14. %start Input
  15. %%
  16. Input:
  17.     /* Vide */
  18.   | Input Ligne
  19.    ;
  20. Ligne:
  21.     RES
  22.   | Expression RES    { printf("Resultat : %f\n",$1); }
  23.   ;
  24.  
  25. Expression:
  26.     NOMBRE      { $$=$1; }
  27.   | Expression PLUS Expression  { $$=$1+$3; }
  28.   | Expression MOINS Expression { $$=$1-$3; }
  29.   | Expression FOIS Expression  { $$=$1*$3; }
  30.   | Expression DIVISE Expression  { $$=$1/$3; }
  31.   | MOINS Expression %prec NEG  { $$=-$2; }
  32.   | PARENTHESE_GAUCHE Expression PARENTHESE_DROITE  { $$=$2; }
  33.   ;
  34. %%
  35. int yyerror(){}
  36. int main(void)
  37. {
  38.   yyparse();
  39.   }


 
mon hic c'est que j'arrive pas a faire l'extension du projet  avec une variable definit par l'utilisateur qui contient une somme que la calculatrice peut calculer. il faut que cette variable puisse etre reutiliser par ce dernier dans un autre calcul sans avoir a rentrer sa valeur.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Aide Lex] newbies en lex/yacc

 

Sujets relatifs
besoin d'aide sur un projeta l'aide c petit mais c faux et je ne trouve pas
besoin de beaucoup d'aide sur la réalisation d'un codage Huffman en C [BESOIN AIDE Dreamweaver] Créa Site Web avec Panier de Vente en Ligne
aide : problème pour un compteur de visiteur sur un siteBesoin d'aide pour un exercice.
Principes d'héritage et de polymorphisme... à l'aide !Aide sur une contrainte d'integrité...
aide pour création forcée d'un fichier txt (et écriture)...aide de créaion de formulaire
Plus de sujets relatifs à : [Aide Lex] newbies en lex/yacc


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR