Professional Documents
Culture Documents
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.
Definiciones.
Tokens:
Atributos:
Informacin adicional que tiene el token, de utilidad para el anlisis sintctico y semntico.
Componentes lxicos (tokens):
unidad mnima de informacin que significa algo a la hora de compilar; concepto de palabra; las
fases de un lenguaje constan de cadenas de componentes lxicos.
Lexema:
Una secuencia de caracteres de entrada que comprenden un solo componente lxico se llama
lexema; cadena de caracteres que extrae el componente abstracto del componente lxico.
Patrn:
Descripcin de la forma que han de tomarlos lexemas para ajustarse a un componente lxico.
Ejemplo:
Otras Funciones:
Manejo del fichero de entrada del programa fuente: abrirlo, leer sus caracteres, cerrarlo y
gestionar posibles errores de lectura.
Diseo ms sencillo:
Los smbolos que trata el scanner se describe con una gramtica ms simple que la del
parser, gramtica regular
Mejora la eficiencia:
Mejora la portabilidad:
Se pueden tener varias versiones del scanner una para distintos cdigos (EBCDID,
ASCII, ...), con el mismo parser
DO 5 I=1.25
DO 5 I=1,25
operadores aritmticos
operadores
relacionales
operadores lgicos
operador de asignacin
identificadores
constantes
cadenas
literales
signos de puntuacin
libreras
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.
Patrn:
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.
Atributos de los componentes lxicos:
El analizador lxico recoge informacin sobre los componentes lxicos en sus atributos asociados.
Los componentes lxicos influyen en las decisiones del anlisis sintctico y los atributos en la
traduccin de los componentes lxicos:
De una clave: Li = nmero de comparaciones con elementos de la tabla para encontrar esa clave.
Mxima: LM = nmero mximo de comparaciones para encontrar cualquier clave. Media
(esperada): Lm = nmero medio de comparaciones para encontrar un valor. Si la frecuencia de
todas las claves es la misma:
Lm = (S Li)/N
Si la frecuencia de todas las claves no es la misma:
Lm = S pi.Li
Grado de ocupacin:
s = n/N donde n=nmero de elementos en la tabla y N=capacidad mxima de la tabla.
Funcin de bsqueda: B : KE asocia a cada clave k un elemento B(k).
Valor asociado a una clave k: v(B(k)). Puede ser mltiple, en cuyo caso normalmente se convierte
en un puntero. Si est en la tabla puede almacenarse consecutivamente o en subtablas paralelas.
Tablas de smbolos (identificadores) La clave es el identificador. El valor est formado por:
Atributos del identificador. Puntero a la posicin de memoria asignada. La clave puede sustituirse
por un puntero. Los identificadores pueden estar empaquetados. La longitud del identificador puede
especificarse en la tabla o delante del nombre, o ser implcita.
Tablas consecutivas: Todos los elementos ocupan posiciones de memoria adyacentes. Tablas
ligadas: cada elemento apunta al siguiente. Tablas doblemente ligadas: cada elemento apunta al
siguiente y al anterior. Tablas no ordenadas Insercin: en el primer lugar vaco.
5.4 Errores lxicos
El anlisis lxico constituye la primera fase, aqu se lee el programa fuente de izquierda a derecha
y se agrupa en componentes lxicos (tokens), que son secuencias de caracteres que tienen un
significado. Adems, todos los espacios en blanco, lneas en blanco, comentarios y dems
informacin innecesaria se elimina del programa fuente. Tambin se comprueba que los smbolos
del lenguaje (palabras clave, operadores,...) se han escrito correctamente.
Como la tarea que realiza el analizador lxico es un caso especial de coincidencia de patrones, se
necesitan los mtodos de especificacin y reconocimiento de patrones, y estos mtodos son
principalmente las expresiones regulares y los autmatas finitos. Sin embargo, un analizador lxico
tambin es la parte del traductor que maneja la entrada del cdigo fuente, y puesto que esta
entrada a menudo involucra un importante gasto de tiempo, el analizador lxico debe funcionar de
manera tan eficiente como sea posible.
Son pocos los errores simplemente en el nivel lxico ya que tiene una visin muy restringida de un
programa fuente. El analizador lxico debe devolver el componente lxico de un identificador y
dejar a otra fase se ocupe de los errores.
El compilador tiene que:
1. Reportar clara y exactamente la presencia de errores
2. Recuperarse de cada error lo suficientemente rpido para poder detectar errores
subsiguientes:
Tratar de evitar mensajes falsos de error
Un error que produce un token errneo
Errores lxicos posibles
Un token o 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, while, int),
identificadores, nmeros, signos, o un operador de varios caracteres. Son los elementos ms
bsicos sobre los cuales se desarrolla toda traduccin de un programa, surgen en la primera fase,
llamada anlisis lxico.
5.5 Generadores de analizadores Lxicos
Se pueden usar varias tcnicas para acelerar el algoritmo y ahorrar espacio
Las etiquetas pueden guardarse mediante dispersin para producir un sistema de firmas que
acelere sus bsquedas
Como las tablas de transiciones son muy escasas, se pueden guardar en una lista corta que se
consulte cada vez que se necesite hacer una transicin a partir de un estado
Estas listas no suelen tener ms de tres o cuatro elementos, as que su bsqueda ser
razonablemente rpida
5.6 Aplicaciones (Caso de estudio)