Analyseur lexical / syntaxique

Analyseur lexical / syntaxique - C++ - Programmation

Marsh Posté le 14-10-2003 à 00:28:11    

Bon visiblement le topic emacs est pas la bonne place pour ca, alors je refais un topic :o
 
Ceux qui ici ont décider d'abandonner toute vie sociale au profit de l'ecriture de grammaire BNF, vous utilisez quel(s) outils pour arriver a vos fins  ?
 
depuis le debut j'utilise les venerables flex/yacc, mais y'a ptet mieux quand meme ?
 
(cat C++ parce que si ca recrache du C++ ca m'irait tout autant)

Reply

Marsh Posté le 14-10-2003 à 00:28:11   

Reply

Marsh Posté le 14-10-2003 à 00:31:24    

bah je suis entrain d'essayer de cpater flex --c++ mais j'arrive pas vraiment à m'en servir. apères je regarde http://boost.org/libs/spirit/index.html qui est nettement plus élaboré, plus complexe à rédiger qu'un fichier lex.
 
je suis pour que dans ce topic il y ait le code pour faire un wc en C++ avec flex et spirit

Reply

Marsh Posté le 14-10-2003 à 08:46:48    

Les nouveaux (jlex, ocamllex) ont des lexers contextuels, et sortent des objets correctement typés et avec de l'information dedans (et pas en variable globale) et sont réentrants. Sur un truc comme CUPS tu peux choisir l'implémentation de l'automate (mais tu peux pas choisir son type, hélas).
 
Le pb c'est que les techniques de compilations modernes ne sont en général pas prévues dans ces outils et on en revient au custom.

Reply

Marsh Posté le 14-10-2003 à 08:58:30    

Moi, je me le tape à la main en C++, avec un arbre syntaxique écrit par des gents qui ont fait du lisp avant (cdr, car, cons, snoc...).
 
[:sisicaivrai]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 14-10-2003 à 09:21:06    

excellent [:dawa]

Reply

Marsh Posté le 14-10-2003 à 09:23:55    

Spirit est trés bon, essayer c'est l'adopter

Reply

Marsh Posté le 14-10-2003 à 09:59:17    

chrisbk a écrit :

Bon visiblement le topic emacs est pas la bonne place pour ca, alors je refais un topic :o
 
Ceux qui ici ont décider d'abandonner toute vie sociale au profit de l'ecriture de grammaire BNF, vous utilisez quel(s) outils pour arriver a vos fins  ?
 
depuis le debut j'utilise les venerables flex/yacc, mais y'a ptet mieux quand meme ?
 
(cat C++ parce que si ca recrache du C++ ca m'irait tout autant)
 


J'ai essaye divers trucs, j'en suis revenu
1) a lex et yacc ou flex et bison  
2) a la bite et au couteau
selon les cas.
 
A+,


Message édité par gilou le 14-10-2003 à 10:03:58

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-10-2003 à 10:03:35    

Ce qui est important, avec les parsers (sauf projets de fac), c'est leur performances, car un parser qui se traine, ca se voit vite dans une appli. Ca donne quoi, spirit, en perfs par rapport a du flex/bison et du C??
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-10-2003 à 10:07:35    

je veux un exemple C++ avec flex :o

Reply

Marsh Posté le 14-10-2003 à 10:10:34    

Taz a écrit :

bah je suis entrain d'essayer de cpater flex --c++ mais j'arrive pas vraiment à m'en servir. apères je regarde http://boost.org/libs/spirit/index.html qui est nettement plus élaboré, plus complexe à rédiger qu'un fichier lex.
 
je suis pour que dans ce topic il y ait le code pour faire un wc en C++ avec flex et spirit


wc.l

Code :
  1. %{
  2. int num_lines = 0, num_chars = 0;
  3. }%
  4. %%
  5. \n      ++num_lines; ++num_chars;
  6. .       ++num_chars;
  7. %%
  8. main()
  9. {
  10.    yylex();
  11.    printf( "# of lines = %d, # of chars = %d\n", num_lines, num_chars );
  12. }


 
A+,


Message édité par gilou le 14-10-2003 à 10:11:26

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-10-2003 à 10:10:34   

Reply

Marsh Posté le 14-10-2003 à 10:14:08    

