Está en la página 1de 45

Anlisis Lxico

Programacin de Sistemas
FEI 2008
Introduccin

El anlisis de un programa fuente durante la


compilacin es complejo.

El anlisis de un programa fuente es


separado en dos partes:
Identificando las construcciones de lenguaje de
bajo nivel (tokens) nombres de variables,
palabras reservadas, etiquetas y operadores
Determinando la organizacin sintctica del
programa.
Introduccin [2]

Para describir los tokens puede ocuparse


gramticas regulares. Otro enfoque
descriptivo involucra el uso de expresiones
regulares.

Otro aspecto: aceptores de estados finitos,


pueden especificarse utilizando diagramas
de transicin.
El proceso de Anlisis Lxico

Se refiere al trabajo que realiza el scanner


con relacin al proceso de compilacin. El
scanner representa una interfaz entre el
programa fuente y el analizador sintctico o
parser.
El Scanner

A travs del examen carcter por carcter


del texto, separa el programa fuente en
piezas llamadas tokens, los cuales
representan los nombres de las variables,
operadores, etiquetas, y todo lo que
comprende el programa fuente.
El Parser

Usualmente genera un rbol de sintaxis del


programa fuente como ha sido definido por
una gramtica. Las hojas del rbol son
smbolos terminales de la gramtica. Son
esos smbolos terminales o tokens los que el
scanner extrae del cdigo fuente y se los
pasa al parser.

El anlisis lxico de caracteres
generalmente es lento en los compiladores,
y separndolo del componente de anlisis
semntico de la compilacin, el nfasis
particular puede darse para hacer ms
eficiente el proceso.
El proceso de Anlisis Lxico

Un analizador de lxico tiene como funcin


principal el tomar secuencias de caracteres
o smbolos del alfabeto del lenguaje y
ubicarlas dentro de categoras, conocidas
como unidades de lxico.

Las unidades de lxico son empleadas por el
analizador gramatical para determinar si lo
escrito en el programa fuente es correcto o
no gramaticalmente.

Algunas de las unidades de lxico no son
empleadas por el analizador gramatical sino
que son descartadas o filtradas. Tal es el
caso de los comentarios, que documentan el
programa pero que no tienen un uso
gramatical, o los espacios en blanco, que
sirven para dar legibilidad a lo escrito.
Patrn

Representa la regla para que una secuencia


de caracteres sea considerada cierta unidad
de lxico. Ejemplo: El patrn para un
identificador de Pascal es:

Una letra seguida por letras, dgitos o


guiones (_)
Lexema
Token o Ficha
Unidades de Lxico
Rol del Analizador Lxico

Aunque el analizador de lxico es la primera


etapa del proceso de compilacin, no es
quien lo inicia. Pudiera considerarse que el
analizador de lxico hace su procesamiento
y enva sus resultados al analizador
gramatical, como secuencialmente se
aprecia en el proceso de compilacin; no es
as:
Rol del Analizador Lxico [2]

La compilacin empieza con el analizador


gramatical quien solicita un token para
realizar su trabajo; el analizador de lxico
reune smbolos y enva el token
correspondiente a la unidad de lxico que
conform al analizador gramatical y espera
una nueva solicitud de token.
Rol del Analizador Lxico [3]

El analizador de lxico est supeditado por


el analizador gramatical.

Durante estas etapas se tiene comunicacin
con la tabla de smbolos que concentra
informacin de las entidades empleadas en
el programa.
Descripcin de Patrones

Un Patrn se puede describir:


Mediante una descripcin informal,
informal en donde
se emplea el lenguaje natural para describir el
comportamiento de la regla de lxico.
Utilizando expresiones regulares.
regulares Una
expresin regular es una notacin formal que
utiliza operaciones sobre el alfabeto de un
lenguaje. Por ejemplo, se puede definir que un
identificador es:

{letra} ({letra} | {dgito} | {guin})*
Descripcin de Patrones [2]

Que interpreta como un elemento del


conjunto letra seguido de cero o ms veces
(la cerradura Kleene, representada por el
asterisco) de una letra, dgito o guin (la
seleccin representada por la barra vertical).

Esta notacin es formal y


computacionalmente til para construir
analizadores de lxico empleando la
herramienta LEX.
Descripcin de Patrones [3]
Utilizando autmatas finitos (diagramas de
transicin o diagramas sintcticos), que son
representaciones grficas de las relaciones
entre conjuntos de smbolos (aristas) por medio
de estados, a los cuales pueden llegarse o
transitarse por ellos al encontrar un smbolo
perteneciente a un conjunto.
Diagramas de Estado

Ya que el scanner debe reconocer tokens,


debemos buscar la posibilidad de describir
los tokens a manera de reconocimiento y no
de manera generativa.

La descripcin de los tokens por medio de


cmo pueden ser reconocidos (o aceptados)
se hace en trminos de un modelo
matemtico llamado un aceptor de estado
finito.
finito
Diagramas de Estado Finito

Para representar grficamente un aceptor de


estado finito, tambin se utilizan los
diagramas de estado finito o diagramas de
transicin.
Diagramas de Estado Finito [2]

Un diagrama de transicin es una


representacin grfica donde se tiene un
conjunto de estados, los cuales pueden ser:
Iniciales.
Finales.
Intermedios.

Los cuales pueden tener una o ms salidas


hacia otro estado.
Diagramas de Estado Finito [3]

Los estados se relacionan entre s con


flechas con un nombre (el caracter o
conjunto de caracteres que provoca la
transicin de un estado a otro).

Un estado final tambin recibe el nombre de


estado de aceptacin.
Diagramas de Estado Finito [4]

Cuando se construye un analizador de lxico


utilizando diagramas de transicin para la
especificacin de los patrones, se realiza un
nico diagrama que, a partir del estado 0,
tiene diversas transiciones a cada uno de los
patrones de las unidades de lxico que deba
reconocer. Cada patrn posee un caracter
selector, que permite reconocer de manera
nica el patrn que deba aplicarse.
Descripciones Informales de las
Unidades de Lxico

Identificador: Letra seguida de letra, dgitos o


guiones.

Comentario: Empieza con /* y termina con */.


Entre estos pares puede haber cualquier
smbolo.

EOF: cuando se encuentra el caracter eof (fin


de archivo).

Error: Cualquier smbolo que no cumpla con


los patrones anteriores.
Caracteres Selectores Para
Cada Patrn

Identificador: letra

Comentario: /

EOF: eof

Error: cualquier smbolo diferente a los


anteriores.
Implantacin de un Analizador
Lxico

La informacin en un diagrama de transicin


puede representarse por medio de una tabla
que contenga por columnas a los smbolos
del alfabeto del lenguaje y por renglones los
diversos estados que constituyen al
diagrama.

Para el ejemplo anterior donde se describen


los patrones de las unidades de lxico
Identificador, comentario, EOF y error, se
obtendra la siguiente tabla:
Implantacin de un Analizador
Lxico [2]

Los estados finales o de aceptacin de las


unidades de lxico quedan sin informacin
en las columnas ya que no existe una
transicin al reconocer o aceptar el patrn.
Implantacin de un Analizador
Lxico [3]

Para poder realizar el anlisis de lxico a


partir de la informacin que contiene la tabla
se cuenta con un mecanismo que parte del
estado 0 y empieza a recorrer el diagrama
por cada transicin posible hasta llegar a un
estado final. El algoritmo del mecanismo se
describe a continuacin.
Implantacin de un Analizador
Lxico [4]
Implantacin de un Analizador
Lxico [5]

La funcin Analizador_de_Lxico utiliza dos


funicones que permiten consumir los
smbolos del programa fuente: Inspecciona y
Avanza. Las funciones consideran la
existencia de un apuntador AP que
direcciona al caracter prximo a leer.
Implantacin de un Analizador
Lxico [6]

Inspecciona regresa el caracter apuntado


por AP pero no lo incrementa.

La funcin Avanza no regresa nada pero


incrementa el valor de AP para estar en el
siguiente smbolo a leer.
Utilizacin de Memoria

Realizar las lecturas involucradas por


Inspecciona y Avanza directamente del
archivo donde reside el programa fuente
puede ser ineficiente. Por ello se considera
la existencia de memoria de entrada (buffer)
donde se puede depositar imgenes del
contenido del archivo del programa fuente y
donde se realicen Inspecciona y Avanza
directamente en RAM.
Utilizacin de Memoria [2]

Esta memoria de entrada tiene una


capacidad de 1024 caracteres (o mltiplos
de esta cantidad) que llamaremos N. La
direccin de inicio de esta regin la
denominaremos Buffer.
Utilizacin de Memoria [3]
Utilizacin de Memoria [4]

La regin se mantendr dividida en dos


partes, que se llenarn de manera
alternativa bajo el siguiente algoritmo.
Utilizacin de Memoria [5]

Este algoritmo representa el comportamiento
de la funcin Avanza, quien determinar
cuando transferir a memoria el contenido del
archivo del programa fuente. La funcin
Lectura (destino, n, fuente) requiere
especificar la regin de memoria (destino)
donde se depositarn (n) caracteres del
archivo (fuente).
Preprocesamiento

El resultado del preprocesamiento se analiza


sintctica y semnticamente y se traduce;
luego se enlaza con otros programas y
bibliotecas segn se requiera.

También podría gustarte