Este documento describe el análisis léxico y las expresiones regulares. Explica que el análisis léxico reconoce cadenas y divide los tokens en unidades de información como palabras, símbolos e identificadores. Luego describe las expresiones regulares que representan conjuntos de cadenas de un lenguaje y los autómatas finitos que reconocen cadenas dadas por expresiones regulares mediante estados y transiciones.
2. ANÁLISIS LÉXICO
• OBJETIVO: Reconocimiento de cadenas
• TOKENS: Secuencia de caracteres que
representan una unidad de información de un
lenguaje:
– Palabras reservadas: var, while, for, etc
– Símbolos: (), -,*,>,<,=, $
– Identificadores: nombres de variables -> $edad
3. ANÁLISIS LÉXICO
• CAMPOS DE UN TOKEN:
– Valor de cadena o lexema (uno o varios)
Ejm:
Token WHILE, su valor de cadena es while
Token digito, su valor de cadena es “2”, “35”, “1456”
– Valor numérico
Token digito, si su valor de cadena es “1456”, su valor numérico es 1456
Tabla de símbolos:
Nombre $a
Valor de cadena “1456”
Valor numérico 1456
EXPRESIONES REGULARES Y AUTÓMATAS
5. EXPRESIONES REGULARES
LENGUAJE ALFABETO SIMBOLOS NÚMERO
ESPAÑOL [A—Z][a—z] “#$%/()¨*´ [0—9]
ITALIANO 21 letras menos ñ, j,k,w,x Apóstrofe (‘) [0—9]
L = Lenguaje
∑ = alfabeto (símbolos y números)
W = cadena
W = combinación de alfabeto, símbolos y números
Longitud de cadena: número de elementos de la cadena
|w| |abc| =3 ||=0 =ᵋ
Conjunto de todas las cadenas de un lenguaje sobre un alfabeto ∑ , se denomina
CERRADURA ∑*
Si ∑ =,a-, entonces ∑* = ,Ɛ, a, aa, aaa, aaaa, aaaaa, …-
6. EXPRESIONES REGULARES
L(a) = {a}
L(Ɛ) = {Ɛ}
L(ɸ) = { }
• Operaciones:
– Selección: a|b
• L (a|b) = L(a) U L(b) = {a}U{b} = {a,b}
– Concatenación: Sin símbolo entre ellos
• L(a)L(b) = {a}{b} = {ab}
• L((a|b)c) = L(a|b)L(c)={a,b}{c} = {ab, bc}
– Repetición: * (cerradura de Kleene)
• L(a*) = a, aa, aaaa….
Lenguaje regular conjunto de cadenas que pueden generarse solo a partir de
la concatenación, selección y repetición de una expresión regular
7. EXPRESIONES REGULARES
EJERCICIOS
(a|b|c|d|e) = {a,b,c,d,e}
(a|b*) = a, b, bb, bbb
¿Esta expresión (ab| c )* puede generar una cadena con
2 “bes” juntas ?
¿Esta expresión (a|b*)*d puede generar la cadena Ɛ, a,
b?
8. EXPRESIONES REGULARES
• Precedencia
1. Repetición
2. Concatenación
3. Selección
a|bc* -> (a|b)c* (a|bc)*
(a|(b(c*)))
Los paréntesis permiten cambiar la precedencia de los
operadores.
9. EXPRESIONES REGULARES
1. Ejercicios
Considerando la precedencia de los operadores,
determine al menos 10 cadenas válidas para la
siguiente expresión:
ab|c*d
a) ¿Genera cadenas tipo abababab?
b) ¿Genera cadenas que no terminen en d?
c) ¿Genera cadenas tipo abdabdabd?, si la
respuesta es no, ¿qué cambios debería hacerse a
la expresión para que genere estas cadenas?
10. EXPRESIONES REGULARES
NOMBRES PARA EXPRESIONES REGULARES
Identificador que denota un conjunto de alternativas en una
expresión
Expresión para números (0|1|2|3|4|5|6|7|8|9)*
Expresión para palabras (a|b|c|d|e|…………|z)*
digito* = {Ɛ, 0,1,3,11,12,34, ...} digito= “Definición regular”
digito digito* = ,0, 1, 3, 23,45, 2345,…..-
digito digito* = digito+
digito* no es expresión que genera: digito, digitoo, digitoooo
11. EXPRESIONES REGULARES
Si ∑= {a,b,c} obtenga una expresión regular para:
EJERCICIOS:
Ejemplo 2.1 Ejemplo 2.2
Conjunto de todas las cadenas que Conjunto de todas las cadenas que
contengan exactamente 1 b contienen como máximo una b
No pueden existir cadenas sin 1 b
Una cadena puede o no tener “b”
pero máximo 1
b
b(a|c) = ba,bc ¿y “bac” o “baa”? (a|c)*b(a|c)*
b(a|c)* = ba, bc, baa, bcc, bac, baac
¿y aba, abc, cba? “Puede o no”
( (a|c)*b(a|c)*)| (a|c)*
(a|c)*b(a|c)*
12. EXPRESIONES REGULARES
EJERCICIOS: Qué conjunto de cadenas reconoce esta expresión:
Ejemplo 2.5 Ejemplo
Revisar b*(ab*ab*)*, Si ∑= ,a,b,c}
13. EXPRESIONES REGULARES
EJERCICIOS: Qué conjunto de cadenas reconoce esta expresión:
Ejemplo 2.5 Ejemplo
Revisar b*(ab*ab*)*, Si ∑= ,a,b,c}
Long. 0 Long. 1 Long 2 Long. 3 Long. 4 Long.5 Lon6.
Ɛ b aa baa baab babab ababaa
aba abab abbab aaaaaa
Aab baba ababb
…
Cadenas con 2 “a’s”
Cadenas con un número par de “a´s”
14. EXPRESIONES REGULARES
EXTENCIONES PARA LAS EXPRESIONES REGULARES
1. Una o más repeticiones: “+”
a+ = {a, aa, aaa} 1 o más
a*= {Ɛ , a, aa, aaa} 0 o más
2. Cualquier caracter del alfabeto: “.”
∑= ,a,b,c,d,e,f,g}
.c. cadenas con cualquier carácter que tienen una c entre ellos
3. Intervalo “ *+” *A - Z]
4. Cualquier carácter que no esté en un conjunto
dado ~(a) : que no sea a
15. EXPRESIONES REGULARES
EJERCICIOS: Para un lenguaje con alfabeto: ∑= ,a,b}
1. Construir una expresión regular para un
conjunto de cadenas que tenga un número
impar de a’s
2. Construir una expresión regular para un
conjunto de cadenas que tenga un múltiplo de 3
de a´s
17. QUÉ ES UN AUTÓMATA
• Autómatas finitos: permiten reconocer las
cadenas dadas por las expresiones.
• Máquina conceptual, que está en capacidad de
procesar básicamente cadenas
• Aplicaciones: Reconocedores de lenguaje (análisis
léxico) y comparación de cadenas (buscar de
word)
• Para procesar las cadenas es necesario partir de
un alfabeto. La concatenación de símbolos de un
alfabeto, nos da una palabra. Un lenguaje es un
conjunto de palabras formadas sobre un alfabeto
18. Autómatas finitos
• Un conjunto de estados y transiciones entre esos estados.
• Su tarea es reconocer una construcción de una palabra o
una cadena.
• Finito quiere decir que tiene un tamaño limitado.
• Es una tupla compuesta por 5 elementos:
– Q, conjunto de estados
– Conjunto de símbolos de entrada (símbolos que va a reconocer.)
– Transición
– Estado inicial
– {} de estados finales (estado donde el autómata puede terminar
su reconocimiento)