Especificación de componentes léxicos

35
22/09/2011 Ing. Jorge Luis Chuc López 1 Análisis Léxico Ing. Jorge Luis Chuc López Facultad de Ingeniería Universidad Autónoma de Campeche

TAGS:

Transcript of Especificación de componentes léxicos

Page 1: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 1

Análisis Léxico

Ing. Jorge Luis Chuc López

Facultad de Ingeniería

Universidad Autónoma de Campeche

Page 2: Especificación de componentes léxicos

Analizador léxico

Lee una secuencia de caracteres de entrada,

Clasifica los caracteres leídos de acuerdo a su tipo

Agrupa los caracteres en una cadena con el objetivo de

Identificar a qué clase de componente léxico pertenece

Devuelve al analizador sintáctico el componente léxico encontrado.

22/09/2011 Ing. Jorge Luis Chuc López 2

Page 3: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 3

Page 4: Especificación de componentes léxicos

If (radio>0) {

area = ( área > 0 ? 1 : 2 ) ;

area1 = 3a.1416 * pow(radio, 2);

cout<<área;

}

if(radio>0){area=(área>0?1:2);area1=3a.1416*pow(radio,2);cout<<área;}

22/09/2011 Ing. Jorge Luis Chuc López 4

Page 5: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 5

Alfabeto

Alfabeto: Un conjunto finito de símbolos, denominado , utilizados en un lenguaje.

Aunque un alfabeto no necesita ser finito ni numerable, en esta propuesta se asume que es finito.

Los elementos de un alfabeto son conocidos como símbolo, letra o carácter.

Page 6: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 6

Ejemplos de alfabetos

Ejemplos de alfabetos:

S1 = {0,1}

S2 = {a,e,i,o,u}

S3 = {a,b,c,…,z}

S4 = {gato, perro, pez, liebre}

S5 = {a,b,…,z,0,1, …, 9}

Page 7: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 7

Cadenas

Cadena: Secuencia finita de símbolos de un alfabeto. Sinónimos: frase, palabra, secuencia.

La longitud de una cadena s, que se escribe |s|, es el número de apariciones de símbolos del alfabeto en la cadena.

La cadena vacía, representada por , es una cadena especial de longitud cero.

Page 8: Especificación de componentes léxicos

S1 = {0,1}

Ejemplos de cadenas para el alfabeto S1.

0101

1

0001111010

22/09/2011 Ing. Jorge Luis Chuc López 8

Page 9: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 9

Cadenas

Si s y t son cadenas, entonces la concatenación de s y t, que se escribe st, es la cadena que resulta de agregar t a la cadena s.

Page 10: Especificación de componentes léxicos

s = 01010

t = 11100

La concatenación de s y t es

st = 0101011100

ts = 1110001010

22/09/2011 Ing. Jorge Luis Chuc López 10

Page 11: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 11

Lenguaje

Lenguaje: Es el conjunto de cadenas de un alfabeto fijo.

Ejemplo: {0,1,00,11,000,111,01,001}

Hay varias operaciones que se pueden aplicar a los lenguajes.

Sean L y M dos lenguajes, entonces pueden definirse las siguientes operaciones:

Page 12: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 12

Operaciones con lenguajes

Operación Se escribe Definición

Unión de L y M L M L M = {s | s está en L o s está en M}

Concatenación de L y M

LM LM = {st | s está en L y t está en M}

Cerradura de Kleene de L

L*

L* denota “cero o más concatenaciones de” L

Cerradura positiva de L

L+

L+ denota “una o más concatenaciones de” L

0

*

Li

iL

1L

i

iL

Page 13: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 13

Ejemplos de operaciones

Sea L = {A, B, C, ..., Z, a, b, c, ..., z} y D={0, 1, 2, 3, ..., 9}. Podemos crear nuevos lenguajes a partir de L y D, mediante la aplicación de los operadores anteriores:

L D

LD

L4

L*

L(L D)*

D+

Page 14: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 14

Expresiones regulares

Las expresiones regulares son medios convenientes para especificar ciertos conjuntos simples (aunque posiblemente infinitos) de cadenas.

Pueden ser utilizadas para especificar la estructura de los componentes léxicos usados en un lenguaje de programación.

Los conjuntos de cadenas definidos por expresiones regulares se denominan conjuntos regulares.

Page 15: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 15

Expresiones regulares

Una expresión regular se construye a partir de expresiones regulares más simples utilizando un conjunto de reglas definitorias.

Cada expresión regular r representa un lenguaje L(r).

Las reglas de definición especifican cómo se forma L(r) combinando de varias maneras los lenguajes representados por las subexpresiones de r.

Page 16: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 16

Expresiones regulares

Las siguientes son las reglas que definen las expresiones regulares del alfabeto .

Asociada a cada regla hay una especificación del lenguaje representado por la expresión regular que se está definiendo.

Page 17: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 17

Expresiones regulares

1. es una expresión regular designada por {}; es decir, el conjunto que contiene la cadena vacía.

Page 18: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 18

Expresiones regulares

2. Si a es un símbolo de , entonces a es una expresión regular designada por {a}; por ejemplo, el conjunto que contiene la cadena a.

