Tema 1. Introducción

Documentos relacionados
Diseño de Compiladores I. Estructura General de un Compilador

Conceptos básicos sobre gramáticas

Unidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas

Unidad 2. Introducción Lenguajes y Compiladores

Procesadores de lenguaje Tema 1 Introducción a los compiladores

Tema 5. Análisis semántico

16 Análisis sintáctico I

Contenido. Capítulo 1. Teoría de conjuntos. 1. Capítulo 2. Lenguaje. 39. Capítulo 3. Lenguajes formales. 55

Lenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Tema 1: Introducción. Teoría de autómatas y lenguajes formales I

Tema 5. Análisis sintáctico ascendente

Procesadores de Lenguaje

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa

Desarrollo del Programa Docente de Procesadores del Lenguaje

Capítulo 9. Introducción a los lenguajes formales. Continuar

Las Etapas de la Compilación

Coordinación de Ciencias Computacionales INAOE. Teoría de Autómatas y Lenguajes Formales. Temario detallado para examen de ingreso 2012

Tema 7. Generación de código

18 Análisis sintáctico III Compiladores - Profr. Edgardo Adrián Franco Martínez. Clasificación de métodos de análisis sintáctico Análisis descendente

Procesadores de Lenguaje

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 3.

Controla el flujo de tokens reconocidos por parte del analizador léxico. 4.2 Introduccion a las gramaticas libres de contexto y arboles de derivacion

Introducción. Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas

Unidad II: Análisis semántico

Objetivos Que el estudiante logre conocer, comprender y manejar conceptos y técnicas vinculados con el Analizador Léxico, para lo cual debe:

COMPILACIÓN I

Analizador Léxico. Programación II Margarita Álvarez. Analizador Léxico - Funciones

1.-DEFINE EN QUE CONSISTEN LAS GRAMÁTICAS LIBRES DE CONTEXTO

Analizadores sintácticos LR(0) y SLR

Tema 2 Introducción a la Programación en C.

Software para la Enseñanza de las Fases de Análisis Léxico y Análisis Sintáctico en Procesadores de Lenguajes

PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR:

Unidad III Análisis Léxico. M.C. Juan Carlos Olivares Rojas

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid

Lenguajes y Compiladores Análisis Sintáctico Parte I. Teoría Lenguajes 1

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013

Agenda. Introducción Analizador léxico Analysis El problema de analizar sintácticamente Analizador sintáctico descendeterecursivo

JavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores.

Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I

Tema 6 Organización y gestión de la memoria

Generación de Código Intermedio

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA

Analizador Sintáctico Ascendente

Técnicas de Programación

Introducción a la Lógica y la Computación

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

Tema: Análisis Léxico

Compiladores: Sesión 3. Análisis léxico, expresiones regulares

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

CUP. Diseño de compiladores. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP 20/04/2014

Introducción a la Lógica y la Computación

Programación de Ordenadores

COMPILADORES E INTERPRETES

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas

Texto: Hopcroft, J. E., Motwani, R., Ullman, J.D., Introduction to Automata Theory, Languajes, and Computation. 3rd Edition. Addison Wesley, 2007.

Toda copia en PAPEL es un "Documento No Controlado" a excepción del original.

Introducción a la programación: Contenido. Introducción

Teoría de Autómatas y Lenguajes Formales Práctica 4

Análisis sintáctico 1

Evolución del software y su situación actual

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 2.

SÍLABO DEL CURSO DE COMPILADORES Y LENGUAJES DE PROGRAMACIÓN

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

1. Define que es un Autómatas finitos determinanticos y cuáles son sus elementos constitutivos (explique cada uno de ellos).

Introducción a la Lógica y la Computación

* Conversión del carácter 10 ASCII (LF) en <br> de HTML para pasar texto a la web.

Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars)

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

El proceso del Análisis Léxico

Tema 3. Análisis sintáctico descendente

Lenguajes Libres del Contexto

Unidad IV Análisis Sintáctico. M.C. Juan Carlos Olivares Rojas

UNIVERSIDAD DE GUADALAJARA

Compiladores e intérpretes Análisis Léxico I. Análisis Léxico I

Tema: Autómata de Pila

Conceptos y definiciones básicos en computación

Implementación de una metodología de reparación de errores sintácticos para el generador de analizadores sintácticos GNU Bison

Un. VI. Generador de código intermedio.

ANÁLISIS SINTÁCTICO I ANALIZADORES SINTÁCTICOS

ESCUELA: UNIVERSIDAD DEL ISTMO

TEMA 3: El proceso de compilación, del código fuente al código máquina

Dr. Carlos A. Coello Coello Departamento de Computación CINVESTAV IPN

INSTITUCIÓN EDUCATIVA SAN CRISTÓBAL

Algoritmos y Lenguajes de Programación

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 4

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

Introducción. Análisis Semántico. José M. Castaño. Teoría de Lenguajes 2011 Departamento de Computación FCEyN, UBA

TEMA 1: INTRODUCCIÓN

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final

Teoría de Autómatas y Lenguajes Formales. Introducción a las Gramáticas. Gramáticas incontextuales

Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer, utilizar y diseñar gramáticas de libre contexto

1. Computadores y programación

Introducción a la programación

Processadors de Llenguatge II. Compiladores

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4

HERRAMIENTAS YACC Y BISON

Transcripción:

Departamento de Tecnologías de la Información Tema 1 Introducción Ciencias de la Computación e Inteligencia Artificial

Índice 1.1 Conceptos 1.2 Un poco de historia 1.3 Estructura de un compilador 1.4 Teoría de lenguajes formales 2

Índice 1.1 Conceptos 1.2 Un poco de historia 1.3 Estructura de un compilador 1.4 Teoría de lenguajes formales 3

1.1 Conceptos Lenguaje fuente Procesador de lenguaje Procesador de lenguaje: aplicación que toma como entrada un conjunto de archivos descritos en un cierto lenguaje formal (lenguaje fuente) Traductor: procesador de lenguaje cuya función consiste en reescribir los archivos de entrada en otro lenguaje formal (lenguaje objeto) 4

1.1 Conceptos Lenguaje fuente Traductor Lenguaje objeto Ensamblador: traductor de lenguaje ensamblador a código máquina Compilador: traductor de lenguaje de alto nivel a ensamblador o a código máquina 5

1.1 Conceptos Intérprete: Analiza el código fuente y lo ejecuta sin generar un código objeto. Emulador: Intérprete en el que el código fuente es el código máquina de una plataforma diferente. Compiladores vs intérpretes: Los programas compilados son mucho más rápidos Los compiladores consumen muchos recursos Los intérpretes utilizan código independiente de la plataforma Los intérpretes pueden ejecutar código generado en tiempo de ejecución. 6

1.1 Conceptos Preprocesador: pequeño compilador dedicado a expandir las macros e incluir ficheros. Enlazador (linker): programa que enlaza los diferentes módulos compilados para generar el ejecutable. Compilador cruzado: compilador que genera código para una máquina diferente a la utilizada para compilar. Autocompilador: compilador escrito en el mismo lenguaje que va a compilar. Metacompilador: herramienta de ayuda al diseño de compiladores. Descompilador: programa que produce una representación de alto nivel a partir del código máquina. 7

Índice 1.1 Conceptos 1.2 Un poco de historia 1.3 Estructura de un compilador 1.4 Teoría de lenguajes formales 8

1.2 Un poco de historia 1940 s: Primeros ordenadores. Programación directa en código máquina. Nace el ensamblador (traducido manualmente) Se automatiza la etapa de ensamblado 1950 s (1950) John Backus dirige en IBM un proyecto de lenguaje algebraico (1954-1958) Nace el FORTRAN (FORmulae TRANslator) Primer compilador de FORTRAN para IBM modelo 704 9

1.2 Un poco de historia 1950 s (mediados): Noam Chomsky publica sus estudios sobre la estructura de los lenguajes y las gramáticas formales 1950 s (finales): F.L. Bauer (Univ. Munich) dirige un proyecto de lenguaje formal Se crea un comité conjunto con la Association for Computing Machinery en el que participa Backus Se define IAL (International Algebraic Language) Posteriormente se denomina ALGOL 58 (ALGOrithmic Language) 10

1.2 Un poco de historia Características de ALGOL 58 Definición de la notación BNF (Backus-Naur Form) Declaración de tipos de variables Estructura modular Funciones recursivas Paso de parámetros por valor o por nombre Precursor de Pascal, Ada o Modula 11

1.2 Un poco de historia 1960 s: Primeras técnicas de desarrollo de compiladores 1958: Strong y otros proponen dividir el compilador en dos fases: front-end y back-end y promueven la creación de un lenguaje intermedio universal (UNCOL UNiversal Computer Oriented Language). 1959: Rabin y Scott proponen utilizar autómatas deterministas para el análisis léxico 1961: Primer analizador sintáctico descendente recursivo Durante toda la década se estudian intensamente las gramáticas LL. 12

1.2 Un poco de historia 1970 s: Se estudian las gramáticas LR Se definen los métodos de análisis ascendente SLR y LALR Se crean numerosas herramientas de ayuda al diseño de compiladores A mediados de la década aparecen las herramientas lex y yacc que se convierten en estándares de facto al distribuirse con UNIX. La Free Software Fundation distribuye estas herramientas bajo los nombres de flex y bison 13

1.2 Un poco de historia Generación de código: Inicialmente la gestión de la memoria era estática Cuando aparecen las funciones recursivas se desarrolla la pila como forma de gestionar la memoria La gestión de memoria dinámica conduce a la definición del montículo (heap) como zona de gestión de esta memoria Surgen nuevos problemas como las referencias perdidas o la recogida de basura Últimos avances: Optimización de código Máquinas virtuales y auge de los lenguajes interpretados 14

Índice 1.1 Conceptos 1.2 Un poco de historia 1.3 Estructura de un compilador 1.4 Teoría de lenguajes formales 15

1.3 Estructura de un compilador Lenguaje fuente Análisis léxico Análisis sintáctico Análisis semántico Gestión de errores Análisis Tabla de símbolos Generación de código intermedio Optimización de código intermedio Generación de código objeto Front-end Back-end Lenguaje objeto 16

