SlideShare una empresa de Scribd logo
1 de 23
TEORIA DE LENGUAJES DE
        PROGRAMACIÓN Y
     MÉTODOS DE TRADUCCION
                II




COMPILADORES II
MG. AMANDA DURAN C.
Motivación
 •   La construcción de un compilador es una de las tareas
     más gratas con las que un informático puede encontrarse
     a lo largo de su carrera profesional.

 •   Aunque no resulta sensato pensar que una labor tal pueda
     formar parte de la actividad cotidiana de la mayoría de
     estos profesionales.

 •   Crear un compilador introduce al informático en un nuevo
     mundo en el que el control sobre el ordenador es absoluto
     y le lleva al paroxismo de la omnipotencia sobre la
     máquina
Ejemplo de compilación

 •   La sentencia con la que se va a trabajar es la siguiente:

          #define PORCENTAJE 8
          comision = fijo + valor * PORCENTAJE;

 •   Para no complicar demasiado el ejemplo, asumiremos que
     las variables referenciadas han sido previamente
     declaradas de tipo int, e inicializadas a los valores
     deseados.
Ejemplo de compilación
 Pre procesamiento
 •   El código fuente de una aplicación se puede dividir en módulos
     almacenados en archivos distintos.
 •   La tarea de reunir el programa fuente a menudo se confía a un
     programa distinto, llamado preprocesador.
 •   El preprocesador también puede expandir abreviaturas, llamadas
     macros, a proposiciones del lenguaje fuente.
 •   En nuestro ejemplo, la constante PORCENTAJE se sustituye por su
     valor, dando lugar al texto:
                           comision = fijo + valor * 8;
 •   que pasa a ser la fuente que entrará al compilador
Ejemplo de compilación
 1.   Etapa de análisis

      •   En esta etapa se controla que el texto fuente
          sea correcto en todos los sentidos, y se
          generan las estructuras necesarias para la
          generación de código.
Ejemplo de compilación
1. Etapa de análisis
a) Fase de análisis lexicográfico
•   En esta fase, la cadena de caracteres que constituye el
    programa fuente se lee de izquierda a derecha y se agrupa
    en componentes léxicos, que son secuencias de caracteres
    que tienen un significado atómico; además el analizador
    léxico trabaja con la tabla de símbolos introduciendo en
    ésta los nombres de las variables.
Ejemplo de compilación
1. Etapa de análisis
a) Fase de análisis lexicográfico
•   1.- El identificador comision.
•   2.- El símbolo de asignación „=‟.
•   3.- El identificador fijo.
•   4.- El signo de suma „+‟.
•   5.- El identificador valor.
•   6.- El signo de multiplicación „*‟.
•   7.- El número 8.
•   8.- El símbolo de fin de sentencia „;‟.
Ejemplo de compilación
1. Etapa de análisis
a) Fase de análisis lexicográfico
 Figura Transformación realizada por el analizador lexicográfico
Ejemplo de compilación
1. Etapa de análisis
b) Fase de análisis sintáctico
• Trabaja con una gramática de contexto libre y genera el árbol
  sintáctico que reconoce su sentencia de entrada. En nuestro
  caso las categorías gramaticales del análisis léxico son los
  terminales de la gramática.
• Para el ejemplo que nos ocupa podemos partir de la gramática:
      S  <ID> <ASIG> expr <TERM>
      expr  <ID>
            | <ID> <+> expr
             | <ID> <*> expr
            | <NUM>
•   de manera que el análisis sintáctico intenta generar un árbol
    sintáctico que encaje conla sentencia de entrada
Ejemplo de compilación
1. Etapa de análisis
b) Fase de análisis sintáctico
Figura Árbol sintáctico de la sentencia de entrada.
Ejemplo de compilación
1. Etapa de análisis
b) Fase de análisis sintáctico
   Compilación dirigida por sintaxis
   •   Se ha representado una situación ideal en la que la fase lexicográfica
       actúa por separado y, sólo una vez que ha acabado, le suministra la
       sintáctica su resultado de salida.


   •   Aunque proseguiremos en nuestro ejemplo con esta clara distinción
       entre fases, es importante destacar que el analizador sintáctico tiene
       el control en todo momento, y el léxico por trozos, a petición del
       sintáctico.
