Está en la página 1de 9

CAPÍTULO II

EXPRESIONES REGULARES
2.1 DEFINICIÓN FORMAL DE UNA EXPRESIÓN REGULAR
2.2 OPERACIONES
2.3 APLICACIONES EN PROBLEMAS REALES
_________________________________________________________________________
CAPITULO II. EXPRESIONES REGULARES
2.1 DEFINICIÓN FORMAL DE UNA EXPRESIÓN REGULAR
Las Expresiones Regulares representan patrones para generar, seleccionar o producir
coincidencias en cadenas de caracteres de un Lenguaje Regular.
Un 𝒍𝒆𝒏𝒈𝒖𝒂𝒋𝒆 𝒓𝒆𝒈𝒖𝒍𝒂𝒓 𝐿 sobre un alfabeto ∑, se encuentra definido de la siguiente
manera:
1. Un lenguaje vacío ∅ es un lenguaje regular.
2. Una cadena vacía {𝜀} es un lenguaje regular.
3. Para toda 𝑎 ∈ ∑, {𝑎} es un lenguaje regular
4. Si Existen dos lenguajes regulares, entonces las operaciones de Unión,
concatenación y cerradura kleene de dichos lenguajes son lenguajes regulares. [3]
En la definición anterior se observa que no todas las operaciones de lenguaje que se
aprendieron en el capítulo anterior forman parte de un lenguaje regular, sin embargo, son
indispensables para la comprensión de este capítulo. Para comprender mejor la definición
anterior véase el Ejemplo 2.1.

Ejemplo 2.1:
Supóngase que se tienen dos lenguajes 𝐿1 = {0} 𝑦 𝐿2 = {1} sobre el alfabeto ∑ = {0,1}.
Entonces:

1. {𝜀} 𝑦 ∅ son lenguajes regulares


2. 𝐿1 𝑦 𝐿2 son lenguajes regulares
3. 𝐿1 ∪ 𝐿2 = {0,1} es regular
4. 𝐿1 ∙ 𝐿2 = {0} ∙ {1} = {01} es regular
5. 𝐿1 ∗ = {0𝑛 |𝑛 ≥ 0} = {𝜀, 0,00,000,0000, … } es regular
6. (𝐿1 ∪ 𝐿2 ) ∙ 𝐿2 ∗ = {0,1} ∙ {1}∗ = {0,1} ∙ {𝜀, 1,11,111,1111, … } =
{0,01,011,0111,01111, … , 1,11,111,1111,11111, … es regular

De acuerdo a lo anterior, las expresiones regulares simplifican la especificación de un


lenguaje regular abreviándola de tal manera que se eliminen las llaves que encierran al
lenguaje como se observa en la tabla 2.1.

Lenguaje Expresión Regular


{𝜀} 𝜀
{0} 0
{0} ∙ {0} ∙ {1} = {001} 001
{0} ∪ {1} = {0,1} 0∪1
{0} ∪ {10} = {0,10} 0 ∪ 10
({1} ∪ {𝜀}) ∙ {001} = {1, 𝜀} ∙ {001} (1 ∪ 𝜀) 001
{110}∗ {0,1} (110)∗ (0 ∪ 1)
Tabla 2.1 Ejemplos de Expresiones regulares
En conclusión se puede definir a la 𝑬𝒙𝒑𝒓𝒆𝒔𝒊ó𝒏 𝑹𝒆𝒈𝒖𝒍𝒂𝒓 𝑟, de la siguiente manera:
BASE
1. Las constantes 𝑐𝑎𝑑𝑒𝑛𝑎 𝑣𝑎𝑐í𝑎 (𝜀)𝑦 𝑙𝑒𝑛𝑔𝑢𝑎𝑗𝑒 𝑣𝑎𝑐í𝑜 (∅) son expresiones regulares.
2. Si 𝑎 es cualquier símbolo sobre un alfabeto ∑, entonces 𝑎 es una expresión regular.
3. Una variable, normalmente escrita en mayúsculas como 𝐿, representa cualquier
lenguaje.
INDUCTIVO
1. Si 𝑟 𝑦 𝑠 son Expresiones regulares, entonces 𝑟 + 𝑠 también lo es y es representada
con la Unión de 𝐿(𝑟) ∪ 𝐿(𝑠) .
2. Si 𝐿1 y 𝐿2 son Expresiones regulares, entonces 𝑟𝑠 también lo es y es representada
con la concatenación de 𝐿(𝑟)𝐿(𝑠) o 𝐿(𝑟) ∙ 𝐿(𝑠).
3. Si r es una expresión regular, entonces 𝑟 ∗ también lo es y es representada con la
cerradura de kleene 𝐿(𝑟)∗ .
4. Si 𝑟 es una expresión regular, entonces (𝑟) también lo es.

Ejemplo 2.2:
Para ejemplificar la definición anterior, el conjunto {𝑏𝑎𝑤𝑎𝑏|𝑤 ∈ {𝑎, 𝑏}∗ } es un conjunto
regular sobre {𝑎, 𝑏}

Demostración:
Conjunto Expresión Justificación
1. {𝑎} 𝑎 Base
2. {𝑏} 𝑏 Base
3. {𝑎}{𝑏} = {𝑎𝑏} 𝑎𝑏 Inductivo. Concatenación
4. {𝑎} ∪ {𝑏} = {𝑎, 𝑏} 𝑎∪𝑏 Inductivo. Unión
5. {𝑏}{𝑎} = {𝑏𝑎} 𝑏𝑎 Inductivo. Concatenación
6. {𝑎, 𝑏}∗ (𝑎 ∪ 𝑏)∗ Inductivo. Unión y Cerradura Kleene
7. {𝑏𝑎}{𝑎, 𝑏}∗ 𝑏𝑎(𝑎 ∪ 𝑏)∗ Inductivo. Concatenación, Unión y
Cerradura Kleene
Tabla 2.2
1.2 OPERACIONES
Las operaciones que pueden ser expresadas en una expresión regular son: Concatenación,
Unión, y Cerradura Kleeene.
Precedencia de Operadores en las expresiones regulares
Al igual que con los operadores aritméticos, dentro de las expresiones regulares existe un
nivel de precedencia para su resolución.
1. Se emplean los paréntesis para agrupar a los operadores que se encuentran dentro
de los mismos, y estos deben de realizarse con mayor prioridad.
2. El operador cerradura kleene (*) se aplica solo a la secuencia más corta situada a
su izquierda.
3. Concatenación
4. Unión, que en algunos casos esta operación es posible encontrarla simbolizada de
diferentes maneras (+,∪, |).

Ejercicios Resueltos

Ejemplo 2.3:

Determinar cuáles son las cadenas que pertenecen al lenguaje descrito por la Expresión Regular:
𝒃(𝒂 ∪ 𝒃)𝒄∗ , sobre el alfabeto ∑ = {𝒂, 𝒃, 𝒄}

SOLUCIÓN:

Realizando las operaciones en el orden de precedencia, tenemos que:

a) Es necesario realizar primeramente la operación (𝑎 ∪ 𝑏) de la siguiente manera:


