Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

usage regexp avec SGML et ses variantes

4 réponses
Avatar
Mihamina Rakotomandimby
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?

4 réponses

Avatar
Stephane Chazelas
2007-10-25, 11:43(+02), Mihamina Rakotomandimby:
[...]
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

Avatar
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.

Avatar
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).

-- Alain.

Avatar
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/>