Bonjour,
J'ai eu un avis dans un post qui me disait que l'usage des regexp pour
parser/editer des fichiers du type SGML/XML n'est pas approprié.
Ceci parcequ'il il y a des outil d'un plus haut niveau qui s'en occupent.
Ceci dit, quand le fichier SGML est non conforme, il faut bien
l'attaquer aux regexps, au moins pour le normaliser. Apres cela, on
passe à un niveau plus haut.
Mais par curiosité, les outils de parsing de ce type de fichier utilise
des regexp pour parser, non?
Sinon, question qui vient juste apres: Qu'est ce qui parse les regexps
qu'on founi aux outils à qui on donne des regexps?
Sinon, question qui vient juste apres: Qu'est ce qui parse les regexps qu'on founi aux outils à qui on donne des regexps?
Ben, les outils eux-memes, parfois au moyen de fonctions se trouvant dans la libc ou des bibliotheques specialisees comme pcre.
Voir regcomp(3).
-- Stéphane
Nicolas S.
Mihamina Rakotomandimby a écrit:
Mais par curiosité, les outils de parsing de ce type de fichier utilise des regexp pour parser, non?
Heu non, pas à ma connaissance. C'est le programme qui fait directement le boulot... en fonction des lignes de code que tu fais avaler à ton compilateur.
-- Nicolas S.
Mihamina Rakotomandimby <mihamina@rktmb.org> a écrit:
Mais par curiosité, les outils de parsing de ce type de fichier
utilise des regexp pour parser, non?
Heu non, pas à ma connaissance. C'est le programme qui fait directement
le boulot... en fonction des lignes de code que tu fais avaler à ton
compilateur.
Mais par curiosité, les outils de parsing de ce type de fichier utilise des regexp pour parser, non?
Heu non, pas à ma connaissance. C'est le programme qui fait directement le boulot... en fonction des lignes de code que tu fais avaler à ton compilateur.
-- Nicolas S.
Alain Ketterlin
Mihamina Rakotomandimby writes:
J'ai eu un avis dans un post qui me disait que l'usage des regexp pour parser/editer des fichiers du type SGML/XML n'est pas approprié. Ceci parcequ'il il y a des outil d'un plus haut niveau qui s'en occupent. Ceci dit, quand le fichier SGML est non conforme, il faut bien l'attaquer aux regexps, au moins pour le normaliser. Apres cela, on passe à un niveau plus haut.
Mais par curiosité, les outils de parsing de ce type de fichier utilise des regexp pour parser, non?
Oui et non. Ils utilisent des regexp au niveau le plus bas, pour lire des "tokens" (unités lexicales) plutot que des caractères. Mais cette lecture est purement locale. Ensuite, une deuxième couche se charge de reconnaitre si le fichier d'entrée est conforme à la grammaire du langage. Cette couche lit token par token, et reconnait ou non le fichier d'entrée structure syntaxique par structure syntaxique. Les deux niveaux sont souvent mis en oeuvre avec (f)lex et yacc (ou bison) : le premier est à la base un moteur de reconnaissance d'expressions régulières. Le second est un analyseur LR(1). (En fait, c'est pas vrai, les deux sont des "générateurs de ...", mais c'est un détail.)
Malheureusement, dans le cas de SGML (ou de XML d'ailleurs) la distinction est moins nette. Dans le cas des langages de programmation comme C, c'est tout à fait net. La forme d'une constante litérale en virgule flottante, c'est le niveau lexical (reconnue par une regexp), la forme d'une boucle for c'est le niveau syntaxique (reconnue par une règle de grammaire).
J'ai eu un avis dans un post qui me disait que l'usage des regexp pour
parser/editer des fichiers du type SGML/XML n'est pas approprié.
Ceci parcequ'il il y a des outil d'un plus haut niveau qui s'en occupent.
Ceci dit, quand le fichier SGML est non conforme, il faut bien
l'attaquer aux regexps, au moins pour le normaliser. Apres cela, on
passe à un niveau plus haut.
Mais par curiosité, les outils de parsing de ce type de fichier utilise
des regexp pour parser, non?
Oui et non. Ils utilisent des regexp au niveau le plus bas, pour lire
des "tokens" (unités lexicales) plutot que des caractères. Mais cette
lecture est purement locale. Ensuite, une deuxième couche se charge de
reconnaitre si le fichier d'entrée est conforme à la grammaire du
langage. Cette couche lit token par token, et reconnait ou non le
fichier d'entrée structure syntaxique par structure syntaxique. Les
deux niveaux sont souvent mis en oeuvre avec (f)lex et yacc (ou
bison) : le premier est à la base un moteur de reconnaissance
d'expressions régulières. Le second est un analyseur LR(1). (En fait,
c'est pas vrai, les deux sont des "générateurs de ...", mais c'est un
détail.)
Malheureusement, dans le cas de SGML (ou de XML d'ailleurs) la
distinction est moins nette. Dans le cas des langages de programmation
comme C, c'est tout à fait net. La forme d'une constante litérale en
virgule flottante, c'est le niveau lexical (reconnue par une regexp),
la forme d'une boucle for c'est le niveau syntaxique (reconnue par une
règle de grammaire).
J'ai eu un avis dans un post qui me disait que l'usage des regexp pour parser/editer des fichiers du type SGML/XML n'est pas approprié. Ceci parcequ'il il y a des outil d'un plus haut niveau qui s'en occupent. Ceci dit, quand le fichier SGML est non conforme, il faut bien l'attaquer aux regexps, au moins pour le normaliser. Apres cela, on passe à un niveau plus haut.
Mais par curiosité, les outils de parsing de ce type de fichier utilise des regexp pour parser, non?
Oui et non. Ils utilisent des regexp au niveau le plus bas, pour lire des "tokens" (unités lexicales) plutot que des caractères. Mais cette lecture est purement locale. Ensuite, une deuxième couche se charge de reconnaitre si le fichier d'entrée est conforme à la grammaire du langage. Cette couche lit token par token, et reconnait ou non le fichier d'entrée structure syntaxique par structure syntaxique. Les deux niveaux sont souvent mis en oeuvre avec (f)lex et yacc (ou bison) : le premier est à la base un moteur de reconnaissance d'expressions régulières. Le second est un analyseur LR(1). (En fait, c'est pas vrai, les deux sont des "générateurs de ...", mais c'est un détail.)
Malheureusement, dans le cas de SGML (ou de XML d'ailleurs) la distinction est moins nette. Dans le cas des langages de programmation comme C, c'est tout à fait net. La forme d'une constante litérale en virgule flottante, c'est le niveau lexical (reconnue par une regexp), la forme d'une boucle for c'est le niveau syntaxique (reconnue par une règle de grammaire).
-- Alain.
Paul Gaborit
À (at) Thu, 25 Oct 2007 11:43:47 +0200, Mihamina Rakotomandimby écrivait (wrote):
J'ai eu un avis dans un post qui me disait que l'usage des regexp pour parser/editer des fichiers du type SGML/XML n'est pas approprié.
L'usage d'*une* regexp pour parser du SGML/XML n'est pas approprié.
Ceci parcequ'il il y a des outil d'un plus haut niveau qui s'en occupent. Ceci dit, quand le fichier SGML est non conforme, il faut bien l'attaquer aux regexps, au moins pour le normaliser. Apres cela, on passe à un niveau plus haut.
On utilise *des* regexps mais on ajoute de la logique par dessus afin de vérifier la grammaire. On appelle cela un analyseur syntaxique.
En fait un moteur de regexp est déjà un analyseur syntaxique limité à une certaine classe de langages. Ceux que les anglophones appellent langages "réguliers" et que les francophones appellent parfois langages rationnels. SGML/XML n'est pas un langage rationnel.
Il existe aussi des moteurs de regexps étendues qui étendent la classe de langages reconnaissables par une regexp. Certains de ces moteurs étendus sont capables de parser (reconnaître) du SGML/XML.
Mais, c'est un abus de langage de continuer à les appeler 'moteur de regexp' puisque un moteur de regexp se limite, par définition, aux langages rationnels.
On peut aussi faire la distinction en passant par les notions d'automates à états finis et d'automates à pile...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
À (at) Thu, 25 Oct 2007 11:43:47 +0200,
Mihamina Rakotomandimby <mihamina@rktmb.org> écrivait (wrote):
J'ai eu un avis dans un post qui me disait que l'usage des regexp pour
parser/editer des fichiers du type SGML/XML n'est pas approprié.
L'usage d'*une* regexp pour parser du SGML/XML n'est pas approprié.
Ceci parcequ'il il y a des outil d'un plus haut niveau qui s'en occupent.
Ceci dit, quand le fichier SGML est non conforme, il faut bien
l'attaquer aux regexps, au moins pour le normaliser. Apres cela, on
passe à un niveau plus haut.
On utilise *des* regexps mais on ajoute de la logique par dessus afin
de vérifier la grammaire. On appelle cela un analyseur syntaxique.
En fait un moteur de regexp est déjà un analyseur syntaxique limité à
une certaine classe de langages. Ceux que les anglophones appellent
langages "réguliers" et que les francophones appellent parfois
langages rationnels. SGML/XML n'est pas un langage rationnel.
Il existe aussi des moteurs de regexps étendues qui étendent la classe
de langages reconnaissables par une regexp. Certains de ces moteurs
étendus sont capables de parser (reconnaître) du SGML/XML.
Mais, c'est un abus de langage de continuer à les appeler 'moteur de
regexp' puisque un moteur de regexp se limite, par définition, aux
langages rationnels.
On peut aussi faire la distinction en passant par les notions
d'automates à états finis et d'automates à pile...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
À (at) Thu, 25 Oct 2007 11:43:47 +0200, Mihamina Rakotomandimby écrivait (wrote):
J'ai eu un avis dans un post qui me disait que l'usage des regexp pour parser/editer des fichiers du type SGML/XML n'est pas approprié.
L'usage d'*une* regexp pour parser du SGML/XML n'est pas approprié.
Ceci parcequ'il il y a des outil d'un plus haut niveau qui s'en occupent. Ceci dit, quand le fichier SGML est non conforme, il faut bien l'attaquer aux regexps, au moins pour le normaliser. Apres cela, on passe à un niveau plus haut.
On utilise *des* regexps mais on ajoute de la logique par dessus afin de vérifier la grammaire. On appelle cela un analyseur syntaxique.
En fait un moteur de regexp est déjà un analyseur syntaxique limité à une certaine classe de langages. Ceux que les anglophones appellent langages "réguliers" et que les francophones appellent parfois langages rationnels. SGML/XML n'est pas un langage rationnel.
Il existe aussi des moteurs de regexps étendues qui étendent la classe de langages reconnaissables par une regexp. Certains de ces moteurs étendus sont capables de parser (reconnaître) du SGML/XML.
Mais, c'est un abus de langage de continuer à les appeler 'moteur de regexp' puisque un moteur de regexp se limite, par définition, aux langages rationnels.
On peut aussi faire la distinction en passant par les notions d'automates à états finis et d'automates à pile...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>