Ejemplo de compilación
1. Etapa de análisis
b) Fase de análisis sintáctico
   Compilación dirigida por sintaxis
   •   En otras palabras, el sintáctico va construyendo su árbol poco a poco
       (de izquierda a derecha), y cada vez que necesita un nuevo
       componente léxico para continuar dicha construcción, se lo solicita al
       lexicográfico; éste lee nuevos caracteres del fichero de entrada hasta
       conformar un nuevo componente y, una vez obtenido, se lo suministra
       al sintáctico, quien continúa la construcción del árbol hasta que
       vuelve a necesitar otro componente, momento en que se reinicia el
       proceso.


   •   Este mecanismo finaliza cuando se ha obtenido el árbol y ya no hay
       más componentes en el fichero de entrada, o bien cuando es
       imposible construir el árbol.
Ejemplo de compilación
1. Etapa de análisis
 b) Fase de análisis sintáctico
    Compilación dirigida por sintaxis
    Figura : Análisis dirigido por sintaxis
Ejemplo de compilación
1. Etapa de análisis
 • c) Fase de análisis semántico

    •   Esta fase revisa el árbol sintáctico junto con los atributos y la
        tabla de símbolos para tratar de encontrar errores semánticos.
    •   Para todo esto se analizan los operadores y operandos de
        expresiones y proposiciones.
    •   Finalmente reúne la información necesaria sobre los tipos de
        datos para la fase posterior de generación de código.
    •   El componente más importante del análisis semántico es la
        verificación de tipos.
Ejemplo de compilación
1. Etapa de análisis
 • c) Fase de análisis semántico

    •   Aquí, el compilador verifica si los operandos de cada operador
        son compatibles según la especificación del lenguaje fuente.
    •   Si suponemos que nuestro lenguaje solo trabaja con números
        reales, la salida de esta fase sería su mismo árbol, excepto
        porque el atributo de <NUM>, que era el entero 8 a la entrada,
        ahora pasaría a ser el real 8,0.
    •   Además se ha debido controlar que las variables implicadas en
        la sentencia, a saber, comision, fijo y valor son compatibles con
        el tipo numérico de la constante 8,0.
Ejemplo de compilación
2. Etapa de síntesis
 •   En la etapa anterior se ha controlado que el programa de
     entrada es correcto.
 •   Por tanto, el compilador ya se encuentra en disposición de
     generar el código máquina equivalente semánticamente al
     programa fuente.
 •   Para ello se parte de las estructuras generadas en dicha
     etapa anterior: árbol sintáctico y tabla de símbolos.
 •   a) Fase de generación de código intermedio
       •   Después de la etapa de análisis, se suele generar una
           representación intermedia explícita del programa fuente.
       •   Dicha representación intermedia se puede considerar como un
           programa para una máquina abstracta.
Ejemplo de compilación
2. Etapa de síntesis
 a) Fase de generación de código intermedio
 •   Cualquier representación intermedia debe tener dos propiedades
     importantes; debe ser fácil de generar y fácil de traducir al código
     máquina destino.


 •   Así, una representación intermedia puede tener diversas formas. En
     el presente ejemplo se trabajará con una forma intermedia llamada
     “código de tres direcciones”, que es muy parecida a un lenguaje
     ensamblador para un microprocesador que carece de registros y
     sólo es capaz de trabajar con direcciones de memoria y literales.
Ejemplo de compilación
2. Etapa de síntesis
 a) Fase de generación de código intermedio
 •   En el código de tres direcciones cada instrucción tiene
     como máximo tres operandos. Siguiendo el ejemplo
     propuesto, se generaría el siguiente código de tres
     direcciones:
       t1 = 8.0
       t2 = valor * t1
       t3 = fijo + t2
       comision = t3
Ejemplo de compilación
2. Etapa de síntesis
 a)   Fase de generación de código intermedio
       t1 = 8.0
       t2 = valor * t1
       t3 = fijo + t2
       comision = t3
 •   De este ejemplo se pueden destacar varias propiedades
     del código intermedio escogido:
      •   Cada instrucción de tres direcciones tiene a lo sumo un operador,
          además de la asignación.
      •   El compilador debe generar un nombre temporal para guardar los
          valores intermedios calculados por cada instrucción: t1, t2 y t3.
      •   Algunas instrucciones tienen menos de tres operandos, como la primera
          y la última instrucciones del ejemplo.
