Vous êtes sur la page 1sur 63

AUTOMATAS Y EXPRESIONES

REGULARES
Descripción de los lenguajes formales
Jerarquía de los lenguajes formales
Autómata de estado finito determinista
Expresiones Regulares
AUTOMATAS Y EXPRESIONES
REGULARES
Descripción de los lenguajes formales
Jerarquía de los lenguajes formales
Autómata de estado finito determinista
Expresiones Regulares

Hecho por:
Huaman Tacuri, Percy (093172)
Huillca Chino, Helder (091360)
Huillcahuaman Mondaca, Arleen Marjory
(124760)
Jordán Díaz, Linford Vitali Aron (121454)
Copyright © [2018] por [Grupo 2]
Todos los derechos reservados. Este libro no puede ser reproducido, escaneado,
o distribuido en cualquier forma impresa o electrónica sin permiso.
1ª Edición: [Agosto 2018]
Impreso en el Perú
ISBN: [ISBN number with hyphens]
Tabla de contenido
DESCRIPCION DE LOS LENGUAJES FORMALES .................... 9
INTRODUCCION ......................................................................... 9
DEFINICION DE LENGUAJE ..................................................... 9
PROPIEDADES DE LOS LENGUAJES FORMALES ............. 10
DEFINICION ............................................................................... 12
EJEMPLOS DE LENGUAJES FORMALES ............................. 13
CLASIFICACION DE GRAMATICAS FORMALES ............... 13
FORMALISMO DE LA ESPECIFICACION DE LA LENGUA 14
OPERACIONES EN IDIOMAS.................................................. 15
VERDADES CONCERNIENTES A LOS LENGUAJES
FORMALES ................................................................................ 16
teorema 1 ...................................................................................... 16
Lema 1 ......................................................................................... 16
Demostración del teorema 1 ........................................................ 17
teorema 2 ...................................................................................... 17
teorema 3 ...................................................................................... 18
lenguajes libre del contexto ......................................................... 18
JERARQUIA DE LOS LENGUAJES FORMALES ...................... 20
DEFINICION ............................................................................... 20
LENGUAJES REGULARES ...................................................... 20
Expresiones Regulares ................................................................. 21
Gramáticas Regulares .................................................................. 21
Gramáticas Formales ................................................................... 22
LENGUAJES LIBRES DE CONTEXTO ................................... 22
Gramáticas Libres de Contexto .................................................... 23
LENGUAJES SENSIBLES DEL CONTEXTO .......................... 23
LENGUAJES RECURSIVOS Y RECURSIVAMENTE
ENUMERABLES ........................................................................ 25
AUTOMATA DE ESTADO FINITO DETERMINISTA ............... 26
DEFINICION ............................................................................... 26
Representación de Autómatas ...................................................... 26
Lenguaje recinocido por un AFD ................................................ 29
Estados alcanzables de un AFD ................................................... 29
Distinguibilidad entre palabras .................................................... 29
Operaciones entre lenguajes regulares ......................................... 30
Ejemplos resueltos por el profesor ............................................... 33
Ejemplos resueltos por los estudiantes ........................................ 34
1
Ejemplos sobre autómatas............................................................ 35
EXPRESIONES REGULARES ...................................................... 41
DEFINICION ............................................................................... 41
EXPRESIONES ALTERNATIVAS ........................................... 42
CONTENEDORES ...................................................................... 42
Cuantificadores ............................................................................ 44
Puntos de Anclaje ........................................................................ 45
Sustituciones ................................................................................ 46
Escapes ......................................................................................... 47
Componentes de las expresiones regulares .................................. 47
Ejemplos ...................................................................................... 50
1. Resueltos por el profesor ..................................................... 50
2. Resueltos por el estudiante................................................... 51
3. Ejemplos Nuevos ................................................................. 52
BIBLIOGRAFÍA ............................................................................. 57

2
Índice de figuras
Figura 1:Sistema de ecuación de lenguajes unarios formales. .............................. 19
Figura 2: Transiciones de un Autómata ................................................................. 27
Figura 3:Ejemplo 1 – Automata ............................................................................. 28
Figura 4:AF que reconoce un ER – Caso Base ........................................................ 31
Figura 5:Ejemplo A1 – Primera Aproximacion ....................................................... 31
Figura 6:Ejemplo 2 – Segunda Aproximacion ........................................................ 32
Figura 7:Automata Resultante de A1 y A2 ............................................................. 32
Figura 8: Autómata para transacciones bancarias ................................................ 33
Figura 9: Autómata que conforma el código del cliente bancario ......................... 33
Figura 10: Autómata como cursor ......................................................................... 34
Figura 11: Ejemplo resuelto por el profesor ........................................................... 35
Figura 12:Transicion del automata ........................................................................ 35
Figura 13:Automata que acepta lenguaje L1......................................................... 35
Figura 14: Automata que acepta lenguaje L2 ........................................................ 36
Figura 15: Automata que acepta lenguaje L3 ........................................................ 36
Figura 16: Automata que acepta lenguaje L4 ........................................................ 37
Figura 17:Automata resultante de la tabla ........................................................... 38
Figura 18: Ejemplo de AFD ..................................................................................... 38
Figura 19: AFD equivalente al AFN ........................................................................ 39
Figura 20: AFN ejemplo.......................................................................................... 39
Figura 21: AFD quivalente a AFN ........................................................................... 40
Figura 22:Búsqueda con dos variables................................................................... 42
Figura 23:Busqueda por mayúsculas y minúsculas ................................................ 43
Figura 24: Búsqueda con rangos ............................................................................ 43
Figura 25: Tipos de Caracteres ............................................................................... 43
Figura 26: Búsqueda digito o letra después ........................................................... 44
Figura 27: Búsqueda del siguiente carácter después de la palabra ....................... 44
Figura 28: Búsqueda por negación ........................................................................ 44
Figura 29: Búsqueda por aparición ........................................................................ 45
Figura 30: Búsqueda por inicio de palabra ............................................................ 45
Figura 31: Búsqueda por fin de palabra ................................................................. 46
Figura 32: Sustitución de patrones ........................................................................ 46
Figura 33: Repeticiones por línea ........................................................................... 46
Figura 34: Eliminar primera columna .................................................................... 47
Figura 35: Guardado de un patrón encontrado ..................................................... 47
Figura 36: Metacaracteres – delimitadores ........................................................... 48
Figura 37: Metacaracteres – clases preferidas ...................................................... 49
Figura 38: Metacaracteres – iteradores ................................................................ 49

3
4
Índice de tablas
Tabla 1: Tabla de Transicion .................................................................................. 27
Tabla 2: Ejemplo 1 – Tabla de transiciones ............................................................ 28
Tabla 3:Tabla de transición AFD ............................................................................ 37
Tabla 4:Tabla de Transiciones de AFD Equivalente al AFN .................................... 38
Tabla 5:Tabla de transición de AFD a AFN ............................................................. 39

5
6
Prefacio

La teoría de los autómatas y lenguajes formales se puede ubicar en el


campo de la Informática teórica, un campo clásico y multidisciplinar
dentro de los estudios de Informática. Es un campo clásico debido no
solo a la antigüedad (anterior a la construcción de los primeros
ordenadores) sino, sobre todo, a que sus contenidos principales no
dependen de los rápidos avances tecnológicos que han hecho que otras
ramas de la Informática deban adaptarse a los nuevos tiempos a un
ritmo vertiginoso. Es multidisciplinar porque en sus cimientos
encontramos campos tan aparentemente dispares como la lingüística,
las matemáticas o la electrónica.
La teoría de Autómatas, por una parte, sienta las bases de la
algorítmica y permite modelar y diseñar soluciones para un gran
número de problemas. Los Autómatas (o máquinas de estadio finito)
pueden ser utilizados para el análisis morfológico y en la investigación
y aplicaciones de procesamiento de lenguaje natural.
También hablaremos de expresiones regulares y su uso para resolver
problemas y sacar el máximo provecho de las herramientas y los
recursos.
Las expresiones regulares están disponibles en muchos tipos de
herramientas (editores, procesadores de texto, herramientas de
sistema, motores de bases de datos, etc.), pero su potencia se muestra
cuando está disponible como parte de un lenguaje de programación
como Java y JScript, Visual Basic y VBScript, JavaScript y
ECMAScript, C, C++, C#, elisp, Perl, Python, Tcl, Ruby, PHP, sed y
awk. De hecho, las expresiones regulares son el corazón mismo de
muchos programas escritos en algunos de estos lenguajes.
Hay una buena razón por la que las expresiones regulares se
encuentran en tantos y tan diversos lenguajes y aplicaciones: son
extrínsecamente poderosas. En un nivel bajo, una expresión regular
describe un trozo de texto. Puede utilizarlo para verificar la entrada de

