Analizador léxico

Un analizador léxico o analizador lexicográfico (en inglés scanner o tokenizer) es la primera fase de un compilador, consistente en un programa que recibe como entrada el código fuente de otro programa (secuencia de caracteres) y produce una salida compuesta de tokens (componentes léxicos) o símbolos. Estos tokens sirven para una posterior etapa del proceso de traducción, siendo la entrada para el analizador sintáctico (en inglés parser).

La especificación de un lenguaje de programación a menudo incluye un conjunto de reglas que definen el léxico. Estas reglas consisten comúnmente en expresiones regulares que indican el conjunto de posibles secuencias de caracteres que definen un token o lexema.

En algunos lenguajes de programación es necesario establecer patrones para caracteres especiales (como el espacio en blanco) que la gramática pueda reconocer sin que constituya un token en sí.

Análisis

Esta etapa está basada usualmente en una máquina de estados finitos. Esta máquina contiene la información de las posibles secuencias de caracteres que puede conformar cualquier token que sea parte del lenguaje (las instancias individuales de estas secuencias de caracteres son denominados lexemas). Por ejemplo, un token de naturaleza entero puede contener cualquier secuencia de caracteres numéricos.

Token

Un token léxico o simplemente token es una cadena con un significado asignado y, por lo tanto, identificado. Está estructurado como un par que consta de un «nombre de token» y un «valor de token» opcional. El nombre del token es una categoría de unidad léxica.[1]​ Los nombres de token comunes son

  • identificador: nombres que elige el programador;
  • palabra clave: nombres que ya están en el lenguaje de programación;
  • separador (también conocidos como signos de puntuación): caracteres de puntuación y delimitadores emparejados;
  • operador: símbolos que operan sobre argumentos y producen resultados;
  • literal: literales numéricos, lógicos, textuales, de referencia;
  • comentario: línea, bloque (Depende del compilador si el compilador implementa comentarios como tokens, de lo contrario, se eliminará).
Ejemplos de valores de token
Nombre simbólico Ejemplos de valores de token
identificador x, color, ARRIBA
palabra clave si, mientras, retorno
separador }, (, ;
operador +, <, =
literal verdadero, 6,02e23, "música"
comentario /* Recupera datos de usuario */, // debe ser negativo

Considere esta expresión en el lenguaje de programación C:

x = a + b * 2;

El análisis léxico de esta expresión produce la siguiente secuencia de tokens:

[(identificador, x), (operador, =), (identificador, a), (operador, +), (identificador, b), (operador, *), (literal, 2), (separador, ;)]

Un nombre simbólico es lo que podría denominarse una categoría gramatical en lingüística.

Véase también

Bibliografía

Referencias

  1. page 111, "Compilers Principles, Techniques, & Tools, 2nd Ed." (WorldCat) by Aho, Lam, Sethi and Ullman, as quoted in https://stackoverflow.com/questions/14954721/what-is-the-difference-between-token-and-lexeme