INTRODUCCIÓN A LOS COMPILADORES Capítulo 1 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Resumen Lenguajes Instrucciones a la PC Lenguajes de Máquina Lenguajes Ensambladores Lenguajes de Alto Nivel Fortran Algol Conceptos de los Lenguajes Algorítmicos Compilador Autómatas Deterministas Sistematización de los Lenguajes de Programación BNF Construcción Sistemática de las Expresiones Optimización de Código Nuevos Lenguajes Traductores  Intérpretes  Compiladores Compilación de un Programa Partes del Compilador Intérpretes y Compiladores Compilar v.s. Interpretar Dar Instrucciones a la Computadora ¿Cómo Instruir a la Computadora? Ejecución Eficiente de las Acciones Funciones Importantes de los Compiladores Anatomía de un Compilador Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Introducción Pueden ser usados para describir cualquier acción. Hay muchas formas de describir la misma acción . ¿Por qué no con lenguajes naturales? ¿Español? <User1>“Dame la clave, PC1“. <PC1>&quot;Lo siento, temo que no puedo hacer eso&quot;. Lenguajes Naturales: La misma expresión describe muchas acciones posibles. Ambiguas. Usamos un lenguaje de programación Ejemplos: Java, C, C++, Pascal, BASIC, Scheme. Lenguajes Instrucciones a una PC Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Los modismos pueden ser aún mucho más ambiguos
Lenguaje de Máquina En 1946 se desarrolló la primera computadora digital. En un principio, estas máquinas ejecutaban instrucciones consistentes en códigos numéricos que señalaban a los circuitos de la máquina los estados correspondientes a cada operación.  Esta expresión mediante códigos numéricos se llamó Lenguaje Máquina, interpretado por un secuenciador cableado o por un microprograma.  Pero los códigos numéricos de las máquinas son engorrosos.  Materia: Compiladores  Docente: Ing. Carlos J. Archondo O. Es difícil atribuir a una sola persona la invención de la computadora. Pero si se tiene que señalar a una sola persona es a John Vincent Atanasoff.
Ensamblar Programas Los códigos numéricos de las máquinas son engorrosos.  Pronto los primeros usuarios de las computadoras descubrieron la ventaja de escribir sus programas mediante claves más fáciles de recordar que esos códigos numéricos. Al final, todas esas claves juntas se traducían manualmente a Lenguaje Máquina. Estas claves constituyen los llamados: Lenguajes Ensambladores Estos se generalizaron en cuanto se dio el paso decisivo de hacer que las propias máquinas realizaran el proceso mecánico de la traducción.  Materia: Compiladores  Docente: Ing. Carlos J. Archondo O. A este trabajo se le llama ensamblar el programa
Lenguajes Ensambladores Materia: Compiladores  Docente: Ing. Carlos J. Archondo O.
Lenguaje Algebraico A pesar de todo, el Lenguaje Ensamblador seguía siendo el de una Máquina, pero más fácil de manejar.  Los trabajos de investigación se orientaron entonces hacia la creación de un lenguaje que expresara las distintas acciones a realizar de una manera lo más sencilla posible para el hombre.  Así, en 1950, John Backus dirigió una investigación en I.B.M. en un lenguaje algebraico.  Materia: Compiladores  Docente: Ing. Carlos J. Archondo O. John Backus
Lenguajes de Alto Nivel En 1954 se empezó a desarrollar un lenguaje que permitía escribir fórmulas matemáticas de manera traducible por una computadora.  Le llamaron FORTRAN (FORmule TRANslator).  Fue el primer lenguaje considerado de Alto Nivel.  Se introdujo en 1957 para el uso de la computadora IBM modelo 704.  Permitía una programación más cómoda y breve que lo existente hasta ese momento, lo que suponía un considerable ahorro de trabajo.  Surgió así por primera vez el concepto de un traductor, como un programa que traducía un lenguaje a otro lenguaje.  Materia: Compiladores Docente: Ing. Carlos J. Archondo O. En el caso particular de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje traducido de bajo nivel, se emplea el término compilador. IBM 704
Fortran La tarea de realizar un compilador no fue fácil. Este desarrollo del FORTRAN estaba muy influenciado por la máquina objeto en la que iba a ser implementado.  Como un ejemplo de ello tenemos el hecho de que los espacios en blanco fuesen ignorados, debido a que el periférico que se utilizaba como entrada de programas (una lectora de tarjetas perforadas) no contaba correctamente los espacios en blanco.  Paralelamente al desarrollo de FORTRAN en América, en Europa surgió una corriente más universitaria: Pretendía que la definición de un lenguaje fuese independiente de la máquina y en donde los algoritmos se pudieran expresar de forma más simple. Materia: Compiladores  Docente: Ing. Carlos J. Archondo O. El primer compilador de FORTRAN tardó 18 años en ser elaborado y era muy sencillo.
Algol Materia: Compiladores  Docente: Ing. Carlos J. Archondo O.
Conceptos de los Lenguajes Algorítmicos En el ALGOL aparecen por primera vez muchos de los conceptos de los nuevos lenguajes algorítmicos: Materia: Compiladores  Docente: Ing. Carlos J. Archondo O.
Compilador Junto a este desarrollo en los lenguajes, también se iba avanzando en la técnica de compilación. En 1958, Strong y otros proponían una solución al problema de que un compilador fuera utilizable por varias máquinas objeto.  Para ello, se dividía por primera vez el compilador en dos fases: &quot;front end“ La primera fase es la encargada de analizar el programa fuente. &quot;back end“ La segunda fase es la encargada de generar código para la máquina objeto.  El puente de unión entre las dos fases era un lenguaje intermedio que se designó con el nombre de UNCOL (UNiversal Computer Oriented Language).  Para que un compilador fuera utilizable por varias máquinas bastaba únicamente modificar su back end.  Aunque se hicieron varios intentos para definir el UNCOL, el proyecto se ha quedado simplemente en un ejercicio teórico.  De todas formas, la división de un compilador en front end y back end fue un adelanto importante. Materia: Compiladores  Docente: Ing. Carlos J. Archondo O.
Autómatas Deterministas A la par se van poniendo las bases para la división de tareas en un compilador.  Así, en 1959 Rabin y Scott proponen el empleo de autómatas deterministas y no deterministas para el reconocimiento lexicográfico de los lenguajes.  Rápidamente se aprecia que la construcción de analizadores léxicos a partir de expresiones regulares es muy útil en la implementación de los compiladores.  Johnson y otros apuntan diversas soluciones.  Materia: Compiladores  Docente: Ing. Carlos J. Archondo O. En 1975, con la aparición de LEX surge el concepto de  un generador automático de analizadores léxicos a partir de expresiones regulares, basado en el sistema operativo UNIX.
Autómatas Deterministas Un autómata finito o máquina de estado finito: Es un modelo matemático de un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce. Un autómata finito determinista o AFD: Es un modelo compuesto de un número finito de estados y transiciones entre los estados y acciones. Un AFND o autómata finito no determinista: Es aquel que presenta cero, una o más transiciones por el mismo caracter del alfabeto. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Autómata: instrumento que posee mecanismos automáticos.
Herramienta de Programación Lex Lex es un programa que genera analizadores léxicos (scanners ó lexers). Se utiliza comúnmente con el generador de análisis sintáctico yacc. Originalmente escrito por Eric Schmidt y Mike Lesk. Es el analizador léxico estándar en los sistemas Unix. Se incluye en el estándar POSIX (Portable Operating System Interface). Toma como entrada una especificación de analizador léxico. Devuelve como salida el código fuente implementando el analizador léxico en C. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Posix es el equivalente a las API de Windows.
Estructura de un Archivo Lex Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Definition Section (sección de declaraciones) %% Rules Section (sección de reglas) %% C Code Section (sección de código en C) El símbolo %%, es el marcador de separación.
Sistematización de los Lenguajes de Programación Materia: Compiladores  Docente: Ing. Carlos J. Archondo O. Un gran número de profesionales contribuyeron al desarrollo de los traductores
BNF El Backus-Naur form (BNF): También conocido como Backus-Naur formalism, Backus normal form o Panini-Backus Form. El BNF se utiliza extensamente como notación para las gramáticas de los lenguajes de: Programación de la computadora Sistemas de comando Protocolos de comunicación Así como una notación para representar partes de las gramáticas de la lengua natural. La mayoría de los libros de textos para la teoría y/o la semántica del lenguaje de programación documentan el lenguaje de programación en BNF.  Algunas variantes, tales como la augmented Backus-Naur form (ABNF), tienen su propia documentación. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Es una meta sintaxis usada para expresar gramáticas libres de contexto: es decir, una manera formal de describir lenguajes formales.
Construcción Sistemática de las Expresiones Materia: Compiladores  Docente: Ing. Carlos J. Archondo O. Lisp es el segundo lenguaje de programación de alto nivel.  Es de tipo declarativo, fue creado en 1958 en el MIT (Instituto Tecnológico de Massachusetts).
Construcción Sistemática de las Expresiones Materia: Compiladores  Docente: Ing. Carlos J. Archondo O.
Optimización de Código Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Nuevos Lenguajes Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Java Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Traductores Traductor Un traductor es cualquier programa que toma como entrada un texto escrito en un lenguaje, llamado fuente y da como salida otro texto en un lenguaje, denominado objeto. Existen 2 tipos de traductores: Compiladores. Intérpretes. Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Intérpretes Ej: Basic, Smalltalk, PHP, Java Script, etc. Un intérprete es un programa capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel.  Realizan la traducción del código a medida que sea necesario y normalmente, no guardan el resultado de dicha traducción. No realizan compilación ni generan el código objeto. Los intérpretes son conocidos como motores de scripts ya que permiten la traducción de estos. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Pasos de la interpretación: Programa fuente Intérprete Traducción y ejecución línea a línea
Compiladores Ej: C++, Pascal, Fortran, *Java (virtual machine), *Visual Basic (runtime library), etc. Un compilador es un programa que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente. Usualmente este segundo lenguaje es código máquina. El proceso de traducción se conoce como compilación. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Pasos de la compilación: Programa fuente Compilador Programa objeto Montador Programa ejecutable en lenguaje de máquina
Compilación de un Programa Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Programa fuente Compilador Programa objeto Existen errores en la compilación? Programa ejecutable Enlazador Ejecución no si Con un editor Ej.: C++ Verificación y corrección de errores Obtención del programa objeto El montador obtiene el programa ejecutable Se ejecuta el programa y salida del mismo
Partes (programas) del Compilador Un compilador no funciona de manera aislada, sino que necesita de otros programas para conseguir su objetivo: Obtener un programa ejecutable a partir de un programa fuente en un lenguaje de alto nivel.  Algunos de esos programas son el preprocesador, el linker, el depurador y el ensamblador.  Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Algunos de los programas del compilador El preprocesador El linker El depurador Ensamblador
Programas del Compilador Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Intérpretes y Compiladores Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Un ensamblador es un compilador cuyo lenguaje fuente es el lenguaje ensamblador.
Compilar v.s. Interpretar Ventajas de compilar frente a interpretar: Se compila una vez, se ejecuta n veces. En bucles, la compilación genera código equivalente al bucle, pero interpretándolo se traduce tantas veces una línea como veces se repite el bucle. El compilador tiene una visión global del programa, por lo que la información de mensajes de error es mas detallada. Mayor velocidad de ejecución. Menor sobrecarga de memoria. Ventajas del intérprete frente al compilador: Un intérprete necesita menos memoria que un compilador.  En principio eran más abundantes dado que las computadoras tenían poca memoria. Permiten una mayor interactividad con el código en tiempo de desarrollo. La propia ejecución puede modificar el programa. Las variables pueden cambiar dinámicamente de tipo. Facilidad de depuración. Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Dar Instrucciones a la Computadora Escribimos un programa usando un lenguaje de programación. Descripción abstracta de alto nivel. Los microprocesadores hablan en lenguaje ensamblador. Detalles de implementación de bajo nivel Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Programa Escrito en Lenguaje de Programación Traducción a Lenguaje Ensamblador Compilador
¿Cómo Instruir a la Computadora? Entrada/Salida: Input:  Lenguaje de programación de alto nivel. Output:  Instrucciones de assembler de bajo nivel. Compilador tiene que: Leer y entender el programa. Determinar con precisión que acciones se requieren. Encontrar la forma de llevar a cabo esas acciones. Instruir a la computadora a llevar a cabo las acciones. Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
Ejecución Eficiente de las Acciones Mapeo de alto a bajo nivel: Mapeo simple de un programa a assembler produce una ejecución ineficiente. Más alto el nivel de abstracción más ineficiente. Si el mapeo no es eficiente: Las abstracciones de alto nivel son inútiles. Se necesita: Proveer un nivel alto de abstracción con rendimiento equivalente a si usáramos Assembler. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Mapeo: trazar un camino. Abstracción: precisar, aislando información no relevante.
Ejemplo int expr(int n) { int d; d = 4 * n * n * (n + 1) * (n + 1); return d; } lda $30,-32($30) stq $26,0($30) stq $15,8($30) bis $30,$30,$15 bis $16,$16,$1 stl $1,16($15) lds $f1,16($15) sts $f1,24($15) ldl $5,24($15) bis $5,$5,$2 s4addq $2,0,$3 ldl $4,16($15) mull $4,$3,$2 ldl $3,16($15) addq $3,1,$4 mull $2,$4,$2 ldl $3,16($15) addq $3,1,$4 mull $2,$4,$2 stl $2,20($15) ldl $0,20($15) br $31,$33 bis $15,$15,$30 ldq $26,0($30) ldq $15,8($30) addq $30,32,$30 ret $31,($26),1 Programa de entrada Assembler de salida Materia: Compiladores Docente: Ing. Carlos J. Archondo O. s4addq $16,0,$0 mull $16,$0,$0 addq $16,1,$16 mull $0,$16,$0 mull $0,$16,$0 ret $31,($26),1 Assembler de salida Sin optimizar Optimizado Optimizar código: utilizar mejor la potencia del hardware.
Funciones Importantes de los Compiladores Velocidad / rendimiento. Tamaño de código. Consumo de poder. Compilación rápida / eficiente. Seguridad / confiabilidad Debugging. Lenguajes de Programación Desde C a lenguajes OO. Definiciones aún más abstractas. Microprocesadores De simple CISC a RISC a ... Optimizar código para: Incremento del nivel de abstracción Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Mayor nivel de abstracción Menor nivel de abstracción Debugging: depuración de errores.
Anatomía de un Compilador Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Analizador Sintáctico (Parser) Generador de Código Optimizador de Código Analizador Semántico Analizador Léxico (Scanner) Léxico: perteneciente al diccionario de una lengua. Sintáctico: parte de la gramática para coordinar las palabras y formar oraciones. Semántico: estudio del significado de los signos. Parse Tree: árbol gramatical Program (Character Stream): flujo de programa Token Stream: flujo de token Intermediate Representation: representación intermedia Optimized Intermediate Representation: representación  intermedia optimizada Assembly Code: código en ensamblador Análisis Síntesis

