You are on page 1of 2

Anlisis lexicogrfico

Figura 2.1. Entradas y salidas de las dos primeras fases de la etapa de anlisis. La frase Secuencia de Terminales hace referencia a la gramtica del sintctico; pero tambin es posible considerar que dicha secuencia es de no terminales si usamos el punto de vista del lexicogrfico.

El analizador lxico reconoce las palabras en funcin de una gramtica regular de manera que el alfabeto G de dicha gramtica son los distintos caracteres del juego de caracteres del ordenador sobre el que se trabaja (que forman el conjunto de smbolos terminales), mientras que sus no terminales son las categoras lxicas en que se integran las distintas secuencias de caracteres. Cada no terminal o categora lxica de la gramtica regular del anlisis lxico es considerado como un terminal de la gramtica de contexto libre con la que trabaja el analizador sintctico, de manera que la salida de alto nivel (no terminales) de la fase lxica supone la entrada de bajo nivel (terminales) de la fase sintctica. En el caso de Lex, por ejemplo, la gramtica regular se expresa mediante expresiones regulares.

2.2.1

Funciones del analizador lxico

El analizador lxico es la primera fase de un compilador. Su principal funcin consiste en leer los caracteres de entrada y elaborar como salida una secuencia de componentes lxicos que utiliza el analizador sintctico para hacer el anlisis. Esta

Figura 2.2. La fase de anlisis lxico se halla bajo el control del anlisis sintctico. Normalmente se implementa como una funcin de ste 24

Java a tope: Traductores y compiladores con Lex/Yacc, JFlex/Cup y JavaCC interaccin suele aplicarse convirtiendo al analizador lxico en una subrutina o corrutina del analizador sintctico. Recibida la orden Dame el siguiente componente lxicodel analizador sintctico, el lxico lee los caracteres de entrada hasta que pueda identificar el siguiente componente lxico, el cual devuelve al sintctico segn el formato convenido (ver figura 2.2). Adems de esta funcin principal, el analizador lxico tambin realiza otras de gran importancia, a saber: Eliminar los comentarios del programa. Eliminar espacios en blanco, tabuladores, retorno de carro, etc, y en general, todo aquello que carezca de significado segn la sintaxis del lenguaje. Reconocer los identificadores de usuario, nmeros, palabras reservadas del lenguaje, etc., y tratarlos correctamente con respecto a la tabla de smbolos (solo en los casos en que este analizador deba tratar con dicha estructura). Llevar la cuenta del nmero de lnea por la que va leyendo, por si se produce algn error, dar informacin acerca de dnde se ha producido. Avisar de errores lxicos. Por ejemplo, si el carcter @ no pertenece al lenguaje, se debe emitir un error. Tambin puede hacer funciones de preprocesador.

2.2.2

Necesidad del analizador lxico

Un buen profesional debe ser capaz de cuestionar y plantearse todas las decisiones de diseo que se tomen, y un asunto importante es el porqu se separa el anlisis lxico del sintctico si, al fin y al cabo, el control lo va a llevar el segundo. En otras palabras, por qu no se delega todo el procesamiento del programa fuente slo en el anlisis sintctico, cosa perfectamente posible (aunque no plausible como veremos a continuacin), ya que el sintctico trabaja con gramticas de contexto libre y stas engloban a la regulares. A continuacin estudiaremos algunas razones de esta separacin.

2.2.2.1 Simplificacin del diseo


Un diseo sencillo es quizs la ventaja ms importante. Separar el anlisis lxico del anlisis sintctico a menudo permite simplificar una, otra o ambas fases. Normalmente aadir un analizador lxico permite simplificar notablemente el analizador sintctico. An ms, la simplificacin obtenida se hace especialmente patente cuando es necesario realizar modificaciones o extensiones al lenguaje inicialmente ideado; en otras palabras, se facilita el mantenimiento del compilador a medida que el lenguaje evoluciona. La figura 2.3 ilustra una situacin en la que, mediante los patrones correspondientes, el analizador lxico reconoce nmeros enteros y operadores aritmticos. A la hora de construir una primera versin del analizador sintctico, 25

You might also like