Sunteți pe pagina 1din 18

5.

3 Creacin de Tabla de tokens


Cada token es tratado como una nica entidad, constituyendo la entrada de
la siguiente fase del compilador. Existen diferentes tipos de tokens y a cada
uno se le puede asociar un tipo y, en algunos casos, un valor. Los tokens se
pueden agrupar en dos categoras:
Cadenas especicas, como las palabras reservadas (if, while, ...), signos de
puntuacin (., ,, =, ...), operadores aritmticos (+,*, ...) y lgicos (AND,
OR, ...), etc. Habitualmente, las cadenas especicas no tienen asociado
ningn valor, slo su tipo.
Cadenas no especicas, como los identicadores o las constantes
numricas o de texto. Las cadenas no especicas siempre tienen tipo y
valor. Por ejemplo, si dato es el nombre de una variable, el tipo del token
ser identicador y su valor ser dato.
Se puede expresar esto en trminos de definiciones regulares:
letra=[a-zA-Z]
dgito=[0-9]
identificador =letra( letra|dgito)*

A la tabla de Tokens tambin se le llama tabla de nombres o tabla de


identificadores y tiene dos funciones principales:

Efectuar chequeos semnticos.

Generacin de cdigo. Permanece slo en tiempo de compilacin, no


de ejecucin, excepto en aquellos casos en que se compila con
opciones de depuracin.

La tabla almacena la informacin que en cada momento se necesita


sobre las variables del programa, informacin tal como: nombre, tipo,
direccin de localizacin, tamao, etc.
La gestin de la tabla de smbolos es muy importante, ya que consume
gran parte del tiempo de compilacin. De ah que su eficiencia sea
crtica. Aunque tambin sirve para guardar informacin referente a los
tipos creados por el usuario, tipos enumerados y, en general, a cualquier
identificador creado por el usuario.
Los tokens se especifican con Expresiones Regulares

entonces

5.4 Errores lxicos

Los errores lxicos se detectan cuando el


analizador
lxico
intenta
reconocer
componentes lxicos y la cadena de caracteres
de la entrada no encaja con ningn patrn.
Son situaciones en las que usa un carcter
invalido (@,$,,,...), que no pertenece al
vocabulario del lenguaje de programacin, al
escribir mal un identificador, palabra reservada
u operador.

Errores lxicos tpicos son:

1. nombre ilegales de identificadores: un nombre


contiene caracteres invlidos.
2. nmeros incorrectos: un numero contiene
caracteres invlidos o no esta formado
correctamente, por ejemplo 3,14 en vez de 3.14
o 0.3.14.
3. errores de ortografa en palabras reservadas:
caracteres omitidos, adicionales o cambiados de
sitio, por ejemplo la palabra hwile en vez de
while.
4. fin de archivo: se detecta un fin de archivo a
la mitad de un componente lxico.

5.5 Generadores de
analizadores Lxicos

ANALIZADOR LXICO

Un analizador lxico es un mdulo destinado a


leer caracteres del archivo de entrada, donde se
encuentra la cadena a analizar, reconocer
subcadenas que correspondan a smbolos del
lenguaje y retornar los tokens correspondientes y
sus atributos.

GENERADORES DE ANALIZADORES
LXICOS
FLEX

LEX
JTLex

GENERADOR LEX
Es un programa para generar analizadores lxicos (en
ingls scanners o lexers), se utiliza comnmente con el
programa yacc que se utiliza para generar anlisis
sintctico , es el analizador lxico estndar en los
sistemas Unix
Lex toma como entrada una especificacin de analizador
lxico y devuelve como salida el cdigo fuente
implementando
el
analizador
lxico
en
C.

GENERADOR DE LXICO
LEX
Lex genera cdigo fuente en C, a partir de una
serie de especificaciones escritas en lenguaje Lex.
El cdigo C generado contiene una funcin
llamada yylex(), que localiza cadenas en la
entrada (lexemas) que se ajusten a uno de los
patrones lxicos especificados en el cdigo fuente
Lex, realizando entonces las acciones asociadas a
dicho patrn. yylex() puede llevar a cabo
cualquier tipo de acciones, en particular, puede
comportarse como un analizador lxico.

ESQUEMA GENERAL
Un programa fuente de Lex tiene el siguiente aspecto:
<seccin de definiciones>
%%
<seccin de reglas>
%%
<seccin de rutinas>

De estas tres secciones, slo la segunda es obligatoria, y


cualquiera de ellas puede estar vaca.

GENERADOR FLEX
Es una herramienta para la generacin de programas que
realizan concordancia de patrones en texto, es una
herramienta para generar escneres. programas que
reconocen patrones lxicos en un texto, es una reescritura
de la herramienta LEX del Unix de AT&T de las que ambas
conciernen a aquellos que desean escribir analizadores
aceptables por cualquier implementacin.

FLEX lee los archivos de entrada dados, o la entrada


estndar si no se le ha indicado ningn nombre de archivo,
con la descripcin de un escner a generar. La descripcin
se encuentra en forma de parejas de expresiones regulares
y cdigo C, denominadas reglas.

GENERADOR DE ANALIZADORES
LXICOS JTLex
JTLex en cambio permite expresar conjuntamente
sintaxis y semntica al estilo de los esquemas de
traduccin. A su vez el proceso de computo de atributos
es implementado por JTLex por un autmata finito
traductor con las ventajas de eficiencia que esto supone.

Una especificacin JTLex permite no slo asociar un


procedimiento, o accin, a cada expresin regular, sino
tambin a cada ocurrencia
de un smbolo dentro de la expresin.

ESQUEMA DE
FUNCIONAMIENTO
Especificacin del Analizador Lxico
Generador de Analizadores Lxicos (JTLex

Generador de Analizadores Lxicos (JTLex)


Analizador lxico:
Estructuras de Datos y Acciones
Algoritmo General

LENGUAJE DE
ESPECIFICACIN
Debido a que Lex es, quizs, la herramienta ms
conocida entre los generadores de analizadores lxicos,
las especificaciones JTLex, siguen los lineamientos de su
lenguaje de especificacin con las modificaciones
necesarias para implementar el nuevo formalismo. Para
especificar los componentes lxicos y su semntica en
vez de usarse constructores de la forma patrn-accin,
se utilizan expresiones regulares cuyos trminos
corresponden a pares carcter-accin.

GRAMTICA
Declaraciones
%%
Reglas de las Expresiones Regulares Traductoras
Lineales
%%

Cdigo de Usuario

LENGUAJE DE
ESPECIFICACIN
La directiva
%% divide las distintas secciones del archivo de entrada y debe
estar ubicada al comienzo de lnea.

La seccin Declaraciones
la primer seccin de la especificacin permite la incorporacin
de declaraciones que se utilizan en el cdigo del analizador
lxico, tambin permite la definicin de macros los cuales estn
destinados a simplificar la escritura de las expresiones regulares
.
.

Las reglas
de las expresiones regulares consisten de tres partes :
una accin inicial opcional, una Expresin Regular
Traductora Lineal y una accin final. Donde las acciones
iniciales y finales son cdigo Java. Y las expresiones
regulares traductoras lineales asocian acciones a
caracteres. Bsicamente, en una expresin regular
traductora lineal debe existir una nica traduccin para
todos los prefijos posibles. En cada expresin, si existen
prefijos iguales las acciones deben ser las mismas, pero
para expresiones que definen distintos tokens pueden
llegar a ser distintas

Cdigo de Usuario
es copiada directamente en el archivo de salida
resultante. Esta provee espacio para definir e importar
clases que intervengan en la traduccin.

S-ar putea să vă placă și