Más contenido relacionado

PPT
Cap4 compiladores
PDF
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
PPT
Lenguaje Ensamblador
PPTX
Entrada/Salida de Sistema Operativo
PDF
Portafolio Lenguajes y Autómatas Unidad 1
PPTX
4.4 Y 4.5.pptx
PPTX
Lenguajes de interfaz
DOCX
Cuestionario de algoritmo
Cap4 compiladores
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
Lenguaje Ensamblador
Entrada/Salida de Sistema Operativo
Portafolio Lenguajes y Autómatas Unidad 1
4.4 Y 4.5.pptx
Lenguajes de interfaz
Cuestionario de algoritmo

La actualidad más candente (20)

PPTX
Pentesting
PPTX
Automatas Finitos Deterministicos y No Deterministicos
PPTX
Sistemas operativos distribuidos
DOCX
Ensayo sobre codigo linux
PDF
POO Unidad 3: Interfaz gráfica de usuario e hilos
PPSX
Procesamiento por lotes y nuevas tendencias en bd
PPTX
Base de datos
PDF
Arreglos en pseudocodigo 01
PPSX
Introducción a la codificación en lenguaje C
PPT
PDF
¿Cómo realizar entrevistas eficaces para obtener requisitos de software?
PDF
Unidad1 2 Lenguajes y automatas
PPTX
Seguridad en Ubuntu
PPTX
presentacion sobre Algoritmo, Pseudocódigo, diagramas de flujos y la metodolo...
PDF
Areas donde implementamos los sistemas distribuidos
DOCX
Unidad 2 concepto de Programa,Proceso y Procesador
PDF
Tema 3 Variables LingüíSticas, Variables Difusas Y Reglas Difusas. Razonamien...
POT
3.1.6 espacio para objetos
PPTX
Ingenieria de requisitos
Pentesting
Automatas Finitos Deterministicos y No Deterministicos
Sistemas operativos distribuidos
Ensayo sobre codigo linux
POO Unidad 3: Interfaz gráfica de usuario e hilos
Procesamiento por lotes y nuevas tendencias en bd
Base de datos
Arreglos en pseudocodigo 01
Introducción a la codificación en lenguaje C
¿Cómo realizar entrevistas eficaces para obtener requisitos de software?
Unidad1 2 Lenguajes y automatas
Seguridad en Ubuntu
presentacion sobre Algoritmo, Pseudocódigo, diagramas de flujos y la metodolo...
Areas donde implementamos los sistemas distribuidos
Unidad 2 concepto de Programa,Proceso y Procesador
Tema 3 Variables LingüíSticas, Variables Difusas Y Reglas Difusas. Razonamien...
3.1.6 espacio para objetos
Ingenieria de requisitos
Publicidad

