Especificación de Símbolos - UMAG
Transcript of Especificación de Símbolos - UMAG
Especificación de símbolos
Dr. Julio J. Águila G.
17 de agosto de 2004
Última revisión: 21 de agosto de 2019
29/08/2019 Especificación de símbolos 2
Contenidos
Componentes léxicos, patrones y lexemas.
Clasificación de los lenguajes.
Teoría de lenguajes.
Lenguajes regulares.
29/08/2019 Especificación de símbolos 3
Componentes léxicos, patrones y lexemas
29/08/2019 Especificación de símbolos 4
Clasificación de los lenguajes
Según Chomsky ( desde los más complejos a los más fáciles de definir):
• Tipo 0: problemas recursivamente enumerables.
• Tipo 1: dependientes del contexto.
• Tipo 2: independientes del contexto, e.g. lenguajes de programación.
• Tipo 3: regulares, e.g. patrones para especificar símbolos.
29/08/2019 Especificación de símbolos 5
Teoría de lenguajes: alfabeto o ∑
Un alfabeto es cualquier conjunto finito de símbolos, e.g.:
• Alfabeto binario: ∑= {0, 1}.
• Alfabeto de dígitos: ∑= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.
• Alfabeto de letras: ∑= { A, B, C, ..., X, Y, Z, a, b, c, ..., x, y, z}.
29/08/2019 Especificación de símbolos 6
Teoría de lenguajes: cadena
Una cadena es una secuencia finita de símbolos tomados de un alfabeto, y es sinónimo de frase o palabra.
• Cadena de un alfabeto binario: s= {00001010}
• Cadena de un alfabeto de dígitos: s= {20190826}
• Cadena de un alfabeto de letras: s= {agosto}
Existe una cadena especial llamada cadena vacía que existe para
cualquier Alfabeto y se denota por el símbolo o el símbolo .
29/08/2019 Especificación de símbolos 7
Teoría de lenguajes: longitud de una cadena
La longitud de una cadena es el número de apariciones de símbolos en s. Se denota como |s| y se lee como “norma de s”. Por ejemplo:
• Para un alfabeto binario: |00001010| = 8.
• Para un alfabeto de dígitos: |20190826| = 8.
• Para un alfabeto de letras: |agosto| = 6.
• Para cualquier alfabeto: || = 0.
29/08/2019 Especificación de símbolos 8
Teoría de lenguajes: lenguaje Un lenguaje es cualquier conjunto de cadenas válidas que se obtienen
desde un alfabeto fijo. Por ejemplo:
• El lenguaje de máquina M = {conjunto de cadenas binarias que pueden
ser interpretadas por el computador}. Cada sentencia que puede ser
interpretada es una cadena.
• El lenguaje de los números naturales N = {conjunto de cadenas formadas
por dígitos}. Cada número es una cadena.
• El lenguaje del léxico español L = {conjunto de cadenas formadas por
letras}. Cada palabra que tiene un significado es una cadena.
Nótese que en el lenguaje de máquina y en el lenguaje del léxico español
se pueden formar cadenas no válidas a partir del alfabeto fijo.
29/08/2019 Especificación de símbolos 9
Teoría de lenguajes: lenguaje
Existen dos lenguajes especiales en teoría de lenguajes:
• = lenguaje vacío
• {} = lenguaje que solo contiene la cadena vacía.
NOTA: nótese que pueden existir conjuntos finitos e infinitos de cadenas válidas para un lenguaje. Por ejemplo: el lenguaje de artículos en español solo con letras minúsculas L = { el, la, los, las, un, una, unos, unas} y su ∑= { a, e, o, u, l, n, s}. Curiosamente, el alfabeto puede considerarse a sí mismo como un lenguaje finito formado por cadenas de longitud 1.
29/08/2019 Especificación de símbolos 10
Teoría de lenguajes: definiciones
Definición
Si x e y son cadenas la concatenación de x e y se escribe como xy y es la cadena que resulta de agregar y a x. Por ejemplo, si x = caza e y = fortunas entonces xy = cazafortunas.
Definición
La cadena es el elemento identidad que se concatena. Sea s una
cadena cualquiera, entonces se cumple que s = s = s.
29/08/2019 Especificación de símbolos 11
Teoría de Lenguajes: Definiciones
Definición
Sea s una cadena cualquiera. La exponenciación de cadena se define como:
s0 =
si = si-1s , i > 0
Entonces:
s1 = s0s = s = s
s2 = s1s = ss
s3 = s2s = sss
etc.
29/08/2019 Especificación de símbolos 12
Operaciones con lenguajes
OPERACIÓN DEFINICIÓN
Unión de L y M, que se
escribe L M L M = {s| s está en L o s está
en M}
Concatenación de L y M, que se escribe LM
LM = {st| s está en L y t está en M}
Cerradura de Kleene de L,
que se escribe L*
i
i
LL
0
*
L* denota “cero o más concatenaciones de” L.
Cerradura positiva de L, que
se escribe L+
i
i
LL
1
L+ denota “una o más
concatenaciones de” L.
29/08/2019 Especificación de símbolos 13
Operaciones con lenguajes: ejemplos
Sea L = {A, B, ..., Y, Z, a, b, ..., y, z} y D = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Se puede considerar L y D como dos alfabetos o como dos lenguajes finitos que tienen cadenas de longitud uno. Entonces:
1. L D es el conjunto de letras y dígitos.
2. LD es el conjunto de cadenas que consta de una letra seguida de un dígito.
3. L4 es el conjunto de todas las cadenas de cuatro letras.
4. L* es el conjunto de todas las cadenas de letras, incluyendo , la cadena vacía.
5. L(LD)* es el conjunto de todas las cadenas de letras y dígitos que comienzan con una letra.
6. D+ es el conjunto de todas las cadenas de uno o más dígitos.
29/08/2019 Especificación de símbolos 14
Lenguajes regulares
Los seis ejemplos de la diapositiva anterior corresponden a seis nuevos lenguajes formados a partir de L y D. Todos estos lenguajes corresponden al Tipo 3 de Chomsky, i.e. todos son lenguajes regulares.
Para manejar estos lenguajes de forma práctica se introduce el término de expresiones regulares.
29/08/2019 Especificación de símbolos 15
Expresiones regulares
En Pascal, un identificador es una letra seguida de cero o más letras o dígitos; i.e. un identificador es un miembro del conjunto definido por la notación del ejemplo L(LD)* en teoría de lenguajes. Con expresiones regulares se pueden definir de manera precisa conjuntos como este. Con la notación de expresión regular se pueden definir los identificadores de Pascal como:
letra(letra|digito)*
Que se puede leer como “una letra seguida de cero o más letras o dígitos”.
29/08/2019 Especificación de símbolos 16
Reglas de definición para e.r.
Las siguientes son las reglas que definen las expresiones regulares del alfabeto .
1. es una e.r. designada por {}.
2. Si a a es una e.r. designada por {a}.
3. Si r y s son e.r. representadas por L(r) y L(s)
• (r)|(s) es una e.r. representada por L(r) L(s).
• (r)(s) es una e.r. representada por L(r)L(s).
• (r)* es una e.r. representada por (L(r))*.
• (r) es una e.r. representada por L(r).
29/08/2019 Especificación de símbolos 17
Precedencia de los operadores
Se pueden omitir los () de una expresión regular siguiendo las siguientes reglas.
1. El operador * tiene la mayor precedencia y es asociativo por la izquierda.
2. La concatenación tiene la segunda mayor precedencia y es asociativo por la izquierda.
3. El operador | tiene la menor precedencia y es asociativo por la izquierda.
Por ejemplo (a)|((b)*(c)) a|b*c
29/08/2019 Especificación de símbolos 18
Ejemplos de e.r.
Sea = {a, b}.
1. a|b {a, b}
2. (a|b)(a|b) {aa, ab, ba, bb}
3. aa|ab|ba|bb {aa, ab, ba, bb}
4. a* {, a, aa, aaa, aaaa, ...}
5. (a|b)* (a*b*)*, es el conjunto de todas las cadenas formadas por a y b, incluida la cadena vacía.
6. a|a*b, es el conjunto que contiene la cadena a y todas las que se componen de cero o más a seguidas de una b.
29/08/2019 Especificación de símbolos 19
Propiedades Algebraicas A X IO M A D E S C R IP C IÓ N
r |s = s |r | e s c o n m u ta tiv o
r |(s |t) = ( r |s ) |t | e s a s o c ia tiv o
( rs ) t = r (s t) L a c o n c a te n a c ió n e s a s o c ia tiv a
r (s |t) = rs |r t
(s |t) r = s r |tr
L a c o n c a te n a c ió n d is tr ib u ye s o b re |
r = r
r = r
e s e l e le m e n to id e n tid a d p a ra la
c o n c a te n a c ió n
r* = ( r | )* L a re la c ió n e n tre * y
r * * = r* * e s id e m p o te n te
29/08/2019 Especificación de símbolos 20
Definiciones regulares
Sea: d1 r1
d2 r2
...
dn rn
Donde cada di es un nombre distinto, y cada ri es una expresión regular sobre los símbolos de {d1, d2, ..., di-1}. Entonces:
letra A | B | ... | Z | a | b | ... | z
dígito 0 | 1 | 2 | ... | 9
id letra ( letra | dígito ) *
29/08/2019 Especificación de símbolos 21
Aplicación definiciones regulares
Los números sin signo en Pascal son cadenas como 5280, 39.37, 6.336E4 o 1.89E-4. La siguiente definición regular proporciona una especificación precisa para esta clase de cadenas:
dígito 0 | 1 | ... | 9
dígitos dígito dígito*
fracción_optativa . dígitos |
exponente_optativo ( E ( + | - | ) ) dígitos ) |
núm dígitos fracción_optativa exponente_optativo
29/08/2019 Especificación de símbolos 22
Cerradura positiva
El operador unitario postfijo + significa “uno o más casos de”. Si r es una expresión regular que designa al lenguaje L(r), entonces (r)+ es una expresión regular que designa al lenguaje (L(r))+. El operador + tiene la misma precedencia y asociatividad que el operador *. Las dos identidades algebraicas que relacionan la cerradura de Kleene y la cerradura positiva son las siguientes:
r* = r+ |
r+ = r r*
29/08/2019 Especificación de símbolos 23
Expresión opcional
El operador unitario postfijo ? significa “cero o un caso de”. La notación r? Es una abreviatura de r|. Si r es una expresión regular, entonces (r)? es una expresión regular que designa el lenguaje L(r) {}.
29/08/2019 Especificación de símbolos 24
Clases de caracteres
Las clases de caracteres usan la notación [abc], donde a, b y c son símbolos del alfabeto, [abc] designa la expresión regular a | b | c. Una clase abreviada de carácter como [a-z] designa la expresión regular a|b|c| ... |x|y|z. Utilizando clases de caracteres se puede definir los identificadores como cadenas generadas por la expresión regular:
[A-Za-z][A-Za-z0-9]*
Y en el caso de la exclusión de caracteres utilizamos el operador ^, e.g. [^abc] cualquier cosa excepto a, b y c.
29/08/2019 Especificación de símbolos 25
Expresiones simplificadas
Aplicando clases de caracteres, podemos reescribir la definición de identificador en Pascal como:
dígito [0-9]
letra [A-Za-z]
id letra(letra|dígito)*
29/08/2019 Especificación de símbolos 26
Expresiones simplificadas
Aplicando clase de caracteres, operador opcional y la cerradura positiva, podemos reescribir la definición de número sin signo en Pascal sin utilizar ε en las definiciones:
dígito [0-9]
dígitos dígito+
fracción_optativa (. dígitos)?
exponente_optativo ( E ( + | - )? ) dígitos )?
núm dígitos fracción_optativa exponente_optativo