Niouzes.org  

Précédent   Niouzes.org > Forum > Newsgroup fr.comp.* Forum > Newsgroup fr.comp.algorithmes
S'inscrire FAQ Membres Calendrier Recherche Messages du jour Marquer les forums comme lus



Réponse

 

LinkBack Outils de la discussion Modes d'affichage
  #1 (permalink)  
Vieux 02/08/2008, 17h45
Armel
 
Messages: n/a
Par défaut Re: Expression reguliere


"Jean-Marc Bourguet" <jm***bourguet.org> a écrit dans le message de news:
87ej57wzff.fsf***news.bourguet.org...
>
> Bon... retour à la case 0. Copie et suivi sur le groupe d'algo,
> vraisemblablement mieux adapté.
>
> Problème: bâtir une expression rationnelle qui accepte n'importe quoi sauf
> une chaîne donnée. L'automate et la grammaire sont faciles à écrire, mais
> l'expression...
>
> Retour chez Aho et Ullman (The theory of parsing, translation and
> compiling), le seul bouquin que j'ai qui donne un algo pour passer d'une
> grammaire à une expression.
>
> Exemples sur les chaînes a, ab, abc et abcd. Je note 0 la chaîne vide.
>
> Premièrement, si on a
> X -> e X | b
> ça veut dire que
> X -> e*|b
> (voir la démonstration dans le bouquin)
>
> == a
>
> A -> [^a] A | 0
> -> [^a]* 0
> -> [^a]*
>
> == ab
>
> A -> [^a] A | a B | 0
> B -> [^ab] A | a B | 0
> -> a B | ([^ab] A | 0)
> -> a*([^ab] A | 0)
> A -> [^a] A | a a*([^ab] A | 0) | 0
> -> [^a] A | a a*[^ab] A | aa* | 0
> -> ([^a]|aa*[^ab]) A | a*
> -> ([^a]|aa*[^ab])*a*
>
> == abc
>
> A -> [^a] A | a B | 0
> B -> [^ab] A | a B | b C | 0
> C -> [^ac] A | a B | 0
>
>
> B -> [^ab] A | a B | b ([^ac] A | a B | 0) | 0
> -> [^ab] A | a B | b [^ac] A | b a B | b | 0
> -> (a | ba) B | ([^ab] | b [^ac]) A | b?
>
> B -> (a|ba)*(([^ab] | b [^ac]) A | b | 0)
> -> (a|ba)*([^ab]|b[^ac]) A | (a|ba)*b?
>
>
> A -> [^a] A | a ((a|ba)*([^ab]|b[^ac]) A | (a|ba)*b?) | 0
> -> [^a] A | a(a|ba)*([^ab]|b[^ac]) A | a(a|ba)*b? | 0
> -> ([^a]|a(a|ba)*([^ab]|b[^ac])) A | a(a|ba)*b? | 0
>
> A -> ([^a]|a(a|ba)*([^ab]|b[^ac]))* (a(a|ba)*b? | 0)
> -> ([^a]|a(a|ba)*([^ab]|b[^ac]))*(a(a|ba)*b?)?
>
> == abcd
>
> A -> [^a] A | a B | 0
> B -> [^ab] A | a B | b C | 0
> C -> [^ac] A | a B | c D | 0
> D -> [^ad] A | a B | 0
>
> C -> [^ac] A | a B | c ([^ad] A | a B | 0) | 0
> -> [^ac] A | a B | c[^ad] A | ca B | c | 0
> -> ([^ac]|c[^ad]) A | (a|ca) B | c | 0
>
> B -> [^ab] A | a B | b (([^ac]|c[^ad]) A | (a|ca) B | c | 0) | 0
> -> [^ab] A | a B | b([^ac]|c[^ad]) A | b(a|ca) B | bc | b | 0
> -> (a|b(a|ca)) B | ([^ab]|b([^ac]|c[^ad])) A | bc | b | 0
> -> (a|b(a|ca))*(([^ab]|b([^ac]|c[^ad])) A | (bc|b)?)
> -> (a|b(a|ca))*([^ab]|b([^ac]|c[^ad])) A | (a|b(a|ca))*(bc|b)?
>
> A -> [^a] A | a ((a|b(a|ca))*([^ab]|b([^ac]|c[^ad])) A |
> (a|b(a|ca))*(bc|b)?) | 0
> -> [^a] A | a(a|b(a|ca))*([^ab]|b([^ac]|c[^ad])) A | a(a|b(a|ca))*(bc|b)?
> | 0
> -> ([^a]|a(a|b(a|ca))*([^ab]|b([^ac]|c[^ad]))) A |
> (a(a|b(a|ca))*(bc|b)?)?
> -> ([^a]|a(a|b(a|ca))*([^ab]|b([^ac]|c[^ad])))*(a(a|b(a|ca))*(bc|b)?)?
>
> Et un petit résumé (si je ne me suis pas trompé)
>
> a [^a]*
> ab ([^a]|aa*[^ab])*a*
> abc ([^a]|a(a|ba)*([^ab]|b[^ac]))*(a(a|ba)*b?)?
> abcd
> ([^a]|a(a|b(a|ca))*([^ab]|b([^ac]|c[^ad])))*(a(a|b(a|ca))*(bc|b)?)?
>
> Je ne vais pas jusqu'à "Microsoft" :-)
>
> Est-ce qu'il y a des expressions plus simples que celles optenues par cet
> algo pour le même résultat?
>
> A+

il est possible d'utiliser une notation de type "shortest match/au plus
court", c'est à dire, un noeud d'acceptation comme le noeud symbolique "$"
souvent utilisé en fin d'expression régulière, notons le #. Un noeud de ce
genre rend l'état qui le contient "accepteur', toute transition vers cet
état provoque l'acceptation de l'expression. Un expression acceptant tout
jusqu'à qqch devient donc : .*texte#. Une expression régulière acceptant
tout sauf cette chaîne est donc cette même expression régulière... mais on
considère tout état d'erreur comme état de succès (sur la fin de texte).

Armel


Réponse avec citation
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Niouzes.org
Standard Sponsored Links

Réponse
Tags: ,



Outils de la discussion
Modes d'affichage

Règles de messages
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Discussions similaires

Discussion Auteur Forum Réponses Dernier message
Re: [HC] Expression reguliere Mickaël Wolff Newsgroup fr.comp.lang.c++ 0 01/08/2008 13h00
[HS] Expression reguliere Etienne SOBOLE Newsgroup fr.comp.lang.php 3 13/07/2008 11h42
Expression Web Jacques Newsgroup microsoft.public.fr.frontpage 1 13/04/2008 12h17
Expression web Michel Newsgroup microsoft.public.fr.frontpage 5 31/12/2007 23h26
Expression Lingoss Newsgroup fr.lettres.langue.italienne 3 03/12/2007 06h22


Fuseau horaire GMT. Il est actuellement 10h04.

Italiano - German - English - Español


Édité par : vBulletin® version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc. Tous droits réservés.
Version française #13 par l'association vBulletin francophone


Politique - Droit - Philosophie - Football - Medicine - Française - Bricolage - Photo - Mac Os X - Divers - Physique - Jardinage
Mecanique - Moto - Photographie - Rail - Route - Aviation - Cinema - Linux - Psychanalyse - Finance - Enigmes - Rugby
Environnement - Histoire - Programmes TV - Education - Travail - Voyages - Windows - Immobilier - Cuisine
Windows XP - Excel - Word - Outlook - Access - Internet Explorer - Office - Vista

Page generated in 0,27921 seconds with 11 queries