il me faut parcourir une chaine pour en séparer ses composantes. Je ne sais
pas quelle fonctions de sscanf, strtok, ... je dosi utiliser. La chaine que
je dois parcourir, si je l'appelle <message>, à une structure en pseudo BNF
comme ceci :
<middle> ::= <Any *non-empty* sequence of octets not including SPACE
or NUL or CR or LF, the first of which may not be ':'>
<trailing> ::= <Any, possibly *empty*, sequence of octets not including
NUL or CR or LF>
<crlf> ::= CR LF
Mon problème est la gestion des paramètres optionnels (entre crochets),
notamment pour <param>. Comment programmer un tel "parser" ?
"Patrick Mézard" a écrit dans le message news: bgd36n$ua4$
il me faut parcourir une chaine pour en séparer ses composantes. Je ne sais
pas quelle fonctions de sscanf, strtok, ... je dosi utiliser. La chaine que
je dois parcourir, si je l'appelle <message>, à une structure en pseudo BNF
comme ceci :
Tu peux aussi trouver des bouquins d'initiation à l'analyse, qui montrent que c'est très simple d'écrire quelques fonctions pour analyser un truc de ce genre...
--
Français *==> "Musique renaissance" <==* English midi - facsimiles - ligatures - mensuration http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/ Alain Naigeon - - Strasbourg, France
"Patrick Mézard" <patrick.mezard@ifrance.com> a écrit dans le message news:
bgd36n$ua4$1@news-reader1.wanadoo.fr...
il me faut parcourir une chaine pour en séparer ses composantes. Je ne
sais
pas quelle fonctions de sscanf, strtok, ... je dosi utiliser. La chaine
que
je dois parcourir, si je l'appelle <message>, à une structure en pseudo
BNF
comme ceci :
Tu peux aussi trouver des bouquins d'initiation à l'analyse,
qui montrent que c'est très simple d'écrire quelques fonctions
pour analyser un truc de ce genre...
--
Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - anaigeon@free.fr - Strasbourg, France
"Patrick Mézard" a écrit dans le message news: bgd36n$ua4$
il me faut parcourir une chaine pour en séparer ses composantes. Je ne sais
pas quelle fonctions de sscanf, strtok, ... je dosi utiliser. La chaine que
je dois parcourir, si je l'appelle <message>, à une structure en pseudo BNF
comme ceci :
Tu peux aussi trouver des bouquins d'initiation à l'analyse, qui montrent que c'est très simple d'écrire quelques fonctions pour analyser un truc de ce genre...
--
Français *==> "Musique renaissance" <==* English midi - facsimiles - ligatures - mensuration http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/ Alain Naigeon - - Strasbourg, France
kanze
Jean-Marc Bourguet wrote in message news:...
DINH Viêt Hoà writes:
La réponse 'brute force', c'est lex/yacc ou flex/bison.
C'est d'un analyseur lexical ou syntaxique donc j'ai besoin (i.e. flex ou bison) ?
les 2, lex pour découper en mot et symboles. yacc pour reconnaître les motifs donnés par la grammaire.
Si j'ai bonne memoire, sa grammaire est reguliere (autrement dit lex suffit, mais bon pour quelque chose d'aussi simple, ecrire tout a la main c'est plus rapide, surtout si on ne connait pas ces outils).
Le problème avec lex, c'est que la partie scanner n'est pas vraiment indépendant du contexte. Il faudrait se servir des états. (Pas difficile en soi, mais ça veut dire qu'il faut connaître lex un peu plus.)
Quelque soit la solution adoptée, je commencerais par lire ligne par ligne (std::getline). Ensuite, je me pose la question : son format ressemble beaucoup à des champs séparés par des espaces, sauf dans le cas de final. Est-ce qu'il serait acceptable de l'implémenter comme tel, quitte à vérifier par la suite que les commandes ne contiennent que les caractères voulus ?
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Jean-Marc Bourguet <jm@bourguet.org> wrote in message
news:<pxbadauwvux.fsf@news.bourguet.org>...
DINH Viêt Hoà <dinh.viet.hoa@free.fr> writes:
La réponse 'brute force', c'est lex/yacc ou flex/bison.
C'est d'un analyseur lexical ou syntaxique donc j'ai besoin (i.e.
flex ou bison) ?
les 2, lex pour découper en mot et symboles. yacc pour reconnaître
les motifs donnés par la grammaire.
Si j'ai bonne memoire, sa grammaire est reguliere (autrement dit lex
suffit, mais bon pour quelque chose d'aussi simple, ecrire tout a la
main c'est plus rapide, surtout si on ne connait pas ces outils).
Le problème avec lex, c'est que la partie scanner n'est pas vraiment
indépendant du contexte. Il faudrait se servir des états. (Pas difficile
en soi, mais ça veut dire qu'il faut connaître lex un peu plus.)
Quelque soit la solution adoptée, je commencerais par lire ligne par
ligne (std::getline). Ensuite, je me pose la question : son format
ressemble beaucoup à des champs séparés par des espaces, sauf dans le
cas de final. Est-ce qu'il serait acceptable de l'implémenter comme tel,
quitte à vérifier par la suite que les commandes ne contiennent que les
caractères voulus ?
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
La réponse 'brute force', c'est lex/yacc ou flex/bison.
C'est d'un analyseur lexical ou syntaxique donc j'ai besoin (i.e. flex ou bison) ?
les 2, lex pour découper en mot et symboles. yacc pour reconnaître les motifs donnés par la grammaire.
Si j'ai bonne memoire, sa grammaire est reguliere (autrement dit lex suffit, mais bon pour quelque chose d'aussi simple, ecrire tout a la main c'est plus rapide, surtout si on ne connait pas ces outils).
Le problème avec lex, c'est que la partie scanner n'est pas vraiment indépendant du contexte. Il faudrait se servir des états. (Pas difficile en soi, mais ça veut dire qu'il faut connaître lex un peu plus.)
Quelque soit la solution adoptée, je commencerais par lire ligne par ligne (std::getline). Ensuite, je me pose la question : son format ressemble beaucoup à des champs séparés par des espaces, sauf dans le cas de final. Est-ce qu'il serait acceptable de l'implémenter comme tel, quitte à vérifier par la suite que les commandes ne contiennent que les caractères voulus ?
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16