Programación de Sistemas FEI – 2008

Slides:



Advertisements
Presentaciones similares
Filminas Segunda semana
Advertisements

Clasificación de los compiladores
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes
Compiladores e intérpretes Análisis Sintáctico III
Prof. Ing.Maria Rosa Damaso Rios
Análisis Lexicográfico
Teoría de Autómatas y Compiladores
TIPOS DE GRAMATICAS JERARQUIAS DE CHOMSKY
Nuestro reto es educar al pensamiento, para que razone de acuerdo a ciertas reglas; con ello podremos ser más eficientes al momento en que ordenamos.
¿Cómo hacer para que una máquina comprenda el LN?
Facultad de Ciencias de la Computación
Resolución de Problemas Algoritmos y Programación
Analizadores Sintácticos Descendentes Predictivos
Unidad 1. Introducción al proceso de compilación.
Teoría de lenguajes y compiladores
Teoría de lenguajes y compiladores
Traducción dirigida por la Sintaxis
Teoría de lenguajes y compiladores
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
Tema 6. Conceptos básicos de programación
Teoría de lenguajes y compiladores
ALGORITMOS es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos.
Programación de sistemas
TRADUCTOR DE UN PROGRAMA
FORMULACIÓN DE ALGORITMOS
M.C. Meliza Contreras González
Procesadores del Lenguaje
Teoría de lenguajes y compiladores
Diagramas de procesos Unidad V
Fundamentos de programación
FUNDAMENTOS DE PROGRAMACION
ANALISIS SINTACTICO Parte I
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
Compiladores (23/04/ :35) Compiladores Tema 3 Análisis Lexicográfico Scanners.
Universidad Nacional de Jujuy Facultad de Ingeniería
Diseño de algoritmos La computadora puede realizar procesos y darnos resultados, sin que tengamos la noción exacta de las operaciones que realiza. Con.
ORGANIZACIÓN DE LOS DATOS PARA PROCESARLOS EN COMPUTADORA Las computadoras trabajan con datos. Aceptan y procesan datos, y comunican resultados. No pueden.
1.4 Traductor y Su estructura
Procesadores de Lenguajes
Todo traductor esta basado en una gramática para el lenguaje fuente. Todo traductor esta basado en una gramática para el lenguaje fuente. Una gramática.
Lenguajes regulares Teoría del Autómata.
Teoría de lenguajes y compiladores Analizadores lexicográficos
Análisis de Sistemas.
Programación de Sistemas
Análisis Léxico Área Software de Base.
COMPILADORES DIANA ROCIO OLAYA MESA.
INFORMATICA VII (Programación e implementación de sistemas)
UNIVERSIDAD VALLE DEL MOMBOY FACULTAD DE INGENIERIA ESCUELA DE COMPUTACIÓN CATEDRA: EDUMATICA Br: JENNY CORONADO C.I
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
Unidad 1. Introducción a los Compiladores.
Teoría de lenguajes y compiladores
UNIVERSIDAD LATINA (UNILA)
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
1 Sebastián Argüello A60490 semana 3 Autómatas y compiladores CI-1322.
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
Teoría de lenguajes y compiladores
Algoritmos..
PRINCIPIOS DE PROGRAMACIÓN
Elaboración de algoritmos usando lógica de programación
El proceso de compilación
Lic. Carla Aguirre Montalvo
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
UNIDAD 2: “Características del Modelado UML” CONTENDIDO Elaborado por: Ingeniero Harold Cabrera Meza Actualizado por: Ingeniero Nilson Albeiro Ferreira.
Programación de Sistemas
Expresiones Regulares
REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACION SUPERIOR UNIVERSIDAD VALLE DEL MOMBOY CARVAJAL EDO. TRUJILLO ENERO 2014.
República Bolivariana de Venezuela Ministerio del Poder Popular para la Educación Superior Universidad Valle del Momboy Carvajal, Trujillo Alumnas Luzmila.
Unidad 2 Lenguajes, Expresiones Regulares, Autómatas
Programación I Prof. Carolina Cols. Algoritmo es una lista bien definida, ordenada y finita de operaciones que permite hallar la solución a un problema.
Transcripción de la presentación:

Programación de Sistemas FEI – 2008 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.

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.

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.

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.

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.

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.

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.

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.

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.

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 (_)‏

Lexema

Token o Ficha

Unidades de Léxico

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í:

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.

Rol del Analizador Léxico [3] El analizador de léxico está supeditado por el analizador gramatical.

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

Descripción de Patrones Un Patrón se puede describir: Mediante una descripción informal, en donde se emplea el lenguaje natural para describir el comportamiento de la regla de léxico. Utilizando expresiones 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})*

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.

Descripción de Patrones [3] Utilizando autó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.

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 finito.

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.

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.

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.

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.

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.

Caracteres Selectores Para Cada Patrón Identificador: letra Comentario: / EOF: eof Error: cualquier símbolo diferente a los anteriores.

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:

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.

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.

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

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.

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.

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.

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.

Utilización de Memoria [3]

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.

Utilización de Memoria [5]

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).

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.