Ejemplo de compilación
2. Etapa de síntesis
 b) Fase de optimización de código
 •   Esta fase trata de mejorar el código intermedio, de modo que en la
     siguiente fase resulte un código de máquina más rápido de ejecutar.


 •    Algunas optimizaciones son triviales. En nuestro ejemplo hay una
     forma mejor de realizar el cálculo de la comisión, y pasa por realizar
     sustituciones triviales en la segunda y cuarta instrucciones,
     obteniéndose:


                                t2 = valor * 8.0
                              comision= fijo + t2
Ejemplo de compilación
2. Etapa de síntesis
 b) Fase de optimización de código


 •   El compilador puede deducir que todas las apariciones de la variable
     t1 pueden sustituirse por la constante 8,0, ya que a t1 se le asigna un
     valor que ya no cambia, de modo que la primera instrucción se puede
     eliminar.


 •   Algo parecido sucede con la variable t3, que se utiliza sólo una vez,
     para transmitir su valor a comision en una asignación directa, luego
     resulta seguro sustituir comision por t3, a raíz de lo cual se elimina
     otra de las líneas del código intermedio.
Ejemplo de compilación
2. Etapa de síntesis
c) Fase de generación de código máquina
•   La fase final de un compilador es la generación de código objeto, que por lo
    general consiste en código máquina reubicable o código ensamblador.
•   Cada una de las variables usadas por el programa se traduce a una dirección
    de memoria (esto también se ha podido hacer en la fase de generación de
    código intermedio). Después, cada una de las instrucciones intermedias se
    traduce a una secuencia de instrucciones de máquina que ejecuta la misma
    tarea.
•   Un aspecto decisivo es la asignación de variables a registros.
•   Siguiendo el mismo ejemplo, y utilizando los registros R1 y R2 de un
    microprocesador hipotético, la traducción del código optimizado podría ser:
Ejemplo de compilación
2. Etapa de síntesis
c) Fase de generación de código máquina
•   El primer y segundo operandos de cada instrucción especifican una fuente y un
    destino, respectivamente.
•   Este código traslada el contendido de la dirección [1Ah] al registro R1, después
    lo multiplica por la constante real 8.0.
•   La tercera instrucción pasa el contenido de la dirección [15h] al registro R2.
•   La cuarta instrucción le suma el valor previamente calculado en el registro R1.
•   Por último el valor del registro R2 se pasa a la dirección [10h].
•   Como el alumno puede suponer, la variable comision se almacena en la
    dirección [10h], fijo en [15h] y valor en [1Ah].

Más contenido relacionado

La actualidad más candente

Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostreamTensor
 
Estructura de Lenguaje C++
Estructura de Lenguaje C++Estructura de Lenguaje C++
Estructura de Lenguaje C++Nana Garces
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladoresCJAO
 
Generacion codigomaquina
Generacion codigomaquinaGeneracion codigomaquina
Generacion codigomaquinatre_na_gil
 
Elementos basicos c++
Elementos basicos c++Elementos basicos c++
Elementos basicos c++Tensor
 
Repaso del lenguaje C++
Repaso del lenguaje C++Repaso del lenguaje C++
Repaso del lenguaje C++g_torrealba
 
Estructuras de un programa
Estructuras de un programaEstructuras de un programa
Estructuras de un programaTensor
 
GENERACION DE CODIGO INTERMEDIO
GENERACION DE CODIGO INTERMEDIOGENERACION DE CODIGO INTERMEDIO
GENERACION DE CODIGO INTERMEDIOMAURICIOANDRES39
 
Lenguajesdeprogramacion c nivel1-unidad2
Lenguajesdeprogramacion c nivel1-unidad2Lenguajesdeprogramacion c nivel1-unidad2
Lenguajesdeprogramacion c nivel1-unidad2camnav
 
Historia de la programacion
Historia de la programacionHistoria de la programacion
Historia de la programacionTensor
 
Apuntes generación de codigo intermedio
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedioHumano Terricola
 
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONLENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONSol López
 
