[1]
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í.
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.
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
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.