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

  FORUM HardWare.fr
  Programmation
  C

  flex et yy_scan_string()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

flex et yy_scan_string()

n°1020792
peyrouz
Posté le 22-03-2005 à 11:28:42  profilanswer
 

Bonjour,
 
J'utilise flex afin de tokenizer des pages html. Le but etant de récupérer les tags et le texte (tout ce qui n'est pas tag) ainsi que les urls et noms de domaines (pouvant etre dans les tags ou dans le texte).
 
Je voudrai rechercher les urls et noms de domaines dans les tags. Afin de supprimer les problemes de précedence des détections ce que je voudrai faire est :
- détecter d'une part les tags, en tirer les urls et noms de domaines
- détecter d'autre part le texte, en tirer les urls et noms de domaines
 
Une fois les tags détectés je lance donc :

Code :
  1. BEGIN URLST  /* URLST est en mode exclusif*/
  2. yy_scan_string(yytext);
  3. yylex();


D'apres ce que j'ai cru comprendre de la doc de flex apres le yy_scan_string(), l'appel a yylex() devrait relancer le parsing là où il s'etait arrété.
Or ce n'est pas le cas, le parsing s'arrete...
 
Voici mon code :

Code :
  1. %}
  2. ALPHA    [0-9]
  3. ALPHANUM [a-zA-Z0-9]
  4. DOMAIN {ALPHANUM}+("-"|"." )({ALPHANUM}|"-"|"." )+
  5. %option stack
  6. %x URLST
  7. %x DOMAINST
  8. %x SCRIPT COMMENT
  9. %%
  10. "&nbsp;"|"&lt;"|"&gt;"|"</"[^>]+">"   {fputc(' ',yyout);}
  11. "<script"(.*)?">" {}
  12. "<script"            {yy_push_state(SCRIPT);}
  13. <SCRIPT>"/script>"   {fputc(' ',yyout); yy_pop_state();}
  14. <SCRIPT>"\n"         {}
  15. <SCRIPT>.            {}
  16. <SCRIPT><<EOF>>      {fputc(' ',yyout); yy_pop_state();}
  17. "<!--"(.*)?"-->" {}
  18. "<!--"               {yy_push_state(COMMENT);}
  19. <COMMENT>"-->"       {fputc(' ',yyout); yy_pop_state();}
  20. <COMMENT>"\n"        {}
  21. <COMMENT>.           {}
  22. <COMMENT><<EOF>>     {fputc(' ',yyout); yy_pop_state();}
  23. <INITIAL>"<"(\"[^\"]*\"|\'[^\']*\'|[^\'\"">"])*">" {
  24.   printf("TAG : %s\n", yytext);
  25.   BEGIN URLST;
  26.   yy_scan_string(yytext);
  27.   yylex();
  28. }
  29. <URLST>https?:\/\/{DOMAIN}(":"{ALPHA}+)?({ALPHANUM}|["~""/""$""-""_"".""+""!""*""'""("" )"","";"":""@""&""=""?"])* {
  30.   printf("URL : %s\n", yytext);
  31.   BEGIN DOMAINST;
  32.   yyless(1);
  33. }
  34. <DOMAINST>\/\/{DOMAIN} {
  35.   printf("DOMAIN  : %s\n", yytext);
  36.   BEGIN INITIAL;
  37. }


 
Sur l'exemple suivant :
Pouet
<img src=https://www.google.fr/toto/titi/img.png/>
<img src=https://www.google.fr/toto/titi/img.png/>
<img src=www.google.fr/toto/tiit/img.png/>
 
Le parsing me donne les resultats :
TAG : <img src=https://www.google.fr/toto/tiit/jacky.png/>
URL : https://www.google.fr/toto/tiit/jacky.png/
DOMAIN  : //www.google.fr
 
Comment puis-je refaire partir le parsing là où il s'etait arrété au moment de l'appel à yy_scan_string() tout en me remettant dans l'état INITIAL ?
 
Je vous remercie d'avance de vos reponses.
 
Nicolas

mood
Publicité
Posté le 22-03-2005 à 11:28:42  profilanswer
 


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

  flex et yy_scan_string()

 

Sujets relatifs
Cherche exemple simple (et qui compile!) de Bison++/Flex++[Javascript] nommer une variable à partir d'un string ?
"caster" un un String en int ??Recuperer la partie numerique d'une String sous PHP?
Convertir un string en format datestring en C, concatenation etrange
conversion d'un float en String avec javanouveau probleme flex
[JAVA] Probleme de conversion de String en Date?[C#] Transformer un Array de Byte en String proprement ?
Plus de sujets relatifs à : flex et yy_scan_string()


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