PROGRAMACIÓN WEB INTRODUCCIÓN
PROGRAMACIÓN WEB INTRODUCCIÓN PROGRAMACIÓN WEB INTRODUCCIÓN
PROGRAMACIÓN WEB INTRODUCCIÓN Karol Moreno
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedioyaya
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2perlallamas
 
Programacion Lenguaje Assembler 25 10 07
Programacion Lenguaje Assembler 25 10 07Programacion Lenguaje Assembler 25 10 07
Programacion Lenguaje Assembler 25 10 07Carlos Pastorino
 
Estructura de-un-programa-en-lenguaje-c.
Estructura de-un-programa-en-lenguaje-c.Estructura de-un-programa-en-lenguaje-c.
Estructura de-un-programa-en-lenguaje-c.itzel-patricia05
 

La actualidad más candente (19)

Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostream
 
Estructura de Lenguaje C++
Estructura de Lenguaje C++Estructura de Lenguaje C++
Estructura de Lenguaje C++
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladores
 
Generacion codigomaquina
Generacion codigomaquinaGeneracion codigomaquina
Generacion codigomaquina
 
Elementos basicos c++
Elementos basicos c++Elementos basicos c++
Elementos basicos c++
 
Repaso del lenguaje C++
Repaso del lenguaje C++Repaso del lenguaje C++
Repaso del lenguaje C++
 
Estructuras de un programa
Estructuras de un programaEstructuras de un programa
Estructuras de un programa
 
GENERACION DE CODIGO INTERMEDIO
GENERACION DE CODIGO INTERMEDIOGENERACION DE CODIGO INTERMEDIO
GENERACION DE CODIGO INTERMEDIO
 
Lenguajesdeprogramacion c nivel1-unidad2
Lenguajesdeprogramacion c nivel1-unidad2Lenguajesdeprogramacion c nivel1-unidad2
Lenguajesdeprogramacion c nivel1-unidad2
 
Historia de la programacion
Historia de la programacionHistoria de la programacion
Historia de la programacion
 
Apuntes generación de codigo intermedio
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedio
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONLENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
 
PROGRAMACIÓN WEB INTRODUCCIÓN
PROGRAMACIÓN WEB INTRODUCCIÓN PROGRAMACIÓN WEB INTRODUCCIÓN
PROGRAMACIÓN WEB INTRODUCCIÓN
 
Introduccion del Lenguaje C
Introduccion del Lenguaje CIntroduccion del Lenguaje C
Introduccion del Lenguaje C
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
Programacion Lenguaje Assembler 25 10 07
Programacion Lenguaje Assembler 25 10 07Programacion Lenguaje Assembler 25 10 07
Programacion Lenguaje Assembler 25 10 07
 
Estructura de-un-programa-en-lenguaje-c.
Estructura de-un-programa-en-lenguaje-c.Estructura de-un-programa-en-lenguaje-c.
Estructura de-un-programa-en-lenguaje-c.
 

Similar a TEORIA DE LENGUAJES DE PROGRAMACIÓN Y MÉTODOS DE TRADUCCION II

Compiladores informe final
Compiladores informe finalCompiladores informe final
Compiladores informe finalPriscila Morocho
 
Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iRossana Sosa
 
Manual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfManual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfDavidErnestoT
 
Introducción a Compiladores
Introducción a  CompiladoresIntroducción a  Compiladores
Introducción a CompiladoresLeopoldo Capa
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1udalrico
 
Practica análisis léxico y semántico(compiladores)
Practica análisis léxico y semántico(compiladores)Practica análisis léxico y semántico(compiladores)
Practica análisis léxico y semántico(compiladores)Alex Toapanta
 
Compiladores
CompiladoresCompiladores
Compiladoresjose haar
 
Cap4
Cap4Cap4
Cap4CJAO
 
Compiladores Ex..ppt
Compiladores Ex..pptCompiladores Ex..ppt
Compiladores Ex..pptMarko Zapata
 
Cap3
Cap3Cap3
Cap3CJAO
 
Elementos básicos del lenguaje
Elementos básicos del lenguajeElementos básicos del lenguaje
Elementos básicos del lenguajemarbcm
 
Informacion sobre los compiladores y sus funciones
Informacion sobre los compiladores y sus funcionesInformacion sobre los compiladores y sus funciones
Informacion sobre los compiladores y sus funcionesFrancescoReinaga1
 
