capitulo 3: expresiones regulares

Anuncio
CAPITULO 3: EXPRESIONES REGULARES
3.1. DEFINICION:
Una expresión regular constituye una forma de representar un lenguaje en forma sintética.
No cualquier lenguaje se puede representar mediante una expresión regular, los que son
representables mediante una expresión regular se denominan lenguajes regulares.
Dada una expresión regular r el lenguaje que representa es L(r)
Una expresión regular se construye a partir de expresiones regulares más simples, usando
un conjunto de reglas definitorias.
3.2. REGLAS DE DEFINICION DE LAS EXPRESIONES REGULARES:
Las reglas de definición especifican como se forma L( r ) combinando de varias maneras
los lenguajes representados por las subexpresiones de r.
Las siguientes reglas definen las expresiones regulares del alfabeto V.
1) es una expresión regular, el lenguaje que representa es {  }, es decir, el conjunto
que contiene la cadena vacía.
2) Si a es un símbolo de V, entonces a es una expresión regular la cual representa el
lenguaje { a }, el conjunto que contiene la cadena a.
3) Suponiendo que r y s son expresiones regulares que representan los lenguajes L ( r )
y L ( s ) entonces:
( r ) | ( s ) es una expresión regular que representa L ( r )  L ( s )
( r ) . ( s ) es una expresión regular que representa L ( r ) . L ( s )
( r ) * es una expresión regular que representa ( L ( r ) ) *
( r ) es una expresión regular que representa L ( r )
Ej:
V = {n, o, s, i}
y
L = {no; si}
es un lenguaje regular representado por la expresión regular (n).(o))|((s).(i))
Demostración:
e.r.
n
(n)
(o)
(n).(o)
(s).(i)
((n).(o)) | ((s).(i))
lenguaje
{n}
{n}
{o}
{n}.{o} = {no}
{s}.{i} = {si}
{no} U {si} = {no; si} = R
(n) | (o) {n}U{o} = {n; o}
(s) | (i) {s}U{i} = {s; i}
((n)|(o)) . ((s)|(i)) {n;o}.{s;i} = {ns; ni; os; oi}
Un lenguaje designado por una expresión regular es un conjunto regular.
25
La especificación de una expresión regular es un ejemplo de definición recursiva. Las
reglas 1 y 2 son la base. La regla 3 proporciona el paso inductivo.
(a)|((b)*(c)) = a|b*c
Se pueden evitar los paréntesis innecesarios en las expresiones regulares si se adoptan
las convenciones:



el operador * tiene la mayor precedencia y es asociativo por izquierda.
la concatenación tiene la siguiente mayor precedencia y es asociativa por
izquierda.
| tiene la menor precedencia y es asociativo por izquierda.
 ((n).(o)) | ((s).(i)) = n . o | s . i
((n)|(o)) . ((s)|(i)) = (n | o) . (s | i)  n | o . s | i
n | o . s | i → {n} | {o} . {s} | {i}
{n}U {o . s} U {i} = { n ; os ; i }
Ej: Sea S = { a, b }
e.r. lenguaje
1- a | b
a {a}
b {b}
a | b { a }U{ b }={a; b}
La expresión regular a | b designa el conjunto { a, b }
(a | b).( a | b) {a; b}.{a; b}={aa; ab; ba; bb}
2- (a | b).( a | b)
La expresión regular ( a | b ) ( a | b ) designa el conjunto { aa, ab, ba, bb } (conjunto
de todas las cadenas de a y b de longitud 2)
3- (a|b)*
(a|b)* {a|b}*={a|b}0U{a|b}1U{a|b}2U……
(*) recordando que:
(*) = {ε}U {a; b} U {aa; ab; ba; bb}U
0
L = {ε}
U{aaa;aab;aba;abb;baa;bab;bba;bbb}U
L1 = L
U …… =
L2 = L . L
{ε; a; b; aa; ab; ba; bb; aaa; ………}
3
2
L = L . L =L.L. L
La expresión regular ( a | b ) * designa { 0 o más casos de una a o b } (a*b*)*
4- a | b* . c
b* { b*}= {b}0U{b}1U{b}2U{b}3U……
= {ε}U{b}U{b}.{b}U{b}2.{b}U……
= {ε}U{b}U{bb}U{bb}.{b}U
= {ε; b; bb; bbb; bbbb; …..}
La expresión regular b* designa { 0 o más casos de una b } (conjunto de todas
las cadenas de 0 o mas b)
b* . c {ε; b; bb; bbb; bbbb; …..} . { c } =
= {c; bc; bbc; bbbc; bbbbc; …..}
La expresión regular b *.c designa {c y todas las que tienen 0 o más b seguidas de una c}
a | b* . c { a }U {c; bc; bbc; bbbc; bbbbc; …..} =
= {a; c; bc; bbc; bbbc; bbbbc; …..}
La e. r. a | b* . c designa {a y todas las que tienen 0 o más b seguidas de una c}
26
Si 2 expresiones regulares r y s representan el mismo lenguaje, se dice que son
equivalentes ( r = s ).
Ej:
(a|b)=(b|a)
( a | b )* = ( a* . b* )* (por propiedad de la operación cierre -kleene)
3.3. PROPIEDADES DE LAS EXPRESIONES REGULARES
r|s=s|r
r|(s|t)=(r|s)|t
(r.s).t=r.(s.t)
r.(s|t )=r.s|rt
(s | t ) . r = s . r | t . r
.r=r
r.=r
r*=(r|)*
r**=r*
| es conmutativo
| es asociativo
. es asociativa
. es distributiva sobre |
 es el elemento identidad en la