7
datos de un usuario, o tal vez para examinar grandes cantidades de
datos. En un nivel superior, las expresiones regulares permiten
dominar los datos, controlarlo y ponerlo a trabajar. Dominar las
expresiones regulares es dominar los datos.

8
DESCRIPCION DE LOS LENGUAJES FORMALES
INTRODUCCION
Existen dos tipos básicos y reconocidos de lenguajes: los lenguajes
naturales y los lenguajes formales. El origen y desarrollo de los
primeros, como pueden ser el castellano, el inglés o el francés, es
natural, es decir, sin el control de ninguna teoría. Las teorías de
lenguajes naturales y las gramáticas, fueron establecidas a priori, esto
es, después de que el lenguaje había ya madurado. Por otro lado, los
lenguajes formales como las matemáticas y la lógica, fueron
desarrollados generalmente a través del establecimiento de una teoría,
la cual le da las bases para dichos lenguajes.

DEFINICION DE LENGUAJE
Las lenguas son sistemas más o menos complejos, que asocian
contenidos de pensamiento y significación a manifestaciones
simbólicas tanto orales como escritas. Aunque en sentido estricto, el
lenguaje sería la capacidad humana para comunicarse mediante
lenguas, se suele usar para denotar los mecanismos de comunicación
no humanos (el lenguaje de las abejas o el de los delfines), o los
creados por los hombres con fines específicos (los lenguajes de
programación, los lenguajes de la lógica, los lenguajes de la
aritmética...).

Nosotros, vamos a definir el lenguaje como un conjunto de palabras.


Cada lenguaje está compuesto por secuencias de símbolos tomados de
alguna colección finita. En el caso de cualquier lengua natural
(castellano, inglés, francés...), la colección finita es el conjunto de las
letras del alfabeto junto con los símbolos que se usan para construir
palabras (tales como el guión, el apóstrofe en el caso del inglés...). De
forma similar, la representación de enteros, son secuencias de
caracteres del conjunto de los dígitos {0,1,2,3,4,5,6,7,8,9}.

9
Un conjunto no vacío y finito de símbolos se conoce como alfabeto.
Si es un alfabeto, y denota que es un símbolo de. Por
tanto, si = {0,1,2,3,4,5,6,7,8,9}, podemos decir que 0. Obsérvese, que,
puesto que un alfabeto es simplemente un conjunto finito no vacío,
dados 1 y 2 alfabetos.
Una secuencia finita de símbolos de un determinado alfabeto, se
conoce como palabra sobre dicho alfabeto. Nuestra experiencia, nos
lleva a identificar el término palabra con las palabras de cualquier
lenguaje natural, por esta razón, a menudo se usa el término cadena en
lugar de palabra, con el fin de evitar esta idea preconcebida. Se
tratarán igual los términos cadena y palabra.

Cada símbolo de un alfabeto, es una cadena sobre dicho alfabeto. La


cadena vacía, es una palabra sobre cualquier alfabeto. La palabra
vacía, es una secuencia vacía de símbolos, tomados de cualquiera que
sea el alfabeto en cuestión.

Los lenguajes, pueden ser bastante grandes, como lo es el caso de


