Está en la página 1de 5

ANALIZADOR LEXICO: CARACTERISTICAS

ANALIZADOR LEXICO
DEFINICIONES PREVIAS

1. TOKEN
Un token o tambin llamado componente lxico es una cadena de caracteres que tiene un
significado coherente en cierto lenguaje de programacin. Ejemplos de tokens podran ser palabras
clave (if, else, while, int, ...), identificadores, nmeros, signos, o un operador de varios caracteres,
(por ejemplo, :=).
Son los elementos ms bsicos sobre los cuales se desarrolla toda traduccin de un programa,
surgen en la primera fase, llamada anlisis lxico, sin embargo se siguen utilizando en las siguientes
fases (anlisis sintctico y anlisis semntico) antes de perderse en la fase de sntesis.
Cada token es una secuencia de caracteres que representa una unidad de informacin en el
programa fuente.

2. LEXEMA
Representan cadenas de caracteres en el programa fuente que se pueden tratar juntos como una
unidad lxica. Un lexema es una secuencia de caracteres en el programa fuente con la que
concuerda el patrn para un componente lxico.

3. PATRON
Regla que describe el conjunto de lexemas que pueden representar a un determinado componente
lxico en los programas fuente. En otras palabras, es la descripcin del componente lxico mediante
una regla.

4. ANALIZADOR LEXICO
Un analizador lxico y/o analizador lexicogrfico (en ingls scanner) es la primera fase de
un compilador consistente en un programa que recibe como entrada el cdigo fuente de otro
programa (secuencia de caracteres) y produce una salida compuesta de tokens (componentes
lxicos) o smbolos. Estos tokens sirven para una posterior etapa del proceso de traduccin, siendo
la entrada para el analizador sintctico (en ingls parser).

ANALIZADOR LEXICO: CARACTERISTICAS


5. CARACTERISTICAS DEL ANALIZADOR LEXICO

a) LEE CARACTERES.
El analizador lexico se encarga de leer la secuencia de caracteres del programa fuente,
carcter a carcter, y elaborar como salida la secuencia de componentes lxicos que utiliza el
analizador sintctico. El analizador sintctico emite la ordenal analizador lxico para que
agrupe los caracteres y forme unidades con significado propio llamados componentes lxicos
(tokens).

El analizador lxico opera bajo peticin del analizador sintctico devolviendo un componente
lxico conforme el analizador sintctico lo va necesitando para avanzar en la gramtica. Los
componentes lxicos son los smbolos terminales de la gramtica. Suele implementarse como
una subrutina del analizador sintctico. Cuando recibe la orden obtn el siguiente
componente lxico, el analizador lxico lee los caracteres de entrada hasta identificar el
siguiente componente lxico.

b) PRODUCE COMPONENTES LXICOS (TOKENS).


Los componentes lexicos (tokens) son los elementos de las categorias lexicas. Por ejemplo, en
C, i es un componente lexico de la categoria identificador, 232 es un componente lexico de la
categoria entero, etc.

En general, no basta con saber la categora a la que pertenece un componente, en muchos


casos es necesaria cierta informacin adicional. Por ejemplo, ser necesario conocer el valor de
un entero o el nombre del identificador. Utilizamos los atributos de los componentes para
guardar esta informacin.

Observemos el siguiente cuadro:

ANALIZADOR LEXICO: CARACTERISTICAS


Categora Lxica

Lexema

Patron

Entero, real, etc

12, 34.3, 231212

Secuencia de uno o ms dgitos

Identificador

I, a, rea, a1, suma

Letra seguida opcionalmente de letras y/o dgitos

Operador

+, -, *, /

Caracteres +, -, * , /

Asignacion

:=, =

While

while

Carcter : seguido de = o solo carcter =


La palabra While

Por ejemplo en el lenguaje C al ingresar las siguientes expresiones produce los siguientes
Tokens:

Numero
Variable
Operadores relacionales
Operadores de asignacin
Operadores
Operadores aditivos
Operadores unarios
Parntesis de apertura
Parntesis de cierre
Corchete de inicio
Corchete de cierre
Punto y coma

EXPRESION REGULAR
[0-9]+
[a-zA-Z], [a-zA-Z0-9]
<, >, >=, <=
=, +=, -=, *= , /= , %=
/,%, *
- , ++ , -&& , !
(
)
[
]
;

TOKEN
numero
variable
oprel
asign
opmul
opuna
oplog
lpar
rpar
lcor
rcor
puntco

c) FILTRA COMENTARIOS.
Los comentarios que se colocan en el programa fuente en cualquier lenguaje de
programacion tales como:

// comentario de una sola linea de codigo


/* ... */ comentario de un bloque entero de sentencias

Todos estos comentarios son eliminados por el analizador lexico.


Por ejemplo en el siguiente segmento de programa desarrollado en c++:

ANALIZADOR LEXICO: CARACTERISTICAS


float circulo(float radio) // funcion que calcula el area de un circulo
{
/* funcion que toma valores reales
Para calcular el area...
Fecha: 17/06/2014
*/
float pi=3.1416; // valor de pi
area=pi*radio*radio;
return area;
}

d) FILTRA SEPARADORES MLTIPLES (ESPACIOS, TABULADORES Y SALTOS DE LNEA).


En los denominados lenguajes de formato libre (C, Pascal, Lisp, etc.) los espacios en blanco,
tabuladores y saltos de lnea solo sirven para separar componentes lxicos. En ese caso, el
analizador lxico se limita a suprimirlos. En otros lenguajes, como Python, no se pueden
eliminar totalmente.
Se usan las siguientes especificaciones:

Operator: Operador

Whitespace: Espacio en blanco, tabulaciones y saltos de lnea

Keywords: Palabra clave

Identifiers: Identificadores

Numbers: Numeros

Por ejemplo si tenemos la siguiente sentencia en C:


if (i==j)
z=0;
else
z=1;
El analizador lxico lo leer de la siguiente manera:

ANALIZADOR LEXICO: CARACTERISTICAS

\t if (i==j) \n \t \t z=0; \n \t else \n\t\t z=1;

e) GENERA ERRORES EN CASO DE QUE LA ENTRADA NO CORRESPONDA A NINGUNA


CATEGORA LXICA.
Hay pocos errores que el analizador lxico puede detectar ya que tiene una visin muy
restringida de un programa fuente. Los errores puede ser:

Smbolos extraos: se utilizan caracteres que no pertenecen al alfabeto del lenguaje.

Omisin de caracteres: por ejemplo, se escribe el identificador CONTA en el cuerpo del


programa, cuando dicha variable ha sido declarada como CONT.

Permutacin de caracteres: ejemplo: CMAPO por CAMPO.

Nmero de caracteres invlido de los identificadores

Ejemplos de errores en el analizador lexico:


fro(int a=1:a<=10;a++)

El analizador lexico no sabe que es fro, ente caso produce un error, puesto que la keywords
es for.
Los errores lxicos se deben a descuidos del programador. En general, la recuperacin de
errores lexicos es sencilla y siempre se traduce en la generacin de un error de sintaxis que
sera detectado mas tarde por el analizador sintactico cuando el analizador lexico devuelve un
componente lexico que el analizador sintactico no espera en esa posicion.

Los metodos de recuperacion de errores lexicos se basan bien en saltarse caracteres en la


entrada hasta que un patron se ha podido reconocer; o bien usar otros metodos mas
sofisticados que incluyen la insercion, borrado, sustitucion de un caracter en la entrada o
intercambio de dos caracteres consecutivos.
5

También podría gustarte