Especificación de componentes léxicos

Post on 30-Oct-2014

153 views 3 download

Tags:

Transcript of 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

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

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

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

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.

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}

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.

S1 = {0,1}

Ejemplos de cadenas para el alfabeto S1.

0101

1

0001111010

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

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.

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

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:

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

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+

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.

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.

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.

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.

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.

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

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.

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.

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

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

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.

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.

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

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.

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.

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

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

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.

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

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

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.

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