todas las palabras "correctas" que se pueden formar en castellano
sobre el alfabeto castellano. Dado que un lenguaje es un conjunto de
cadenas, se puede tener el lenguaje compuesto por ninguna cadena, el
lenguaje vacío. Éste, no es el mismo lenguaje que el que consta de la
cadena vacía. Fuente:
(https://es.wikipedia.org/wiki/Lenguaje_formal, s.f.)

PROPIEDADES DE LOS LENGUAJES FORMALES


La definición de una teoría de un lenguaje formal dado, precedió a su
definición intensiva, como hemos llamado antes al establecimiento de
una serie de propiedades o fórmulas, que definan unívocamente las
oraciones correctas que componen un lenguaje natural.

El proceso de generación y desarrollo de un lenguaje formal, es


inverso al de los lenguajes naturales, consecuentemente, las palabras
y las oraciones de un lenguaje formal, son perfectamente definidas:

10
una palabra mantiene el mismo significado prescindiendo del contexto
en el que se encuentre. Como resultado de este proceso, obtendremos
las llamadas gramáticas libres del contexto. En adición, el significado
de símbolos es determinado exclusivamente por la sintaxis, sin
referencia a ningún contenido semántico. Una función y una fórmula,
puede designar cualquier cosa, solamente los operadores y relaciones
que nos permiten escribir una fórmula como por ejemplo la igualdad,
desigualdad, pertenencia, no pertenencia, conectivos lógicos, etc., y
operadores algebraicos +, *, etc., tienen significados especiales.

Los lenguajes formales son, por todo esto, necesariamente exentos de


cualquier componente semántico fuera de sus operadores y relaciones,
y es gracias a esta ausencia de significado especial, que los lenguajes
formales pueden ser usados para modelar una teoría de la mecánica,
de la ingeniería electrónica, etc., en la lingüística u otra naturaleza, la
cual asume el estatus del componente semántico de tal lenguaje. Esto
equivale a decir, que, durante la concepción de lenguajes formales,
toda la ambigüedad anteriormente expuesta respecto a la semántica de
una palabra, es anulada, es como si esta reducción al significado único
debe manifestarse por sí mismo, como la eliminación del “mundo de
significados” en el proceso de construir las fórmulas, al tiempo que se
toca el nivel abstracto de estas construcciones. Es solamente, por
medio de un paso adicional, que el significado es asignado a las
fórmulas. Este paso, nos permite la posibilidad de asignar un criterio
falso/cierto a cada fórmula.

El mundo de significados que es el componente semántico, solo existe


en la teoría que uno intenta expresar a través del lenguaje formal. Por
ejemplo, un componente semántico normalmente asociado con el
lenguaje formal de una teoría cónica, es el movimiento de los cuerpos
celestes, así mismo, sistemas lineales de todas las órdenes, son
posibles componentes semánticos de teoría de matrices.

No podemos evitar mencionar, la importancia de los números en


lenguajes formales. En un sistema numérico, así como en un sistema
11
de cálculo, los números siempre tienen el potencial de referir un cierto
"contenido", el cual pertenecerá entonces al componente semántico
del lenguaje: los objetos posibles cuando son contables o medibles. La
asociación de un significado con un número o con un cálculo, no
siempre es obvio, sin embargo, es útil recordar, que, en física, cuando
se completa un cálculo y se busca una interpretación del mismo,
solamente se mantienen los números positivos de los resultados, ya
que las soluciones negativas o imaginarias a las ecuaciones que se
supone describen la realidad, son la mayoría de las veces rechazadas,
porque no corresponden con la "realidad física".

DEFINICION
Un lenguaje formal es un conjunto (finito o infinito) de cadenas finitas
de símbolos primitivos

Ej: El lenguaje “Número” es simplemente el conjunto infinito de


cadenas finitas formadas con los dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9

Dichas cadenas están formadas gracias a un alfabeto y a una gramática


que están formalmente especificados

- El alfabeto es un conjunto finito no vacío de símbolos


- La gramática es un conjunto finito de reglas para formar
cadenas finitas juntando símbolos del alfabeto
- A cada cadena de símbolos de un lenguaje formal se le llama
fórmula bien formada (o palabra) del lenguaje

En matemáticas, lógica y ciencias de la computación, un lenguaje


formal es un lenguaje cuyos símbolos primitivos y reglas para unir
esos símbolos están formalmente especificados. Al conjunto de los
símbolos primitivos se le llama el alfabeto (o vocabulario) del
lenguaje, y al conjunto de las reglas se lo llama la gramática formal (o
sintaxis). A una cadena de símbolos formada de acuerdo a la gramática
se la llama una fórmula bien formada (o palabra) del lenguaje.

12
Estrictamente hablando, un lenguaje formal es idéntico al conjunto de
todas sus fórmulas bien formadas. A diferencia de lo que ocurre con
el alfabeto (que debe ser un conjunto finito) y con cada fórmula bien
formada (que debe tener una longitud también finita), un lenguaje
formal puede estar compuesto por un número infinito de fórmulas bien
formadas.
Por ejemplo, un alfabeto podría ser el conjunto {a,b}, y una gramática
podría definir a las fórmulas bien formadas como aquellas que tienen
el mismo número de símbolos a que b. Entonces, algunas fórmulas
bien formadas del lenguaje serían: ab, ba, abab, ababba, etc.; y el
lenguaje formal sería el conjunto de todas esas fórmulas bien
formadas.
Para algunos lenguajes formales existe una semántica formal que
puede interpretar y dar significado a las fórmulas bien formadas del
lenguaje. Sin embargo, una semántica formal no es condición
necesaria para definir un lenguaje formal, y eso es una diferencia
esencial con los lenguajes naturales.
En algunos lenguajes formales, la palabra vacía (esto es, la cadena de
símbolos de longitud cero) está permitida, notándose frecuentemente
mediante {\displaystyle \epsilon \,}, {\displaystyle e\,} o
{\displaystyle \lambda \,}.

EJEMPLOS DE LENGUAJES FORMALES


- Un conjunto de todas las palabras sobre {a,b}.
- El conjunto {an : n} es un número primo.
- El conjunto de todos los programas sintácticamente válidos en
un determinado lenguaje de programación.
- El conjunto de todas las fórmulas bien formadas en la lógica
de primer orden.

CLASIFICACION DE GRAMATICAS FORMALES


Chomsky clasificó jerárquicamente las gramáticas formales que

13
generan lenguajes formales, en estos tipos:
- Tipo 3: Gramáticas regulares que generan lenguajes regulares
- Tipo 2: Gramáticas incontextuales que generan lenguajes
incontextuales
- Tipo 1: Gramáticas contextuales que generan lenguajes
contextuales
- Tipo 0: Gramáticas libres que generan lenguajes sin ningún
tipo de restricción

Cuanto menor es el tipo, mayor es el poder expresivo del lenguaje


generado y más complejidad tiene su tratamiento por parte de una
máquina

FORMALISMO DE LA ESPECIFICACION DE LA
LENGUA
La teoría del lenguaje formal se refiere raramente a idiomas
particulares (excepto como ejemplos), pero se trata principalmente al
estudio de varios tipos de formalismos para describir idiomas. Por
ejemplo, una lengua se puede dar como
- Un sistema de las secuencias que se pueden generar por alguno
gramática formal
- Un sistema de secuencias descritas o emparejadas por un
detalle expresión regular
- Un sistema de secuencias aceptadas por alguno autómata, por
ejemplo, a Máquina de Turing o autómata finito del estado.
- Un sistema de las secuencias para las cuales algunos
procedimientos de la decisión (algoritmo que pide una
secuencia de las preguntas relacionadas de YES/NO) produce
la respuesta SÍ.
Las preguntas típicas preguntaron por tales formalismos incluyen:
- ¿Cuál es su energía expresiva? ¿(¿Puede el formalismo X
describir cada lengua que el formalismo Y pueda describir?
¿Puede describir otros idiomas?)

14
- *¿Cuál es su recognizability? (¿Cómo es difícil es para decidir
a si una palabra dada pertenece a una lengua descrita por el
formalismo X?)
- *¿Cuál es su comparabilidad? (¿Cómo es difícil es para decidir
a si dos idiomas, una descrita en el formalismo X y uno en el
formalismo Y, o en X otra vez, son realmente la misma
lengua?).

Asombrosamente a menudo, la respuesta a estos problemas de la


decisión es “él no se puede hacer en todos”, o “es extremadamente
costosa” (con una caracterización exacta de cómo es costoso
exactamente). Por lo tanto, la teoría del lenguaje formal es un área de
aplicación importante de teoría del computability y teoría de
complejidad.

OPERACIONES EN IDIOMAS
Se pueden utilizar varias operaciones para producir nuevos lenguajes
a partir de otros dados. Supóngase que L1 y L2 son lenguajes sobre un
alfabeto común. Entonces.
- La concatenación L1L2 consiste de todas aquellas palabras de
la forma vw donde v es una palabra de L1 y w es una palabra
de L2
- La intersección L1&L2 consiste en todas aquellas palabras que
están contenidas tanto en L1 como en L2
- La unión L1|L2 consiste en todas aquellas palabras que están
contenidas ya sea en L1 o en L2
- El complemento ~L1 consiste en todas aquellas palabras
producibles sobre el alfabeto de L1 que no están ya contenidas
en L1
- El cociente L1/L2 consiste de todas aquellas palabras v para
las cuales existe una palabra w en L2 tales que vw se encuentra
en L1
- La Estrella L1* consiste de todas aquellas palabras que pueden
ser escritas de la forma W1W2...Wn donde todo Wi se

15
encuentra en L1 y n ≥ 0. (Nótese que esta definición incluye a
ε en cualquier L*)
- La intercalación L1*L2 consiste de todas aquellas palabras que
pueden ser escritas de la forma v1w1v2w2...vnwn; son
palabras tales que la concatenación v1...vn está en L1, y la
concatenación w1...wn está en L2

Una pregunta que se hace típicamente sobre un determinado lenguaje


formal L es cuán difícil es decidir si incluye o no una determinada
palabra v. Este tema es del dominio de la teoría de la computabilidad
y la teoría de la Complejidad computacional. Por contraposición al
lenguaje propio de los Seres vivos y en especial el lenguaje humano,
considerados lenguajes naturales, se denomina lenguaje formal a los
lenguajes «artificiales» propios de las Matemáticas o la informática,
los lenguajes artificiales son llamados lenguajes formales (incluyendo
Lenguajes de programación). Sin embargo, el lenguaje humano tiene
una característica que no se encuentra en los lenguajes de
programación: la diversidad. En 1956, Noam Chomsky creó la
Jerarquía de Chomsky para organizar los distintos tipos de lenguaje
formal.

VERDADES CONCERNIENTES A LOS LENGUAJES


FORMALES
Teorema 1
El conjunto de lenguajes en general (incluyendo los no formales) es
incontable.

Lema 1
El conjunto de lenguajes en un alfabeto no vacío dado es incontable.

Afirmar que un alfabeto es no vacío equivale a que ese alfabeto


contenga al menos un símbolo, ergo, basta demostrar que el conjunto
de lenguajes en el alfabeto {\displaystyle \{a\}\,} {\displaystyle

16
\{a\}\,} es incontable. Como sabemos, un lenguaje L en {\displaystyle
\{a\}\,} {\displaystyle \{a\}\,} es un subconjunto de {\displaystyle
\{a\}^{*}\,} {\displaystyle \{a\}^{*}\,}, esto nos lleva a la conclusión
de que, el conjunto de todos los lenguajes en {\displaystyle \{a\}\,}
{\displaystyle \{a\}\,} es justamente {\displaystyle 2^{\{a\}^{*}}\,}
{\displaystyle 2^{\{a\}^{*}}\,} (el conjunto de todos los
subconjuntos o conjunto potencia de {\displaystyle \{a\}^{*}\,}
{\displaystyle \{a\}^{*}\,}) y es evidente que {\displaystyle
\{a\}^{*}\,} {\displaystyle \{a\}^{*}\,} es infinito (de hecho;
contable), también ha sido demostrado que si {\displaystyle A} A es
un conjunto infinito (contable o incontable), entonces {\displaystyle
2^{A}} {\displaystyle 2^{A}} es mayor que {\displaystyle A} A
porque {\displaystyle 2^{A}} {\displaystyle 2^{A}} pasa a ser un
conjunto infinito de órdenes del infinito, al ser mayor, no existirá
biyección entre {\displaystyle A} A y {\displaystyle 2^{A}}
{\displaystyle 2^{A}}, lo que hace a {\displaystyle 2^{A}}
{\displaystyle 2^{A}} un conjunto infinito incontable, la prueba ha
finalizado.

Demostración del Teorema 1


Puede derivarse fácilmente que la aseveración delineada en el
Teorema 1 es verdadera, porque el conjunto de lenguajes en general
es justamente una unión infinita de conjuntos del tipo {\displaystyle
2^{A}} {\displaystyle 2^{A}}, donde {\displaystyle A} A es un
conjunto infinito contable.

Teorema 2
Los lenguajes son conjuntos contables.

Se sabe que un lenguaje {\displaystyle L} L en un alfabeto


{\displaystyle \Sigma } \Sigma es un subconjunto de {\displaystyle
\Sigma ^{*}} \Sigma ^{*} y como ya se hizo mención, {\displaystyle
\Sigma ^{*}} \Sigma ^{*} es infinito contable, por ende,

17
{\displaystyle L} L es como mucho un conjunto infinito contable (del
mismo tamaño que {\displaystyle \Sigma ^{*}} \Sigma ^{*}), la
prueba ha culminado.

Teorema 3
El conjunto de lenguajes formales es contable.

Como sabemos un lenguaje formal puede ser generado por una


gramática formal (o de estructura de frase), lo cual implica que todo
lenguaje formal puede ser aceptado por una MT, lo que a su vez
implica que se puede definir una biyección entre el conjunto de
lenguajes formales y el conjunto de las MT´s (debido a la propiedad
transitiva de la relación "existe biyección entre {\displaystyle A} A y
{\displaystyle B} B"). Para demostrar el teorema se utilizará el
concepto de codificación de MT´s que se introduce en el estudio de
las MT´s universales, generalmente se codifica una MT con una
función que tiene precisamente como dominio al conjunto de las MT´s
(lo llamaremos {\displaystyle X} X) y como codominio {\displaystyle
\{0,1\}^{*}\,} {\displaystyle \{0,1\}^{*}\,}, esa función puede ser
una biyección si el codominio pasa a ser Y (un subconjunto de
{\displaystyle \{0,1\}^{*}\,} {\displaystyle \{0,1\}^{*}\,}) y como
{\displaystyle \{0,1\}^{*}\,} {\displaystyle \{0,1\}^{*}\,} es
contable, ese subconjunto también será contable y como existe dicha
biyección (entre {\displaystyle X} X e {\displaystyle Y} Y), la
aserción ha sido demostrada, prueba concluida. Fuente: (Florencio,
2011)

LENGUAJES LIBRE DEL CONTEXTO


Los lenguajes formales derivados de un alfabeto que consta de una
sola letra, conocida como lenguajes unarios, pueden ser considerados
como conjuntos de números naturales, y las cuestiones de la
representación de tales conjuntos mediante los dispositivos básicos de
la teoría de lenguaje formal forman un tema especial de estudio. Los

18
lenguajes unarios formales son básicamente conjuntos periódicos (Jez
& Okhotin, 2007).

Los lenguajes unarios formales son caracterizados por sistemas de


ecuaciones de lenguaje de la forma general:

Figura 1:Sistema de ecuación de


lenguajes unarios formales.

Con operaciones diferentes y permitidas sobre su lado derecho. Los


lenguajes libres de contexto o incontextuales se obtienen mediante el
uso de la concatenación y unión del sistema. Como lo dice Jez &
Okhotin (2007). Si la concatenación se limita a un solo lado lineal (es
decir, cada concatenación que aparece en alguna parte derecha es de
la forma w · φ por alguna cadena constante w), entonces las soluciones
representan exactamente los lenguajes regulares. Por último,
respaldando a los autómatas, como lo demuestra Okhotin (2004), se
pueden simular mediante ecuaciones con unión, intersección y
concatenación lineal de dos caras.

Cuando hablamos de lenguajes debemos considerar la gramática que


los rigen. Barash & Okhotin (2014) nos dicen que las gramáticas libres
de contexto se entienden mejor como una lógica para definir la sintaxis
de los lenguajes. En esta lógica, las definiciones son inductivas, por lo
que las propiedades de una cadena están determinadas por las
propiedades de sus subseries. Así es como una regla S → aSb afirma
que si una cadena an-1bn1 tiene la propiedad S, entonces las cadenas
anbn tienen la propiedad S también. Además de la concatenación, el
formalismo de esta lógica incluye una operación de disyunción,
representada por tener varias reglas para un único símbolo. Fuente:
(Balari, 2014)
19
JERARQUIA DE LOS LENGUAJES FORMALES
DEFINICION
Se analizan los 4 tipos de lenguajes formales propuestos en la jerarquía
de chomsky, que abarca desde el conjunto de los lenguajes regulares
hasta los lenguajes recursivos, dichos lenguajes son descritos
mediante dos representaciones: a) expresiones y b) gramáticas;
particularmente, enfocándose en la definición formal de cada uno de
los lenguajes, sus propiedades, sus limitaciones y a que lenguaje(s)
incluye(n) determinado tipo de lenguaje. por otra parte, se analiza la
equivalencia entre las expresiones y gramáticas del lenguaje.