Destacado (18)

PPT
Introducción a Compiladores
DOCX
Compiladores, interpretadores y lenguajes de bajo, medio y alto nivel
PDF
Materia unidad compiladores
PPT
Proceso de Compilacion
PPTX
PPT
Actividad 2 Analizador léxico, sintáctico y semántico
PDF
ghv Antriebstechnik Grafing auf der SPS Nürnberg 2014
PDF
Tarea ud4 Valero Gallego
PDF
Wie arbeitet Moritz Avenarius - eine Kurzvorstellung
PPTX
Ein guter Lehrer ist ein Künstler. Eine gute Lehrerin ist eine Künstlerin.
PDF
Marketing – geht’s überhaupt noch ohne 2.0?
PDF
Sstechwebsite
PDF
Klaus Reichert: Auch Content-Helden müssen Brötchen kaufen
PDF
futureformat DGME® Unternehmensbroschüre
PDF
Medienanthropologie: Lösungen im Krisenmanagement
PDF
Taiwan Aktuell #551 15.08.2012
PDF
Dienstleistungen des Sortimenter-Ausschusses
Introducción a Compiladores
Compiladores, interpretadores y lenguajes de bajo, medio y alto nivel
Materia unidad compiladores
Proceso de Compilacion
Actividad 2 Analizador léxico, sintáctico y semántico
ghv Antriebstechnik Grafing auf der SPS Nürnberg 2014
Tarea ud4 Valero Gallego
Wie arbeitet Moritz Avenarius - eine Kurzvorstellung
Ein guter Lehrer ist ein Künstler. Eine gute Lehrerin ist eine Künstlerin.
Marketing – geht’s überhaupt noch ohne 2.0?
Sstechwebsite
Klaus Reichert: Auch Content-Helden müssen Brötchen kaufen
futureformat DGME® Unternehmensbroschüre
Medienanthropologie: Lösungen im Krisenmanagement
Taiwan Aktuell #551 15.08.2012
Dienstleistungen des Sortimenter-Ausschusses
Publicidad

