Universidad Nacional de Jujuy Facultad de Ingeniería

Slides:



Advertisements
Presentaciones similares
PROGRAMACIÓN EN C.
Advertisements

Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes Análisis Sintáctico III
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
Análisis Lexicográfico
Teoría de Autómatas y Compiladores
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.
Unidad 1 DISEÑO DE ALGORITMOS ING. Nelwi Baez. MSC
Facultad de Ciencias de la Computación
Analizadores Sintácticos Descendentes Predictivos
Teoría de lenguajes y compiladores
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
Compilador HTML David Morales Marco Jiménez Carlos Márquez
Traducción dirigida por la Sintaxis
3. INTRODUCCIÓN A LA PROGRAMACIÓN
Teoría de lenguajes y compiladores
La estructura básica de los programas en java, algo a tener en cuenta y que debemos recordar siempre es el archivo debe llevar el nombre de la clase con.
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 3 Entrada y Salida.
Programación de sistemas
Fundamentos de Programación
CONDICIONES DE LA MATERIA
M.C. Meliza Contreras González
Tema 7. Introducción a lenguaje de programación Visual Basic (clase 1)
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
Teoría de lenguajes y compiladores
2º curso Ingeniería Técnica en Informática de Sistemas UNED
FUNDAMENTOS DE PROGRAMACION
ACIDE A C onfigurable I ntegrated D evelopment E nvironment (Un entorno integrado de desarrollo configurable)
ANALISIS SINTACTICO Parte I
PHP TODO SOBRE PHP.
Compiladores (23/04/ :35) Compiladores Tema 3 Análisis Lexicográfico Scanners.
Resolución de Problemas y Algoritmos Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca - Argentina.
COMPONENTES DE UN ALGORITMOS
Código de Barras Explicación de la codificación del código de barras con un fuente en VFP que te permite imprimir códigos de barras sin usar fonts u otro.
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.
Programación de Sistemas
Análisis Léxico Área Software de Base.
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
Elementos básicos del lenguaje
Implementación del analizador léxico Prácticas EDI - © Juan Ramón Pérez1.
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
Representación de Algoritmos
Programación de Sistemas FEI – 2008
Unidad 1. Introducción a los Compiladores.
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
UNIVERSIDAD LATINA (UNILA)
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
Teoría de lenguajes y compiladores
Procesadores de Lenguajes
Teoría de lenguajes y compiladores
PRINCIPIOS DE PROGRAMACIÓN
El proceso de compilación
Presente un cuestionario con los aspectos mas importantes sobre los
UNIDAD 4: Introducción a la Lógica Computacional Objetivo : Interpretar y aplicar adecuadamente los fundamentos básicos de la estructura y funcionamiento.
Tema: ¿Qué es y para qué sirve Excel?
Lic. Carla Aguirre Montalvo
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Programación de Sistemas
CENTRO UNIVERSITARIO UAEM TEXCOCO INGENIERÍA EN COMPUTACIÓN
Unidad 2 Lenguajes, Expresiones Regulares, Autómatas
ELEMENTOS BÁSICOS DE PROGRAMACIÓN EN C# Mtro. José David Uc Salas
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Transcripción de la presentación:

Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES ANALISIS LEXICO Elizabeth Reinoso edrreinoso@fi.unju.edu.ar

Objetivos Generales Conocer el funcionamiento de un analizador léxico Entender las relaciones de éste con La tabla de símbolos La gestión de errores Aprender a especificar formalmente un analizador Conocer las distintas técnicas de implementación Eliz2abeth Reinoso: edrreinoso@fi.unju.edu.ar

Índice General Introducción Especificación de un Analizador Léxico Implementación de un Analizador Léxico Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar

INTRODUCCION Análisis Léxico Funciones Scanner Tabla de Símbolos Gestión de Errores Funciones Tratar con la tabla de símbolos Generar tokens bajo demanda del analizador sintáctico Manejar el fichero fuente Ignorar comentarios Contabilizar posición de tokens Preprocesar macros, constantes, includes … e d a d T. Símbolo Scanner G. Errores [ID, “edad”] Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar

Análisis Léxico Utilidad: Se utiliza para la construcción de compiladores, como para interpretar el código HTML de una página web. Va leyendo del fichero de entrada los caracteres secuencialmente y los va agrupando en tokens con un significado conocido por el programador. Hace la función de preprocesador ya que se encarga de eliminar los caracteres innecesarios para el proceso de compilación Por ejemplo: elimina los espacio en blanco que hay entre palabra y palabra De las siguientes de opciones cual no es una utilidad del analisis lexico: Se utiliza para la construcción de compiladores interpreta el código HTML de una página web Va leyendo del fichero de entrada los caracteres secuencialmente y los va agrupando en tokens Hace la función de procesador ya que se encarga de eliminar los caracteres innecesarios para el proceso de compilación Falso ya q es preprocesador

Funciones Agrupar caracteres según categorías establecidas por la especificación del lenguaje fuente. Rechazar texto con caracteres ilegales o agrupados según un criterio no especificado Cual de las siguientes es una funcion del analisis lexico: a) Agrupar caracteres según categorías establecidas por la especificación del lenguaje objeto (falso es el lenguaje fuente) b) Agrupar caracteres según categorías establecidas por la especificación del lenguaje fuente c) Aceptar texto con caracteres legales o agrupados según un criterio especificado d) Rechazar texto con caracteres legales o agrupados según un criterio especificado C y d falso rechazar texto con caracteres ilegales o agrupados según criterio no especificado.

Funcionamiento La relación entre el A-L y el A-S es una relación de maestro-esclavo. El sintáctico demanda al léxico que lea el siguiente lexema y el léxico lee los caracteres necesarios del fichero de entrada hasta que consiga completar un lexema, que será entregado a su maestro. La relacion entre el analisis lexico y le analisis sintactico es: Esclavo maestro Maestro maestro Esclavo esclavo Maestro esclavo D) verdadero es maestro esclavo

Analizador Sintactico Código Fuente Lee caracteres Analizador léxico Componente léxico Solicita un componente lexico Analizador Sintactico Siguiente fase

Funcionamiento Construir tokens validos a partir de la lectura carácter a carácter del fichero de entrada. Pasar tokens validos al analizador sintáctico Gestionar el manejo de fichero de entrada. Ignorar los espacio en blanco, comentarios y demás caracteres o tokens innecesarios para el proceso de análisis Avisar de los errores encontrados en esta fase. Llevar la cuenta del numero de líneas par incluir lo en el aviso de error. Hacer las funciones de preprocesador De las siguientes opciones cual no corresponde al funcionamiento del Analisis Lexico : a) Construir tokens validos a partir de la lectura carácter a carácter del fichero de entrada. b) Pasar token validos al analizador léxico (falso al analizador sintáctico) c) Gestionar el manejo de fichero de entrada d) Avisar de los errores encontrados en esta fase a) Ignorar los espacio en blanco, comentarios y demás caracteres o tokens innecesarios para el proceso de análisis b) Avisar de los errores encontrados en esta fase c) Llevar la cuenta del numero de líneas par incluir lo en el aviso de error d) Hacer las funciones de procesador (falso de preprocesador)

Funcionamiento El analizador léxico va leyendo carácter a carácter el fichero de entrada y va guardando estos caracteres en el buffer. Cuando encuentra un carácter que no le sirve para construir un token valido, se para y envía los caracteres acumulados al A-L y espera una nueva petición de lectura. Cuando recibe una nueva petición del A-S, limpia el buffer y vuelve a leer el carácter donde paro la vez anterior.

Funcionamiento Ejemplo: Tenemos el siguiente fichero de entrada: int x; main() { }. Entrada Buffer Accion i Leer otro caracter n in t int Espacio en blanco Enviar token y limpiar buffer x ; Leer otro carácter….

Términos utilizados Patron: Es una representación lógica de una serie de agrupación de caracteres con unas características comunes. Por ejemplo, en Java el identificador de una variable puede ser cualquier combinación de letras y numero que no comience con un numero. Para describir formalmente esta definición, se utilizan las expresiones regulares. Por ejemplo: letra::=(a-zA-Z), digito::=(0-9) Identificador::=(letra)(letra|digito)