LENGUAJES REGULARES
Los lenguajes regulares se llaman así porque sus palabras contienen
regularidades o repeticiones de los mismos componentes, como por
ejemplo en el Lenguaje L1 siguiente: L1 = {ab; abab; ababab;
abababab,…}
En este ejemplo se aprecia que las palabras de L1 son simplemente
repeticiones de “ab” cualquier número de veces. Aquí la “regularidad”
consiste en que las palabras contienen “ab” algún número de veces.
Otro ejemplo más complicado sería el lenguaje L2: L2 = {abc; cc;
abab; abccc; ababc,…}
La regularidad en L2 consiste en que sus palabras empiezan con
repeticiones de “ab” seguidas repeticiones de “c”. Similarmente es
posible definir muchos otros lenguajes basados en la idea de repetir
esquemas simples. Esta es la idea básica para formar los lenguajes
regulares. Adicionalmente a las repeticiones de esquemas simples,
vamos a considerar que los lenguajes finitos son también regulares por
definición.

20
Por ejemplo, el lenguaje L3 = {Anita, lava, la, tina} es regular.
Al combinar los lenguajes uniéndolos o concatenándolos, también se
obtiene un lenguaje regular.
Por ejemplo.
L1 U L2 = {Anita, lava, la, tina, ab, abab, ababab, abababab,…} es
regular.