tu te fout de qui ?


Message édité par Taz le 14-10-2003 à 10:14:29
Reply

Marsh Posté le 14-10-2003 à 10:15:30    

Taz a écrit :

tu te fout de qui ?

:D
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-10-2003 à 10:19:07    

donc ou j'en étais ... quelqu'un a un exemple C++ avec flex ?

Reply

Marsh Posté le 14-10-2003 à 13:50:07    

Citation :

Moi, je me le tape à la main en C++, avec un arbre syntaxique écrit par des gents qui ont fait du lisp avant (cdr, car, cons, snoc...).


 
J'avais croisé un code en C++ qui definissait une liste est ses fonctions (cdr, car, ...) afin d'utiliser une syntaxe genre LISP dans un code 100% C++. Je me souviens plus trop du soft qui faisait ça...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 14-10-2003 à 14:16:01    

HelloWorld a écrit :

Citation :

Moi, je me le tape à la main en C++, avec un arbre syntaxique écrit par des gents qui ont fait du lisp avant (cdr, car, cons, snoc...).


 
J'avais croisé un code en C++ qui definissait une liste est ses fonctions (cdr, car, ...) afin d'utiliser une syntaxe genre LISP dans un code 100% C++. Je me souviens plus trop du soft qui faisait ça...


 
openC++ ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 14-10-2003 à 14:30:46    

Nan. Un soft à part entière, ou y'avait un peu d'IA. Ma souvien splus désolé [:spamafote]
 
edit : saloperie de smiley


Message édité par HelloWorld le 14-10-2003 à 14:35:44

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-10-2003 à 01:04:29    

gilou a écrit :

a la bite et au couteau

ça me rappelle ce gars à qui il vait fallu une journée pour rajouter un caractère dans sa grammaire (VHDL ou verilog, me souviens plus).

Reply

Marsh Posté le 15-10-2003 à 15:28:47    

nraynaud a écrit :

ça me rappelle ce gars à qui il vait fallu une journée pour rajouter un caractère dans sa grammaire (VHDL ou verilog, me souviens plus).

Je pensais par exemple a l'excellent parser de XML dans expat par exemple. Si tu ne connais pas le code correspondant (en C) n'hesites pas a y jeter un oeil, c'est superbe comme implem specifique.
Mais il est clair que K Clark a ecrit a la pogne un automate sur papier auparavant.
Je fis ce genre de chose pour de l'algol et du LaTeX, il y a un bail.
il y a 4/5 ans, je pouvais causer lex, yacc et cperf comme je respirais, mais la, par manque de pratique, j'en ai oublié pas mal.
A+,


Message édité par gilou le 15-10-2003 à 15:30:37

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-10-2003 à 15:32:29    

Ca vient pleurer sur ICQ et après ça pond un topic sur progra, la honte :D

Reply

Marsh Posté le 15-10-2003 à 17:25:28    

gilou a écrit :

Je pensais par exemple a l'excellent parser de XML dans expat par exemple. Si tu ne connais pas le code correspondant (en C) n'hesites pas a y jeter un oeil, c'est superbe comme implem specifique.

Mouarf, j'en avait fait un en smalltalk, en custom aussi. je sais pas s'il était très élégant, mais je m'étais appliqué et il avait été bien jugé par les gourous. C'est pour ça que maintenant je dis que XML c'est de la merde : trop compliqué à parser pour ce que ça fait. Et c'est aussi pour ça que j'ai un gros doute sur le XML embarqué : parser trop gros (parcequ'il faut obligatoirement un parser de DTD en plus du parser XML).
 
Mais bon, j'ai pas du tout envie de lire du C tout de suite, tant que j'y suis pas obligé. Le bijou restera dans sa boite.

Reply

Marsh Posté le 15-10-2003 à 17:45:35    

Godbout a écrit :

Ca vient pleurer sur ICQ et après ça pond un topic sur progra, la honte :D


 
Je me renseigne :O
 
et c'est pas a un programmeur de rabais comme toi que je viendrais me plaindr [:kiki] [:ddr555]

Reply

Marsh Posté le 15-10-2003 à 18:04:27    

nraynaud a écrit :