(𝑎 ∪ 𝑏) = {𝑎, 𝑏}
b) Posteriormente se continúa con la operación 𝑐 ∗
𝑐 ∗ = {𝜀, 𝑐, 𝑐𝑐, 𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐𝑐, … }
c) Quedando 𝑏(𝑎 ∪ 𝑏)𝑐 ∗ de la siguiente manera:
{𝑏} ∙ {𝑎, 𝑏} ∙ {𝜀, 𝑐, 𝑐𝑐, 𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐𝑐, … }
d) A continuación se soluciona la operación de izquierda a derecha, comenzando con {𝑏} ∙
{𝑎, 𝑏} = {𝑏𝑎, 𝑏𝑏}
e) Al obtener el resultado anterior, este se concatena con el resultado obtenido de la
expresión regular 𝑐 ∗ de la siguiente manera:
{𝑏𝑎, 𝑏𝑏} ∙ {𝜀, 𝑐, 𝑐𝑐, 𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐𝑐, … }
= {𝑏𝑎, 𝑏𝑎𝑐, 𝑏𝑎𝑐𝑐, 𝑏𝑎𝑐𝑐𝑐, 𝑏𝑎𝑐𝑐𝑐𝑐, 𝑏𝑎𝑐𝑐𝑐𝑐𝑐, . . , 𝑏𝑏, 𝑏𝑏𝑐, 𝑏𝑏𝑐𝑐, 𝑏𝑏𝑐𝑐𝑐, 𝑏𝑏𝑐𝑐𝑐𝑐, 𝑏𝑏𝑐𝑐𝑐𝑐𝑐, … }
Ejemplo 2.4:

Determinar cuáles son las cadenas que pertenecen al lenguaje descrito por la Expresión Regular:
𝒃𝒄∗ ∪ 𝒂, sobre el alfabeto ∑ = {𝒂, 𝒃, 𝒄}

SOLUCIÓN:

Realizando las operaciones en el orden de precedencia, tenemos que:

a) Se realiza la operación 𝑐 ∗
𝑐 ∗ = {𝜀, 𝑐, 𝑐𝑐, 𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐𝑐, … }
b) Posteriormente 𝒃𝒄∗
{𝑏} ∙ {𝜀, 𝑐, 𝑐𝑐, 𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐𝑐, … } = {𝑏, 𝑏𝑐, 𝑏𝑐𝑐, 𝑏𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐𝑐, … }
c) Al final se obtiene la unión 𝒃𝒄∗ ∪ 𝒂
{𝑏, 𝑏𝑐, 𝑏𝑐𝑐, 𝑏𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐𝑐, … } ∪ {𝑎} = {𝑎, 𝑏, 𝑏𝑐, 𝑏𝑐𝑐, 𝑏𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐, … }
Ejemplo 2.5:

Determinar cuáles son las cadenas que pertenecen al lenguaje descrito por la Expresión Regular:
𝒄∗ (𝒂 ∪ 𝒃𝒄∗ ), sobre el alfabeto ∑ = {𝒂, 𝒃, 𝒄}

SOLUCIÓN:

Realizando las operaciones en el orden de precedencia, tenemos que:

d) Se realiza la operación 𝑎 ∪ 𝒃𝒄∗


{𝑎} ∪ {𝑏, 𝑏𝑐, 𝑏𝑐𝑐, 𝑏𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐, … } = {𝑎, 𝑏, 𝑏𝑐, 𝑏𝑐𝑐, 𝑏𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐, … }
e) Posteriormente 𝑐 ∗
𝑐 ∗ = {𝜀, 𝑐, 𝑐𝑐, 𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐, … }
f) Y al final se desarrolla la concatenación 𝒄∗ (𝒂 ∪ 𝒃𝒄∗ )
{𝜀, 𝑐, 𝑐𝑐, 𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐, 𝑐𝑐𝑐𝑐𝑐, … } ∙ {𝑎, 𝑏, 𝑏𝑐, 𝑏𝑐𝑐, 𝑏𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐, … }
= 𝑎, 𝑏, 𝑏𝑐, 𝑏𝑐𝑐, 𝑏𝑐𝑐𝑐, 𝑏𝑐𝑐𝑐𝑐, , … , 𝑐𝑎, 𝑐𝑏, 𝑐𝑏𝑐, 𝑐𝑏𝑐𝑐, 𝑐𝑏𝑐𝑐𝑐, 𝑐𝑏𝑐𝑐𝑐𝑐, … , 𝑐𝑐𝑎, 𝑐𝑐𝑏, 𝑐𝑐𝑏𝑐, 𝑐𝑐𝑏𝑐𝑐, 𝑐𝑐𝑏𝑐𝑐𝑐, … }

Teoremas sobre expresiones regulares


Sean r, s y t expresiones regulares sobre un mismo alfabeto ∑, entonces [8]:
Leyes de Conmutación
1. 𝑟 ∪ 𝑠= 𝑠 ∪ 𝑟
2. 𝑟 ∪ ∅= ∅ ∪ 𝑟
3. 𝑟𝜀 = 𝜀𝑟
Leyes de Asociación
4. (𝑟 ∪ 𝑠) ∪ 𝑡 = 𝑟 ∪ (𝑠 ∪ 𝑡)
5. (𝑟𝑠)𝑡 = 𝑟(𝑠𝑡)
Ley de Identidad

6. 𝑟 ∪ 𝑟 = 𝑟
7. 𝜀𝑟 = 𝑟
8. 𝑟𝜀 = 𝑟
Ley Distributiva

9. 𝑟(𝑠 ∪ 𝑡) = (𝑟𝑠 ∪ 𝑟𝑡)


10. (𝑟 ∪ 𝑠)𝑡 = (𝑟𝑡 ∪ 𝑠𝑡)
Ley de los elementos dominantes
11. 𝑟 ∙ ∅ = ∅ ∙ 𝑟 = ∅
Ley de Cerradura Kleene
12. 𝑟 ∗ = 𝑟 ∗∗ = 𝑟 ∗ 𝑟 ∗ = (𝜀 ∪ 𝑟)∗ = 𝑟 ∗ (𝑟 ∪ 𝜀) = (𝑟 ∪ 𝜀)𝑟 ∗ = 𝜀 ∪ 𝑟𝑟 ∗ = 𝜀 ∪ 𝑟 +
13. (𝑟 ∪ 𝑠)∗ = (𝑟 ∗ ∪ 𝑠 ∗ )∗ = (𝑟 ∗ 𝑠 ∗ )∗ = (𝑟 ∗ 𝑠)∗ 𝑟 ∗ = 𝑟 ∗ (𝑠𝑟 ∗ )∗
14. 𝑟(𝑠𝑟)∗ = (𝑟𝑠)∗ 𝑟
15. (𝑟 ∗ 𝑠)∗ = 𝜀 ∪ (𝑟 ∪ 𝑠)∗ 𝑠
16. (𝑟𝑠 ∗ )∗ = 𝜀 ∪ 𝑟(𝑟 ∪ 𝑠)∗
17. 𝑠(𝑟 ∪ 𝜀)∗ (𝑟 ∪ 𝜀) ∪ 𝑠 = 𝑠𝑟 ∗
18. 𝑟𝑟 ∗ = 𝑟 ∗ 𝑟=𝑟 +
Para simplificar algunas expresiones regulares es necesario apoyarse de los teoremas
antes mencionados.