Términos utilizados Lexema: es cada una de las combinaciones de caracteres que encajan en la definición de un patrón. Por ejemplo: variable1, x Es decir el patrón es la definición formal y el lexema es cada una de las secuencia que pueden encajar en esa definición. Token: es el nombre que se le va a dar cada patrón definido. Este nombre se utilizara en los procesos de análisis en representación de todos los lexemas encontrados Ej: el token es como la palabra fruta y los lexemas son las frutas en concreto, como manzana, banana,

Especificación del analizador léxico Para comprender el funcionamiento de una A-L, lo especificaremos como un AF, muy parecida a una AFD con las siguientes diferencia: El AFD solo dice si la secuencia de caracteres pertenece al lenguaje o no, y el DT debe leer la secuencia hasta completar un token y luego retornar el token y dejar la entrada para leer el token siguiente. En un DT cada secuencia no determinada es un error Los estados de aceptación de los DT deben ser terminales

Especificación de analizador léxico En un DT, cuando se lea una carácter que no pertenezca a ninguna secuencia especificada, se debe ir a un estado especial terminal y volver el cursor de lectura de caracteres al carácter siguiente a la secuencia correcta leida.

Construcción de un analizador léxico Utilizar un DT Mediante programas especiales que construyen analizadores. Identificar las palabras reservadas: 1. Hacer una tabla con todas las palabras y consultarla para cada identificador y ver si esta en la tabla o no. 2. Implementar cada una de las palabras reservadas en el DT para diferenciarlas del resto de identificadores, lo que complicaría bastante la programación. Construir el diagrama de transiciones

Construcción de un Analizador Lexico Construir el diagrama de transiciones: Ejemplo: vamos a crear un analizador léxico para un lenguaje que reconoce numero enteros sin signo, la suma, incremento y el producto: a) Definir los patrones o E-R: Entero::=(“0”|“1”|“2”|“3”|“4”|“5”|“6”|“7”|“8”|“9”)+ Suma::=“+” Producto::=“*” Incremento::=“++” b) Creamos el Automata

Construcción de un Analizador Léxico 1 o 5 6 2 4 3 * digito otro + PRODUCTO * ENTERO INCREMENTO * SUMA

Construcción de un Analizador Léxico c) Crear la tabla de transicion Consta de tantas filas como estado del automata. En cuanto a las columnas: una para numerar el estado, tantas como distintas posibles entradas, otra para señalar el token que se reconoce; una ultima para numerar los retrocesos que hay que hacer pata reconocer los lexemas.

Construcción de un Analizador Léxico Entradas Estado Digito + * Otro Token Retroc. 5 2 1 Error - PRODUCTO 3 4 SUMA . INCREMENT 6 ENTERO

Construcción de un Analizador Léxico Ej: tenemos la siguiente entrada: 25+5*13+33++5**/5 El automata efectuara los siguientes pasos: Estado=0, Entrada=2, Estado=5, Entrada=5, Estado=5, Entrada=+, Estado=6, Token=ENTERO, Lexema=25, Retroceso=1, Estado=0, Entrada=+,Estado=2, Entrada=5, Estado=3, Token=SUMA, Lexema=+,Retroceso=1, Estado=0, Entrada=5, Estado=5, Entrada=*, Estado=6, Token=ENTERO, Lexema=5, Retroceso=1.

Ejercicio Diseñar un DT para reconocer los siguientes componentes lexicos: LETRAS: cualquier secuencia de una o mas letras ENTERO: cualquier secuencia de uno o mas números (si tiene mas de un numero, no deberá comenzar por 0). ASIGNAR: la secuencia =. SUMAR: la secuencia +. RESTAR: la secuencia -. IMPRIMIR: la palabra reservada print.

[AHO] AHO, SETHI, ULLMAN: Compiladores: Principios, técnicas y herramientas,: Addison-Wesley Iberoamericana, 1990 [GARRIDO] A. Garrido, J. Iñesta, F. Moreno y J. Pérez. 2002. Diseño de compiladores. Universidad de Alicante. [CATALAN] Jacinto Ruiz Catalan.2010. Compiladores: Teoria e Implementacion. Alfaomega.