Mouarf, j'en avait fait un en smalltalk, en custom aussi. je sais pas s'il était très élégant, mais je m'étais appliqué et il avait été bien jugé par les gourous. C'est pour ça que maintenant je dis que XML c'est de la merde : trop compliqué à parser pour ce que ça fait. Et c'est aussi pour ça que j'ai un gros doute sur le XML embarqué : parser trop gros (parcequ'il faut obligatoirement un parser de DTD en plus du parser XML).
 
Mais bon, j'ai pas du tout envie de lire du C tout de suite, tant que j'y suis pas obligé. Le bijou restera dans sa boite.


 
Depuis quand on n'a besoin d'un parseur de DTD pour parser du XML ?

Reply

Marsh Posté le 15-10-2003 à 18:10:24    

Kristoph a écrit :


Depuis quand on n'a besoin d'un parseur de DTD pour parser du XML ?

Depuis que les définitions d'entités sont planquées dedans.
Ou depuis que la DTD est dans la norme ?
 
exemple dans le dernier cadre de :
http://www.w3.org/TR/REC-xml#sec-entexpand
 
edit : stricto-sensus tu peux "parser" un XML en sautant le doctype ; mais comme tu vas peut-être vouloir faire quelquechose des données, en pratique tu est obligé de développer les entités et les entitées parsées.


Message édité par nraynaud le 15-10-2003 à 18:12:51
Reply

Marsh Posté le 15-10-2003 à 18:14:52    

nraynaud a écrit :

Mouarf, j'en avait fait un en smalltalk, en custom aussi. je sais pas s'il était très élégant, mais je m'étais appliqué et il avait été bien jugé par les gourous. C'est pour ça que maintenant je dis que XML c'est de la merde : trop compliqué à parser pour ce que ça fait. Et c'est aussi pour ça que j'ai un gros doute sur le XML embarqué : parser trop gros (parcequ'il faut obligatoirement un parser de DTD en plus du parser XML).
 
Mais bon, j'ai pas du tout envie de lire du C tout de suite, tant que j'y suis pas obligé. Le bijou restera dans sa boite.


1- il est petit, expat
2- si tu ne consideres que le XML well-formed, il n'y a pas de concept de DTD :D
[Il ne valide pas tout en mode DTD expat d'ailleurs: pas de validation du determinisme de la definitions du contenu d'un element. Par contre, si la DTD de depart est valide, il valide correctement le document par rapport a la DTD]
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-10-2003 à 18:30:37    

nraynaud a écrit :

Depuis que les définitions d'entités sont planquées dedans.
Ou depuis que la DTD est dans la norme ?
 
exemple dans le dernier cadre de :
http://www.w3.org/TR/REC-xml#sec-entexpand
 
edit : stricto-sensus tu peux "parser" un XML en sautant le doctype ; mais comme tu vas peut-être vouloir faire quelquechose des données, en pratique tu est obligé de développer les entités et les entitées parsées.


Il suffit que la declaration des entités apparaissant dans le corps de ton document soit dans le internal subset.
 

<!DOCTYPE toto [
<!ENTITY tutu "Sly a un tutu rose." >
]>
<toto>&tutu;</toto>


 
est du XML well-formed.
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-10-2003 à 18:38:04    

gilou a écrit :


Il suffit que la declaration des entités apparaissant dans le corps de ton document soit dans le internal subset.

C'est ce que je dis, ça t'oblige à changer de parser le temps de parser cette partie. Tout ça passke que peut-être un jour un mec utilisera cette possibilité pour mettre des données dans une "parsed entity". Chose que je n'ai jamais vu dans la nature mais qui oblige à développer un autre parser (de DTD) pour respecter la norme.
 
edit : un parser qui jette les règles de grammaire DTD et qui ne prends que les définition d'entitées. Je parle pas d'un système validant qui est déjà plus balaise.


Message édité par nraynaud le 15-10-2003 à 18:39:36
Reply

Marsh Posté le 16-10-2003 à 02:51:23    

nraynaud a écrit :

C'est ce que je dis, ça t'oblige à changer de parser le temps de parser cette partie. Tout ça passke que peut-être un jour un mec utilisera cette possibilité pour mettre des données dans une "parsed entity". Chose que je n'ai jamais vu dans la nature mais qui oblige à développer un autre parser (de DTD) pour respecter la norme.
 