Similar a Cap1 compiladores (20)

PPT
Cap1
PPTX
Cap2
PDF
historia de lenguaje de programacion.pdf
PDF
Historia e evoluvion de los lenguaje de programcion
PPTX
Compiladores diapositivas
PPTX
Tema 01 introducción a compiladores
DOCX
C:\fakepath\compiladores
PPTX
Historia de los lenguajes de programacion
PPTX
Historia de los lenguajes de programacion
PPTX
Especialidad
PPTX
Especialidad
PPTX
HISTORIA DE LOS LENGUAJES DE PROGRAMACION
PDF
introducción a lenguajes de programacion
PPTX
Lenguaje de programacion
DOCX
C:\documents and settings\clientea\mis documentos\compiladores
DOCX
Tipos de lenguajes de programación
DOCX
Los lenguajes de programación son herramientas que nos permiten crear program...
PDF
Bison y flex
PPTX
Lenguajes de programacion jonathan suarez
Cap1
Cap2
historia de lenguaje de programacion.pdf
Historia e evoluvion de los lenguaje de programcion
Compiladores diapositivas
Tema 01 introducción a compiladores
C:\fakepath\compiladores
Historia de los lenguajes de programacion
Historia de los lenguajes de programacion
Especialidad
Especialidad
HISTORIA DE LOS LENGUAJES DE PROGRAMACION
introducción a lenguajes de programacion
Lenguaje de programacion
C:\documents and settings\clientea\mis documentos\compiladores
Tipos de lenguajes de programación
Los lenguajes de programación son herramientas que nos permiten crear program...
Bison y flex
Lenguajes de programacion jonathan suarez

Más de CJAO (20)

PPT
Cap6
PPT
Cap5
PPT
Cap4
PPT
Cap3
PPT
Cap2
PPT
Cap1
PPT
Cap3 compiladores
PPT
Cap2 compiladores
PPTX
Cap6
PPTX
Cap5
PPTX
Cap4
PPTX
Cap3
PPTX
Cap0
PPTX
Cap5
PPTX
Cap4
PPTX
Cap3
PPTX
Cap2
PPTX
Cap1
PPTX
Cap6
PPTX
Cap10
Cap6
Cap5
Cap4
Cap3
Cap2
Cap1
Cap3 compiladores
Cap2 compiladores
Cap6
Cap5
Cap4
Cap3
Cap0
Cap5
Cap4
Cap3
Cap2
Cap1
Cap6
Cap10

Último (20)

PDF
ciencia_tecnologia_sociedad Mitcham Carl. (1994)..pdf
DOCX
TEXTO DE TRABAJO DE EDUCACION RELIGIOSA - PRIMER GRADO.docx
PDF
Diversos-Rostros-de-la-EPJA-una-vision-desde-universidades-publicas-latinoame...
PPTX
MÓDULO DE SEGURIDAD CIUDADANA en el ecuador
PPTX
fisiologia respiratoria pediatria ruza.pptx
PDF
UNIDAD 2 | La noticia como género: Informar con precisión y criterio
PDF
Uso de la Inteligencia Artificial en la IE.pdf
PDF
Las Matematicas y el Pensamiento Cientifico SE3 Ccesa007.pdf
PDF
Se presentan los PDA PRESCOLAR RESUMIDOS
PDF
E1 Guía_Matemática_5°_grado.pdf paraguay
DOCX
PCI LARAOS 2025. 2024 documento de gestión
PDF
Modelo Educativo SUB 2023versión final.pdf
PDF
CURRICULAR DE PRIMARIA santa ursula..pdf
PDF
Lo que hacen los Mejores Profesores de la Universidad - Ken Bain Ccesa007.pdf
PDF
EP2_CONTACTO_GRUPO INICIACIÓN_2024 (1).pdf
PPTX
Temporada de Huracanes 2025 Atlántico.pptx
PDF
APUNTES DE SISTEMAS PSICOLOGICOS CONTEMPORANEOS
PDF
MODULO I ENFERMERIA BASICA.pdf HIstoria en enfermeria
PPTX
RESUMENES JULIO - QUIRÓFANO HOSPITAL GENERAL PUYO.pptx
PDF
Andaluz. Manual de Derecho Ambiental - Instituto de Investigación y Gestión T...
ciencia_tecnologia_sociedad Mitcham Carl. (1994)..pdf
TEXTO DE TRABAJO DE EDUCACION RELIGIOSA - PRIMER GRADO.docx
Diversos-Rostros-de-la-EPJA-una-vision-desde-universidades-publicas-latinoame...
MÓDULO DE SEGURIDAD CIUDADANA en el ecuador
fisiologia respiratoria pediatria ruza.pptx
UNIDAD 2 | La noticia como género: Informar con precisión y criterio
Uso de la Inteligencia Artificial en la IE.pdf
Las Matematicas y el Pensamiento Cientifico SE3 Ccesa007.pdf
Se presentan los PDA PRESCOLAR RESUMIDOS
E1 Guía_Matemática_5°_grado.pdf paraguay
PCI LARAOS 2025. 2024 documento de gestión
Modelo Educativo SUB 2023versión final.pdf
CURRICULAR DE PRIMARIA santa ursula..pdf
Lo que hacen los Mejores Profesores de la Universidad - Ken Bain Ccesa007.pdf
EP2_CONTACTO_GRUPO INICIACIÓN_2024 (1).pdf
Temporada de Huracanes 2025 Atlántico.pptx
APUNTES DE SISTEMAS PSICOLOGICOS CONTEMPORANEOS
MODULO I ENFERMERIA BASICA.pdf HIstoria en enfermeria
RESUMENES JULIO - QUIRÓFANO HOSPITAL GENERAL PUYO.pptx
Andaluz. Manual de Derecho Ambiental - Instituto de Investigación y Gestión T...

