Especificación de Símbolos - UMAG

26
Especificación de símbolos Dr. Julio J. Águila G. 17 de agosto de 2004 Última revisión: 21 de agosto de 2019

Transcript of Especificación de Símbolos - UMAG

Page 1: 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

Page 2: Especificación de Símbolos - UMAG

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.

Page 3: Especificación de Símbolos - UMAG

29/08/2019 Especificación de símbolos 3

Componentes léxicos, patrones y lexemas

Page 4: Especificación de Símbolos - UMAG

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.

Page 5: Especificación de Símbolos - UMAG

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}.

Page 6: Especificación de Símbolos - UMAG

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 .

Page 7: Especificación de Símbolos - UMAG

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.

Page 8: Especificación de Símbolos - UMAG

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.

Page 9: Especificación de Símbolos - UMAG

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.

Page 10: Especificación de Símbolos - UMAG

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.

Page 11: Especificación de Símbolos - UMAG

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.

Page 12: Especificación de Símbolos - UMAG

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.

Page 13: Especificación de Símbolos - UMAG

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.

Page 14: Especificación de Símbolos - UMAG

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.

Page 15: Especificación de Símbolos - UMAG

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”.

Page 16: Especificación de Símbolos - UMAG

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).

Page 17: Especificación de Símbolos - UMAG

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

Page 18: Especificación de Símbolos - UMAG

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.

Page 19: Especificación de Símbolos - UMAG

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

Page 20: Especificación de Símbolos - UMAG

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 ) *

Page 21: Especificación de Símbolos - UMAG

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

Page 22: Especificación de Símbolos - UMAG

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*

Page 23: Especificación de Símbolos - UMAG

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) {}.

Page 24: Especificación de Símbolos - UMAG

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.

Page 25: Especificación de Símbolos - UMAG

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)*

Page 26: Especificación de Símbolos - UMAG

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