¿POSIX BRE puede expresar todos los idiomas normales?


13

Parece que las "Expresiones regulares básicas" según lo definido por POSIX.1-2008 no admiten la alternancia a|b(aunque algunas implementaciones grep reconocen la versión escapada \|).

Dado que los lenguajes regulares están cerrados bajo unión por definición, ¿significa esto que POSIX BRE tiene menos poder expresivo que un autómata finito? ¿O hay alguna forma de simular alternancia usando otras construcciones?

Respuestas:


17

De hecho, el lenguaje POSIX BRE no puede expresar todas las expresiones regulares porque carece de alternancia. Ni siquiera puede reconocer todos los idiomas finitos, y mucho menos todos los idiomas normales.

Por ejemplo, no es reconocible como BRE. Para probar esto, considere cuál podría ser la forma sintáctica de nivel superior:{ab,ba}

  • No puede ser una de las formas de un solo carácter ya que el lenguaje tiene palabras de longitud .>1
  • No puede ser porque eso coincidiría con la cadena vacía.R
  • No puede ser excepto con (en cuyo caso volvemos al problema original) porque eso coincidiría con cadenas de diferentes longitudes o la cadena vacía. m = n = 1R{m,n}m=n=1
  • Entonces tiene que ser concatenación: . Ahora considere cómo se reconoce : a bR1R2ab
    • Si reconoce entonces no debe reconocer nada más que la cadena vacía. Entonces debe reconocer y volvemos al problema original. a b R 2 R 1 { a b , b a }R1abR2R1{ab,ba}
    • Si reconoce pero no entonces debe reconocer . Pero entonces reconoce todas las palabras de la forma donde reconoce , por lo no debe reconocer otra cosa que . No hay forma de reconocer . a a b R 2 b R 1 R 2 u b R 1 u R 1 a b aR1aabR2bR1R2ubR1uR1aba
    • Si no reconoce ni ni entonces la única forma de que reconozca es si reconoce la cadena vacía, en cuyo caso volveremos al problema original como se anteriormente, pero esta vez para . a b a R a b R 1 R 2R1abaRabR1R2

Cuando "volvemos al problema original", eso significa que la única solución para encontrar un BRE reconoce el lenguaje es encontrar un BRE más pequeño que tenga la misma propiedad. Este es un descenso infinito , por lo que no hay BRE que tenga la propiedad deseada.

No creo que haya una caracterización "agradable" de los lenguajes reconocibles por BRE, por ejemplo, como lenguajes reconocibles por una clase de autómatas "agradable".

Tenga en cuenta que los lenguajes reconocibles por BRE en realidad no son una subclase de lenguajes regulares, ya que las referencias posteriores agregan poder expresivo. Por ejemplo, es reconocido por el BRE pero es famoso por no ser regular. BRE sin referencias posteriores son solo azúcar sintáctico sobre expresiones regulares, por lo que los idiomas que pueden reconocer son una subclase de los idiomas regulares.{www{a,b}}\(.*\)\1


1
Si está utilizando una herramienta como grep que puede aceptar múltiples expresiones separadas por una nueva línea para coincidir, está tomando el producto cartesiano de todas las posibles alternancias (por ejemplo, {ab, ba} {ab, ba} se convierte en {abba, abba, baab, baba}) suficiente para ser equivalente a cualquier "BRE-plus-alternation" dada y, por lo tanto, ¿algún lenguaje regular?
Random832

1
@ Random832: Intenta hacerlo (abc|bac)*.
rici
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.