Upload
manuel-alejandro-tovar-leon
View
156
Download
3
Embed Size (px)
Citation preview
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