1.3.1 Análisis léxico Objetivo: Leer caracteres e identificar componentes léxicos (tokens) Filtrar comentarios Detectar errores léxicos Ejemplo: m e d i a = ( a + b ) / 2 ; / * i n s t r u c c i o n * / id media asign lpar id a suma id b rpar div num 2 pyc 17

1.3.2 Análisis sintáctico Objetivo: Verificar estructuras gramaticales Detectar errores de sintaxis Especificación: Gramáticas libres de contexto Ejemplo: <Asign> id media asign <Expr> pyc <Expr> div <Expr> <Asign> id asign <Expr> pyc <Expr> <Expr> suma <Expr> lpar <Expr> rpar <Expr> <Expr> div <Expr> <Expr> lpar <Expr> rpar <Expr> id <Expr> suma <Expr> <Expr> num id a id b num 2 18

1.3.3 Análisis semántico Objetivo: Verificar restricciones semánticas (predefinición de variables, consistencia de tipos, llamadas a funciones) Generar un Árbol de Sintaxis Abstracta Especificación: Gramáticas atribuidas Ejemplo: <Asign> id media div suma num 2 id a id b 19

1.3.4 Generación de código intermedio Objetivo: Generar una descripción en código de bajo nivel independiente de la plataforma Especificación: Código de tres direcciones (destino, operando1, operando2, operación) Ejemplo: T1 := a T2 := b T3 := T1 + T2 T4 := 2 T5 := T3 / T4 media := T5 20

1.3.5 Optimización de código intermedio Objetivo: Reducir el número de operaciones para mejorar el rendimiento Técnicas: Eliminar saltos consecutivos Reutilizar valores intermedios Extraer instrucciones de los bucles Expandir los bucles Etc. 21

1.3.6 Generación de código objeto Objetivo: Obtener la representación en ensamblador para la máquina de destino Optimizar el código Técnicas. Almacenar las variables en registros Utilizar instrucciones específicas Etc. 22

1.3.7 Tabla de símbolos Objetivo: Almacenar toda la información de los diferentes símbolos (variables, constantes, tipos, funciones) Características: Cada etapa requiere una información diferente Comportamiento dinámico (variables definidas en módulos) Optimizar el tiempo de acceso (tablas hash) 23

1.3.8 Gestión de errores Objetivo: Localizar errores Informar de los detalles del error Recuperación del error (tokens de sincronismo) 24

Índice 1.1 Conceptos 1.2 Un poco de historia 1.3 Estructura de un compilador 1.4 Teoría de lenguajes formales 25

1.4 Teoría de lenguajes formales Alfabeto (S): conjunto finito de símbolos Cadena: secuencia finita de símbolos Cadena vacía (l): cadena de longitud cero S k : Conjunto de cadenas de longitud k Clausura del alfabeto (S*): Conjunto de todas las cadenas S* = U S k = S 0 U S 1 U S 2 U... k=0 Lenguaje formal: Subconjunto de S* 26

1.4 Teoría de lenguajes formales Gramáticas formales: Forma de describir lenguajes formales Cuatro elementos (N, S, P, <S>): N: Alfabeto de símbolos no terminales S : Alfabeto de símbolos terminales P: Conjunto de producciones o reglas P (N U S)* N (N U S)* (N U S)* <S>: Símbolo inicial (no terminal) 27

1.4 Teoría de lenguajes formales Derivación directa: h deriva directamente en g (h a g) si h = w 1 a w 2 g = w 1 b w 2 a b P * Derivación: h deriva en g ( h a g )si existen x 1,..., x n tales que h deriva directamente en x 1, x i deriva directamente x i+1 y x n deriva directamente en g * Forma sentencial: cadena a (N U S)* tal que <S> aa Sentencia: forma sentencial perteneciente a S* Lenguaje generado por la gramática G: * L(G) = { x S* <S> a x } 28

1.4 Teoría de lenguajes formales Ejemplo: G = ({<S>, <E>}, { id,+,* }, P, <S> }, con las siguientes reglas: <S> <E> <E> <E> + <E> <E> <E> * <E> <E> id Ejemplo de derivación: <S> a <E> <S> a <E> + <E> <S> a <E> + <E> * <E> <S> a id + <E> * <E> <S> a id + id * <E> <S> a id + id * id 29

1.4 Teoría de lenguajes formales La jerarquía de Chomsky: Gramáticas no restringidas: a b a (N U S)* N (N U S)* b (N U S)* Gramáticas sensibles al contexto: a<a>b a g b a, b, g (N U S)* <A> N Gramáticas independientes de contexto: <A> a <A> N a (N U S)* Gramáticas regulares: <A> a <B> ó <A> a <A>, <B> N a S 30

1.4 Teoría de lenguajes formales Dispositivos reconocedores de lenguajes: Tipo de gramática Regular Libre de contexto Sensible al contexto No restringida Dispositivo Autómata de estados finitos Autómata de pila Autómata de memoria limitada Máquina de Turing 31