Ejemplo 2.6:

Simplificar la expresión regular (𝜺 ∪ 𝒂𝒂)∗

De acuerdo al Teorema 12. (𝜀 ∪ 𝑟)∗ = 𝑟 ∗, la expresión regular (𝜀 ∪ 𝑎𝑎)∗ = (𝑎𝑎)∗ y las cadenas
válidas que representa son:

{𝜀, 𝑎𝑎, 𝑎𝑎𝑎𝑎, 𝑎𝑎𝑎𝑎𝑎𝑎, 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎, … . }

Es posible probar igualdades haciendo uso de las igualdades ya conocidas. Por ejemplo,

Ejemplo 2.7:

1. Probar que 𝒓 = 𝒔𝒓 ∪ 𝒕.
Si 𝑟 = 𝑠 ∗ 𝑡, 𝑒𝑛𝑡𝑜𝑛𝑐𝑒𝑠:
𝑟 = 𝑠∗𝑡
= (𝜀 ∪ 𝑠 + )𝑡 Debido a que 𝑠 ∗ = 𝜀 ∪ 𝑠 + Teorema 12
= (𝜀 ∪ 𝑠𝑠 ∗ )𝑡 Teorema 18

= (𝜀𝑡 ∪ 𝑠𝑠 𝑡) Ley Distributiva Teorema 10
= (𝑡 ∪ 𝑠𝑟) Esto recordando que 𝑟 = 𝑠 ∗ 𝑡
= 𝑠𝑟 ∪ 𝑡 Ley conmutativa Teorema 1

Lo cual prueba que 𝑟 = 𝑠 𝑡, implica que 𝑟 = 𝑠𝑟 ∪ 𝑡.
2.3 APLICACIONES EN PROBLEMAS REALES
Las expresiones regulares se usan frecuentemente en los problemas que impliquen el
análisis de cadenas de caracteres. Tales problemas implican la búsqueda e identificación de
la existencia de una cadena en un fichero o el reconocimiento de cadenas de entrada que
satisfagan ciertos criterios [8].
Pueden servir como lenguaje de entrada de muchos sistemas que procesan cadenas, para
describir de una mejor manera las aplicaciones que ofrecen las expresiones regulares
aplicados en sistemas informáticos se listan las siguientes:

 El comando grep de UNIX que expresa un patrón de texto que el usuario desea
encontrar en un archivo.
 Analizador léxico que divide el archivo de entrada en unidades lógicas o sintácticas
formados por uno o más caracteres que tienen un significado. Por ejemplo palabras
clave como while, identificadores (cualquier letra seguida de 0 o más letras y/o
dígitos) y signos como +, <. Un generador de analizadores léxicos acepta
descripciones de las formas de las unidades lógicas, que son principalmente
expresiones regulares.
 La contraseña de algún sistema que debe de tener un patrón específico para su
validez.
 Programas informáticos de corrección gramatical basada en expresiones regulares
donde se analizan las palabras y su estructura para detectar, describir y redactar
cada uno de los errores encontrados de acuerdo a una gramática especificada.

Ejemplo 2.8:

Construir una expresión regular que permita verificar si un identificador es válido, si


sabemos que éste puede iniciar con una letra (mayúscula o minúscula), un signo de pesos
($) o guion bajo (_), seguido de cualquier cantidad de símbolos alfanuméricos, signo de
pesos o guion bajo. Para ello, se definen los siguientes símbolos:
𝒍𝒆𝒕𝒓𝒂 = {𝒂, 𝒃, 𝒄, … 𝒛, 𝑨, 𝑩, 𝑪, … 𝒁}
𝒅í𝒈𝒊𝒕𝒐 = {𝟎, 𝟏, 𝟐, 𝟑, 𝟒, 𝟓, 𝟔, 𝟕, 𝟖, 𝟗}
𝒑𝒆𝒔𝒐𝒔 = {$}
𝒈𝒖𝒊ó𝒏 = {_}
Ya definido cada uno de los símbolos a utilizar, la expresión regular a validar si
identificador es válido o no es:
(𝒍𝒆𝒕𝒓𝒂 ∪ 𝒑𝒆𝒔𝒐𝒔 ∪ 𝒈𝒖𝒊ó𝒏)(𝒍𝒆𝒕𝒓𝒂 ∪ 𝒑𝒆𝒔𝒐𝒔 ∪ 𝒈𝒖𝒊ó𝒏 ∪ 𝒅í𝒈𝒊𝒕𝒐)∗

También podría gustarte