Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de métodos
computacionales
Primer período
Entendiendo
a los lenguajes de programación…
Expresiones regulares
y Autómatas finitos
Recursivamente
enumerables
• 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
• Palabra reservada: if
• Operador de incremento: ++
EJERCICIO
• 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
• 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
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?
• Palabra reservada: if
• 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…