Analisis sintactico
Analisis sintacticoAnalisis sintactico
Analisis sintacticoAndresDvila
 
Corporacion universitaria remington compiladores deisy
Corporacion universitaria remington compiladores deisyCorporacion universitaria remington compiladores deisy
Corporacion universitaria remington compiladores deisyDeisy Nereida Lozada Ortiz
 

Similar a TEORIA DE LENGUAJES DE PROGRAMACIÓN Y MÉTODOS DE TRADUCCION II (20)

Compilador
CompiladorCompilador
Compilador
 
Compiladores informe final
Compiladores informe finalCompiladores informe final
Compiladores informe final
 
Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes i
 
Compiladores conceptos
Compiladores conceptosCompiladores conceptos
Compiladores conceptos
 
Manual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfManual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdf
 
Introducción a Compiladores
Introducción a  CompiladoresIntroducción a  Compiladores
Introducción a Compiladores
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1
 
Practica análisis léxico y semántico(compiladores)
Practica análisis léxico y semántico(compiladores)Practica análisis léxico y semántico(compiladores)
Practica análisis léxico y semántico(compiladores)
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Cap4
Cap4Cap4
Cap4
 
Compiladores Ex..ppt
Compiladores Ex..pptCompiladores Ex..ppt
Compiladores Ex..ppt
 
Herramientas de software
Herramientas de softwareHerramientas de software
Herramientas de software
 
Cap3
Cap3Cap3
Cap3
 
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assembler
 
Introduccion al assembler[1]
Introduccion al assembler[1]Introduccion al assembler[1]
Introduccion al assembler[1]
 
Elementos básicos del lenguaje
Elementos básicos del lenguajeElementos básicos del lenguaje
Elementos básicos del lenguaje
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
 
Informacion sobre los compiladores y sus funciones
Informacion sobre los compiladores y sus funcionesInformacion sobre los compiladores y sus funciones
Informacion sobre los compiladores y sus funciones
 
Analisis sintactico
Analisis sintacticoAnalisis sintactico
Analisis sintactico
 
Corporacion universitaria remington compiladores deisy
Corporacion universitaria remington compiladores deisyCorporacion universitaria remington compiladores deisy
Corporacion universitaria remington compiladores deisy
 

Último

GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 

Último (20)

GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 

