Práctica 2 (15/9)
Orden del día#
- Repaso DFA con ppt (30')
- Ejercicios clásicos de DFA interactivos (draw.io) (15')
- Ejemplo de autómata de un lenguaje y cómo lo hago (10')
- Ejercicio interactivo en que diseñan el parser de un lenguaje (15')
- Explicación de la primera parte del lab 1 (30')
- Hacer parte 1 de forma interactiva (30')
Repaso de DFA#
Notación#
| símbolo | significado |
|---|---|
a | se requiere una a |
| `M | N` |
(MN) | grupo: o se captura MN o no se captura nada |
MN | Concatenación: N luego de M |
M* | Clausura de Kleine: M Se repite 0 o más veces |
M+ | Repetición: M Se repite una o más veces |
M? | Opcional: M Se repite 0 ó una vez |
. | Se requiere cualquier caracter |
[abc] | Equivalente a `a |
[a-f] | Equivalente a [abcdef] |
y mucho más...
Autómatas finitos Determinísticos (DFA)#
Un DFA se cocina con:
- Alfabeto
- Conjunto de estados
- Función de transición
- Estado inicial
- Estados de aceptación
Ejemplo#

- Todo el domínio de tiene imagen.
- Nosotros además validamos: 1 es un dead state.
Cómo llegar al lexer#

Autómatas finitos no determinísticos (NFA)#
- transiciones
- transiciones repetidas

De expresión regular a NFA (tiger fig 2.6)#

De expresión regular a NFA (ejemplo Louden 2.16)#

Actividad interactiva (Louden pg 95)#
Para cada actividad (cada uno hace una):
- Escribir la regex y testearla en regexr.com
- Escribir el autómata en draw.io
- nos comparten pantalla y nos muestran la regex y el diagrama en 15', dentro de 10'. Cada uno hace una distinta. Los demás me lo mandan a slack por DM.
Ejemplo#
Cadenas del alfabeto con un número par de .
Actividades#
- strings que comienzan y finalizan en
a - strings que no contienen
0al principio - strings que representen números pares
- strings que representen números donde todos los
9aparezcan antes que todos los9 - Todas las cadenas de
aybque no tengan tresbconsecutivas - Todos los strings de
aybque contengan un número impar deao un número impar deb(o ambos) - All strings of lowercase letters that contain the five vowels in order.
- Comments, consisting of a string surrounded by / and / , without an intervening */, unless it is inside double-quotes ( " )
Cómo conseguir un lenguaje#
Unir regexes con .

De los estados IF, ID, NUM debería salir un "dead state".
Ejemplo: lenguaje FORTALEZA#
(FO)+F+FORFORTALEZA
Ejemplo interactvo: Lenguaje SELE#
SELECTSELENIUM- identificadores (pueden tener dígitos)
- números enteros
Los tokens se separan con guiones (-). Los espacios son ilegales.