Aunque se usa la misma notación para las tres, técnicamente, la expresión regular a es distinta de la cadena a o del símbolo a. El contexto aclarará si se habla de a como expresión regular, cadena o símbolo.

Page 19: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 19

Expresiones regulares

3. Suponiendo que r y s sean expresiones regulares representadas por los lenguajes L(r) y L(s), entonces, (r) | (s) es una expresión regular representada

por L(r) L(s).

(r)(s) es una expresión regular representada por L(r)L(s).

(r)* es una expresión regular representada por (L(r))*.

(r) es una expresión regular representada por L(r).

Page 20: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 20

Ejemplos de lenguajes y expresiones regulares

= {0, 1, .}

(0|1)*.(0|1)*: Números binarios de punto flotante.

(00)*: Cadenas de ceros con longitud par.

(1*01*01*)*: Cadenas con número par de ceros.

= {a, b, c, 0, 1, 2}

(a|b|c)(a|b|c|0|1|2)*: Identificadores alfanuméricos.

(0|1|2)*: Números en base 3.

Page 21: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 21

Expresiones regulares

Para evitar paréntesis innecesarios en las expresiones regulares, se adoptan las siguientes convenciones:

El operador unario * tiene mayor precedencia y es asociativo por la izquierda.

La concatenación tiene la segunda mayor precedencia y es asociativa por la izquierda.

El operador de alternancia, |, tiene la menor precedencia y es asociativo por la izquierda.

Page 22: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 22

Expresiones regulares

Si dos expresiones regulares r y s representan al mismo lenguaje, se dice que r y s son equivalentes y se escribe r = s.

Por ejemplo, (a | b) = (b | a).

Page 23: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 23

Leyes algebraicas para expresiones regulares

Axioma Descripción

r | s = s | r | es conmutativo

r | (s | t) = (r | s) | t | es asociativo

(rs)t = r(st) La concatenación es asociativa.

r (s | t) = rs | rt

(s | t)r = sr | tr

La concatenación distribuye sobre |

r = r

r = r

es el elemento identidad para la concatenación.

r* = (r | )* La relación entre * y

r** = r* * es idempotente

Page 24: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 24

Concepto de lenguaje generado por expresiones regulares

El conjunto de cadenas generados por una expresión regular es un lenguaje regular.

En general, un lenguaje puede ser contablemente infinito.

La cadena en un lenguaje frecuentemente es denominado token.

Page 25: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 25

Definiciones Regulares

Por convenciones de notación puede ser deseable asignar un nombre a una expresión regular y definir expresiones regulares utilizando dichos nombres como si fueran símbolos.

Page 26: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 26

Definiciones Regulares

Si es un alfabeto de símbolos básicos, entonces una definición regular es una secuencia de definiciones de la forma

d1 r1

d2 r2

...

dn rn

Page 27: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 27

Definiciones Regulares

donde cada di es un nombre distinto, y cada ri es una expresión regular sobre los símbolos de {d1, d2, d3, ..., di-1}, por ejemplo, los símbolos básicos y los nombres previamente definidos.

Page 28: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 28

Definiciones Regulares

Al limitar cada ri a los símbolos de y a los nombres previamente definidos, se puede construir una expresión regular en para cualquier ri, reemplazando una y otra vez los nombres de las expresiones regulares por las expresiones que designan.

Es importante destacar que si ri utilizara dj para alguna j i, entonces ri se podría definir recursivamente y este proceso de sustitución no tendría fin.

Page 29: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 29

Definiciones Regulares

El conjunto de identificadores de Pascal puede estar definido mediante las siguientes definiciones regulares

Letra A | B | C | . . . | Z | a | b | c | . . . | z

Dígito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Identificador Letra (Letra | Dígito)*

Page 30: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 30

Definiciones Regulares

Los números sin signo en Pascal pueden ser definidos mediante:

Dígito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Dígitos Dígito Dígito*

FracciónOpcional .Dígitos |

ExponenteOpcional ( E (+ | - | ) Dígitos ) |

Número Dígitos FracciónOpcional ExponenteOpcional

Page 31: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 31

Abreviaturas para definiciones regulares

Uno o más casos. El operador unario + 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 r* = r+ | y r+ = rr* relacionan los operadores de la cerradura de Kleene y los de la cerradura positiva.

Page 32: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 32

Abreviaturas para definiciones regulares

Cero o un caso. El operador unario 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 designa el lenguaje L(r) {}.

Page 33: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 33

Abreviaturas para definiciones regulares

Dígito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Dígitos Dígito+

FracciónOpcional ( .Dígitos )?

ExponenteOpcional ( E (+ | - )? Dígitos )?

Número Dígitos FracciónOpcional ExponenteOpcional

Page 34: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 34

Abreviaturas para definiciones regulares

Clases de caracteres. La notación [abc], donde a, b y c son símbolos del alfabeto, 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 | . . . | z.

Page 35: Especificación de componentes léxicos

22/09/2011 Ing. Jorge Luis Chuc López 35

Abreviaturas para definiciones regulares

Dígito [0-9]

Dígitos Dígito+

FracciónOpcional ( .Dígitos )?

ExponenteOpcional ( E (+ | - )? Dígitos )?

Número Dígitos FracciónOpcional ExponenteOpcional