1 / 42

Teoría de lenguajes y compiladores

Unidad I. Analizador lexicográfico. Teoría de lenguajes y compiladores. Semana 1. Temas. Introducción a la teoría de lenguajes. Evolución de los lenguajes de programación. Categorías de los lenguajes. Elementos de un lenguaje de programación. Compiladores e intérpretes. Objetivo General.

alma
Download Presentation

Teoría de lenguajes y compiladores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Unidad I Analizador lexicográfico Teoría de lenguajes y compiladores Semana 1 Temas Introducción a la teoría de lenguajes. Evolución de los lenguajes de programación. Categorías de los lenguajes. Elementos de un lenguaje de programación. Compiladores e intérpretes.

  2. Objetivo General El alumno al finalizar el curso podrá desarrollar aplicaciones que le permitan determinar si una estructura gramatical corresponde a una sentencia valida en la definición de un lenguaje en particular, teniendo en cuenta el contexto sintáctico y semántico. Así mismo estará capacitado para proponer nuevas formas estructurales en la definición de lenguajes de programación.

  3. Objetivos Específicos • Diseñar e implementar un analizador lexicográfico. • Diseñar e implementar un analizador sintáctico. • Diseñar e implementar un analizador semántico.

  4. Objetivos Instruccionales • Describir la evolución de los lenguajes de programación y reconociendo las categorías existentes, así como los elementos que la conforman. • Establecer las diferencias entre, compiladores e interpretes.

  5. Reflexión: Si eres programador y no logras hacer algo que sirva… …llámalo versión

  6. Programación “El arte de la programación, es el arte de organizar la complejidad”. Introducción “Organizar los cálculos de manera que nuestros sentidos sean suficientes para garantizar que el cómputo arroje los resultados esperados”.

  7. Requisitos mínimos para desarrollar un lenguaje. • Ayudar a escribir buenos programas. • Fácil de leer. • Fácil de entender. • Fácil de modificar. Introducción

  8. Programación vs Mantenimiento Se refiere a las correcciones y los cambios que se realizan en un programa después de su desarrollo. Creación inicial y verificación de un progama. Introducción

  9. Estructura y Organización Son claves para manejar programas muy grandes. Introducción La legibilidad de un programa puede mejorarse organizándolo de tal manera que cada parte pueda entenderse en forma relativamente independiente del resto.

  10. Von Neumann Introduce el concepto de programa almacenado. Propuso que los programas se almacenaran de forma digital en la memoria de la computadora junto con los datos. Introducción Por otro lado, se dio cuenta que la aritmética decimal usada por la ENIAC podía ser reemplazada usando aritmética binaria. Este diseño, conocido como ARQUITECTURA de VON NEUMANN, ha sido la base para casi todas las computadoras digitales.

  11. La Máquina de Von Neumann Unidad de control Unidad Aritmética Unidad de entrada y salida Introducción Acumulador A Registro R Memoria para instrucciones y datos Organización de la máquina de Von Neumann

  12. La Máquina de Von Neumann Los enteros eran la única forma de datos Determina el orden de ejecución de las instrucciones. Introducción Podía sumar, restar, multiplicar, dividir y tomar el valor absoluto de un numero. A una localidad de memoria podía asignársele el valor contenido en el acumulador

  13. La Máquina de Von Neumann Código de Máquina Lenguaje de máquina: 00000010101111001010 00000010101111101010 00000011001100100110 Lenguaje Ensamblador: Load I Add J Store K Lenguaje alto nivel: K = I + J Introducción

  14. Primera experiencia En los años 50, se creía que los programas eficientes solo podían escribirse manualmente, usando algunas variantes de lenguajes de máquina. (Fortran) Introducción ¡ Surge preocupación por la eficiencia de ejecución ! • El alto costo de creación de código ensamblador o de máquina fue la principal motivación para el desarrollo de Fortran (FORmula TRANslation). • Ninguna notación diferente del lenguaje de máquina puede ejecutarse directamente en uncomputador.

  15. Primera experiencia Tiempo de traducción Programa fuente Compilador Introducción Tiempo de ejecución Código destino Entrada Salida

  16. Primera experiencia Beneficios de los lenguajes de alto nivel • Surgimiento de usuarios y programas nuevos. • Proporciona notaciones fáciles de leer. • Proporciona portabilidad (Usuarios pueden intercambiar programas) Introducción

  17. Primera experiencia Estructura y legibilidad Vs Eficiencia • La legibilidad y la capacidad de modificar los programas pueden contribuir también a la eficiencia. • La eficiencia de un programa depende de las decisiones tomados en los niveles de diseño, desde la concepción hasta la elección de estructuras de datos y algoritmos para el código final. • El refinamiento de código se realiza con la mejora de puntos críticos, que son las pequeñas partes muy utilizadas en donde el programa la mayor parte de su tiempo de ejecución. Introducción

  18. Cinco generaciones de los lenguajes de programación Evolución de los lenguajes

  19. Clasificación de los lenguajes de programación Categoria de los lenguajes

  20. Como se debe estructurar un programa Existe más de una forma para solucionar un problema, así que hay mas de una forma para estructurar un programa. La estructura tiene que establecerse para cada programa. Elementos de un lenguaje Formas: • Descendente • Modular • Objetos

  21. Estructura sintáctica • La sintaxis de un lenguaje especifica como están construidos los programas en dicho lenguaje. • La estructura sintáctica, es decir la estructura impuesta por la sintaxis del lenguaje, constituye la herramienta para trabajar con el lenguaje. • Esta se ha utilizado para organizar descripciones de lenguajes y traductores, así como reglas para entender los programas escritos en un lenguaje. Elementos de un lenguaje

  22. Estructura sintáctica • La sintaxis de un lenguaje programación casi siempre se especifica usando alguna variante de una notación conocida como GRAMATICA INDEPENDIENTE DEL CONTEXTO o simplemente GRAMATICA. • Las variantes de notación son: • BNF (Forma de Backus-Naurs) • BNFE (BNF extendida) • ESQUEMAS DE SINTAXIS Elementos de un lenguaje

  23. NOTACION BNF La siguiente notación describe la sintaxis de los números reales. <numero-real> ::= <secuencia-digitos> . <secuencia-digitos> <secuencia-digitos> ::= <digito> | <digito><secuencia-digitos> <digito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Otro ejemplo: <expresion> ::= <expresion> + <termino> | <expresion> - <termino> | <termino> <termino> ::= <termino> * < factor> | <termino> div <factor> | <factor> <factor> ::= <expresion> |<termino> | <constante> Elementos de un lenguaje

  24. NOTACION BNF Sean las 4 reglas siguientes parte de la gramática de un lenguaje de programación. <entero> ::= <digito> | <digito> <entero> <identificador> ::= <letra> | <identificador> <digito> | <identificador> <letra> <parametros> ::= ( <lista_id> ) <lista_id> ::= <identificador> | <identificador> , <lista_id> Elementos de un lenguaje

  25. NOTACION BNF EXTENDIDA • Los símbolos no terminales comienzan con letras mayúsculas, los terminales que consisten en símbolos como + , - se colocan entre comillas sencillas y los símbolos terminales en negrita como div. • Además: • Una barra vertical |, representa una opción • Los paréntesis, ( y ), se usan para agrupar • Las llaves, { y }, representan cero o mas repeticiones • Los corchetes, [ y ], representan una construcción opcional Elementos de un lenguaje Ejemplo: Expresion ::= Termino { ( ´+´ | ´-´ ) Termino } Termino ::= Factor { ( ´*´ | div ) Factor } Factor ::= ´(´ Expresion ´)´ | Variable | Constante

  26. NOTACIÓN EN ESQUEMA DE SINTAXIS Se construye un subesquema para cada símbolo no terminal. Expresión Termino + Termino Elementos de un lenguaje - Termino Factor * Factor div Factor ( Termino ) Variable Constante

  27. Diagrama de Conway • Un diagrama de conway es un grafo dirigido que tiene dos componentes esenciales, además de las líneas de flechas que sirven de conectivas. • El “rectángulo” para indicar que en ese punto hay una metanoción del vocabulario no terminal N ( y por tanto tendrá otro diagrama de conway para definirle). • El “circulo” para indicar que en ese punto hay un símbolo terminal, que por lo tanto será un elemento del vocabulario terminal T. • En estos diagramas se acostumbrará a comenzar el recorrido por la izquierda, por la rama que suele llevar muy cercano a ella el nombre de la metanoción a definir, se sigue el recorrido en el sentido de las flechas y cada elemento que se va encontrando se toma y se concatena a lo que ya se tuviera. Elementos de un lenguaje

  28. Diagrama de Conway Entero Digito Elementos de un lenguaje Identificador Letra Letra Digito

  29. Diagrama de Conway Parametros ( ) Lista_id Elementos de un lenguaje Lista_id Identificador ,

  30. Conceptos relacionados Con algunas técnicas básicas de escritura de compiladores se pueden construir traductores para una gran variedad de lenguajes y máquinas Arquitectura de Computadoras Lenguajes de Programación Compiladores Compiladores e interpretes Teoría de Lenguajes Ingeniería de Software Teoría de Algoritmos

  31. Compiladores Un compilador es un programa que lee un programa en un lenguaje y lo traduce a un programa equivalente en otro lenguaje, y además informa al usuario sobre la presencia de errores en el programa de entrada programa programa fuente objeto mensajes de error Compiladores e interpretes compilador

  32. HISTORIA Computadora Persona Código Máquina Compiladores e interpretes Ensamblador Lenguaje Ensamblador Código Máquina Ensamblador Compilador Código Máquina Lenguaje Ensamblador Lenguaje de Alto Nivel

  33. TIPOS DE SISTEMAS DE COMPILACIÓN • ENSAMBLADOR Traducen programasescritos en lenguajeensamblador a código máquina • COMPILADOR Traducen programasescritos en lenguajede alto nivel a código intermedio o a código máquina • INTERPRETE No genera código objeto, analiza y ejecuta directamente cada proposición del Programa Fuente (PF) • PREPROCESADOR Sustituyen macros, incluyen archivos o extensión del lenguaje. Compiladores e interpretes

  34. SISTEMA PARA PROCESAMIENTO DE UN LENGUAJE estructura del programa fuente programa fuente programa objeto en lenguaje ensamblador código de máquina relocalizable biblioteca archivos obj.relocal. código de máquina absoluto preprocesador compilador Compiladores e interpretes ensamblador editor de carga y enlace

  35. PARTES DE LA COMPILACIÓN • ANÁLISIS(Etapa Inicial): Divide al PF en sus elementos componentes y crea una representación intermedia. Se determinan las operaciones y se registran en una estructura de árbol (ej. árbol sintáctico) • SÍNTESIS (Etapa Final): Construye el PO deseado a partir de la representación Intermedia (requiere técnicas más especializadas) Compiladores e interpretes

  36. UN AMBIENTE GENERAL DE COMPILACIÓN Fuente Análisis léxico Análisis sintáctico Análisis semántico Más: Sistemas de edición y depuración Compiladores e interpretes Intermedio Generador de código Código relocalizable Enlazador Objeto

  37. FASES DE UN COMPILADOR PROGRAMA FUENTE analizador léxico analizador sintáctico administrador analizador semántico manejador de la tabla generador de código intermedio de errores de símbolos optimizador de código generador de código PROGRAMA OBJETO Cada fase transforma al PF de una representación a otra Compiladores e interpretes

  38. ESQUEMA DE BLOQUES DE UN COMPILADOR FUENTE Compilador ANALISIS Scanner Tabla Parser de símbolos SINTESIS Prep. para la Gen. del código OBJETO Gener. del código Compiladores e interpretes

  39. ESTRUCTURA FUNCIONAL DE UN COMPILADOR (de una pasada) SENTENCIA Fuente Explorador Reconocedor Generador Objeto de código Tabla de símbolos Compiladores e interpretes

  40. HERRAMIENTAS PARA CONSTRUCCIÓN DE COMPILADORES Lex y YACC • Herramientas que nos permiten desarrollar componentes o la mayor parte de un compilador • Son un recurso invaluable para el profesional y el investigador • Existen paquetes freeware Compiladores e interpretes

  41. Unidad I Analizador lexicográfico Teoría de lenguajes y compiladores Semana 1 Temas Introducción a la teoría de lenguajes. Evolución de los lenguajes de programación. Categorías de los lenguajes. Elementos de un lenguaje de programación. Compiladores e intérpretes.

More Related