1 Expresion Es Regulares
1 Expresion Es Regulares
1 Expresion Es Regulares
1. Si r ∈ Σ, L(r) = {r}
2. L(ε) = {ε}
3. L(Φ) = ∅ = {}
4. L(r|s) = L(r) ∪ L(s) = {r} ∪ {s} = {r, s}
5. L(rs) = L(r)L(s) = {rs}
6. L(r*) = L(r)* = {r}* = {ε, r, rr, rrr, rrrr, rrrrr, ...}
7. L((r)) = L(r) = {r}
Operaciones básicas y precedencia
● Selección de alternativas: Se indica mediante la barra vertical (|) o pleca
● Concatenación: Se indica mediante la yuxtaposición de caracteres
● Repetición (cerradura o clausura de Kleene): Se indica mediante el asterisco
(*) y la expresión regular r* genera el conjunto L(r*) = {ε, r, rr, rrr, rrrr, rrrrr, ...}.
Equivale a cero o más repeticiones del carácter r.
Propiedades de la unión o selección de alternativas
Sean r, s, t expresiones regulares:
S* = {ε} ∪ S ∪ SS ∪ SSS ∪ …
Σ = {a, b, c}
y escriba una expresión regular que genere el conjunto de todas las cadenas
sobre Σ que contienen sólo una b.
Ejemplo 2:
Indique al menos ocho elementos del lenguaje generado L por la expresión
regular anterior.
Ejemplo 3:
Considere el alfabeto (Σ) constituido solo por tres caracteres
Σ = {a, b, c}
y escriba una expresión regular que genere el conjunto de todas las cadenas
sobre Σ que contienen como máximo una b.
Ejemplo 4:
Considere el alfabeto (Σ) constituido solo por tres caracteres
Σ = {a, b, c}
y la expresión regular
((b|c)*a(b|c)*a)*(b|c)*
e indique una descripción concisa en español del lenguaje generado por dicha
expresión.
Ejemplo 5:
Encuentre expresiones regulares que representen los siguientes lenguajes,
definidos sobre el alfabeto Σ = {0, 1}:
r|(s|t) = (r|s)|t
Ejemplo 7:
Considere el alfabeto
Σ = {a, b, c}
y escriba una expresión regular que genere el conjunto de todas las cadenas
sobre Σ que no contienen dos b consecutivas.
Definiciones 1
Nombres de expresiones regulares
A menudo es útil como una forma de simplificar la notación proporcionar un
nombre para una expresión regular larga (definición regular), de modo que no
tengamos que escribir la expresión misma cada vez que deseemos utilizarla.
digito = 0|1|2|3|4|5|6|7|8|9
Lenguaje generado:
L(digito) = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Intervalo o clases de caracteres
Secuencia de caracteres entre corchetes. Los caracteres pueden listar uno al lado
de otro o separados por guión. El intervalo de caracteres [0-9] indica los
caracteres consecutivos desde el cero hasta el 9.
Ejemplos:
● [0-9] = 0|1|2|3|4|5|6|7|8|9
● [abc] = a|b|c
● [a-z] = a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
● [A-Z] = A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
● [a-zA-Z] = [a-z]|[A-Z]
● [a-zA-Z0-9] = [a-z]|[A-Z]|[0-9]
Ejemplo 8:
Considere el alfabeto (Σ) constituido por los caracteres
Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
y escriba una expresión regular que genere las cadenas que representan todos
los números naturales.
Operador +: Una o más repeticiones
La expresión regular r+ indica que el carácter r se repite una o más veces. Por
tanto, no admite la cadena vacía. Así, el lenguaje generado por r+ es:
rr* = r+ ó r* = ε|r+
● natural = [0-9]+
Ejemplo 9:
Considere el alfabeto (Σ) constituido por los caracteres
Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
y escriba una expresión regular que genere las cadenas que representan los
números naturales pero ninguna cadena puede iniciar con cero, excepto la
cadena que representa el cero.
Ejemplo 10:
Considere el alfabeto (Σ) constituido por los caracteres
Σ = {+, -, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
y escriba una expresión regular que genere las cadenas que representan todos
los números enteros pero ninguna cadena puede iniciar con cero (excepto la
cadena que representa el cero) y cada cadena puede estar precedida o no por
solo uno de los símbolos ’+’ o ‘-’.
Por ejemplo, las siguientes cadenas son válidas {487, +234, -195} y las siguientes
cadenas no son validas {++23, 4+32, --125, 3+45--21}
Operador ?: Subexpresiones opcionales
El operador indica que una subexpresión puede ocurrir o no. Por ejemplo, la
expresión regular r? equivale a
r? = ε|r
● natural = [0-9]+
● entero= (’+’|-)? natural
Ejemplo 11:
Escriba una expresión regular para especificar un identificador (variable,
constante, nombre de función o nombre de clase) válido en un lenguaje de
programación.
L((a|b)(c|d))
● Liste al menos ocho cadenas generadas por cada una de las siguientes
expresiones regulares, sobre el alfabeto Σ = {a, b}:
○ L(ab*)
○ L(a*b*)
○ L((a|b)*)
○ L(a*|b*)
Ejercicios (2/6)
● Considere el alfabeto Σ = {a, b} y escriba una expresión regular que genere el
lenguaje de todas las cadenas que:
○ Tienen exactamente una a
○ Comienzan con el símbolo b y terminan con el símbolo a.
○ Tienen un número par de símbolos (cadenas de longitud par)
○ Tiene exactamente dos aes
○ Tiene al menos dos a
○ No terminan con la subcadena ab
○ Tienen un número par de aes
○ Tienen un número impar de bes
● Muestre que r(s|t) = rs|rt
● La siguiente igualdad, ¿es verdadera o falsa?: L(r?) = L(ε|r)
Ejercicios (3/6)
● Liste al menos ocho cadenas generadas por cada una de las siguientes
expresiones regulares, sobre el alfabeto Σ = {r, s, t}:
○ L(r|st*)
○ L(r|s*t)
○ L((r|s)*t)
● Escriba expresiones regulares para los siguientes conjuntos de caracteres
sobre Σ = {a, b, …, z} o explique las razones por las que no se pueden
escribir:
○ Todas las cadena de letras minúsculas que comiencen y finalicen con a.
○ Todas las cadena de letras minúsculas que o comiencen o finalicen con a (o ambas).
○ Todas las cadenas de dígitos que no tengan ceros al principio.
○ Todas las cadenas de dígitos que representen números pares.
Ejercicios (4/6)
● Escriba una descripción en español para la siguiente expresión regular:
○ [A-Z][a-z]*
○ (0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F)+(x|X)
● Escriba una expresión regular para cadenas (palabras) que contengan al
menos dos vocales consecutivas.
● Escriba la expresión regular para especificar un número real positivo.
● Escriba la expresión regular para especificar un número real (positivo o
negativo).
● Demuestre que: r+ = rr*
● Escriba una expresión regular que genere todas las cadenas de a y b que no
contengan tres b consecutivas.
Ejercicios (5/6)
● Escriba la expresión regular para especificar un comentario de línea al estilo
Java.
● Escriba una expresión regular para especificar un número de celular que
tenga la forma:
(300) 329-47-61