Misión del Análisis Léxico

El analizador léxico es la primera de las fases de un traductor y, por tanto, es la primera de las fases de análisis.

Lo que hace el Léxico

La misión del analizador léxico es comprobar que todo lo que se ha escrito en la entrada sean secuencias de caracteres válidas. Para ello, va leyendo la entrada carácter a carácter hasta que detecta una cadena válida (lexema) o una cadena inválida (error). Una vez encontrado un lexema, le asigna un número llamado token (que es el tipo o la categoría del lexema).

Por tanto, visto como una caja negra, el analizador léxico tiene la siguiente funcionalidad:

  1. Entra una secuencia de caracteres.
  2. Salen parejas de (lexema, token).

Algunos ejemplos de tokens son:

  • Cada uno de los literales de los distintos tipos (entero, real, carácter, ...).
  • Cada una de las palabras reservadas (return , if , while, ...).
  • Los identificadores (nombres de variables, funciones, tipos, ...)
  • Cada uno de los operadores y delimitadores del lenguaje (corchetes, paréntesis, llaves, punto y coma, ...).

El motivo de asociar este número a cada lexema es para facilitar las fases posteriores. Si el léxico encuentra, por ejemplo, la cadena return, en vez de que la siguiente fase tengan que estar mirando los seis caracteres para descubrir de nuevo que se trata de este comando, el léxico ya entrega un único número que representa a toda la palabra reservada.

No importa qué número se asocie a cada lexema (en realidad, no haría falta ni que fueran consecutivos); lo importante es que el léxico y resto de las fases se pongan de acuerdo en lo que significa cada número.

Lo que NO hace el Léxico

Es importante tener claro en todo momento que esta fase sólo se ocupa de que cada cadena sea válida; pero no se ocupa de que éstas aparezcan en el orden adecuado (eso lo hará el análisis sintáctico).

Por ejemplo, la siguiente entrada sería válida para el analizador léxico aunque es evidente que el punto y coma no está en el lugar que le corresponde.

altura = ; 25   // Esto no es problema del léxico!!