1. Apuntes de compiladores
El Analizador léxico y su función
El analizador léxico es una de las fases de un compilador, donde su principal
consiste en leer el programa fuente de izquierda a derecha y elaborar como salida
una secuencia de caracteres que tienen un significado, llamados componentes
léxicos o tokens, que son utilizados por el analizador sintáctico para hacer el
análisis.
Esta interacción convierte al analizador léxico en una subrutina del analizador
sintáctico (ver figura 3). Cada vez que el analizador léxico recibe orden “obtén el
siguiente componente léxico” del analizador sintáctico, el analizador léxico lee los
caracteres de entrada hasta que puede identificar el siguiente componente léxico.
Componente léxico
Programa
fuente
Analizador
léxico
Analizador
sintáctico
Obtén el siguiente.
Componente léxico
Tabla de
símbolos
Figura 3.-Interacción de un analizador léxico con el analizador sintáctico
Cada componente léxico es una secuencia lógicamente coherente de caracteres
relativa a un identificador, una palabra reservada, un operador o un carácter de
puntuación.
A la secuencia de caracteres que representa un componente léxico se le llama
lexema (o con su nombre en inglés token). En el caso de los identificadores
creados por el programador no solo se genera un componente léxico, sino que se
genera otro lexema en la tabla de símbolos.
Rubén Jerónimo Yedra
18/31
2. Apuntes de compiladores
El analizador también puede realizar ciertas funciones secundarias en la interfaz
del usuario como:
Eliminar del programa fuente comentarios
Eliminar espacio en blanco en forma de:
Carácter de espacio en blanco
Carácter de tab.
Línea nueva
Relacionar los mensajes de error del compilador con el programa fuente.
Componentes léxicos, patrones y lexemas
Componente léxico (token):
Secuencia de caracteres que tienen un significado colectivo.
Patrón
Es una regla que va a permitir generar la secuencia de caracteres que puede
representar a un determinado componente léxico.
Lexema
Cadena de caracteres que concuerda con un patrón que escribe un componente
léxico.
En la mayoría de los lenguajes de programación se consideran componentes
léxico:
Palabras reservadas:
Ejemplos:
if, for, while, do
Identificadores:
Asociados de nombres de variables, de funciones o de Tipos definido por el
usuario.
Operadores:
Aritméticos: +, -, *, /, %
Rubén Jerónimo Yedra
19/31
3. Apuntes de compiladores
Relacionales: >, <, >=, <=, ==, !=
Lógicos: ||, &&, !
Asignación: =
Símbolos especiales:
Paréntesis ( , )
Llaves { , }
Corchetes [ , ]
Número o constantes numéricas:
Ejemplo: 105, -4.2, 5E-2
Literal o constante de caracteres: literales que representan cadenas de
caracteres:
Ejemplo: “el resultado es:”, “los datos son:”
Carácter de puntuación:
Punto y coma (;)
Coma (,)
Nota
El conjunto de lexema de palabras reservadas es finito, por lo tanto el
componente léxico es finito.
El conjunto de lexema de identificadores es infinito, por lo tanto su
correspondiente componente léxico tiene una infinidad de posibilidades.
El conjunto de lexemas de números o contantes numéricos es infinito, por lo
tanto su correspondientes componente léxico tiene una infinidad de
posibilidades.
Rubén Jerónimo Yedra
20/31
4. Apuntes de compiladores
Ejemplo:
a) suma=5 + A - 4.3 * dato;
Componentes léxico
Lexema
patrón
Identificador
suma
Letra seguido por letra o numero
Operador de
asignación
Numero o constante
numérica
Operador aritmético
identificador
Operador aritmético
Numero o constante
numérica
Operador aritmético
identificador
=
Carácter (=)
5
Cualquier constante numérica
+
A
4.3
Cualquier caracter + | - | * | / | %
Letra seguido por letra o numero
Cualquier caracter + | - | * | / | %
Cualquier constante numérica
*
dato
Cualquier caracter + | - | * | / | %
Letra seguido por letra o numero
;
Punto y coma(;),coma(,)
Carácter de
puntuación
b) if (nuevo>3.5)
Componentes léxico
Palabra reservada
lexema
if
Símbolo especial
(
patrón
Cualquiera de las palabras
reservadas
Cualquier carácter[,],{,},(,)
identificado
Operador relacional
nuevo
>
Letra seguido por letra o numero
>|>=|<|<=|==|!=
Numero o constante
numérica
3.5
Cualquier constante numérica
Símbolo especial
)
Cualquier carácter[,]{,},(,),;
Rubén Jerónimo Yedra
21/31
5. Apuntes de compiladores
ALFABETO, CADENA Y LENGUAJE
a) Alfabeto (Conjunto de símbolos)
Un alfabeto denota cualquier conjunto de símbolos.
Ejemplo:
El conjunto del alfabeto del idioma español
∑= {A, B, C, D, E…., Z}
El conjunto de los dígitos del código hexadecimal
∑={1,2,3,4,5,6,7,8,9, A, B, C, D, E, F}
El conjunto de los dígitos del código binario
∑= {0,1}
El conjunto de caracteres de tabla del código ASCII
El conjunto de código EBCDIC
b) Cadena(S):
Una cadena sobre algún alfabeto es una secuencia finita de símbolos tomados de
ese alfabeto.
Ejemplo:
∑= {A, B, C,…, Ñ, …,Z}
s=casa
s=ABCD
s=nuevo
alfabeto del idioma español
s∑
s∑
s∑
Longitud de cadena (s) :
Una cadena, también llamada frase o palabra, es el número de apariciones de
símbolos en ∑ y se denota |s|, donde:
0 si s=
ε
|s| =
n si s=a, a2, a3…. an
Siendo ξ, la cadena vacía que tiene una longitud cero.
Ejemplo:
1) s=casado
2) s=ABCD
|s|=6
|s|=4
Rubén Jerónimo Yedra
22/31
6. Apuntes de compiladores
Algunos términos comunes asociados con las partes de una cadena son:
Figura 4.- Términos de partes de una cadena
c) Lenguajes (L)
El termino lenguaje se refiere a cualquier conjunto de cadena de un alfabeto fijo y
se denota como L C ∑.
Dentro de esta definición se abarca lenguajes abstractos como el conjunto vacio Ø
o {ε} y el conjunto que solo contiene la cadena vacía.
Si x e y son cadenas, entonces la concatenación de x con y se escribe xy, es la
cadena que resulta de agregar y a x.
Ejemplo:
x=caza y=fortunas xy=cazafortunas
La concatenación se puede visualizar como si estuviera uniendo por medio de un
producto ambas cadenas.
Operaciones aplicadas a los lenguajes
Hay varias operaciones importantes que se pueden aplicar a los lenguajes.
Para el análisis léxico, interesan principalmente la unión, la concatenación y la
cerradura.
Rubén Jerónimo Yedra
23/31
7. Apuntes de compiladores
Figura 5.- Definiciones de Operaciones sobre lenguajes
Ejemplo:
Sea L, el alfabeto que contiene el conjunto de letras mayúsculas y minúsculas,
L={A,B,C,D,..Z,a,b,c,…z}, y sea D, el alfabeto que contiene el conjunto de los diez
dígitos decimales, M={0,1,2,3,4,5,6,7,8,9}, las operaciones:
1.- LUD
Es el conjunto de cadenas formado por letras y digito
Ejemplo: A0, A01, AB012, A012B
2.- LD
Es el conjunto de cadenas que consta de una letra seguido de un digito.
Ejemplo: B1, a3, r8
3.- L4
Es un conjunto de todas las cadenas formadas por 4 letras (L*L*L*L).
Ejemplo: unos, tavo, alas
4.- L*
Es el conjunto de todas las cadenas de letras, incluyendo la cadena vacia.
Ejemplo: abc, abababdf, Nuevos, casados
5.-L(L υ D)*
El conjunto de todas las cadenas que comienzan con una letra, seguido de
todas las cadenas que tienen una letra y un digito incluyendo la cadena
vacía.
Ejemplo: aa1, b, ba1a2, cb2h4g3
6.D+
Conjunto de uno o más combinaciones de dígitos de cadenas
Ejemplo: 1, 23,3245,283838
Rubén Jerónimo Yedra
24/31