Está en la página 1de 26

Implementación

de métodos
computacionales

Primer período
Entendiendo
a los lenguajes de programación…

Expresiones regulares
y Autómatas finitos

IMECO – Primer período

Ing. Román Martínez M


Estrategia para aprender un nuevo lenguaje
(de programación o natural)...

1. Conoce un poco de su historia y características (Taxonomía - Paradigma)


2. Conoce un poco de su vocabulario (LÉXICO)
3. Conoce las principales reglas que te permiten formar frases válidas con ese
vocabulario (SINTAXIS)
4. Conoce las principales reglas de significado congruente de las frases
(SEMÁNTICA)
5. Ponlo en práctica (úsalo) y comienza a generar confianza en ti mism@.
6. Repite los puntos anteriores tantas veces lo desees o necesites y cada vez
incrementando tu conocimiento y dominio del lenguaje.
Jerarquía de Chomsky
Relación con herramientas para describir los lenguajes

Recursivamente
enumerables

Sensibles al contexto Lenguajes


de programación
Libres de contexto
SINTAXIS Gramáticas

Regulares LÉXICO Expresiones regulares


Autómatas de estados finitos
Gramáticas

Léxico = Sintaxis de bajo nivel


Toda modelación de procesos se basa en
describir el orden de ejecución:
Secuencias
Decisiones
Repeticiones (ciclos)
Los patrones que definen el léxico y sintaxis
de un lenguaje de programación siguen esta modelación
METALENGUAJES
Lenguajes que sirven para describir lenguajes
Herramientas

Lenguajes Libres de Contexto (LLC) Lenguajes Regulares (LR)

Gramáticas Expresiones regulares (Regex)


Diagramas de sintaxis Autómatas de Estados Finitos (AEF)
Primeramente…

¿Qué es una expresión?

• Una expresión es una secuencia de operandos unidos por operadores


para dar un resultado
• Ej. expresión matemática: 123 X -456 + 789
• Ej. expresión algebraica: (a + b) / (c – d)
• Los operadores pueden ser unarios o binarios
• Los operadores tienen prioridades para su ejecución
• Los paréntesis permiten cambiar las prioridades de ejecución
• Los operandos pueden ser simbólicos (variables) o valores constantes.
• (las expresiones típicamente son parte de un lenguaje más amplio, pero las
podemos trabajar independientes)
Expresiones regulares (regex)

• Notación (lenguaje/metalenguaje) de expresiones


que permite describir patrones válidos en secuencias simbólicas.
• Operadores básicos de una expresión regular:
• Concatenación (sin símbolo)
• Alternativa ( | )
• Repetición – cerradura de Kleen ( * ) o cerradura positiva ( + )

• Operandos básicos de una expresión regular:


• Símbolos del alfabeto (cualquier carácter que no sean operadores ni épsilon)
• Épsilon ( e ) para representar “nada” o “vacío”
Las expresiones
regulares son una
forma de representar
a los lenguajes
regulares.
Se utilizan para buscar patrones
o combinaciones de caracteres
de cadenas de texto.
Operadores básicos Regex

• Concatenación (secuencia)
• No tiene símbolo asociado y se representa por la secuencia directa de operandos
• Ejemplo: abc describe el patrón de una a seguida de una b seguida de una c
• Alternativa
• El operador binario | se utiliza para representar la posibilidad de elegir uno entre dos operandos en el patrón
• Ejemplo: a | b describe el patrón de una a o una b
• Repetición
• El operador unario * se utiliza para representar la posibilidad de repetir cero o más veces el operando
• Ejemplo: a* describe el patrón de cero o más a’s concatenadas
• El operador unario + se utiliza para representar la posibilidad de repetir una o más veces el operando
• Ejemplo: a+ describe el patrón de una o más a’s concatenadas. Es equivalente a aa*
• Los paréntesis son utilizados en las expresiones regulares para priorizar la ejecución de operadores
cuando sea necesario
• Prioridades: 1º. Repetición, 2º concatenación, 3º alternativa
Ejemplos de patrones abstractos
Regex Descripción Patrones válidos
ab
abc* a seguida de b seguida de cero o más c’s abc
abcccccccccc
a
b

Descripción ambigua
Descripción precisa

(a|b)+ Secuencias de al menos una a’s o b’s en cualquier orden aaaa


bb
ababaaabbababb
yz
x*yz+ Cero o más x’s, seguidas de una y, seguida de una ó más z’s xyz
xxxyzzzzz
a
b
a|b* Una a o cero o más b’s bbbbb
“nada”
z
z(zz)* Secuencia con un número impar de z’s zzz
zzzzzzz
Ejemplos de patrones que identifican elementos
del léxico de un lenguaje de programación

• Números enteros decimales sin signo: (0|1|2|3|4|5|6|7|8|9)+

• Números enteros decimales con signo: (+|-|e)(0|1|2|3|4|5|6|7|8|9)+

• Palabra reservada: if

• Identificador de variable: (A..Z|a..z)(A..Z|a..z|0..9|_ )*

• Operador de incremento: ++
EJERCICIO

Describe con una expresión regular el patrón de tamaño par que


permite secuencias de a’s, b’s y c’s en cualquier orden.

Ejemplos de patrones válidos:


abca
bb
bababacc ((a|b|c)(a|b|c))+
ccca
abcbccbcba
Regex en la práctica…
[\w._%+-]+@[\w.-]+\.[a-zA-Z]{2,4}

• Muchas interfases permiten hacer búsquedas con regex…


• Muchos lenguajes de alto nivel, proveen librerías para facilitar la programación de
búsqueda de patrones con regex…
• Utilizan una notación extendida con más operadores y reglas de uso:
• Punto .
• Admiración !
• Interrogación ?
• Corchetes [ ]
• Barra inversa \
• Signo de dinero $
Circunflejo ^

https://www.regextester.com/
https://content.breatheco.de/es/lesson/regex-tutorial-regular-expression-examples
Autómatas
• Un autómata es un modelo matemático
formal que sirve para describir un proceso
de transformación (computacional) de una
entrada en una salida.
• Se categorizan dependiendo del tipo de
problemas que pueden resolver (capacidad
o potencia computacional):
• Autómatas finitos (menor potencia)
• Autómatas de pila
• Máquinas de Turing (mayor potencia)
• A su vez, pueden ser Deterministas (AFD)
o NO deterministas (AFN)
Definición de un Autómata finito

• Se describe con base en los estados del proceso y las transiciones entre
los estados según los datos de entrada, hasta llegar a un estado de
aceptación o rechazo.
• Matemáticamente se define con la quíntupla: (Q, S, d, q0, F)
donde:
• Q es el conjunto de estados del autómata
• S es el alfabeto o conjunto de símbolos de entrada
• d es la función de transiciones
• q0 es el estado inicial
• F es el conjunto de estados finales (aceptores o de rechazo)
Los autómatas se
pueden representar
gráficamente mediante
diagramas de estado o
transiciones (grafos)

(Q, S, d, q0, F)
Q = {q0, q1, q2, q3} d(q0, b, q1)
d(q0, b, q2)
S = {a, b} d(q1, a, q0)
F = {q0, q3} d(q2, a, q3)
d(q3, b, q0)
Autómata finito NO determinista, pues un mismo símbolo lleva a dos estados diferentes
¿Cuáles son los patrones
que reconoce el
autómata? e
ba
bab
baba
babba
bababa
babbaba

Autómata finito NO determinista, pues un mismo símbolo lleva a dos estados diferentes
EJEMPLO:
Controlador de
puerta con pago

• La máquina sólo acepta


monedas de 5, 10 o 25.
• NO da cambio.
• La puerta se abre cuando
el usuario ha depositado
25.

Maheshwari, A., & Smid, M. (2019). Introduction to Theory of Computation.


Ottawa: School of Computer Science, Carleton University. https://cglab.ca/~michiel/TheoryOfComputation/
Los autómatas finitos
son una forma de
representar a los
lenguajes regulares…

por lo tanto, tienen


una equivalencia con
las expresiones
regulares
Equivalencia de Regex con AFs

• Concatenación ab q0
a
q1
b
q2

a
• Alternativa a|b q0 q1

• Cerradura de Kleen a* q0
a

a a
• Cerradura positiva a+ q0 q1
Ejercicio:
¿Cuál es el lenguaje representado por este autómata?
Descríbelo con una regex

¿Qué pasaría si F = {q2}?

a*b+c+ | a*c+
equivalente a a*b*c+

a* | a*b |
+ a*b c |
+ + a*c equivalente a a*b*c*
+
A practicar…
¿Cuál es el autómata finito de cada regex?
Regex Descripción Patrones válidos AFD
ab a b c
abc* a seguida de b seguida de cero o más c’s abc
abcccccccccc
1 2 3

a
b
Secuencias de al menos una a’s o b’s en cualquier a, b a, b
(a|b)+ orden
aaaa
bb
1 2

ababaaabbababb
yz
Cero o más x’s, seguidas de una y, seguida de una ó
x*yz+ más z’s
xyz
xxxyzzzzz
a
b a
a|b* Una a o cero o más b’s
b
bbbbb 1 2
“nada”
z
z(zz)* Secuencia con un número impar de z’s zzz
zzzzzzz
¿Cuáles son los autómatas finitos que identifican
elementos del léxico de un lenguaje de programación?

• Números enteros decimales sin signo: (0|1|2|3|4|5|6|7|8|9)+

• Números enteros decimales sin signo: (+|-|e)(0|1|2|3|4|5|6|7|8|9)+

• Palabra reservada: if

• Identificador de variable: (A..Z|a..z)(A..Z|a..z|0..9|_ )*

• Operador de incremento: ++

https://automatonsimulator.com/
AFD vs AFN
(Determinismo vs No determinismo)

• Un AFD es aquel que TODAS sus transiciones son con símbolos diferentes
a estados diferentes.
• En un AFN puede haber transiciones con un mismo símbolo de un estado a
estados diversos, y también puede haber transiciones épsilon (sin símbolo).
• Los AFD son programables, los AFN NO se pueden programar.
• Los AFN son más cómodos para diseñar reconocimiento de patrones.
• Todo AFN tiene un AFD equivalente y viceversa.
• Todo AFN se puede convertir en un AFD para después ser programado.
Aplicación de las herramientas…

Autómata Autómata Scanner


Expresión
finito NO finito Analizador de
regular
determinístico determinístico Léxico

También podría gustarte