6
votes

Généraliser le lemme de pompage pour des expressions régulières de style UNIX

la plupart des expressions régulières UNIX ont, outre le habituel , + , ? * opérateurs un opérateur de barreaux d'artrofrigation où \ 1 , \ 2, ... correspondant à ce qui est dans les dernières parenthèses, donc par exemple * l = (a *) b \ 1 * correspond à la langue (non régulière) * A ^ nba ^ n * .

D'une part, cela semble être assez puissant puisque vous pouvez créer (a *) b \ 1b \ 1 pour correspondre à la langue * A ^ nba ^ nba ^ n * < / code> qui ne peut même pas être reconnu par un automate de pile. D'autre part, je suis sûr que * a ^ n b ^ n * ne peut pas être exprimé de cette façon.

J'ai deux questions:

  1. Y a-t-il une littérature sur cette famille de langues (Unix-y régulier). En particulier, existe-t-il une version du lemme de pompage pour ceux-ci?
  2. quelqu'un peut-il prouver ou réfuter, que * a ^ n b ^ n * ne peut pas être exprimé de cette façon?

0 commentaires

3 Réponses :


0
votes

a ^ n b ^ n est CFL. La grammaire est

A -> aAb | e


4 commentaires

YUP, les expressions «régulières» ont été étendues pour reconnaître les langues que les machines d'État finies ne reconnaîtront pas.


Cela ne répond pas à la question. Il veut une déclaration d'un théorème (semblable au lemme de pompage) qu'il peut utiliser pour prouver quelles expressions régulières peuvent soutenir lorsqu'ils soutiennent les rafraîchies.


@ken. Sa question initiale est de demander pourquoi un ^ n b ^ n est la CFL et comment le prouver que ce n'est pas un RL. Et Whirlwind a également remarqué que. Vous pouvez demander à AVI et vous pouvez également signaler à l'administrateur du site Web sur le fil modifié non traqué.


@ziang. Il n'a pas fait. Il vous a demandé de prouver si un ^ n b ^ n peut être reconnu par Extended Regexps qui permettent des referférences.



-1
votes

Ruby 1.9.1 prend en charge la regex suivante: xxx

" amusant avec Ruby 1.9 Expressions régulières " a un exemple où il organise réellement toutes les parties d'une regex afin qu'elle ressemble à un contexte grammaire libre comme suit: xxx

Je pense que cela signifie que le moteur Regex de Ruby 1.9.1, qui est le moteur Regex Oniguruma, est en réalité équivalente à une grammaire sans contexte. , bien que les groupes de capture ne soient pas aussi utiles qu'un analyseur réel.

Cela signifie que " Le lemme de pompage pour les langues libres de contexte "doit décrire la classe de langues reconnaissables par le moteur Regex de Ruby 1.9.1.

edit: whoops ! J'ai foiré et je n'ai pas fait un test important qui fait ma réponse ci-dessus totalement faux. Je ne supprimerai pas la réponse, car il est néanmoins des informations utiles. xxx

EDIT: revenir à ce nombre de mois plus tard, je viens de découvrir que Mon test dans la dernière édition était incorrect. "AAACBBB" ne devrait pas être censé correspondre à regex même si regex fonctionne comme une grammaire sans contexte.

Le test correct doit être sur une chaîne comme "aabcbaa" , et qui correspond à la regex: xxx


0 commentaires

2
votes

Vous recherchez probablement


0 commentaires