Expresiones Regulares
La noción de conjuntos nos permite describir los lenguajes regulares,
pero es mejor una notación en donde las representaciones de los
lenguajes sean simplemente texto (cadenas de caracteres).
Así las representaciones de los lenguajes regulares serian simplemente
palabras de un lenguaje.
Con estas ideas vamos a definir un lenguaje, a través de las
expresiones regulares, en donde cada palabra va a denotar un lenguaje
regular.
Sea ∑ un alfabeto. El conjunto de las expresiones regulares (ER) sobre
∑ contienen las cadenas en el alfabeto ∑U {“A”,” +”,”.”,” *”,” (”,”)”,”
ᵩ”} que cumplen con lo siguiente:
“A”y” ᵩ” ∈ ER
ʎ ∈ ∑ entonces ʎ ∈ ER
Si E1, E2 ∈ ER, entonces “(” E1” +” E2” ∈ ER,” (” E1”.” E2”)” ∈ ER,
“(” E1”) *” ∈ ER.
Las ER son simplemente formulas cuyo propósito es representar cada
una de ellas un lenguaje, en este caso un lenguaje regular. Así, el
significado de un ER es simplemente el lenguaje que ella representa.

Gramáticas Regulares
Además de las expresiones regulares existe otra forma de representar
los lenguajes regulares, y a esta forma se les llama gramáticas
regulares.
Para ello primeramente vamos a ver que son las gramáticas y como
nos ayudan a representar a los lenguajes formales.

21
Gramáticas Formales
La representación de los lenguajes regulares se fundamenta en la
noción de gramática formal.
Intuitivamente, una gramática es un conjunto de reglas para formar
correctamente las frases de un lenguaje. La formalización que se
presenta de la noción de gramática es debida a Chomsky, y está basada
en las llamadas reglas gramaticales.
Una regla es una expresión de la forma α->β, en donde tanto α como
β son cadenas de símbolo en donde pueden aparecer tanto elemento
del alfabeto ∑ como unos nuevos símbolos, llamados variables (no
terminales). Los símbolos que no son variables son constantes
(terminales).
Por ejemplo, una posible regla gramatical es X->aX. La aplicación de
una regla α->β a una palabra uαv produce la palabra uβv. En
consecuencia, las reglas de una gramática pueden ser vistas como
reglas de reemplazo. Por ejemplo, si tenemos una cadena de símbolos
bbXa, le podemos aplicar la regla X->aX, dando como resultado la
nueva cadena bbaXa.

LENGUAJES LIBRES DE CONTEXTO


Los lenguajes libres de contexto (abreviado LLC) forman una clase de
lenguajes más amplia que los lenguajes regulares, de acuerdo con la
jerarquía de Chomsky. Estos lenguajes son importantes tanto desde el
punto de vista teórico, por relacionar las llamadas gramáticas libres de
contexto con los autómatas de pila, como desde el punto de vista
práctico, ya que casi todos los lenguajes de programación están
basados en los LLC. Para poder entender este tipo de lenguajes es
necesario entender algunos conceptos que se mencionan a
continuación.
- Regla. - es una expresión de la forma α->β, en donde tanto α
como β son cadenas de símbolos en donde se pueden aparecer
tantos elementos del alfabeto ∑ (llamados constantes) como
unos nuevos símbolos, llamados variables.
- Gramática. - es básicamente un conjunto de reglas.
22
Consideremos, por ejemplo, la siguiente gramática para producir un
pequeño subconjunto del idioma español:

- <frase>-><sujeto><predicado>
- <sujeto>-><articulo><sustantivo>
- <articulo>->el ǀ la
- <sustantivo>->perro ǀ luna
- <predicado>-><verbo>
- <verbo>->brilla ǀ corte

Donde el símbolo “ǀ” separa varias alternativas. En ésta gramática se


supone que las variables (no terminales) son: <frase>, <sujeto>,
<articulo>, <sustantivo>, <predicado> y <verbo>, mientras que las
constantes(terminales) son: el, la, perro y luna. la variable <frase> será
considerada el símbolo inicial.
Gramáticas Libres de Contexto
Podemos ver que la gramática del español dada arriba es una
(gramática libre de contexto) GLC, pero no podría ser una gramática
regular, pues hay varias reglas que no corresponden al formato de las
reglas de las gramáticas regulares, se ve, por lo tanto, que el formato
de las reglas es menos rígido en las GLC que en las gramáticas
regulares, y así toda gramática regular es GLC, pero no viceversa.
Por ejempló, el lenguaje {{a^n b^n} que no es regular, tiene la
gramática libre de contexto con las siguientes reglas:
- S -> aSb
- S -> ab

LENGUAJES SENSIBLES DEL CONTEXTO


Este tipo de lenguajes son definidos por las gramáticas sensibles del
contexto, dichas gramáticas definen esa clase intermedia del lenguaje,
que se sitúan entre los lenguajes libres de contexto y los leguajes
recursivos.
Casi cualquier lenguaje que no pueda concebir es sensible al contexto,
a excepción de los lenguajes recursivos.
23
Las reglas son de la forma α->β, donde α yβ no permiten ε de una
producción, no se permite la palabra vacía tanto para el lado izquierdo
como para el lado derecho. Sin embargo, pueden contener cualquier
cantidad de variables (no terminales) y constantes(terminales).
Las gramáticas sensibles al contexto son estrictamente más poderosas
que las gramáticas libres del contexto; un ejemplo es el lenguaje de
las cadenas de la forma {a^n b^n c^n}, para el que no hay ninguna
gramática libre de contexto (GLC).

Una gramática sensible del contexto es una cuádrupla G= (N, ∑, S,


P) en donde:

- N es un alfabeto de símbolo no terminales(variables).


- ∑ es un alfabeto de símbolos terminales con NU∑=Ø.
- S∈N es símbolo inicial.
- P es el conjunto finito de producciones de la forma α->β,
donde αyβ∈ 〖(NU∑)〗^+ y I α I ≤ I β I.

Como ejemplo, dado el lenguaje {a^n b^n c^n |≥1}, la gramática que
genera dicho lenguaje es la siguiente:
G= ({S, A, B}, {a, b,c}, {S}, {(S,abc|aAbc), (Ab,bA), (Ac,Bbcc),
(bB,Bb), (aB,aa|aaA)})
De donde obtenemos las producciones de esta gramática, las cuales
son:
- S->abc|aAbc
- Ab->bA
- Ac->Bbcc
- bB->Bb
- aB->aa|aaA

Con lo que tenemos un ejemplo de un lenguaje sensible del contexto


que no es libre del contexto.

24
LENGUAJES RECURSIVOS Y RECURSIVAMENTE
ENUMERABLES
Estos lenguajes también se les conoce como lenguajes estructurados
por frase, y son los lenguajes tipo 0 dentro de la jerarquía de Chomsky.
Un lenguaje L sobre un alfabeto ∑ se dice que es recursivamente
enumerable si es aceptado por una máquina de Turing.
Las gramáticas que describe a este tipo de lenguajes se les conoce
como gramáticas no restringidas o bien gramáticas estructuradas por
frases.
Una gramatical no restringida es una cuádrupla G= (N, ∑, S, P) en
donde:
- N es un alfabeto de símbolos no terminales.
- ∑ es un alfabeto de símbolos terminales con N∩∑= Ø
- S∈N es el símbolo inicial.
- P es un conjunto finito de producciones de la forma α->β,
donde α〖∈(NU∑)〗^+ y β〖∈(NU∑)〗^*

Como ejemplo, se considera la siguiente gramática no restringida que


genera el lenguaje
L= {a^2k |k>0} cuya representación formal es:

G= ({S, A, B, C, D, E}, {a, ε}, {S}, {(S,ACaB), (Ca,aaC), (CB,DB|E),


(aD,Da), (AD,AC), (aE,Ea), (AE, ε)}) de donde obtenemos las
siguientes producciones:

- S->ACaB
- Ca->aaC
- CB->DB|E
- aD->Da
- AD->AC
- aE->Ea
- AE-> ε

25
AUTOMATA DE ESTADO FINITO
DETERMINISTA
DEFINICION
Los Autómatas Finitos son máquinas teóricas que van cambiando de
estado dependiendo de la entrada que reciban. La salida de estos
Autómatas está limitada a dos valores: aceptado y no aceptado, que
pueden indicar si la cadena que se ha recibido como entrada es o no
valida. Generalmente utilizaremos los Autómatas Finitos para
reconocer lenguajes regulares, es decir, una palabra se considerará
valida solo si pertenece a un determinado lenguaje.
Formalmente, un Autómata Finito Determinista (AFD) se define
como una tupla.

AF D = (Σ, Q, f, q0, F), donde

Σ es el alfabeto de entrada
Q es el conjunto finito y no vacío de los estados del Autómata
f es la función de transición que indica en que situaciones el
Autómata pasa de un estado a otro, se define f : Q × Σ → Q
q0 ϵ Q es el estado inicial
F ϲ Q es el conjunto de estados finales de aceptación (F= Ø) (Jurado
Málaga, 2008, p. 40)

REPRESENTACIÓN DE AUTÓMATAS
Existen dos formas de representar un AFD, mediante tablas de
transición o mediante diagramas de transición. Introduciremos estas
dos representaciones con un ejemplo.

Sea el siguiente AFD: Σ = {a, b} Q = {p, q, r}


q0 = p F = {q} donde f se define de la siguiente forma:

f(p, a) = q
f(p, b) = r
26
f(q, a) = q
f(q, b) = r
f(r, a) = r
f(r, b) = r

Tabla de transición: El AFD se representaría mediante la


siguiente tabla que representa los valores de la función de transición.

a b
→p q r
∗ q q r
r r r

Tabla 1: Tabla de Transicion

La flecha indica que p es el estado inicial, y el asterisco indica que q


es un estado final de aceptación (en general, pueden aparecer muchos
asteriscos, aunque solo puede aparecer una flecha ya que solo hay un
estado inicial).

Figura 2: Transiciones de un Autómata

Fuente: (Jurado Málaga, 2008)

27
Ejemplo
Número par de 0's y de 1's, con Σ = {0,1}

Figura 3:Ejemplo 1 – Autómata

Fuente: (Madrid, n.d.)

q0: 0's pares y 1's pares.


q1:0's pares y 1's impares.
q2: 0's impares y 1's pares.
q3: 0's impares y 1's impares.

A= ({q0,q1,q2,q3},{0,1}, f, q0, {q0})

f 0 1
q0 q2 q3
q1 q3 q0
q2 q0 q3
q3 q1 q2

Tabla 2: Ejemplo 1 – Tabla de transiciones

Fuente: (Madrid, n.d.)

28
Podemos extender la función de transición f para tratar cadenas en
lugar de símbolos del alfabeto:

f* : Q x Σ* → Q
Caso base:
f* (q,T ) = q

Caso recursivo:
f* (q,aw) = f* (f (q,a),w)

(Damos un paso con f(a), seguimos con f*(w)). (Madrid, n.d.)

LENGUAJE RECINOCIDO POR UN AFD


Sea A= (Σ, Q, f, q0, F) un AFD y L(A) el lenguaje que reconoce el
autómata A
L(A) = {w | f* (q0, w) ϵ F}

L(A) es el conjunto de cadenas que llevan al autómata a un estado de


aceptación. Como veremos, si A es un autómata finito entonces L(A)
es un lenguaje regular, y si L es un LR, entonces existe. (Madrid, n.d.)
A | L(A) = L

ESTADOS ALCANZABLES DE UN AFD


Def : Si An= (Σ, Qn, fn, q0, Fn) entonces
1. q0 es alcanzable
2. Si el estado S es alcanzable entonces para todo a ϵ Σ
tenemos que fn (S,a) es alcanzable. (Madrid, n.d.)

DISTINGUIBILIDAD ENTRE PALABRAS


¿Cuántos estados debe tener un AF? Depende de cuántas clases de
cadenas debemos distinguir.

29
Ejemplo
Número par de 0'1 y de 1's
Lo importante es saber si:
1. El número de 0's es par (2 estados)
2. El número de 1's es par (2 estados)
Dado que podemos combinar cualquiera de los dos primeros estados
con cualquiera de los dos segundos, necesitamos estados 2 * 2 = 4
estados.
x= 011010 es indistinguible de y=10 porque da igual qué
cadena se ponga detrás:

x w ϵ L(A) entonces y w ϵ L(A)

Es decir, para seguir reconociendo una palabra no necesitamos


recordar si reconocimos x ó y.
x es distinguible de y si y sólo si:

Existe z ϵ Σ* | ((x z ϵ L ˄ y z no ϵ L) ˅ (x z no ϵ L ˄ y z ϵ L)

Si encontramos n cadenas que son distinguibles 2 a 2, entonces el n^o


de estados debe ser al menos n. (Madrid, n.d.)

OPERACIONES ENTRE LENGUAJES REGULARES


Un lenguaje es regular si y sólo si existe una ER que lo caracteriza
(por definición)
Un lenguaje es regular si y sólo si existe un AF que lo reconoce (habrá
que probarlo)

¿Cuál es el AF que reconoce una ER?

30
- Casos base:

Figura 4:AF que reconoce un ER – Caso Base


Fuente: (Madrid, n.d.)

- Casos recursivos:
- (E): Si A es el AF correspondiente a E, también se
corresponde a (E) .
- E1 + E2: Si A1 es el AF correspondiente a E1, y A2 el
de E2, el autómata de debe representar parejas de
estados. Además, un estado es de aceptación si alguno
de sus componentes era de aceptación.

Ejemplo
L1: núm. par de 0’s
L2: núm. par de 1’s
L: núm. par de 0's o de 1's

A1:

Figura 5:Ejemplo A1 – Primera Aproximación


Fuente: (Madrid, n.d.)

31
A2:

Figura 6:Ejemplo 2 – Segunda Aproximación

Fuente: (Madrid, n.d.)

Autómata resultante:

Figura 7:Automata Resultante de A1 y A2

Fuente: (Madrid, n.d.)


- EF: La forma más sencilla es usando un autómata no
determinista (lo veremos más adelante)

- E*: La forma más sencilla es usando un autómata no


determinista con transiciones
En conclusión, podemos hacer AFs desde
T, vacío, a, (E) ,E+F,EF,E*

32
EJEMPLOS RESUELTOS POR EL PROFESOR
Ejemplo de un autómata diseñado para realizar transacciones
bancarias

Figura 8: Autómata para transacciones bancarias

Una secuencia de números que conforman el código de un cliente


bancario. Supongamos que establecemos que esa secuencia se forma
a partir de 8 dígitos: año de nacimiento (4 números), mes (2 dígitos) y
día (2 dígitos).

Figura 9: Autómata que conforma el código del cliente bancario

La metáfora que usualmente se ocupa para describir un autómata es


verlo como un “cursor” que recorre una cinta” con nuestros datos:

33
Figura 10: Autómata como cursor

EJEMPLOS RESUELTOS POR LOS ESTUDIANTES


¿Cómo platican las ovejas entre ellas? Veamos Podemos decir que sus
“oraciones” se componen de:
Bee!
Beee!
Beeee!
Beeeee!
Beeeeee!
1. Consonante oclusiva sorda
2. Secuencia de vocales abiertas
3. Énfasis tonal para señalar el término de una emisión
Desarrollemos un autómata para este lenguaje: Existe una alfabeto Σ,
que tiene tres símbolos: {b,e , !} o por {bee, !}

q0 es el estado inicial
f indica las transiciones: tenemos 5
q4 será un estado de aceptación, esto es, el que señala el punto
final de nuestro proceso.

Un conjunto de estados, Q, que representan cada uno de los procesos


que tenemos que cubrir para llegar a un resultado
Autómata finito no determinista

34
Figura 11: Ejemplo resuelto por el profesor

Para darnos una idea sobre cómo va a trabajar nuestro autómata,


podemos implementar una tabla de transición. Una tabla de transición
permite relacionar la transición de estado que le corresponde a cada
símbolo de nuestro alfabeto.

Figura 12:Transición del automata

Ejemplos sobre autómatas


Ejemplo 1:
Autómata finito determinístico que acepta el lenguaje
L1 = {a^n c b^m / n > 0 y m >= 0 }
M1D = < {e0, e1, e2}, {a, b, c}, f1D, e0, {e2 }>f1D está
definida por el siguiente diagrama de transición de estados

Figura 13:Autómata que acepta lenguaje L1

35
Ejemplo 2:
Autómata finito determinístico que acepta el lenguaje
L2 = {00x1/ x {0, 1}* }
M2D = < {e0, e1, e2, e3}, {0, 1}, f2D, e0, {e3 }>f2D está definida
por el siguiente diagrama de transición de estados

Figura 14: Autómata que acepta lenguaje L2

Ejemplo 3:
Autómata finito determinístico que acepta el lenguaje
L3 = {xc^3m/ x ∈ {a, b}* y la cantidad de b’s es par y m ≥ 0} M3D =
< {e0, e1, e2, e3, e4}, {a, b, c}, δ3D, e0, {e0, e4}> δ3D está definida
por el siguiente diagrama de transición de estados

Figura 15: Autómata que acepta lenguaje L3

36
Ejemplo 4:
Autómata finito no determinístico que acepta el lenguaje
L4 = {x / x ∈ {0, 1}* y x contiene la subcadena 00 ó x contiene la
subcadena 11}
M4ND = < {e0, e1, e2, e3, e4}, {0, 1}, δ4ND, e0, {e2, e4 }> δ4ND
está definida por el siguiente diagrama de transición de estados

Figura 16: Autómata que acepta lenguaje L4

Ejemplo 5:
Dado el alfabeto Σ={0,1}, construir un Autómata Finito
Determinista de 4 estados como máximo, que acepte el lenguaje
representado por la siguiente expresión
regular ((01+10)(11)*0)*(01+10)(11)*.

0 1
1 2 3
2 0 4
3 4 0
*4 1 2

Tabla 3:Tabla de transición AFD

37
Figura 17:Autómata resultante de la tabla

Ejemplo 6:
Dado el autómata de la figura 1, el proceso de construcción de un AFD
equivalente parte del estado inicial {q0}, y determina el conjunto de
estados alcanzables con cada símbolo del alfabeto. De esta forma, por
ejemplo, al considerar el símbolo a se alcanzan los estados {q0, q1,
q2}. Cada uno de los conjuntos de estados que aparezcan se considera
como uno de los estados del AFD equivalente, determinándose para
cada uno de ellos su función de transición. El proceso se repite
mientras aparezcan nuevos estados. La figura 2 muestra la tabla de
transiciones del AFD.

Figura 18: Ejemplo de AFD

a b c
{q0} {q0,q1,q2} {q1,q2} {q2}
{q0,q1,q2} {q0,q1,q2} {q1,q2} {q2}
{q1,q2} - {q1,q2} {q2}
{q2} - - {q2}

Tabla 4:Tabla de Transiciones de AFD Equivalente al AFN

38
A partir de esta tabla el diagrama de transiciones queda como
muestra la figura.

Figura 19: AFD equivalente al AFN

Ejemplo 7:
Dado el AFN de la figura 4 la tabla de transiciones del AFD
equivalente sería la mostrada en la figura 5, con lo que el diagrama de
transiciones del AFD quedaría como se muestra en la figura

Figura 20: AFN ejemplo

a b
{q0} {q0} {q0,q1}
{q0,q1} {q0} {q0,q1,q2}
{q0,q1,q2} {q0,q1,q2} {q0,q1,q2}

Tabla 5:Tabla de transición de AFD a AFN

39
Figura 21: AFD equivalente a AFN

40
EXPRESIONES REGULARES
DEFINICION
Uno de los éxitos no reconocidos en la estandarización de la
informática ha sido la expresión regular (RE), un lenguaje para
especificar cadenas de búsqueda de texto. Este lenguaje práctico se
utiliza en todos los lenguajes de programación, procesadores de texto
y herramientas de procesamiento de texto como el grep de
herramientas Unix o Emacs. Formalmente, una expresión regular es
una notación algebraica para caracterizar un conjunto de cuerdas. Son
particularmente útiles para la búsqueda en textos, cuando tenemos un
patrón que buscar y un corpus de textos que buscar. Una función de
búsqueda de expresiones regulares buscará a través del corpus,
devolviendo todos los textos que coincidan con el patrón. El corpus
puede ser un único documento o una colección. Por ejemplo, el grep
de la herramienta de línea de comandos de Unix toma una expresión
regular y devuelve cada línea del documento de entrada que coincide
con la expresión. (Jurafsky & James H., 2008, p. 11).

Las expresiones regulares son un medio para describir patrones de


texto. Imaginemos que no sólo queremos buscar en un texto todas las
líneas que contienen una palabra, como por ejemplo Barcelona, sino
que sólo nos interesan las líneas que empiezan por la palabra
Barcelona, pero no las que contengan la palabra en cualquier otra
posición. Describir el patrón “Barcelona” es trivial, tan sólo hay que
escribir “Barcelona”, pero ¿cómo podemos describir “La línea
comienza por la palabra Barcelona”. Las expresiones regulares
permiten describir este tipo de patrones de texto y muchos más por lo
que nos serán de una gran utilidad. Además, en Unix las expresiones
regulares tienen un amplio soporte, tanto en las herramientas de
procesamiento de ficheros de texto (grep), o en los editores de texto
(vi, emacs) como en los lenguajes de programación (Perl, Python). El
único inconveniente de las expresiones regulares es que su sintaxis no
es trivial y que además varía ligeramente entre distintas herramientas.

41
En la web hay varios sitios en los que se pueden probar las expresiones
regulares, como por ejemplo regex101.
Las expresiones regulares se evalúan carácter a carácter. Las más
básicas son simplemente una lista de letras que forman un texto que
debe coincidir exactamente con lo que buscamos. Por ejemplo, con la
expresión “Human” sólo coincidirá “Human”. Pero por fortuna las
expresiones regulares nos permiten hacer búsquedas y substituciones
mucho más complejas. (Creative Commons Reconocimiento 4.0
Internacional License., n.d.)

EXPRESIONES ALTERNATIVAS
Una expresión u otra. Imaginemos que tenemos un fichero con
los orígenes de los pacientes de un estudio sobre síndrome de Usher.
Queremos seleccionar todos los pacientes que vienen de Valencia o
Castellón. Podemos hacerlo utilizando la sintaxis para expresiones
alternativas:

Figura 22:Búsqueda con dos variables


Fuente: (Creative Commons Reconocimiento 4.0 Internacional
License., n.d.)

La barra vertical (|) separa las expresiones alternativas. En este caso


significa que la palabra encontrada puede ser Valencia o Castellón.
(Creative Commons Reconocimiento 4.0 Internacional License., n.d.)

CONTENEDORES
En muchas ocasiones nos interesa seleccionar patrones que pueden
tener en una posición varias letras distintas. Por ejemplo, podríamos
describir el patrón “comienza por Usher y después tiene un número”
o “comienza por usher y después tiene un par de letras”. Busquemos
todas las líneas que tienen la palabra Usher o usher.
42
Figura 23:Busqueda por mayúsculas y minúsculas

Fuente: (Creative Commons Reconocimiento 4.0 Internacional


License., n.d.)

Al poner las letras entre corchetes indicamos que el carácter que


aparezca en esa posición puede ser cualquiera de los caracteres
indicados. En este caso la expresión coincidente podría ser Usher u
usher.
Utilizando esta técnica podemos también indicar rangos de caracteres,
como por ejemplo “aquellos con Usher tipo 0,1 ó 2”.

Figura 24: Búsqueda con rangos


Fuente: (Creative Commons Reconocimiento 4.0 Internacional
License., n.d.)

Existen rangos y tipos de caracteres predefinidos que podemos utilizar


como:

Figura 25: Tipos de Caracteres

Fuente: (Creative Commons Reconocimiento 4.0 Internacional


License., n.d.)
43
Por ejemplo, podríamos seleccionar cualquier dígito o letra:

Figura 26: Búsqueda digito o letra después


Fuente: (Creative Commons Reconocimiento 4.0 Internacional
License., n.d.)

Si nos da igual que en una posición haya un carácter u otro podemos


utilizar un punto (.). Por ejemplo, seleccionar aquellos individuos con
subtipo A o B.

Figura 27: Búsqueda del siguiente carácter después de la palabra


Fuente: (Creative Commons Reconocimiento 4.0 Internacional
License., n.d.)

Dentro de los contenedores resultan también bastante útiles las


negaciones. Podemos, por ejemplo, seleccionar cualquier carácter que
no sea un 2 o un 3 añadiendo “^” tras el primer corchete.

Figura 28: Búsqueda por negación


Fuente: (Creative Commons Reconocimiento 4.0 Internacional
License., n.d.)

Cuantificadores
Además de indicar qué caracteres queremos permitir podemos
seleccionar cuantas veces deben aparecer. Si no añadimos nada que
indique lo contrario se asume que el carácter debe aparecer una vez,
pero podríamos pedir que el carácter aparezca un número distinto de

44
veces (Creative Commons Reconocimiento 4.0 Internacional
License., n.d.): (Creative Commons Reconocimiento 4.0 Internacional
License., n.d.)
- ”?”, el carácter aparece ninguna o una vez. “usher1?”
coincidiría con “usher” o “usher1”.
- ”*”, cero, una o varias veces.
- ”+”, al menos una vez.
- “{4}”, cuatro veces.
- “{4,10}”, entre 4 y 10 veces

Figura 29: Búsqueda por aparición

Fuente: (Creative Commons Reconocimiento 4.0 Internacional


License., n.d.)

Puntos de Anclaje
Además de poder indicar qué y cuántas veces queremos que algo
aparezca podemos indicar dónde deseamos que lo haga. Los puntos de
anclaje más utilizados son (Creative Commons Reconocimiento 4.0
Internacional License., n.d.):
- ”^”, inicio de línea
- ”$”, fin de línea
- ”<”, principio de palabra
- ”>”, fin de palabra
- “\b”, límite de palabra
Líneas que comienzan por B:

Figura 30: Búsqueda por inicio de palabra

Fuente: (Creative Commons Reconocimiento 4.0 Internacional


License., n.d.)

45
Líneas que terminan por B:

Figura 31: Búsqueda por fin de palabra

Fuente: (Creative Commons Reconocimiento 4.0 Internacional


License., n.d.)

Sustituciones
Las expresiones regulares además de ser útiles para buscar patrones
sirven para sustituirlos. Por ejemplo, podemos sustituir madrid por
Madrid con el siguiente comando (Creative Commons
Reconocimiento 4.0 Internacional License., n.d.):

Figura 32: Sustitución de patrones

Fuente: (Creative Commons Reconocimiento 4.0 Internacional


License., n.d.)

Ya vimos que si queríamos que la expresión se utilizase más de una


vez en cada línea debíamos utilizar el modificador “g”:

Figura 33: Repeticiones por línea

Fuente: (Creative Commons Reconocimiento 4.0 Internacional


License., n.d.)

Estas sustituciones además de soportar los patrones sencillos soportan


todo lo que hemos visto anteriormente. Por ejemplo, podemos
46
eliminar la primera columna del fichero con el comando.

Figura 34: Eliminar primera columna

Fuente: (Creative Commons Reconocimiento 4.0 Internacional


License., n.d.)

Si lo que queremos es guardar el patrón encontrado para utilizarlo en


la sustitución debemos utilizar paréntesis. Los paréntesis indican que
lo que hay dentro de ellos debe ser recordado para poder utilizado en
la substitución. Por ejemplo, podríamos permutar las columnas 1 y 2
del fichero con el comando (Creative Commons Reconocimiento 4.0
Internacional License., n.d.):

Figura 35: Guardado de un patrón encontrado

Fuente: (Creative Commons Reconocimiento 4.0 Internacional


License., n.d.)

Escapes
Algunos caracteres tienen significados especiales, como., $, (,), [,], \ o
^ y si se quieren utilizar hay que escaparlos precediéndolos con \.
El campo de las expresiones regulares es muy amplio y esta pequeña
introducción sólo ha pretendido mostrar algunas de las posibilidades
de esta gran herramienta. El mejor modo de aprender a utilizarlas es
intentar hacer uso de ellas en problemas concretos y echar una ojeada
a algunos de los libros y tutoriales que se han escrito sobre ellas.
(Creative Commons Reconocimiento 4.0 Internacional License., n.d.)
Componentes de las expresiones regulares
Las expresiones regulares son un mini lenguaje en sí mismo, por lo
que para poder utilizarlas eficientemente primero debemos entender
los componentes de su sintaxis; ellos son:
47
- Literales: Cualquier carácter se encuentra a sí mismo, a menos
que se trate de un metacarácter con significado especial. Una
serie de caracteres encuentra esa misma serie en el texto de
entrada, por lo tanto, la plantilla "raul" encontrará todas las
apariciones de "raul" en el texto que procesamos.
- Secuencias de escape: La sintaxis de las expresiones
regulares nos permite utilizar las secuencias de escape que ya
conocemos de otros lenguajes de programación para esos
casos especiales como ser finales de línea, tabs, barras
diagonales, etc. Las principales secuencias de escape que
podemos encontrar, son:
- Clases de caracteres: Se pueden especificar clases de
caracteres encerrando una lista de caracteres entre corchetes [],
la que encontrará uno cualquiera de los caracteres de la lista.
Si el primer símbolo después del "[" es "^", la clase encuentra
cualquier carácter que no está en la lista.
- Metacarácteres: Los metacarácteres son caracteres especiales
que son la esencia de las expresiones regulares. Como son
sumamente importantes para entender la sintaxis de
las expresiones regulares y existen diferentes tipos, voy a
dedicar una sección a explicarlos un poco más en detalle.
(Briega, 2015)
 Metacarácteres - delimitadores
Esta clase de metacarácteres nos permite delimitar
dónde queremos buscar los patrones de búsqueda.
Ellos son:

Figura 36: Metacaracteres – delimitadores

Fuente: (Briega, 2015)


48
 Metacarácteres - clases predefinidas
Estas son clases predefinidas que nos facilitan la
utilización de las expresiones regulares. Ellos son:

Figura 37: Metacaracteres – clases preferidas

Fuente: (Briega, 2015)

 Metacarácteres - iteradores
Cualquier elemento de una expresión puede ser
seguido por otro tipo de metacarácteres,
los iteradores. Usando estos metacarácteres se
puede especificar el número de ocurrencias del
carácter previo, de un metacarácter o de una sub
expresión. Ellos son:

Figura 38: Metacaracteres – iteradores

Fuente: (Briega, 2015)

49
En estos metacarácteres, los dígitos entre llaves de
la forma {n, m}, especifican el mínimo número de
ocurrencias en n y el máximo en m. (Briega, 2015)

Ejemplos
1. Resueltos por el profesor
i.

ii.

iii.

iv.

v.

50
2. Resueltos por el estudiante
i.

Resultado:

ii.

Resultado:

51
iii.

iv.

3. Ejemplos Nuevos
i.

52
ii.

iii.

iv.

v.

53
vi.

Resultado

vii.

Resultado

viii.

Resultado

54
ix.

Resultado

x.

Resultado

55
56
BIBLIOGRAFÍA
Balari, S. (2014). Teoría de Lenguajes Formales. Barcelona.
Briega, R. E. (19 de 07 de 2015). Matemáticas, análisis de datos y
python. Obtenido de Expresiones Regulares con Python:
https://relopezbriega.github.io/blog/2015/07/19/expresiones-
regulares-con-python/
Creative Commons Reconocimiento 4.0 Internacional License. (s.f.).
Bioinformatics at COMAV. Obtenido de Expresiones
regulares:
https://bioinf.comav.upv.es/courses/linux/unix/expresiones_r
egulares.html
Creative Commons Reconocimiento 4.0 Internacional License. (s.f.).
Curso Unix. Obtenido de Expresiones regulares:
https://bioinf.comav.upv.es/courses/unix/expresiones_regular
es.html
Florencio, N. I. (2011). Lenguajes Formales, un enfoque
computacional. Ciudad de Mexico.
https://es.wikipedia.org/wiki/Lenguaje_formal. (s.f.). Obtenido de
Wikipedia.
Jurado Málaga, E. (2008). Teorías de Autómatas y Lenguajes
Formales. España: Universidad de Extremadura. Servicio de
Publicaciones.
Jurafsky, D., & James H., M. (2008). Speech and Language
Processing: Speech and Language Processing: An
Introduction to Natural Language Processing,. Pentice-Hall,
2 edition.
Madrid, F. d.-U. (s.f.). Teoria de Automatas y Lenguajes formales.
Obtenido de Autómatas finitos deterministas (AFD's):
http://antares.sip.ucm.es:8180/webtalf/index.jsp?submenu=te
mas/submenuRegulares&contenido=temas/afd

57