Cap1 compiladores

  • 1. INTRODUCCIÓN A LOS COMPILADORES Capítulo 1 Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 2. Resumen Lenguajes Instrucciones a la PC Lenguajes de Máquina Lenguajes Ensambladores Lenguajes de Alto Nivel Fortran Algol Conceptos de los Lenguajes Algorítmicos Compilador Autómatas Deterministas Sistematización de los Lenguajes de Programación BNF Construcción Sistemática de las Expresiones Optimización de Código Nuevos Lenguajes Traductores Intérpretes Compiladores Compilación de un Programa Partes del Compilador Intérpretes y Compiladores Compilar v.s. Interpretar Dar Instrucciones a la Computadora ¿Cómo Instruir a la Computadora? Ejecución Eficiente de las Acciones Funciones Importantes de los Compiladores Anatomía de un Compilador Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 3. Introducción Pueden ser usados para describir cualquier acción. Hay muchas formas de describir la misma acción . ¿Por qué no con lenguajes naturales? ¿Español? <User1>“Dame la clave, PC1“. <PC1>&quot;Lo siento, temo que no puedo hacer eso&quot;. Lenguajes Naturales: La misma expresión describe muchas acciones posibles. Ambiguas. Usamos un lenguaje de programación Ejemplos: Java, C, C++, Pascal, BASIC, Scheme. Lenguajes Instrucciones a una PC Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Los modismos pueden ser aún mucho más ambiguos
  • 4. Lenguaje de Máquina En 1946 se desarrolló la primera computadora digital. En un principio, estas máquinas ejecutaban instrucciones consistentes en códigos numéricos que señalaban a los circuitos de la máquina los estados correspondientes a cada operación. Esta expresión mediante códigos numéricos se llamó Lenguaje Máquina, interpretado por un secuenciador cableado o por un microprograma. Pero los códigos numéricos de las máquinas son engorrosos. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Es difícil atribuir a una sola persona la invención de la computadora. Pero si se tiene que señalar a una sola persona es a John Vincent Atanasoff.
  • 5. Ensamblar Programas Los códigos numéricos de las máquinas son engorrosos. Pronto los primeros usuarios de las computadoras descubrieron la ventaja de escribir sus programas mediante claves más fáciles de recordar que esos códigos numéricos. Al final, todas esas claves juntas se traducían manualmente a Lenguaje Máquina. Estas claves constituyen los llamados: Lenguajes Ensambladores Estos se generalizaron en cuanto se dio el paso decisivo de hacer que las propias máquinas realizaran el proceso mecánico de la traducción. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. A este trabajo se le llama ensamblar el programa
  • 6. Lenguajes Ensambladores Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 7. Lenguaje Algebraico A pesar de todo, el Lenguaje Ensamblador seguía siendo el de una Máquina, pero más fácil de manejar. Los trabajos de investigación se orientaron entonces hacia la creación de un lenguaje que expresara las distintas acciones a realizar de una manera lo más sencilla posible para el hombre. Así, en 1950, John Backus dirigió una investigación en I.B.M. en un lenguaje algebraico. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. John Backus
  • 8. Lenguajes de Alto Nivel En 1954 se empezó a desarrollar un lenguaje que permitía escribir fórmulas matemáticas de manera traducible por una computadora. Le llamaron FORTRAN (FORmule TRANslator). Fue el primer lenguaje considerado de Alto Nivel. Se introdujo en 1957 para el uso de la computadora IBM modelo 704. Permitía una programación más cómoda y breve que lo existente hasta ese momento, lo que suponía un considerable ahorro de trabajo. Surgió así por primera vez el concepto de un traductor, como un programa que traducía un lenguaje a otro lenguaje. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. En el caso particular de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje traducido de bajo nivel, se emplea el término compilador. IBM 704
  • 9. Fortran La tarea de realizar un compilador no fue fácil. Este desarrollo del FORTRAN estaba muy influenciado por la máquina objeto en la que iba a ser implementado. Como un ejemplo de ello tenemos el hecho de que los espacios en blanco fuesen ignorados, debido a que el periférico que se utilizaba como entrada de programas (una lectora de tarjetas perforadas) no contaba correctamente los espacios en blanco. Paralelamente al desarrollo de FORTRAN en América, en Europa surgió una corriente más universitaria: Pretendía que la definición de un lenguaje fuese independiente de la máquina y en donde los algoritmos se pudieran expresar de forma más simple. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. El primer compilador de FORTRAN tardó 18 años en ser elaborado y era muy sencillo.
  • 10. Algol Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 11. Conceptos de los Lenguajes Algorítmicos En el ALGOL aparecen por primera vez muchos de los conceptos de los nuevos lenguajes algorítmicos: Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 12. Compilador Junto a este desarrollo en los lenguajes, también se iba avanzando en la técnica de compilación. En 1958, Strong y otros proponían una solución al problema de que un compilador fuera utilizable por varias máquinas objeto. Para ello, se dividía por primera vez el compilador en dos fases: &quot;front end“ La primera fase es la encargada de analizar el programa fuente. &quot;back end“ La segunda fase es la encargada de generar código para la máquina objeto. El puente de unión entre las dos fases era un lenguaje intermedio que se designó con el nombre de UNCOL (UNiversal Computer Oriented Language). Para que un compilador fuera utilizable por varias máquinas bastaba únicamente modificar su back end. Aunque se hicieron varios intentos para definir el UNCOL, el proyecto se ha quedado simplemente en un ejercicio teórico. De todas formas, la división de un compilador en front end y back end fue un adelanto importante. Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 13. Autómatas Deterministas A la par se van poniendo las bases para la división de tareas en un compilador. Así, en 1959 Rabin y Scott proponen el empleo de autómatas deterministas y no deterministas para el reconocimiento lexicográfico de los lenguajes. Rápidamente se aprecia que la construcción de analizadores léxicos a partir de expresiones regulares es muy útil en la implementación de los compiladores. Johnson y otros apuntan diversas soluciones. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. En 1975, con la aparición de LEX surge el concepto de un generador automático de analizadores léxicos a partir de expresiones regulares, basado en el sistema operativo UNIX.
  • 14. Autómatas Deterministas Un autómata finito o máquina de estado finito: Es un modelo matemático de un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce. Un autómata finito determinista o AFD: Es un modelo compuesto de un número finito de estados y transiciones entre los estados y acciones. Un AFND o autómata finito no determinista: Es aquel que presenta cero, una o más transiciones por el mismo caracter del alfabeto. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Autómata: instrumento que posee mecanismos automáticos.
  • 15. Herramienta de Programación Lex Lex es un programa que genera analizadores léxicos (scanners ó lexers). Se utiliza comúnmente con el generador de análisis sintáctico yacc. Originalmente escrito por Eric Schmidt y Mike Lesk. Es el analizador léxico estándar en los sistemas Unix. Se incluye en el estándar POSIX (Portable Operating System Interface). Toma como entrada una especificación de analizador léxico. Devuelve como salida el código fuente implementando el analizador léxico en C. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Posix es el equivalente a las API de Windows.
  • 16. Estructura de un Archivo Lex Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Definition Section (sección de declaraciones) %% Rules Section (sección de reglas) %% C Code Section (sección de código en C) El símbolo %%, es el marcador de separación.
  • 17. Sistematización de los Lenguajes de Programación Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Un gran número de profesionales contribuyeron al desarrollo de los traductores
  • 18. BNF El Backus-Naur form (BNF): También conocido como Backus-Naur formalism, Backus normal form o Panini-Backus Form. El BNF se utiliza extensamente como notación para las gramáticas de los lenguajes de: Programación de la computadora Sistemas de comando Protocolos de comunicación Así como una notación para representar partes de las gramáticas de la lengua natural. La mayoría de los libros de textos para la teoría y/o la semántica del lenguaje de programación documentan el lenguaje de programación en BNF. Algunas variantes, tales como la augmented Backus-Naur form (ABNF), tienen su propia documentación. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Es una meta sintaxis usada para expresar gramáticas libres de contexto: es decir, una manera formal de describir lenguajes formales.
  • 19. Construcción Sistemática de las Expresiones Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Lisp es el segundo lenguaje de programación de alto nivel. Es de tipo declarativo, fue creado en 1958 en el MIT (Instituto Tecnológico de Massachusetts).
  • 20. Construcción Sistemática de las Expresiones Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 21. Optimización de Código Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 22. Nuevos Lenguajes Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 23. Java Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 24. Traductores Traductor Un traductor es cualquier programa que toma como entrada un texto escrito en un lenguaje, llamado fuente y da como salida otro texto en un lenguaje, denominado objeto. Existen 2 tipos de traductores: Compiladores. Intérpretes. Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 25. Intérpretes Ej: Basic, Smalltalk, PHP, Java Script, etc. Un intérprete es un programa capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Realizan la traducción del código a medida que sea necesario y normalmente, no guardan el resultado de dicha traducción. No realizan compilación ni generan el código objeto. Los intérpretes son conocidos como motores de scripts ya que permiten la traducción de estos. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Pasos de la interpretación: Programa fuente Intérprete Traducción y ejecución línea a línea
  • 26. Compiladores Ej: C++, Pascal, Fortran, *Java (virtual machine), *Visual Basic (runtime library), etc. Un compilador es un programa que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente. Usualmente este segundo lenguaje es código máquina. El proceso de traducción se conoce como compilación. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Pasos de la compilación: Programa fuente Compilador Programa objeto Montador Programa ejecutable en lenguaje de máquina
  • 27. Compilación de un Programa Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Programa fuente Compilador Programa objeto Existen errores en la compilación? Programa ejecutable Enlazador Ejecución no si Con un editor Ej.: C++ Verificación y corrección de errores Obtención del programa objeto El montador obtiene el programa ejecutable Se ejecuta el programa y salida del mismo
  • 28. Partes (programas) del Compilador Un compilador no funciona de manera aislada, sino que necesita de otros programas para conseguir su objetivo: Obtener un programa ejecutable a partir de un programa fuente en un lenguaje de alto nivel. Algunos de esos programas son el preprocesador, el linker, el depurador y el ensamblador. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Algunos de los programas del compilador El preprocesador El linker El depurador Ensamblador
  • 29. Programas del Compilador Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 30. Intérpretes y Compiladores Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Un ensamblador es un compilador cuyo lenguaje fuente es el lenguaje ensamblador.
  • 31. Compilar v.s. Interpretar Ventajas de compilar frente a interpretar: Se compila una vez, se ejecuta n veces. En bucles, la compilación genera código equivalente al bucle, pero interpretándolo se traduce tantas veces una línea como veces se repite el bucle. El compilador tiene una visión global del programa, por lo que la información de mensajes de error es mas detallada. Mayor velocidad de ejecución. Menor sobrecarga de memoria. Ventajas del intérprete frente al compilador: Un intérprete necesita menos memoria que un compilador. En principio eran más abundantes dado que las computadoras tenían poca memoria. Permiten una mayor interactividad con el código en tiempo de desarrollo. La propia ejecución puede modificar el programa. Las variables pueden cambiar dinámicamente de tipo. Facilidad de depuración. Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 32. Dar Instrucciones a la Computadora Escribimos un programa usando un lenguaje de programación. Descripción abstracta de alto nivel. Los microprocesadores hablan en lenguaje ensamblador. Detalles de implementación de bajo nivel Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Programa Escrito en Lenguaje de Programación Traducción a Lenguaje Ensamblador Compilador
  • 33. ¿Cómo Instruir a la Computadora? Entrada/Salida: Input: Lenguaje de programación de alto nivel. Output: Instrucciones de assembler de bajo nivel. Compilador tiene que: Leer y entender el programa. Determinar con precisión que acciones se requieren. Encontrar la forma de llevar a cabo esas acciones. Instruir a la computadora a llevar a cabo las acciones. Materia: Compiladores Docente: Ing. Carlos J. Archondo O.
  • 34. Ejecución Eficiente de las Acciones Mapeo de alto a bajo nivel: Mapeo simple de un programa a assembler produce una ejecución ineficiente. Más alto el nivel de abstracción más ineficiente. Si el mapeo no es eficiente: Las abstracciones de alto nivel son inútiles. Se necesita: Proveer un nivel alto de abstracción con rendimiento equivalente a si usáramos Assembler. Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Mapeo: trazar un camino. Abstracción: precisar, aislando información no relevante.
  • 35. Ejemplo int expr(int n) { int d; d = 4 * n * n * (n + 1) * (n + 1); return d; } lda $30,-32($30) stq $26,0($30) stq $15,8($30) bis $30,$30,$15 bis $16,$16,$1 stl $1,16($15) lds $f1,16($15) sts $f1,24($15) ldl $5,24($15) bis $5,$5,$2 s4addq $2,0,$3 ldl $4,16($15) mull $4,$3,$2 ldl $3,16($15) addq $3,1,$4 mull $2,$4,$2 ldl $3,16($15) addq $3,1,$4 mull $2,$4,$2 stl $2,20($15) ldl $0,20($15) br $31,$33 bis $15,$15,$30 ldq $26,0($30) ldq $15,8($30) addq $30,32,$30 ret $31,($26),1 Programa de entrada Assembler de salida Materia: Compiladores Docente: Ing. Carlos J. Archondo O. s4addq $16,0,$0 mull $16,$0,$0 addq $16,1,$16 mull $0,$16,$0 mull $0,$16,$0 ret $31,($26),1 Assembler de salida Sin optimizar Optimizado Optimizar código: utilizar mejor la potencia del hardware.
  • 36. Funciones Importantes de los Compiladores Velocidad / rendimiento. Tamaño de código. Consumo de poder. Compilación rápida / eficiente. Seguridad / confiabilidad Debugging. Lenguajes de Programación Desde C a lenguajes OO. Definiciones aún más abstractas. Microprocesadores De simple CISC a RISC a ... Optimizar código para: Incremento del nivel de abstracción Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Mayor nivel de abstracción Menor nivel de abstracción Debugging: depuración de errores.
  • 37. Anatomía de un Compilador Materia: Compiladores Docente: Ing. Carlos J. Archondo O. Analizador Sintáctico (Parser) Generador de Código Optimizador de Código Analizador Semántico Analizador Léxico (Scanner) Léxico: perteneciente al diccionario de una lengua. Sintáctico: parte de la gramática para coordinar las palabras y formar oraciones. Semántico: estudio del significado de los signos. Parse Tree: árbol gramatical Program (Character Stream): flujo de programa Token Stream: flujo de token Intermediate Representation: representación intermedia Optimized Intermediate Representation: representación intermedia optimizada Assembly Code: código en ensamblador Análisis Síntesis