edit : un parser qui jette les règles de grammaire DTD et qui ne prends que les définition d'entitées. Je parle pas d'un système validant qui est déjà plus balaise.

Tu veux dire quoi exactement la?  
 
De toute façon, mort aux DTDs; Vive les XML Schemas (c'est tres verbeux, d'accord, mais bien plus puissant).
Reste a supprimer la derniere scorie du SGML encore presente dans la grammaire du XML : les CDATA sections (un mecanisme basé sur des processing instructions standardisées aurait ete plus approprié a mon avis).
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-10-2003 à 03:15:01    

Qu'un jour un gars va te pondre un document avec ça :

Code :
  1. <?xml version='1.0'?>
  2. <!DOCTYPE test [
  3. <!ELEMENT test (#PCDATA) >
  4. <!ENTITY % xx '&#37;zz;'>
  5. <!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >' >
  6. %xx;
  7. ]>
  8. <test>This sample shows a &tricky; method.</test>


 
dedans, juste pour te faire chier. Mais il aura raison car c'est marqué dans la norme.
Juste pour cet hypothétique risque que quelqu'un génère des entités dans son xml, tous les parsers doivent parser le doctype correctement.
Bien entendu mort à cette verrue, mais pour l'instant elle est là et je me demande bien coment la transition va être gérée.
Mort aussi à leur syntaxe qui pue et vive le lisp, langage qui permet réellement d'avoir des parser compacts et des données structurées.

Reply

Marsh Posté le 16-10-2003 à 10:03:52    

nraynaud a écrit :

vive le lisp, langage qui permet réellement d'avoir des parser compacts et des données structurées.


 
ta gueule :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 16-10-2003 à 10:26:19    

T'es pas concerné, on parle de langages, de grammaires et de parsers. Pas du machin boiteux qui transforme un programe C++ en un graphe quelconque en mémoire.
 
 
edit : en plus je parlais de parser du lisp, pas de parser autre chose en lisp


Message édité par nraynaud le 16-10-2003 à 10:28:07
Reply

Marsh Posté le 16-10-2003 à 23:29:54    

nraynaud a écrit :

Qu'un jour un gars va te pondre un document avec ça :

Code :
  1. <?xml version='1.0'?>
  2. <!DOCTYPE test [
  3. <!ELEMENT test (#PCDATA) >
  4. <!ENTITY % xx '&#37;zz;'>
  5. <!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >' >
  6. %xx;
  7. ]>
  8. <test>This sample shows a &tricky; method.</test>


 
dedans, juste pour te faire chier. Mais il aura raison car c'est marqué dans la norme.
Juste pour cet hypothétique risque que quelqu'un génère des entités dans son xml, tous les parsers doivent parser le doctype correctement.
Bien entendu mort à cette verrue, mais pour l'instant elle est là et je me demande bien coment la transition va être gérée.
Mort aussi à leur syntaxe qui pue et vive le lisp, langage qui permet réellement d'avoir des parser compacts et des données structurées.


Oui et non.
C'est pas pour faire chier, ca peut etre une contrainte specifique a un environnement ou la DTD est pas mature et sujette a changements...
Et ca permet de generer plein de tests monofichiers :D
Il y a toujours le cas des documents XML ou un editeur interactif ajoute des images au document (ou toute donnée non XML processée par un mecanisme spécifique).
Ce mecanisme permet de regrouper en tete les definitions des entites correspondants a ces fichiers externes.
Et il y a le cas ou tu veux redefinir des entites definies dans la DTD, ce qui permet d'avoir une valeur par defaut, et une valeur customisée pour le document...
Mais a part ces deux cas...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-10-2003 à 11:59:51    

personne n'a donc d'exemple de flex C++ ?

Reply

Marsh Posté le 22-10-2003 à 12:45:26    

Reply

Marsh Posté le 22-10-2003 à 12:51:30    

ben c'est page, je l'ai lu 100fois, mais bon, c'est des cout à la place de printf + ça
 
    FlexLexer* lexer = new yyFlexLexer;
    while(lexer->yylex() != 0)
 
 
bref, c'est vraiment pas tres développé alors qu'apparemment on peu faie de l'héritage, est, manipuler les stream

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed