Proceso de Compilacion

20,613 views

Published on

Muestra una parte del proceso de compilacion de los lenguajes de programacion

Published in: Technology
4 Comments
1 Like
Statistics
Notes
  • donde poder ver la tabla de simbolos????
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • saludos...
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • putos
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Me queda una duda, quisiera saber ¿que compiladores generan el codigo objeto en lenguaje ensamblador o alto nivel?, porque tenia entendido que el codigo objeto es codigo maquina.

    Saludos.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
20,613
On SlideShare
0
From Embeds
0
Number of Embeds
65
Actions
Shares
0
Downloads
322
Comments
4
Likes
1
Embeds 0
No embeds

No notes for slide

Proceso de Compilacion

  1. 1. Modelos de Lenguajes de Programación Analí J. Alfaro Alfaro Ing. Informático Escuela académico-Profesional de Informática Universidad Nacional de Trujillo
  2. 2. Paradigmas de los LP <ul><li>Podemos citar : </li></ul><ul><ul><li>Modelo Imperativo </li></ul></ul><ul><ul><ul><li>Describe los programas en términos de estados y cambio de estados </li></ul></ul></ul><ul><ul><ul><li>Asignación de datos a variables. </li></ul></ul></ul><ul><ul><ul><li>Existencia de estructuras repetitivas </li></ul></ul></ul><ul><ul><ul><li>Basa en el uso procedimientos y funciones </li></ul></ul></ul><ul><ul><li>Modelo Funcional </li></ul></ul><ul><ul><ul><li>Fundamenta uso de funciones matemáticas. </li></ul></ul></ul><ul><ul><ul><li>Usa recursividad </li></ul></ul></ul><ul><ul><ul><li>No hace uso de construcciones secuenciales ni iterativas </li></ul></ul></ul><ul><ul><ul><li>Evalúa toda la expresión, no hay asignaciones </li></ul></ul></ul><ul><ul><ul><li>Uso de listas </li></ul></ul></ul>Analí J. Alfaro Alfaro Ingeniero Informático
  3. 3. Paradigmas de los LP <ul><li>Podemos citar : </li></ul><ul><ul><li>Modelo OO </li></ul></ul><ul><ul><ul><li>Encapsulamiento y TAD (tipos abstractos de datos) </li></ul></ul></ul><ul><ul><ul><li>Clases y objetos </li></ul></ul></ul><ul><ul><ul><li>Herencia , paso de mensajes y polimorfismo </li></ul></ul></ul><ul><ul><li>Modelo Lógico </li></ul></ul><ul><ul><ul><li>Basado en la lógica de predicados </li></ul></ul></ul><ul><ul><ul><li>Uso de reglas </li></ul></ul></ul><ul><ul><ul><li>Modelo que usa hechos (datos), reglas (formalización) y deduce conocimiento. </li></ul></ul></ul><ul><ul><li>Modelo Concurrente </li></ul></ul><ul><ul><ul><li>Centrado en la comunicación y sincronización de procesos </li></ul></ul></ul><ul><ul><ul><li>Acceso exclusivo a datos compartidos. </li></ul></ul></ul>Analí J. Alfaro Alfaro Ingeniero Informático
  4. 4. Criterios de Evaluación LP: <ul><li>Legibilidad </li></ul><ul><li>Expresividad </li></ul><ul><li>Buena Definición </li></ul><ul><li>Tipos y estructuras de datos </li></ul><ul><li>Modularidad </li></ul><ul><li>Entrada /Salida </li></ul><ul><li>Transportabilidad </li></ul>
  5. 5. Criterios de Evaluación LP: <ul><li>Eficiencia </li></ul><ul><li>Generalidad </li></ul><ul><li>Reutilización </li></ul><ul><li>Extensibilidad </li></ul><ul><li>Distribución </li></ul><ul><li>Arquitectura Neutral </li></ul><ul><li>Robustez. </li></ul>
  6. 6. Proceso de un LP : <ul><li>Consideraciones: </li></ul><ul><ul><li>Computador comprende lenguaje máquina. </li></ul></ul><ul><ul><li>Programamos en lenguajes de alto nivel (facilidad y fiabilidad). </li></ul></ul><ul><li>Cómo puede un programa escrito en LP de alto nivel ejecutarse? </li></ul><ul><li>Puede hacerlo de 3 formas : </li></ul><ul><ul><li>Proceso de Compilación </li></ul></ul><ul><ul><li>Proceso de Interpretación </li></ul></ul><ul><ul><li>Proceso Híbrido </li></ul></ul>
  7. 7. 1.- Proceso de Compilación : <ul><li>Compilador : </li></ul><ul><ul><li>Programa en lenguaje máquina </li></ul></ul><ul><ul><li>Transformación : programa fuente en programa ejecutable. </li></ul></ul>Código Fuente Código Objeto Datos entrada Resultados Compilador o Traductor
  8. 8. 1.- Proceso de Compilación : <ul><li>Proceso de Transformación traducción : </li></ul>
  9. 9. 1.- Proceso de Compilación : <ul><li>La transformación muestra: </li></ul><ul><ul><li>Programa Fuente : </li></ul></ul><ul><ul><ul><li>escrito en un LP de alto nivel </li></ul></ul></ul><ul><ul><li>Compilador : </li></ul></ul><ul><ul><ul><li>encargado de la traducción y comprobar las llamadas a las librerías para que se ejecuten correctamente. </li></ul></ul></ul><ul><ul><li>Programa Objeto : </li></ul></ul><ul><ul><ul><li>Programa traducido, puede o no estar en lenguaje máquina </li></ul></ul></ul><ul><ul><ul><li>Aún no es directamente ejecutable </li></ul></ul></ul>
  10. 10. 1.- Proceso de Compilación : <ul><li>La transformación muestra: </li></ul><ul><ul><li>Programa Ejecutable : </li></ul></ul><ul><ul><ul><li>Traducción completa a lenguaje máquina. </li></ul></ul></ul><ul><ul><ul><li>Hecha por el Enlazador (Linker)o Montador. </li></ul></ul></ul><ul><ul><ul><li>Es directamente ejecutable </li></ul></ul></ul><ul><ul><li>Enlazador (Linker) : </li></ul></ul><ul><ul><ul><li>Encargado de insertar al programa objeto el código máquina de las funciones de las librerías (archivos de biblioteca) usadas en el programa y de realizar el proceso de montaje. </li></ul></ul></ul>
  11. 11. 1.1. Etapas en el proceso Compilación <ul><li>Las etapas en el proceso de Compilación son: </li></ul><ul><ul><li>Análisis </li></ul></ul><ul><ul><li>Síntesis </li></ul></ul><ul><li>Análisis : </li></ul><ul><ul><li>Divide al programa en sus elementos componentes </li></ul></ul><ul><ul><li>Crea el código o programa intermedio. </li></ul></ul><ul><li>Síntesis : </li></ul><ul><ul><li>Construye el código objeto, a partir del código intermedio. </li></ul></ul>
  12. 12. 1.1. Etapas en el proceso Compilación Código Fuente Código Intermedio Código Objeto Análisis Síntesis Tabla de Símbolos
  13. 13. 1.1.1. Análisis <ul><li>Analizador Léxico (Scaning): </li></ul><ul><ul><li>Funciones: </li></ul></ul><ul><ul><ul><li>construir una secuencia de unidades significativas sintácticas llamadas Token. </li></ul></ul></ul><ul><ul><ul><li>Reducir el trabajo del analizador sintáctico. </li></ul></ul></ul><ul><ul><li>Entrada : </li></ul></ul><ul><ul><ul><li>cadenas de caracteres y los depura. </li></ul></ul></ul><ul><ul><li>Construcción Tokens: </li></ul></ul><ul><ul><ul><li>Elimina espacios blancos, comentarios, etc. </li></ul></ul></ul><ul><ul><ul><li>Reconocer token correctos mediante reconocedor de patrones (autómatas). </li></ul></ul></ul>
  14. 14. 1.1.1. Análisis <ul><li>Analizador Léxico (Scaning): </li></ul><ul><ul><li>Reconocimiento token : </li></ul></ul><ul><ul><ul><li>Se construyen autómatas finitos, usando tabla de símbolos </li></ul></ul></ul><ul><ul><ul><li>Un token reconocido  lexema </li></ul></ul></ul><ul><ul><li>Tabla de símbolos, almacena todos los identificadores usados en el programa además sus tipos y la posición de memoria que ocupan. </li></ul></ul><ul><ul><li>Ejemplo </li></ul></ul>
  15. 15. 1.1.1. Análisis <ul><li>Analizador Sintáctico (Parser) </li></ul><ul><ul><li>Función: </li></ul></ul><ul><ul><ul><li>Determinar si un programa es correcto sintácticamente, mediante la construcción de árboles sintácticos. </li></ul></ul></ul><ul><ul><li>Árbol sintáctico: </li></ul></ul><ul><ul><ul><li>Organiza los Tokens, usando reglas recursivas conocidas como gramáticas de libre contexto. </li></ul></ul></ul><ul><ul><li>Gramáticas de libre contexto: </li></ul></ul><ul><ul><ul><li>Definidas formalmente con BNF. </li></ul></ul></ul><ul><ul><li>Ejemplo </li></ul></ul>
  16. 16. 1.1.1. Análisis <ul><li>Analizador Semántico </li></ul><ul><ul><li>Función: </li></ul></ul><ul><ul><ul><li>Verifica que no ocurran errores semánticos </li></ul></ul></ul><ul><ul><li>Proceso de verificación, incluye: </li></ul></ul><ul><ul><ul><li>Consultar la tabla de símbolos, para encontrar información de un identificador y la información ligada a éste. </li></ul></ul></ul><ul><ul><li>Además, ayuda en : </li></ul></ul><ul><ul><ul><li>Cada identificador debe ser declarado antes de ser usado. </li></ul></ul></ul><ul><ul><ul><li>No existan identificadores usados en contextos inapropiados. </li></ul></ul></ul>
  17. 17. 1.1.1. Análisis <ul><li>Analizador Semántico </li></ul><ul><ul><li>Función: </li></ul></ul><ul><ul><ul><li>Verifica que no ocurran errores semánticos, usando un verificador de tipos. </li></ul></ul></ul><ul><ul><li>Proceso de verificación, incluye: </li></ul></ul><ul><ul><ul><li>Consultar la tabla de símbolos, para encontrar información de un identificador y la información ligada a éste. </li></ul></ul></ul><ul><ul><li>Verificador de tipos: </li></ul></ul><ul><ul><ul><li>Conversión de tipos </li></ul></ul></ul><ul><ul><ul><li>Resuelve por ejemplo sobrecarga de operadores </li></ul></ul></ul><ul><ul><ul><li>No exista declaración repetida de identificadores </li></ul></ul></ul>
  18. 18. 1.1.1. Análisis <ul><li>Analizador Semántico </li></ul><ul><ul><li>Además, ayuda a verificar : </li></ul></ul><ul><ul><ul><li>Cada identificador debe ser declarado antes de ser usado. </li></ul></ul></ul><ul><ul><ul><li>No existan identificadores usados en contextos inapropiados. </li></ul></ul></ul><ul><ul><ul><li>Concuerden el orden, cantidad y los tipos de parámetros usados. </li></ul></ul></ul><ul><li>Generación de código intermedio: </li></ul><ul><ul><li>Representación intermedia independiente de la máquina </li></ul></ul>
  19. 19. 1.1.1. Síntesis <ul><li>Optimización del código intermedio: </li></ul><ul><ul><li>Función: </li></ul></ul><ul><ul><ul><li>Mejorar el código intermedio para producir código objeto más eficiente. </li></ul></ul></ul><ul><li>Generación del código Objeto: </li></ul><ul><ul><li>Finalmente se transforma el código intermedio mejorado en código objeto. </li></ul></ul><ul><ul><li>Código objeto, puede estar en: </li></ul></ul><ul><ul><ul><li>Lenguaje máquina </li></ul></ul></ul><ul><ul><ul><li>Lenguaje ensamblador </li></ul></ul></ul><ul><ul><ul><li>Lenguaje de alto nivel </li></ul></ul></ul>

×