45
Análisis Léxico Programación de Sistemas FEI – 2008

Análisis Léxico Programación de Sistemas FEI – 2008

Embed Size (px)

Citation preview

Page 1: Análisis Léxico Programación de Sistemas FEI – 2008

Análisis Léxico

Programación de SistemasFEI – 2008

Page 2: Análisis Léxico Programación de Sistemas FEI – 2008

Introducción

El análisis de un programa fuente durante la compilación es complejo.

El análisis 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 organización sintáctica del programa.

Page 3: Análisis Léxico Programación de Sistemas FEI – 2008

Introducción [2]

Para describir los tokens puede ocuparse gramáticas regulares. Otro enfoque descriptivo involucra el uso de expresiones regulares.

Otro aspecto: aceptores de estados finitos, pueden especificarse utilizando diagramas de transición.

Page 4: Análisis Léxico Programación de Sistemas FEI – 2008

El proceso de Análisis Léxico

Se refiere al trabajo que realiza el scanner con relación al proceso de compilación. El scanner representa una interfaz entre el programa fuente y el analizador sintáctico o parser.

Page 5: Análisis Léxico Programación de Sistemas FEI – 2008

El Scanner

A través del examen carácter por carácter 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.

Page 6: Análisis Léxico Programación de Sistemas FEI – 2008

El Parser

Usualmente genera un árbol de sintaxis del programa fuente como ha sido definido por una gramática. Las hojas del árbol son símbolos terminales de la gramática. Son esos símbolos terminales o tokens los que el scanner extrae del código fuente y se los pasa al parser.

Page 7: Análisis Léxico Programación de Sistemas FEI – 2008

El análisis léxico de caracteres generalmente es lento en los compiladores, y separándolo del componente de análisis semántico de la compilación, el énfasis particular puede darse para hacer más eficiente el proceso.

Page 8: Análisis Léxico Programación de Sistemas FEI – 2008

El proceso de Análisis Léxico

Un analizador de léxico tiene como función principal el tomar secuencias de caracteres o símbolos del alfabeto del lenguaje y ubicarlas dentro de categorías, conocidas como unidades de léxico.

Page 9: Análisis Léxico Programación de Sistemas FEI – 2008

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

Page 10: Análisis Léxico Programación de Sistemas FEI – 2008

Algunas de las unidades de léxico 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.

Page 11: Análisis Léxico Programación de Sistemas FEI – 2008

Patrón

Representa la regla para que una secuencia de caracteres sea considerada cierta unidad de léxico. Ejemplo: El patrón para un identificador de Pascal es:

Una letra seguida por letras, dígitos o guiones (_)

Page 12: Análisis Léxico Programación de Sistemas FEI – 2008

Lexema

Page 13: Análisis Léxico Programación de Sistemas FEI – 2008

Token o Ficha

Page 14: Análisis Léxico Programación de Sistemas FEI – 2008

Unidades de Léxico

Page 15: Análisis Léxico Programación de Sistemas FEI – 2008

Rol del Analizador Léxico

Aunque el analizador de léxico es la primera etapa del proceso de compilación, no es quien lo inicia. Pudiera considerarse que el analizador de léxico hace su procesamiento y envía sus resultados al analizador gramatical, como secuencialmente se aprecia en el proceso de compilación; no es así:

Page 16: Análisis Léxico Programación de Sistemas FEI – 2008

Rol del Analizador Léxico [2]

La compilación empieza con el analizador gramatical quien solicita un token para realizar su trabajo; el analizador de léxico reune símbolos y envía el token correspondiente a la unidad de léxico que conformó al analizador gramatical y espera una nueva solicitud de token.

Page 17: Análisis Léxico Programación de Sistemas FEI – 2008

Rol del Analizador Léxico [3]

El analizador de léxico está supeditado por el analizador gramatical.

Page 18: Análisis Léxico Programación de Sistemas FEI – 2008

Durante estas etapas se tiene comunicación con la tabla de símbolos que concentra información de las entidades empleadas en el programa.

Page 19: Análisis Léxico Programación de Sistemas FEI – 2008

Descripción de Patrones

Un Patrón se puede describir: Mediante una descripción informaldescripción informal, en donde

se emplea el lenguaje natural para describir el comportamiento de la regla de léxico.

Utilizando expresiones regularesexpresiones regulares. Una expresión regular es una notación formal que utiliza operaciones sobre el alfabeto de un lenguaje. Por ejemplo, se puede definir que un identificador es:

{letra} ({letra} | {dígito} | {guión})*

Page 20: Análisis Léxico Programación de Sistemas FEI – 2008

Descripción de Patrones [2]

Que interpreta como un elemento del conjunto letra seguido de cero o más veces (la cerradura Kleene, representada por el asterisco) de una letra, dígito o guión (la selección representada por la barra vertical).

Esta notación es formal y computacionalmente útil para construir analizadores de léxico empleando la herramienta LEX.

Page 21: Análisis Léxico Programación de Sistemas FEI – 2008

Descripción de Patrones [3]

Utilizando autómatas finitosautómatas finitos (diagramas de transición o diagramas sintácticos), que son representaciones gráficas de las relaciones entre conjuntos de símbolos (aristas) por medio de estados, a los cuales pueden llegarse o transitarse por ellos al encontrar un símbolo perteneciente a un conjunto.

Page 22: Análisis Léxico Programación de Sistemas FEI – 2008
Page 23: Análisis Léxico Programación de Sistemas FEI – 2008

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 descripción de los tokens por medio de cómo pueden ser reconocidos (o aceptados) se hace en términos de un modelo matemático llamado un aceptor de estado aceptor de estado finitofinito.

Page 24: Análisis Léxico Programación de Sistemas FEI – 2008

Diagramas de Estado Finito

Para representar gráficamente un aceptor de estado finito, también se utilizan los diagramas de estado finito o diagramas de transición.

Page 25: Análisis Léxico Programación de Sistemas FEI – 2008

Diagramas de Estado Finito [2]

Un diagrama de transición es una representación gráfica donde se tiene un conjunto de estados, los cuales pueden ser: Iniciales. Finales. Intermedios.

Los cuales pueden tener una o más salidas hacia otro estado.

Page 26: Análisis Léxico Programación de Sistemas FEI – 2008

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 transición de un estado a otro).

Un estado final también recibe el nombre de estado de aceptación.

Page 27: Análisis Léxico Programación de Sistemas FEI – 2008

Diagramas de Estado Finito [4]

Cuando se construye un analizador de léxico utilizando diagramas de transición para la especificación 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 léxico que deba reconocer. Cada patrón posee un caracter selector, que permite reconocer de manera única el patrón que deba aplicarse.

Page 28: Análisis Léxico Programación de Sistemas FEI – 2008
Page 29: Análisis Léxico Programación de Sistemas FEI – 2008

Descripciones Informales de las Unidades de Léxico

Identificador: Letra seguida de letra, dígitos o guiones.

Comentario: Empieza con /* y termina con */. Entre estos pares puede haber cualquier símbolo.

EOF: cuando se encuentra el caracter eof (fin de archivo).

Error: Cualquier símbolo que no cumpla con los patrones anteriores.

Page 30: Análisis Léxico Programación de Sistemas FEI – 2008

Caracteres Selectores Para Cada Patrón

Identificador: letra Comentario: / EOF: eof Error: cualquier símbolo diferente a los

anteriores.

Page 31: Análisis Léxico Programación de Sistemas FEI – 2008

Implantación de un Analizador Léxico

La información en un diagrama de transición puede representarse por medio de una tabla que contenga por columnas a los símbolos 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 léxico Identificador, comentario, EOF y error, se obtendría la siguiente tabla:

Page 32: Análisis Léxico Programación de Sistemas FEI – 2008

Implantación de un Analizador Léxico [2]

Los estados finales o de aceptación de las unidades de léxico quedan sin información en las columnas ya que no existe una transición al reconocer o aceptar el patrón.

Page 33: Análisis Léxico Programación de Sistemas FEI – 2008
Page 34: Análisis Léxico Programación de Sistemas FEI – 2008

Implantación de un Analizador Léxico [3]

Para poder realizar el análisis de léxico a partir de la información que contiene la tabla se cuenta con un mecanismo que parte del estado 0 y empieza a recorrer el diagrama por cada transición posible hasta llegar a un estado final. El algoritmo del mecanismo se describe a continuación.

Page 35: Análisis Léxico Programación de Sistemas FEI – 2008

Implantación de un Analizador Léxico [4]

Page 36: Análisis Léxico Programación de Sistemas FEI – 2008

Implantación de un Analizador Léxico [5]

La función Analizador_de_Léxico utiliza dos funicones que permiten consumir los símbolos del programa fuente: Inspecciona y Avanza. Las funciones consideran la existencia de un apuntador AP que direcciona al caracter próximo a leer.

Page 37: Análisis Léxico Programación de Sistemas FEI – 2008

Implantación de un Analizador Léxico [6]

Inspecciona regresa el caracter apuntado por AP pero no lo incrementa.

La función Avanza no regresa nada pero incrementa el valor de AP para estar en el siguiente símbolo a leer.

Page 38: Análisis Léxico Programación de Sistemas FEI – 2008

Utilización 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 imágenes del contenido del archivo del programa fuente y donde se realicen Inspecciona y Avanza directamente en RAM.

Page 39: Análisis Léxico Programación de Sistemas FEI – 2008

Utilización de Memoria [2]

Esta memoria de entrada tiene una capacidad de 1024 caracteres (o múltiplos de esta cantidad) que llamaremos N. La dirección de inicio de esta región la denominaremos Buffer.

Page 40: Análisis Léxico Programación de Sistemas FEI – 2008

Utilización de Memoria [3]

Page 41: Análisis Léxico Programación de Sistemas FEI – 2008

Utilización de Memoria [4]

La región se mantendrá dividida en dos partes, que se llenarán de manera alternativa bajo el siguiente algoritmo.

Page 42: Análisis Léxico Programación de Sistemas FEI – 2008

Utilización de Memoria [5]

Page 43: Análisis Léxico Programación de Sistemas FEI – 2008

Este algoritmo representa el comportamiento de la función Avanza, quien determinará cuando transferir a memoria el contenido del archivo del programa fuente. La función Lectura (destino, n, fuente) requiere especificar la región de memoria (destino) donde se depositarán (n) caracteres del archivo (fuente).

Page 44: Análisis Léxico Programación de Sistemas FEI – 2008
Page 45: Análisis Léxico Programación de Sistemas FEI – 2008

Preprocesamiento

El resultado del preprocesamiento se analiza sintáctica y semánticamente y se traduce; luego se enlaza con otros programas y bibliotecas según se requiera.