concatenación (elemento neutro)
 es el elemento identidad
* es idempotente
3.4. DEFINICIONES REGULARES
Una definición regular permite presentar una expresión regular de un modo más
comprensible o manejable. Es posible definir expresiones regulares usando nombres
como si fueran símbolos. Se basa en ponerle nombre a distintas subexpresiones de la
expresión.
Dado un alfabeto V, una definición regular es una secuencia de definiciones de la forma:
<d1>  r1
<d2>  r2
.
.
.
.
<dn>  rn
(→ significa designa o denomina)
donde cada <di> es un nombre distinto (se subrayan) y cada ri es una expresión regular
sobre los símbolos de V U { d1, d2, .... ,di-1 } (los símbolos básicos y los nombres
previamente definidos)
r1 está definida sobre el conjunto V
r2 está definida sobre el conjunto V U {d1}
r3 está definida sobre el conjunto V U {d1; d2}
……..
rn está definida sobre el conjunto V U {d1; d2; ……; dn-1}
Ejs:
1. V = { A, B, ......., Z, a, b, ......., z }  { 0, 1, ......., 9 }
letra  A | B | ..... | Z | a | b | ..... | z
digito  0 | 1 | ..... | 9
id  letra . ( letra | digito ) *
{ A, B, ......., Z, a, b, ......., z } . { A, B, ......., Z, a, b, ......., z ,0, 1, ......., 9 }*
Lenguaje de los identificadores de Pascal – L . (L U D)*
27
2. V= { Claudio, Analía, Diego, juega, no juega, tenis, fútbol, voley }
nombre  Claudio | Analía | Diego
actividad  juega | no juega
deporte  tenis | fútbol | voley
oración  nombre . actividad . deporte *
3. V = {0, 1, ….., 9, E, +, -, •}
digito  0 | 1 | ..... | 9
dígitos → digito . digito* → { 0, 1, ......., 9 } . { 0, 1, ......., 9 }*
frac-opt → • . dígitos | ε → ({•} . {0, 1, …, 35, ….}) U {ε}
{•0, •1, …, •35, …., ε}
exp-opt → (E . (+ | - | ε) . dígitos) | ε
{E} . {+, -, ε} . {0, 1, …, 35,…..} U ε
num → dígitos . frac-opt . exp-opt
lenguaje de los números sin signo
3.5. ABREVIATURAS EN LA NOTACIÓN
Algunas construcciones aparecen con mucha frecuencia en una expresión regular. En
estos casos se pueden usar algunas abreviaturas.
1)
“ Uno o más casos”. El operador + significa “uno o más casos de”. La
expresión regular a+ representa al conjunto de todas las cadenas de 1 o más a.
Entonces: r r* = r +
r ------------ L(r)
( r )+ -------- ( L(r) )+ → cerradura positiva del leng. de r
r* = r+ | ε
( L(r) )* = ( L(r) )+ U {ε}
2)
“Cero o un caso”. El operador ? significa “cero o un caso de” (op. unario)
Entonces: r | ε = r ?
(r)? ------ L(r) U {ε}
3)
“Clases de caracteres”. Se puede abreviar una expresión regular a | b | c,
mediante la notación [ a b c ] o [ a – c ]
digito  0 | 1 | .....| 9
digito  [ 0 – 9 ]
digitos  digito . digito *
digitos  digito +
fraccion_optativa   digitos | 
fraccion_optativa  ( digitos ) ?
exp_opt  ( E ( + | - |  ) digitos ) | 
exp_opt  ( E ( + | - ) ? digitos ) ?
num  digitos . fraccion_optativa . exp_opt num  digitos . fraccion_optativa . exp_opt
28
Descargar