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

  FORUM HardWare.fr
  Programmation
  Divers

  [lex] problème bizarre ???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[lex] problème bizarre ???

n°913122
nodus
Posté le 02-12-2004 à 18:19:42  profilanswer
 

Je rencontre un problème bizarre avec un programme lex. J'essaie de faire une copie de la commande wc, c'est surement du code crade mais ça marche (a moitié :o ):
Les erreurs sont en bold.
 
Par exemple lorsque mon code est:
 
 

Code :
  1. %{
  2. #include <stdio.h>
  3. int nblignes;
  4. int motl;
  5. int nbcars;
  6. int nbmots;
  7. %}
  8. MOTESP [.]\32
  9. %%
  10. \n ++nblignes;
  11. .  ++nbcars;
  12. [a-zA-Z0-9][:space:]|[a-zA-Z0-9]\n ++nbmots;
  13. %%
  14. int main(void)
  15. {
  16. nblignes=0;
  17. nbcars=0;
  18. nbmots=0;
  19. yyin=stdin;
  20. yylex();
  21. printf("nblignes = %d, nbcars=%d, nbmots=%d\n",nblignes,nbcars+nblignes,nbmots);
  22. }


 
J'obtiens le résultat:
 

Code :
  1. $ cat fichier | ./wc2
  2. nblignes = 1, nbcars=21, nbmots=7


Code :
  1. Alors que si j'ai ce code:
  2. %{
  3. #include <stdio.h>
  4. int nblignes;
  5. int motl;
  6. int nbcars;
  7. int nbmots;
  8. %}
  9. MOTESP [.]\32
  10. %%
  11. \n ++nblignes;
  12. .  ++nbcars;
  13. %%
  14. int main(void)
  15. {
  16. nblignes=0;
  17. nbcars=0;
  18. nbmots=0;
  19. yyin=stdin;
  20. yylex();
  21. printf("nblignes = %d, nbcars=%d, nbmots=%d\n",nblignes,nbcars+nblignes,nbmots);
  22. }


 
le résultat devient:

Code :
  1. $ cat fichier | ./wc2
  2. nblignes = 4, nbcars=35, nbmots=0


 
Mon fichier d'entrée est:
 
$ cat fichier
toto titi
tata
tutu
toto tata titi
 
et wc me donne le résultat:
 
$ wc fichier
 4  7 35 fichier
 
Autant dire que le résultat de mon code est assez empirique car quelque soit le code le résultat est à moitié bon à moité faux...
Si vous avez une idée je suis tout ouïe, merci de votre aide :hello:

mood
Publicité
Posté le 02-12-2004 à 18:19:42  profilanswer
 

n°913143
dsls
Posté le 02-12-2004 à 18:33:51  profilanswer
 

A vue de nez, je dirais qu'il y a ambiguïté dans ta déclaration de syntaxe. Tes lexèmes pour les caractères et les retours chariots ne posent pas de problème. Le fait de mettre "." comme lexème va complètement occulter ta détection de mot par la suite. Le parcours de ton fichier par flex en fonction des lexèmes est séquentiel, et non pas parallèle...
Tu peux toujours intervertir tes 2 lignes (celle qui contient le ++nbcars et le ++nbmots), mais ton nombre de caractères ne sera pas valide ...
Essaye de revoir ta règle de définition du lexème mot, et incrémente ton nombre de caractères de la taille de chaque mot ...

n°913215
nodus
Posté le 02-12-2004 à 19:58:39  profilanswer
 

dsls a écrit :

A vue de nez, je dirais qu'il y a ambiguïté dans ta déclaration de syntaxe. Tes lexèmes pour les caractères et les retours chariots ne posent pas de problème. Le fait de mettre "." comme lexème va complètement occulter ta détection de mot par la suite. Le parcours de ton fichier par flex en fonction des lexèmes est séquentiel, et non pas parallèle...
Tu peux toujours intervertir tes 2 lignes (celle qui contient le ++nbcars et le ++nbmots), mais ton nombre de caractères ne sera pas valide ...
Essaye de revoir ta règle de définition du lexème mot, et incrémente ton nombre de caractères de la taille de chaque mot ...


 
Mais pour compter les caractères \n et espace cela va poser un problème ?

n°913247
dsls
Posté le 02-12-2004 à 20:45:27  profilanswer
 

Il suffit d'incrémenter nbcars aux bons endroits ...
Essaye avec ces définitions :  

Code :
  1. %%
  2. \n ++nblignes;
  3. [a-zA-Z0-9]+ ++nbmots; nbcars+=strlen(yytext);
  4. .  ++nbcars;
  5. %%


Message édité par dsls le 02-12-2004 à 20:45:55
n°913754
nodus
Posté le 03-12-2004 à 13:01:02  profilanswer
 

Ça marche parfaitement, je vais étudier ça plus en détail. En tout cas merci de ton aide :)


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

  [lex] problème bizarre ???

 

Sujets relatifs
[CSS] Probleme IE, bizarre (ou désespérant, au choix)[PHP]Problème d'insertion bizarre [resolu]
Aidez moi j'ai un problème bizarreprobleme bizarre
problème bizarre avec les headers[Apache2] Problème bizarre
problème bizarre: connexion base mysqlProbleme bizarre avec php myadmin
problème bizarre (avec getline length() et cout)[php] probleme bizarre de passage de parametre
Plus de sujets relatifs à : [lex] problème bizarre ???


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