TEORIA DE LENGUAJES DE PROGRAMACIÓN Y MÉTODOS DE TRADUCCION II

  • 1. TEORIA DE LENGUAJES DE PROGRAMACIÓN Y MÉTODOS DE TRADUCCION II COMPILADORES II MG. AMANDA DURAN C.
  • 2. Motivación • La construcción de un compilador es una de las tareas más gratas con las que un informático puede encontrarse a lo largo de su carrera profesional. • Aunque no resulta sensato pensar que una labor tal pueda formar parte de la actividad cotidiana de la mayoría de estos profesionales. • Crear un compilador introduce al informático en un nuevo mundo en el que el control sobre el ordenador es absoluto y le lleva al paroxismo de la omnipotencia sobre la máquina
  • 3. Ejemplo de compilación • La sentencia con la que se va a trabajar es la siguiente: #define PORCENTAJE 8 comision = fijo + valor * PORCENTAJE; • Para no complicar demasiado el ejemplo, asumiremos que las variables referenciadas han sido previamente declaradas de tipo int, e inicializadas a los valores deseados.
  • 4. Ejemplo de compilación Pre procesamiento • El código fuente de una aplicación se puede dividir en módulos almacenados en archivos distintos. • La tarea de reunir el programa fuente a menudo se confía a un programa distinto, llamado preprocesador. • El preprocesador también puede expandir abreviaturas, llamadas macros, a proposiciones del lenguaje fuente. • En nuestro ejemplo, la constante PORCENTAJE se sustituye por su valor, dando lugar al texto: comision = fijo + valor * 8; • que pasa a ser la fuente que entrará al compilador
  • 5. Ejemplo de compilación 1. Etapa de análisis • En esta etapa se controla que el texto fuente sea correcto en todos los sentidos, y se generan las estructuras necesarias para la generación de código.
  • 6. Ejemplo de compilación 1. Etapa de análisis a) Fase de análisis lexicográfico • En esta fase, la cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha y se agrupa en componentes léxicos, que son secuencias de caracteres que tienen un significado atómico; además el analizador léxico trabaja con la tabla de símbolos introduciendo en ésta los nombres de las variables.
  • 7. Ejemplo de compilación 1. Etapa de análisis a) Fase de análisis lexicográfico • 1.- El identificador comision. • 2.- El símbolo de asignación „=‟. • 3.- El identificador fijo. • 4.- El signo de suma „+‟. • 5.- El identificador valor. • 6.- El signo de multiplicación „*‟. • 7.- El número 8. • 8.- El símbolo de fin de sentencia „;‟.
  • 8. Ejemplo de compilación 1. Etapa de análisis a) Fase de análisis lexicográfico Figura Transformación realizada por el analizador lexicográfico
  • 9. Ejemplo de compilación 1. Etapa de análisis b) Fase de análisis sintáctico • Trabaja con una gramática de contexto libre y genera el árbol sintáctico que reconoce su sentencia de entrada. En nuestro caso las categorías gramaticales del análisis léxico son los terminales de la gramática. • Para el ejemplo que nos ocupa podemos partir de la gramática: S  <ID> <ASIG> expr <TERM> expr  <ID> | <ID> <+> expr | <ID> <*> expr | <NUM> • de manera que el análisis sintáctico intenta generar un árbol sintáctico que encaje conla sentencia de entrada
  • 10. Ejemplo de compilación 1. Etapa de análisis b) Fase de análisis sintáctico Figura Árbol sintáctico de la sentencia de entrada.
  • 11. Ejemplo de compilación 1. Etapa de análisis b) Fase de análisis sintáctico Compilación dirigida por sintaxis • Se ha representado una situación ideal en la que la fase lexicográfica actúa por separado y, sólo una vez que ha acabado, le suministra la sintáctica su resultado de salida. • Aunque proseguiremos en nuestro ejemplo con esta clara distinción entre fases, es importante destacar que el analizador sintáctico tiene el control en todo momento, y el léxico por trozos, a petición del sintáctico.
  • 12. Ejemplo de compilación 1. Etapa de análisis b) Fase de análisis sintáctico Compilación dirigida por sintaxis • En otras palabras, el sintáctico va construyendo su árbol poco a poco (de izquierda a derecha), y cada vez que necesita un nuevo componente léxico para continuar dicha construcción, se lo solicita al lexicográfico; éste lee nuevos caracteres del fichero de entrada hasta conformar un nuevo componente y, una vez obtenido, se lo suministra al sintáctico, quien continúa la construcción del árbol hasta que vuelve a necesitar otro componente, momento en que se reinicia el proceso. • Este mecanismo finaliza cuando se ha obtenido el árbol y ya no hay más componentes en el fichero de entrada, o bien cuando es imposible construir el árbol.
  • 13. Ejemplo de compilación 1. Etapa de análisis b) Fase de análisis sintáctico Compilación dirigida por sintaxis Figura : Análisis dirigido por sintaxis
  • 14. Ejemplo de compilación 1. Etapa de análisis • c) Fase de análisis semántico • Esta fase revisa el árbol sintáctico junto con los atributos y la tabla de símbolos para tratar de encontrar errores semánticos. • Para todo esto se analizan los operadores y operandos de expresiones y proposiciones. • Finalmente reúne la información necesaria sobre los tipos de datos para la fase posterior de generación de código. • El componente más importante del análisis semántico es la verificación de tipos.
  • 15. Ejemplo de compilación 1. Etapa de análisis • c) Fase de análisis semántico • Aquí, el compilador verifica si los operandos de cada operador son compatibles según la especificación del lenguaje fuente. • Si suponemos que nuestro lenguaje solo trabaja con números reales, la salida de esta fase sería su mismo árbol, excepto porque el atributo de <NUM>, que era el entero 8 a la entrada, ahora pasaría a ser el real 8,0. • Además se ha debido controlar que las variables implicadas en la sentencia, a saber, comision, fijo y valor son compatibles con el tipo numérico de la constante 8,0.
  • 16. Ejemplo de compilación 2. Etapa de síntesis • En la etapa anterior se ha controlado que el programa de entrada es correcto. • Por tanto, el compilador ya se encuentra en disposición de generar el código máquina equivalente semánticamente al programa fuente. • Para ello se parte de las estructuras generadas en dicha etapa anterior: árbol sintáctico y tabla de símbolos. • a) Fase de generación de código intermedio • Después de la etapa de análisis, se suele generar una representación intermedia explícita del programa fuente. • Dicha representación intermedia se puede considerar como un programa para una máquina abstracta.
  • 17. Ejemplo de compilación 2. Etapa de síntesis a) Fase de generación de código intermedio • Cualquier representación intermedia debe tener dos propiedades importantes; debe ser fácil de generar y fácil de traducir al código máquina destino. • Así, una representación intermedia puede tener diversas formas. En el presente ejemplo se trabajará con una forma intermedia llamada “código de tres direcciones”, que es muy parecida a un lenguaje ensamblador para un microprocesador que carece de registros y sólo es capaz de trabajar con direcciones de memoria y literales.
  • 18. Ejemplo de compilación 2. Etapa de síntesis a) Fase de generación de código intermedio • En el código de tres direcciones cada instrucción tiene como máximo tres operandos. Siguiendo el ejemplo propuesto, se generaría el siguiente código de tres direcciones: t1 = 8.0 t2 = valor * t1 t3 = fijo + t2 comision = t3
  • 19. Ejemplo de compilación 2. Etapa de síntesis a) Fase de generación de código intermedio t1 = 8.0 t2 = valor * t1 t3 = fijo + t2 comision = t3 • De este ejemplo se pueden destacar varias propiedades del código intermedio escogido: • Cada instrucción de tres direcciones tiene a lo sumo un operador, además de la asignación. • El compilador debe generar un nombre temporal para guardar los valores intermedios calculados por cada instrucción: t1, t2 y t3. • Algunas instrucciones tienen menos de tres operandos, como la primera y la última instrucciones del ejemplo.
  • 20. Ejemplo de compilación 2. Etapa de síntesis b) Fase de optimización de código • Esta fase trata de mejorar el código intermedio, de modo que en la siguiente fase resulte un código de máquina más rápido de ejecutar. • Algunas optimizaciones son triviales. En nuestro ejemplo hay una forma mejor de realizar el cálculo de la comisión, y pasa por realizar sustituciones triviales en la segunda y cuarta instrucciones, obteniéndose: t2 = valor * 8.0 comision= fijo + t2
  • 21. Ejemplo de compilación 2. Etapa de síntesis b) Fase de optimización de código • El compilador puede deducir que todas las apariciones de la variable t1 pueden sustituirse por la constante 8,0, ya que a t1 se le asigna un valor que ya no cambia, de modo que la primera instrucción se puede eliminar. • Algo parecido sucede con la variable t3, que se utiliza sólo una vez, para transmitir su valor a comision en una asignación directa, luego resulta seguro sustituir comision por t3, a raíz de lo cual se elimina otra de las líneas del código intermedio.
  • 22. Ejemplo de compilación 2. Etapa de síntesis c) Fase de generación de código máquina • La fase final de un compilador es la generación de código objeto, que por lo general consiste en código máquina reubicable o código ensamblador. • Cada una de las variables usadas por el programa se traduce a una dirección de memoria (esto también se ha podido hacer en la fase de generación de código intermedio). Después, cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de máquina que ejecuta la misma tarea. • Un aspecto decisivo es la asignación de variables a registros. • Siguiendo el mismo ejemplo, y utilizando los registros R1 y R2 de un microprocesador hipotético, la traducción del código optimizado podría ser:
  • 23. Ejemplo de compilación 2. Etapa de síntesis c) Fase de generación de código máquina • El primer y segundo operandos de cada instrucción especifican una fuente y un destino, respectivamente. • Este código traslada el contendido de la dirección [1Ah] al registro R1, después lo multiplica por la constante real 8.0. • La tercera instrucción pasa el contenido de la dirección [15h] al registro R2. • La cuarta instrucción le suma el valor previamente calculado en el registro R1. • Por último el valor del registro R2 se pasa a la dirección [10h]. • Como el alumno puede suponer, la variable comision se almacena en la dirección [10h], fijo en [15h] y valor en [1Ah].