Академический Документы
Профессиональный Документы
Культура Документы
enfoque prctico
25 de abril de 2012
ndice general
1. Expresiones regulares
1.0.1.
1.0.2.
1.0.3.
1.0.4.
1.0.5.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 5
. 8
. 14
. 19
. 22
Captulo 1
Expresiones regulares
Los Autmatas de estados nitos (AFD, AFND y AFND-) realizan una descripcin procedural de los lenguajes regulares. En este tema se muestra un lenguaje denominado Expresiones
Regulares (ER), que permite denir un Lenguaje Regular de forma declarativa. Ambos modelos
(ER y AF de forma equivalente) se aplican a los lenguajes tipo 3 de la jerarqua de Chomsky.
Sean
L
y
L
lenguajes,
entonces
L
L2 se dene:
1
2
1
L1 L2 = { x | x en L1 o x en L2 }
2. Concatenacin
Sean L1 y L2 lenguajes, entonces L1 .L2 se dene:
L1 .L2 = { x.y | x en L1 y y en L2 }
La cadena vaca es la identidad para la concatenacin (.L = L. = L).
3. Clausura (Operador estrella o Clausura de Kleene)
Sea L
un lenguaje, la clausura de Kleene L se dene:
i
i
L =
i=0 L (la unin de los L con i desde cero hasta el innito)
i
Donde se dene L de la siguiente manera:
{
i
L =
L0 =
Li = L.Li1
si i = 0
i1
En otras palabras, L es el conjunto de todas las cadenas que se pueden formar tomando
cualquier nmero de cadenas de L (con repeticiones) yconcatenndolas entre si.
i
i
Tambin, la Clausura Positiva se dene como L+ =
i=1 L (la unin de los L con i desde
5
CAPTULO 1.
EXPRESIONES REGULARES
7
3. Operador Clausura de Klenee (estrella o asterisco) *: Si E es una ER, entonces E
es una ER.
Representa la clausura de L(E ), es decir L(E ) = (L(E ))
4. Parntesis (): Si E es una ER, entonces (E ) (es una ER entre parntesis) tambin
es una ER.
Denota el mismo lenguaje que E , es decir L((E )) = L(E )
El orden de precedencia de los operadores bsicos de las ER es *, . y + (de mayor a menor).
Se debe considerar lo siguiente:
1. . y + son asociativos por tanto no importa el orden de aplicacin, por convencin se
comienza por la izquierda.
2. * se aplica a la secuencia de smbolos mas pequea a su izquierda (es decir la ER bien
formada a su izquierda).
3. Si se quiere cambiar el orden se debe usar parntesis.
Ejemplos:
La ER 00 denota el lenguaje {00}.
L(00) = L(0).L(0) = {0}.{0} = {00}.
La ER 0 + 1 denota
el lenguaje{0,1}.
L(0 + 1) = L(0) L(1) = {0} {1} = {0,1}.
La ER (0 + 1) denota todas las cadenas
que se pueden
CAPTULO 1.
EXPRESIONES REGULARES
(r*)* = r*
( + r)* = (r + )* = r*
r* + s* = s* + r*
(rs + r)*r = r(sr + r)*
Ejemplos:
Para el alfabeto = {0, 1}, se denotan los siguientes lenguajes con expresiones regulares.
1. (1 + 10)*, denota las cadenas binarias, incluyendo la cadena vacia, que comienzan con 1
y no hay ceros seguidos
2. (1* + 0*), denota las cadenas binarias, incluyendo la cadena vaca , que contienen solo
ceros o bien solo unos.
3. (01 + 1)*, denota las cadenas binarias que terminan con 1 y que no contiene la subcadena
00.
4. (0 + 1)*(00 + 11)(0 + 1)*, denota las cadenas binarias con al menos 2 ceros seguidos
2 unos seguidos
Teorema 1.
Sea
L(R).
PASO INDUCTIVO: Sea cierto para menos de i operadores y sea R con i o mas
operadores.
Por hiptesis inductiva existe M1 = (Q1 , 1 , 1 , q1 , {f1 }) y M2 = (Q2 , 2 , 2 , q2 , {f2 })
tal que L(M1 )=L(R1 ) y L(M2 )=L(R2 ), donde R1 y R2 son expresiones regulares que
denotan a los lenguajes
regulares respectivos.
Asumiendo que Q1 Q2 = , se presentan los siguientes casos por cada operador:
1
El AFND- obtenido en cada caso tiene un solo estado nal que no tiene transiciones de salida (condicin
de la demostracin y denicin de este teorema).
Figura 1.2: Denicin del operador unin del AFND- a partir de Expresiones Regulares
Sean q0 yf0 , dos
nuevos estados,
se construye M:
M = (Q1 Q2 {q0 , f0 }, 1 2 , , q0 , {f0 }))
Donde :
Ver gura 1.2. Se debe cumplir que L(R) = L(R1 ) L(R2 ) y L(M) = L(M1 )
L(M2 ). Si hay interseccin entre 2 lenguajes L(M1 ) y L(M2 ) entonces por cualquiera
de los dos autmatas se puede llegar al estado nal.
2. Caso 2: Operador de Concatenacin
R = R1 .R2 con R1 y R2 con menos de i operadores. En funcin de la hiptesis
inductiva
se construye
M de la siguiente forma:
M = (Q1 Q2 , 1 2 , , q1 , {f2 }))
Donde :
10
CAPTULO 1.
EXPRESIONES REGULARES
Figura 1.3: Denicin del operador concatenacin del AFND- a partir de Expresiones Regulares
b)
{}
Ver gura 1.3. Se debe cumplir que L(R) = L(R1 ).L(R2 ) y L(M) = L(M1 ).L(M2 ).
Lo nico que acepta M son cadenas de M1 seguidas por cadenas de M2 .
3. Caso 3: Operador Estrella o Clausura de Kleene
R = R1 y R1 con i-1 operadores. Por la hiptesis inductiva, existe una M1 = (Q1 ,
Figura 1.4: Denicin del operador clausura de Kleene del AFND- a partir de Expresiones
Regulares
1 , 1 , q1 , {f1 }) tal que L(M1 ) = L(R1 ), sea q0 y f0 son 2 nuevos estados entonces
se construye
M as:
M = (Q1 {q0 , f0 }, 1 , , q0 , {f0 }))
Donde :
11
Teorema 2.
Si
12
CAPTULO 1.
EXPRESIONES REGULARES
Figura 1.7: AFD equivalente al AFND- de la gura 1.6, generado a partir de la interpretacin
de la Expresin Regular 01 + 1
Demostracin:
Los estados del AFD son etiquetados secuencialmente {1, 2, ..., n}. El autmata A tiene n
estados. Se dene Rijk a la expresin Regular cuyo lenguaje es L(Rijk ) el conjunto de cadenas
w tal que w es la etiqueta de un camino que va del estado i al j en A, sin pasar por nodos
intermedios etiquetados con un nmero mayor que k ( (qi ,x) = qj y si (qi ,y) = ql ). Para
cualquier prejo propio y de x (x = ) entonces l k, como solo hay n estados Rijn son todas
cadenas que llevan de qi a qj . Podemos denir Rijk recursivamente como sigue por induccin
sobre k:
Figura 1.8: Caso base e inductivo de la transformacin de un AFD a una Expresin regular
Caso Base, para k = 0, determinar Rij0
1. i = j (arcos de i a j). Ver gura 1.8 caso base 1
L(Rij0 ) = { a | (qi ,a) = qj }
a)
13
L(Rij0 ) = { a1 , a2 , ..., am } y por tanto la expresin regular es Rij0 = a1 + a2 +
... + am
Caso Inductivo, sea cierto por hiptesis inductiva para k-1, determinar Rijk . Ver gura
1.8 caso inductivo
k = Rk1 (Rk1 ) Rk1 + Rk1
Rij
ij
ik
kk
kj
n .
Las cadenas aceptadas por el AFD A = (Q, , , q1 , F), |Q| = n son L(A) = qj enF R1j
Es decir, la unin de todas las expresiones regulares desde el estado inicial q1 hasta cada
n + Rn + ... +
uno de los estados nales. De esta forma, L(A) estara denotado por R1j
1j2
1
n , ya que F = {q
1.9
se
muestra
un
AFD A
R1j
,
q
,
..
q
}.
Por
ejemplo
en
la
gura
1j
1j
1j
p
1
2
p
3
3
= ({q1 , q2 , q3 }, , , q1 , {q2 , q3 }) y la expresin regular a calcular sera R = R12 + R13
3
ya que |Q| = 3. Dicha expresin regular se interpreta: R12 como las cadenas denotadas
que van desde el estado inicial q1 hasta el estado nal q2 pasando por todos los estados
3 de las cadenas denotadas que van desde el estado inicial
(los 3 estados), unido con R13
q1 hasta el estado nal q3 pasando por todos los estados (los 3 estados).
Ejemplo:
Dado el AFD A de la gura 1.10, halle la expresin regular R que denota el lenguaje que
reconoce el autmata (L(A) = L(R)).
A = ({q1 , q2 }, {0, 1}, , q1 , {q2 }), donde |Q| = 2
2
Recuerdese que para todo AF se cumple que b(q,) = q, para todo q en Q, es decir la cadena vaca no
cambia de estado, por tanto debe agregarse a la expresin regular del ciclo.
14
CAPTULO 1.
EXPRESIONES REGULARES
Figura 1.10: Ejemplo de un AFD para obtener la Expresin regular 1*0(0 + 1)*
Cuadro 1.1: Caso base de la transformacin del AFD A de la gura 1.10 a una expresin
regular Rij0
0
R11
0
R12
0
R21
0
R22
1+
0
0+1+
1
1
R12 = R12 (R22 ) R22 + R12 = (1*0 + 0)(0 + 1 + )*(0 + 1 + ) + 1*0 + 0 =
= (1*0 + 0)(0 + 1 + )+ + 1*0 + 0 = (1*0 + 0)(0 + 1)* + (1*0 + 0) =
= (1*0 + 0)((0 + 1)* + ), aplicando factor comn (1*0 + 0)
= (1*0 + 0)(0 + 1)* = 1*0(0 + 1)* = R
15
AFS = (Q, , , q0 , , )
Q es el conjunto nito de estados
es el alfabeto (conjunto nito de smbolos) del lenguaje (entrada)
es el alfabeto (conjunto de smbolos) de salida
q0 es el estado inicial
es la funcin de transicin
es la funcin de salida (estado o transicin)
Mquina de Moore
La funcin de transicin de salida de la Mquina de Moore3 , esta asociada al estado actual,
es decir : Q
En la Mquina de Moore, dada una entrada de longitud n 0 a1 a2 ...an , la salida de M es
de longitud n+1, tal que (q0 )(q1 )...(qn ) es la secuencia de estados de q0 , q1 , ..., qn tal que
(qi1 , ai ) = qi para 1 i n. Para el estado inicial se dene que la (q0 ) = .
Entonces, un AFD puede ser visto como un caso particular de la Mquina de Moore donde el
alfabeto de salida es {0, 1} y el estado q es de aceptacin si y solo si (q) = 1.
Ejemplo:
Realizar un autmata para determinar o calcular el residuo de la divisin entera de 3 (modulo
3) de un nmero decimal expresado en binario.
Si m se divide entre 3 y su resultado es x y su residuo es p, entonces es claro que x * 3 + p =
m. Si p = 0 entonces x * 3 es mltiplo de 3, y p llamado el mdulo de 3 y es un valor entero,
tal que p pertenece a los posible valores {0, 1, 2}. Moore resolvi este problema en los aos
50 y determin que para tres residuos posibles necesitaba 3 estados, tal como se muestra en la
gura 1.11 y el cuadro 1.2 contiene los valores de entrada y salida para los primeros ocho (8)
nmeros decimales.
El autmata con salida denido por AFS = (Q, , , q0 , , ), donde los conjuntos Q =
{q0 , q1 , q2 }, = {0, 1} y = {0, 1, 2}. La funcin de transicin de salida esta denida por la
formula (qi ) = i, es decir:
(q0 ) = 0
(q1 ) = 1
3
El nombre
1956.
16
CAPTULO 1.
EXPRESIONES REGULARES
0
1
2
3
4
5
6
7
0
1
10
11
100
101
110
111
0
1
2
0
1
2
0
1
(q2 ) = 2
Para el nmero decimal 11, expresado en binario como 1011 el autmata con salida de Moore
anterior (ver gura 1.11) se ejecuta como un AFD salvo que en cada paso de transicin se
ejecuta la funcin de salida tambin, comportndose de la siguiente forma:
b(q0 ,1011) = (b(q0 ,101),1) = ... = ((((b(q0 ,),1),0),1),1), dado que b(q0 ,) = q0
= ((((q0 , 1), 0), 1), 1), (q0 ) = 0
= (((q1 , 0), 1), 1), (q1 ) = 1
= ((q2 , 1), 1), (q2 ) = 2
= (q2 , 1), (q2 ) = 2
= q2 , (q2 ) = 2
La salida que es el resultado del autmata anterior corresponde a (q2 ) = 2 (q2 es el estado que
alcanza el autmata al terminar de procesar la cadena de entrada), es decir 2 es el residuo de
la divisin entera de 11 entre 3. Sin embargo, el autmata muestra toda la secuencia de salida:
01222 en este caso, el ltimo smbolo del alfabeto de salida es el que soluciona el problema.
17
Cuadro 1.3: Mquina de Mealy para traducir cadenas binarias
q0
q1
q0 /0
q0 /1
q1 /1
q1 /0
Mquina de Mealy
La funcin de transicin de salida de la Mquina de Mealy 4 , esta asociada con la transicin,
es decir : Q x .
En la Mquina de Mealy para una entrada de longitud n 0 a1 a2 ...an , la salida de M es
de longitud n, tal que (q0 , a1 ), (q1 , a2 ) ... (qn1 , an ) donde q0 , q1 , ..., qn es la secuencia de
estados tal que (qi1 , ai ) = qi para 1 i n. La entrada de la cadena vaca en cualquier
estado es (q, ) = .
Ejemplo:
Dado el alfabeto de entrada es {0, 1} y el de salida {0, 1}, se muestra un Autmata con salida
que aplique una traduccin que viene dada por las siguientes reglas:
Si el primer smbolo es 0 0 y 1 1
Para los siguientes smbolos:
Si el anterior es un 0 entonces: 0 0 y 1 1 (no vara)
Si el anterior es un 1: 0 1 y 1 0 (se aplica el contrario o complemento)
Esta reglas permiten que dado un nmero binario, por ejemplo 0110 su salida traducida por
dichas reglas sera 0101. El cuadro 1.3 muestra la tabla de transicin de la funcin de y y
el diagram de transicin se muestra en la gura 1.12. Para la cadena 0110 el autmata con
18
CAPTULO 1.
EXPRESIONES REGULARES
Ejemplo:
Dado el autmata de Mealy anterior, gura 1.12, se transforma en una mquina de Moore,
gura 1.4 utilizando la denicin anterior:
Q = {q0 , q1 }, = {0, 1} y = {0, 1}
Q x = {[q0 ,0], [q0 ,1], [q1 ,0], [q1 ,1]}
q0 en M2 es uno de los pares (q0 , A) con A en
Funcin de transicin est denida en la tabla de transicin del cuadro 1.4 y se muestra
el diagrama de transicin en la gura 1.13.
5
La salida se interpreta dependiendo del problema de aplicacin, en algunos casos es parte de la salida, en
otros es la salida completa, todo al mismo tiempo para diferentes aplicaciones, etc.
19
Cuadro 1.4: Mquina de Moore (traduccin) obtenida a partir de una Mquina de Mealy
q0
q1
q2
q3
[q0 ,0]
[q0 ,1]
[q1 ,0]
[q1 ,1]
0
[q0 ,0]
[q0 ,0]
[q0 ,1]
[q0 ,1]
1
[q1 ,1]
[q1 ,1]
[q1 ,0]
[q1 ,0]
Figura 1.13: Diagrama de transicin Mquina de Moore (traduccin) obtenida a partir de una
Mquina de Mealy
20
CAPTULO 1.
EXPRESIONES REGULARES
ER-formal
+ pe. (a+b)
. pe. (a.b) (ab)
* pe. a
ER-POSIX
| pe. (a|b)
7 pe. (ab) ab
* pe. a* 8
[]
r+
r?
r{n}
r{n,}
r{,m}
(r)
r
Descripcin
Cualquier carcter excepto n de lnea
Comienzo de la cadena negacin de conjuntos
Lista o clases de smbolos. Pe. [abc] Conjunto {a,b,c},
[abc] Conjunto - {a,b,c}, [0-9] Rangos del 0 al 9,
todos los dgitos
Comienzo de la cadena negacin de conjuntos
Final de la cadena
Escape (no considera la expresin siguiente)
1 o ms ocurrencias de r
0 o 1 ocurrencia de r
n ocurrencias de r
n o mas ocurrencias de r
0 o a lo sumo m ocurrencias de r
r evaluada con prioridad caracteres de salida con
variable $n
no interpretar los smbolos de r
21
Cuadro 1.7: ER POSIX extendido
ER-POSIX
d
w
s
r n
t
Equivalentes Descripcin
[:digit:]
los dgitos del 0 al 9, lo mismo que
[0-9]
[:alpha:]
Caracter alfabtico, lo mismo que
[A-Za-z]
[:almun:]
* Caracteres alfanumricos (dgitos
y letras) lo mismo que [A-Za-z0-9]
Salto de linea
Tabulacin
que la denicin formal, adems de considerarse que ?, + y {n} tienen la misma precedencia
que *.
Considerando el siguiente texto:
Mrida 20-09-2012. Para conocer objetivos, ejes temticos, tarifas y
procedimiento de inscripcin, visite nuestra pgina web: www.seguridadsf.com
<http://www.seguridadsf.com/> o comunquese con nosotros a travs de los
nmeros: +58 274 251.26.99 / +58 274 511.21.12 / 0414 723.39.32 / 0416 775.92.53
/ 0416 117.99.81 o el correo: info@seguridadsf.com
ER salida $3/$2/$1
Salida del ejemplo: 2012/09/20
Reconoce una secuencia de caracteres con formato email y retorna el nombre de usuario:
ER entrada
^.* ([a-z0-9._\%-]+)@[a-z0-9.-]+\.[a-z]{2,4}.*$
ER salida $1
Salida del ejemplo: info
La lista completa de los operadores y abreviaturas disponibles en la notacin UNIX para las
expresiones regulares se encuentra en el manual de los comandos del sistema operativo (se
presentan diferencias entre las versiones de cada sistema). La aplicacin ms til es el grep
(Global Regular Expression and Print) o egrep de UNIX (ver man grep).
22
CAPTULO 1.
EXPRESIONES REGULARES
Apesar de que existe un estandar, POSIX fue denido antes del surgimiento del lenguaje de
programacin Perl (famoso por sus expresiones regulares) y desde entonces se han ido incorporando muchas caractersticas. Los lenguajes de programacin y aplicaciones estn adoptando
las expresiones regulares de Perl en vez de las expresiones regulares POSIX, incluyendo PHP,
Java, Ruby y el Servidor Web de Apache. Por tanto se recomienda revisar que expresiones emplea el lenguaje de programacin o la aplicacin a utilizar pues probablemente tenga variantes
a las mostradas en este documento.
Ejercicios propuestos
1. Construir los autmatas para reconocer los lenguajes denotados por las siguientes expresiones regulares:
a)
b)
c)
d)
e)
f)
(0+1)*011
(1+10)*
0*1*0*
(0+)(0+10)*
(111+100)*0
(010+00)*(10)*
3. En cada caso, encuentre la cadena de longitud mnima (sin considerar la cadena vaca )
que NO est en el lenguaje denotado por las siguientes expresiones regulares:
a)
23
c)
((0*1*))* + (0*1)*
d ) (00 + )*(01+00+10)*
e ) (a + b + ab + + bba)*
f ) (1*)(0*+11*)(0*+1*)
4. Cuntas y cules cadenas de tamao estrictamente menor que 3 tiene el lenguaje denotado
por la siguiente expresin regular ((0*1*)*0)*. D el autmata nito que reconoce dicho
lenguaje.
5. Construir autmatas con salida para solucionar los siguientes problemas:
a)
Mquina expendedora de boletos (por un monto de 1,75 Bs) que muestre como
salida el mondo introducido y el resto. Asuma que la mquina reconoce solo las
monedas de 1, 0.5 y 0.25
b ) Dado un nmero en binario (a partir de los dgitos menos signicativos) calcule
la funcin incremento o sucesor en binario. Puede traducirse este autmata a un
circuito lgico
c ) Dado un nmero en binario (a partir de los dgitos menos signicativos) multiplique
por 2 en binario (considere en que consiste multiplicar un nmero por su base)
d ) Dado una cadena en el alfabeto binario 0,1 muestre su traduccin o codicacin
sobre el alfabeto a,b, tal que una a es equivalente a 2 unos seguidos y una b es
equivalente a dos ceros seguidos (Ejemplo sencillo de la codicacin de caracteres,
por ejemplo el ASCII)
Bibliografa
[1] Hopcroft, Rajeev Motwani, Jerey D. Ullman. Introduccin a la Teora de Autmatas y
Lenguajes Formales. PrenticeHall, 2002.
[2] Jan Goyvaerts, Steven Levithan. Regular Expressions Cookbook, Detailed Solutions in
Eight Programming Languages. O'Reilly Media, May 2009
[3] Jerey E.F. Friedl. Mastering Regular Expressions, 3rd Edition, Understand Your Data
and Be More Productive. O'Reilly Media. August 2006.
http://cdn.oreilly.com/oreilly/booksamplers/9780596528126_sampler.pdf
25