Teoría de lenguajes y compiladores

Slides:



Advertisements
Presentaciones similares
Clasificación de los compiladores
Advertisements

¿Qué es Sofware? Son el conjunto de instrucciones que dirigen las actividades del Hardware Consiste en programas, módulos de soporte y archivos de datos,
Prof. Ing.Maria Rosa Damaso Rios
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
Facultad de Ciencias de la Computación
Fundamentos de programación
Resolución de Problemas Algoritmos y Programación
INSTITUTO TECNOLOGICO DE MINATITLAN
Lenguajes de programación
Introducción a la Programación
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
Introducción a la programación
Teoría de lenguajes y compiladores
Programas Son una serie o secuencia de instrucciones entendibles por los ordenadores que permiten la realización de las acciones o tareas para las que.
Lenguajes de programación
METODOLOGIA DE LA PROGRAMACION
Introducción al Software
Tema 6. Conceptos básicos de programación
ALGORITMOS Y ESTRUCTURAS DE DATOS
Introducción. Agenda Clase 1 ● Preámbulo histórico. ● Razones de la Diversidad de Lenguajes. ● Razones del Éxito de un Lenguaje. ● Clasificación ● Motivación.
Sistemas Evolutivos Introduccion.
ALGORITMOS, LENGUAJES Y TECNICAS DE PROGRAMACION
SEMANA Introducción.
TRADUCTOR DE UN PROGRAMA
Fundamentos de Programación
M.C. Meliza Contreras González
Teoría de lenguajes y compiladores
Problemas, algoritmos y programas: Modelar: Simular o programar su solución en un computador. Algoritmos: Es un conjunto finito, y no ambiguo de etapas.
Cobol C Pascal Fortran 1. INTRODUCCIÓN SmallTalk Java C++
FUNDAMENTOS DE PROGRAMACION
Tema 1 Entorno de la programación. Conceptos elementales Algoritmo  Secuencia ordenada de pasos exentos de ambigüedad que conduce a la resolución de.
 Fue en el año 1945 cuando el matemático Jhon Von Neumann, fascinado por las posibilidades del ENIAC, demostró que una computadora podía tener una estructura.
LENGUAJE DE PROGRAMACIÓN
Tema 6. Conceptos básicos de programación (Repaso) Prof. María Alejandra Quintero Informática Año 2013.
FUNDAMENTOS DE PROGRAMACIÓN ISC. GABRIEL ZEPEDA MARTÍNEZ EST. ABRAHAM F. MACHUCA VAZQUEZ.
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.
Fundamentos de programación Organización de una computadora.
Procesadores de Lenguajes
LENGUAJES DE PROGRAMACIÓN
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
Programación de Sistemas
Tema 1. Introducción y Conceptos Básicos
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
Elementos básicos del lenguaje
Introducción a la tecnología Realizado por: Miguel Ángel Arias.
INFORMATICA VII (Programación e implementación de sistemas)
Representación de Algoritmos
Programación de Sistemas FEI – 2008
Unidad 1. Introducción a los Compiladores.
Lenguajes de Programación
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
Metodología de la programación
Teoría de lenguajes y compiladores
ESCUELA NORMAL “PROF. DARÍO RODRÍGUEZ CRUZ” Licenciatura en educación preescolar Alumnas: *Mayra * Monserrat * Idalia *Cinthia Curso: las TIC en la educación.
Prof. Flor Narciso Departamento de Computación
DEV- C++ ·include <iostream> Int x x=x+2(x)
Elaboración de algoritmos usando lógica de programación
Unidad TemáticaI. Conceptos Básicos Horas Prácticas10 Horas Teóricas8 Horas Totales18 Objetivo El alumno determinará las entradas, procesos y salidas.
Traductores Gilberto G. Romero H..
Es un tipo especial de software que nos permite *Crear *Desarrollar *Programar otras aplicaciones. Haciendo uso de sus conocimientos lógicos y lenguajes.
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Curso: Programación I Grado: 4to. Bachillerato Prof. Gerardo Barrientos.
Programación de Sistemas
TEMA 4: MÉTODOS Y ELEMENTOS DE PROGRAMACIÓN
 Panorama General Fundamentos de Programación M.I. Jaime Alfonso Reyes Cortés.
Fundamentos de Programación Unidad I Conceptos Básicos.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
Transcripción de la presentación:

Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Semana 1 Introducción

Objetivo General El alumno al finalizar el curso desarrollará aplicaciones que le permitan determinar si una sentencia corresponde a la estructura gramatical de un lenguaje de programación. Así mismo estará capacitado para proponer nuevas formas estructurales en la definición de lenguajes de programación.

Desarrollar un analizador lexicográfico Objetivo Específico Desarrollar un analizador lexicográfico

Objetivo Instruccional Analizar la evolución de los lenguajes de programación; estableciendo las diferencias entre ellos, así como los elementos que los conforman.

Reflexión: Si eres programador y desarrollas algo, pero no logras hacer que sirva … … llámalo versión

Contenidos Introducción Evolución de los lenguajes de programación Categorías de los lenguajes Organización de un programa Notación gramatical de los lenguajes Compiladores e interpretes

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

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

Programación vs Mantenimiento Introducción 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 programa.

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

Introduce el concepto de programa almacenado. Introducción 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 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.

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

Elementos de la máquina de Von Neumann Introducción Elementos de la máquina de Von Neumann Comprende… Datos Operaciones aritméticas Asignaciones a localidades de memoria Flujo de control Los enteros eran la única forma de datos Determina el orden de ejecución de las instrucciones. 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

Codificación Introducción Lenguaje de máquina: 00000010101111001010 00000010101111101010 00000011001100100110 Lenguaje Ensamblador: Load I Add J Store K Lenguaje alto nivel: K = I + J

¡ Surge preocupación por la eficiencia de ejecución ! Introducción 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) ¡ 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 un computador.

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

Beneficios de los lenguajes de alto nivel Introducción …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)

Estructura y legibilidad vs Eficiencia Introducción …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.

Generaciones de los lenguajes de programación Evolución de los lenguajes Generaciones de los lenguajes de programación Generación Nombre Particularidad Primera De maquina Especifico para cada microprocesador, uso de código binario Segunda Ensamblador Uso de nemotécnicas que abstraen al lenguaje de maquina Tercera De alto nivel Lenguajes estructurados con comandos cercanos al lenguaje natural Cuarta Propósito especial Programas orientados a programas específicos Quinta Naturales Incluye inteligencia artificial y sistemas expertos

Clasificación de los lenguajes de programación Categoría de los lenguajes Clasificación de los lenguajes de programación Lenguaje de máquina Orientado al microprocesador (Sistema binario) Lenguaje de bajo nivel Ensamblador (Usa código nemónico y también esta orientado a un microprocesador) Lenguajes de alto nivel Orientado a que las personas entiendan y escriban los programas

Formas de organización Organización de un programa Formas de organización 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. Formas: Descendente Modular Objetos

Estructura sintáctica Notación gramatical de un lenguaje 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. Se utiliza para organizar descripciones de lenguajes y traductores, así como reglas para entender los programas escritos en un lenguaje.

Notación gramatical de un lenguaje Notación 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

Notación gramatical de un lenguaje BNF (Forma de Backus-Naurs) 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>

Notación gramatical de un lenguaje BNFE (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. 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 Ejemplo: Expresion ::= Termino { ( ´+´ | ´-´ ) Termino } Termino ::= Factor { ( ´*´ | div ) Factor } Factor ::= ´(´ Expresion ´)´ | Variable | Constante

Notación gramatical de un lenguaje ESQUEMA DE SINTAXIS Se construye un sub-esquema para cada símbolo no terminal. Expresión Termino + - Termino Factor * div Factor Termino ( ) Variable Constante

Notación grafica de un lenguaje Diagrama de Conway Notación grafica de un lenguaje 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.

Notación grafica de un lenguaje Diagrama de Conway Notación grafica de un lenguaje Entero Digito Identificador Letra Letra Digito

Notación grafica de un lenguaje Diagrama de Conway Notación grafica de un lenguaje Parametros ( ) Lista_id Lista_id Identificador ,

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

Compiladores e interpretes 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 compilador

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

Tipos de sistemas de compilación Compiladores e interpretes Tipos de sistemas de compilación ENSAMBLADOR Traducen programas escritos en lenguaje ensamblador a código máquina COMPILADOR Traducen programas escritos en lenguaje de 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.

Sistema de procesamiento de un lenguaje Compiladores e interpretes 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 ensamblador editor de carga y enlace

PARTES DE LA COMPILACIÓN Compiladores e interpretes PARTES DE LA COMPILACIÓN Análisis (Etapa Inicial): Divide al Programa Fuente 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 Programa Objeto deseado a partir de la representación Intermedia (requiere técnicas más especializadas)

UN AMBIENTE GENERAL DE COMPILACIÓN 18/04/2017 Compiladores e interpretes 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 Intermedio Generador de código Código relocalizable Enlazador Objeto

FASES DE UN COMPILADOR Compiladores e interpretes 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

ESQUEMA DE BLOQUES DE UN COMPILADOR Compiladores e interpretes 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

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

HERRAMIENTAS PARA CONSTRUCCIÓN DE COMPILADORES 18/04/2017 Compiladores e interpretes 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

Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Semana 1 Introducción