SlideShare una empresa de Scribd logo
1 de 10
COMPILADORES
Nombres: Carmen Vargas
Jeremy Camacho
Nivel:

6to “SIS”

CAPITULO 1
Uno de los principales mecanismos de comunicación entre un ordenador y una persona viene
dado por el envío y recepción de mensajes de tipo textual, el usuario escribe una orden
mediante el teclado y el ordenador lo ejecuta devolviendo un mensaje sobre la acción llevada
a cabo.
Ningúninformático que se precie puede esquivar la indudable necesidad de conocer los
estrejismos de la herramienta que utiliza durante su trabajo diario y sobre la que descansa la
interacción hombre-máquina, el traductor.
Traductor
Un programa que traduce o convierte desde texto o programa escrito en un lenguaje fuente
hasta un texto o programa equivalente escrito en un lenguaje destino produciendo, si cabe,
mensaje de error

1.1Tipos de traductores
Traductor del idioma: traduce un idioma dado a otro, como por ejemplo del ingles al español.
Se pueden producir los siguientes errores:
-Necesidad de inteligencia artificial y problema de las frases hechas.
-Difícil formalización en la especificación del significado de las palabras
-Cambio del sentido de las palabras según el contexto
Compiladores: Es aquel traductor que tiene como entrada una sentencia en lenguaje formal y
como salida tiene un fichero ejecutable, es decir, realiza un traducción de código de alto nivel
a código máquina.
Intérpretes: Es como un compilador solo que la salida es una ejecuccion. El programa de
entrada se reconoce y se ejecuta a la vez. No se produce un resultado físico (Codigo maquina)
sino lógico (una ejecución)
Su principal ventaja es la depuración.

Preprocesador: Permite modificar el programa fuente antes de la verdadera compilación.
Hacen uso de macroinstrucciones y directivas de compilación.
Los preprocesadores suelen actuar de manera transparente para el programador, pudiendo
incluso considerarse que son una fase preliminar del compilador.
Interprete de comandos: Traduce sentencias simples a invocaciones a programas de una
biblioteca Se utiliza especialmente en los sistemas operativos (la Shell de Unix es un intérprete
de comandos)
Ensambladores y macroensambladores: Son los pioneros de los compiladores, ya que en los
albores de la informática, los programadores escribían directamente en código máquina, y el
primer paso hacia los lenguajes de alto nivel lo constituyen los ensambladores.
Un ensamblador es un compilador sencillo, en el que el lenguaje fuente tiene una estructura
tan sencilla que permite la traducción de cada sentencia fuente a una única instrucción de
código máquina. Desde un punto formal, un macroensamblador puede entenderse como un
ensamblador con un preprocesador previo.
Conversores fuente-fuente: Permite traducir desde un lenguaje de alto nivel a otro lenguaje
de alto nivel, consiguiendo así mayor portabilidad.
Compiladores cruzados: Es un compilador que genera código para ser ejecutado en otra
máquina. Se utiliza en la fase de desarrollo de nuevos ordenadores.
1.2.-Conceptos relacionados con la traducción
Compilación,enlace y carga: Estas son las 3 fases asicas que hay que seguir para que un
ordenador ejecute la interpretación de un texto mediante la utilización de lenguaje de alto
nivel.
El compilador no produce directamente un fichero ejecutable sino que el código generado se
estructura en módulos que se almacenan en un fichero objeto. Los ficheros objetos poseen
información relativa tanto al código maquina como a una tabla de símbolos que almacenan las
variables y tipos utilizados en el programa fuente.
Durante la fase de enlace resuelve las referencias cruzadas, que pueden estar declarados en
otros ficherps objeto o en librerías, engloba en un único bloque los distintos registros que
almacenan código maquina, estructura el bloque de memoria destinado a almacenar las
variables en tiempo de ejecución y genera el ejecutable final.

El cargador carga coloca sus diferentes segmentos en memoria y asigna los registros bases a
sus posiciones correctas de manera que las direcciones relativas funcionen correctamente.

Pasadas de compilación: Es el número de veces que el compilador debe leer el programa
fuente para generar el código.
Compilaciónincremental: Cuando se desarrolla un programa fuente este se recompila varias
veces hasta obtener una versión definitiva libre de errores.
Autocompilador:Es un compilador escrito en el mismo lenguaje que compila o parecido.
Cuando este se extiende entre muchas maquinas diferentes el uso de un compilador, y este se
desea mejorar, el nuevo compilador se escribe utilizando el lenguaje antiguo , de manera que
pueda ser compilado por todas esas máquinas diferentes y de un compilador más potente.
Metacompilador: Es un compilador de compiladores, se trata de un programa que acepte
como entrada la descripción de un lenguaje y produce el compilador de dicho programa.
Descompilador: Un descompilador realiza la labor de traducción inversa, esto es, pasa de un
código maquina al equivalente escrito en el lenguaje que lo genero. Cada descompilador
trabaja con un lenguaje de alto nivel concreto.

1.3 Estructura de un Traductor
Un traductor se divide en dos etapas:
Una que analiza la entrada y genera estructuras intermedias
Otra que sintetiza la salida a partir de dichas estructuras.

Los objetos de la etapa de análisis son:
a. Controlar la corrección del programa fuente.
b. Generar las estructuras necesarias para comenzar la etapa de síntesis.
La etapa de análisis consta de las siguientes fases:
a. Análisis lexicográfico.- Divide el programa fuente en los componentes básicos del
lenguaje a compilar.
b. Análisis sintáctico.- Comprueba que la estructura de los componentes básicos sea
correcta.
c. Análisis semántico.- Comprueba que el programa fuente respeta las directrices del
lenguaje que se compila.
Cualquiera de estas fases puede generar un mensaje de error por los fallos encontrados
por el programador. Mientras más errores controle, menos problemas dará un programa
en tiempo de ejecución.
La etapa de síntesis se compone de tres fases para construir el programa objeto:
a. Generación de código intermedio.- Genera un código intermediante de la máquina
muy parecido al ensamblador.
b. Generación del código máquina.- Crea un bloque de código máquina ejecutable.
c. Fase de optimización.- Puede realizarse sobre el código intermedio, sobre el código
máquina, o sobre ambos.

1.3.1

Construcción sistemática de compiladores
Las fases anteriores se agrupan en una etapa inicial(front-end) y una etapa final(backend).

Se ha convertido en una práctica común el tomar la etapa inicial de un compilador y
rehacer su etapa final asociada para producir un compilador para el mismo lenguaje
fuente en una máquina distinta.

En lo que se requiere crear un compilador del lenguaje C para tres máquinas
diferentes: Dec-Alpha (Unix), Motorola (Mac OS) e Intel (MS.DOS). Cada bloque de
líneas punteadas agrupa un front-end con un back-end.
1.3.2

La Tabla de Símbolos
Es una estructura de datos que posee información sobre los identificadores definidos
por el usuario, ya sean constantes, variables, tipos u otros. Debe hacerse de forma
que su estructura sea uniforme, esto es, no se guarda la misma información sobre una
variable del programa que sobre un tipo definido por el usuario. Hace funciones de
diccionario de datos y su estructura puede ser una tabla hash, un árbol binario de
búsqueda, etc., con tal que las operaciones de acceso sean lo bastante eficiente.
Tanto la etapa de análisis como la de síntesis accede a esta estructura, por lo que se
halla muy acoplada al resto de fases del compilador. Conviene dotar a la tabla de
símbolos de una interfaz lo suficiente genérica como para permitir cambio de las
estructuras internas de almacenamiento sin que estas fases deban ser retocadas. Esto
es así porque suele ser usual hacer un primer prototipo de un compilador con una
tabla de símbolos fácil de construir, y cuando el compilador ya ha sido finalizado,
entonces se procede a sustituir la tabla de símbolos por otra más eficiente en función
de las necesidades que hayan ido surgiendo a lo largo de la etapa de desarrollo
anterior.

1.4 Ejemplo de Compilación
La sentencia con la que se va a trabajar es la siguiente:
#define PORCENTAJE 8
comision = fijo + valor * PORCENTAJE;
Asumiremos que las variables referenciada las sido previamente declaradas de tipo int, e
inicializadas a los valores deseados.
1.4.1

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 procesador. El procesador 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.

1.4.2

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.

1.4.2.1 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.

En nuestro ejemplo los caracteres de la proposición de asignación
comision= fijo + valor * 8 ;
se agruparían en los componentes léxicos siguientes:
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 ‘;’.

1.4.2.2 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
1.4.2.2.1

Compilación Dirigida por Sintaxis
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. 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.

1.4.2.3 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.
1.4.3

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.

1.4.3.1 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.

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. 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
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.
1.4.3.2 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
1.4.3.3 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.
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:
MOVE [1Ah], R1
MULT #8.0, R1
MOVE [15h], R2
ADD R1, R2
MOVE R2, [10h]
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 lector 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

Actividad 3
Actividad 3Actividad 3
Actividad 3maryr_
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico maryr_
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladoresSheyli Patiño
 
Clase6 ejemplo analisis lexico dev cpp
Clase6 ejemplo analisis lexico dev cppClase6 ejemplo analisis lexico dev cpp
Clase6 ejemplo analisis lexico dev cppInfomania pro
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladoresCJAO
 
Compiladores y analizador léxico
Compiladores y analizador léxicoCompiladores y analizador léxico
Compiladores y analizador léxicokatherine133
 
Cap1 compiladores
Cap1 compiladoresCap1 compiladores
Cap1 compiladoresCJAO
 
Análisis Semántico con Cup
Análisis Semántico con CupAnálisis Semántico con Cup
Análisis Semántico con CupLAUNASA NOVENO B
 
Proceso de Compilacion
Proceso de CompilacionProceso de Compilacion
Proceso de Compilacionguest9a91e2
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedioGuillermo
 
Compiladores
CompiladoresCompiladores
CompiladoresIsabel
 
Clase6 conceptos del analisis lexico
Clase6 conceptos del analisis lexicoClase6 conceptos del analisis lexico
Clase6 conceptos del analisis lexicoInfomania pro
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraAlexandraMolinaSanchez
 
Python guia01 1
Python guia01 1Python guia01 1
Python guia01 1zeta2015
 
Test1 de Compiladores
Test1 de CompiladoresTest1 de Compiladores
Test1 de CompiladoresInfomania pro
 
Clase analisis lexico
Clase analisis lexicoClase analisis lexico
Clase analisis lexicoInfomania pro
 
Introducción A Compiladores
Introducción A Compiladores Introducción A Compiladores
Introducción A Compiladores Nestor Traña
 

La actualidad más candente (20)

Actividad 3
Actividad 3Actividad 3
Actividad 3
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico
 
Unidad1 2 Lenguajes y automatas
Unidad1 2  Lenguajes y automatasUnidad1 2  Lenguajes y automatas
Unidad1 2 Lenguajes y automatas
 
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo MinilenguajeCompiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
 
Clase6 ejemplo analisis lexico dev cpp
Clase6 ejemplo analisis lexico dev cppClase6 ejemplo analisis lexico dev cpp
Clase6 ejemplo analisis lexico dev cpp
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladores
 
Compiladores y analizador léxico
Compiladores y analizador léxicoCompiladores y analizador léxico
Compiladores y analizador léxico
 
Cap1 compiladores
Cap1 compiladoresCap1 compiladores
Cap1 compiladores
 
Análisis Semántico con Cup
Análisis Semántico con CupAnálisis Semántico con Cup
Análisis Semántico con Cup
 
Proceso de Compilacion
Proceso de CompilacionProceso de Compilacion
Proceso de Compilacion
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Clase6 conceptos del analisis lexico
Clase6 conceptos del analisis lexicoClase6 conceptos del analisis lexico
Clase6 conceptos del analisis lexico
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandra
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Python guia01 1
Python guia01 1Python guia01 1
Python guia01 1
 
Test1 de Compiladores
Test1 de CompiladoresTest1 de Compiladores
Test1 de Compiladores
 
Clase analisis lexico
Clase analisis lexicoClase analisis lexico
Clase analisis lexico
 
Introducción A Compiladores
Introducción A Compiladores Introducción A Compiladores
Introducción A Compiladores
 

Similar a Resumencap1 carmen vargas_jeremycamacho

Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iRossana Sosa
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador FuncionamientoKriz Kozlov
 
C:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladoresC:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladoresNancyandRegina317
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1udalrico
 
Compiladores unidad1
Compiladores unidad1Compiladores unidad1
Compiladores unidad1X3025990
 
Compiladores y analizador lexicos
Compiladores y analizador lexicosCompiladores y analizador lexicos
Compiladores y analizador lexicosdiana8320
 
Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador   Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador ADOLFOISAIASGARCIASI
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libreDanielita Lopez
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libreDanielita Lopez
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libreDLACGP
 
C:\fakepath\compilador
C:\fakepath\compiladorC:\fakepath\compilador
C:\fakepath\compiladorDLACGP
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libreDanielita Lopez
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libreDanielita Lopez
 
C:\fakepath\compiladores
C:\fakepath\compiladoresC:\fakepath\compiladores
C:\fakepath\compiladorespaulina8
 
Traductores de lenguajes de programación
Traductores de lenguajes de programaciónTraductores de lenguajes de programación
Traductores de lenguajes de programaciónDaniela Brignolo
 
C:\fakepath\compiladores
C:\fakepath\compiladoresC:\fakepath\compiladores
C:\fakepath\compiladorespaulina8
 

Similar a Resumencap1 carmen vargas_jeremycamacho (20)

Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes i
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador Funcionamiento
 
C:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladoresC:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladores
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1
 
Compiladores unidad1
Compiladores unidad1Compiladores unidad1
Compiladores unidad1
 
Compiladores y analizador lexicos
Compiladores y analizador lexicosCompiladores y analizador lexicos
Compiladores y analizador lexicos
 
Traductor y su estructura
Traductor y su estructuraTraductor y su estructura
Traductor y su estructura
 
Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador   Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador
 
H:\compiladores
H:\compiladoresH:\compiladores
H:\compiladores
 
Compiladores (1) pedro vasques
Compiladores (1) pedro vasquesCompiladores (1) pedro vasques
Compiladores (1) pedro vasques
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\compilador
C:\fakepath\compiladorC:\fakepath\compilador
C:\fakepath\compilador
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\compiladores
C:\fakepath\compiladoresC:\fakepath\compiladores
C:\fakepath\compiladores
 
Traductores de lenguajes de programación
Traductores de lenguajes de programaciónTraductores de lenguajes de programación
Traductores de lenguajes de programación
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
C:\fakepath\compiladores
C:\fakepath\compiladoresC:\fakepath\compiladores
C:\fakepath\compiladores
 

Más de MARCO POLO SILVA SEGOVIA

Autoevaluación portafolio profesor compiladores
Autoevaluación portafolio profesor compiladoresAutoevaluación portafolio profesor compiladores
Autoevaluación portafolio profesor compiladoresMARCO POLO SILVA SEGOVIA
 
Tarea de compiladores carmen vargas_metacompiladordescompilador
Tarea de compiladores carmen vargas_metacompiladordescompiladorTarea de compiladores carmen vargas_metacompiladordescompilador
Tarea de compiladores carmen vargas_metacompiladordescompiladorMARCO POLO SILVA SEGOVIA
 
Autoevaluación portafolio profesor procesos y calidad
Autoevaluación portafolio profesor procesos y calidadAutoevaluación portafolio profesor procesos y calidad
Autoevaluación portafolio profesor procesos y calidadMARCO POLO SILVA SEGOVIA
 
aseguramiento de la calidad de software acs
aseguramiento de la calidad de software acsaseguramiento de la calidad de software acs
aseguramiento de la calidad de software acsMARCO POLO SILVA SEGOVIA
 

Más de MARCO POLO SILVA SEGOVIA (20)

Autoevaluación portafolio profesor compiladores
Autoevaluación portafolio profesor compiladoresAutoevaluación portafolio profesor compiladores
Autoevaluación portafolio profesor compiladores
 
Tutorial compiladores
Tutorial compiladoresTutorial compiladores
Tutorial compiladores
 
Jlex y cup en java
Jlex y cup en javaJlex y cup en java
Jlex y cup en java
 
Lex yacc
Lex yaccLex yacc
Lex yacc
 
Capitulo 3 paul carrera,dego balcazar
Capitulo 3 paul carrera,dego balcazarCapitulo 3 paul carrera,dego balcazar
Capitulo 3 paul carrera,dego balcazar
 
Decompilador y metacompilador
Decompilador y metacompiladorDecompilador y metacompilador
Decompilador y metacompilador
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Tarea de compiladores carmen vargas_metacompiladordescompilador
Tarea de compiladores carmen vargas_metacompiladordescompiladorTarea de compiladores carmen vargas_metacompiladordescompilador
Tarea de compiladores carmen vargas_metacompiladordescompilador
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Registro anecdótico procesos y calidad
Registro anecdótico procesos y calidadRegistro anecdótico procesos y calidad
Registro anecdótico procesos y calidad
 
Autoevaluación portafolio profesor procesos y calidad
Autoevaluación portafolio profesor procesos y calidadAutoevaluación portafolio profesor procesos y calidad
Autoevaluación portafolio profesor procesos y calidad
 
Procesos y calidad i parcial
Procesos y calidad i parcialProcesos y calidad i parcial
Procesos y calidad i parcial
 
Prueba de aplicaciones
Prueba de aplicacionesPrueba de aplicaciones
Prueba de aplicaciones
 
Procesos itil! aviles maruri
Procesos itil! aviles maruriProcesos itil! aviles maruri
Procesos itil! aviles maruri
 
prueba de aplicaciones convencionales
prueba de aplicaciones convencionalesprueba de aplicaciones convencionales
prueba de aplicaciones convencionales
 
aseguramiento de la calidad de software acs
aseguramiento de la calidad de software acsaseguramiento de la calidad de software acs
aseguramiento de la calidad de software acs
 
tecnicas de revisión del software
tecnicas de revisión del softwaretecnicas de revisión del software
tecnicas de revisión del software
 
conceptos de calidad
conceptos de calidadconceptos de calidad
conceptos de calidad
 
Conceptos de calidad
Conceptos de calidadConceptos de calidad
Conceptos de calidad
 
PROCESOS
PROCESOSPROCESOS
PROCESOS
 

Último

GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
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
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
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
 
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
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
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
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
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
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
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
 
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
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
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
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
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
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 

Último (20)

GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .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
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.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
 
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
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
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
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
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
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
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
 
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
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
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
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
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
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 

Resumencap1 carmen vargas_jeremycamacho

  • 1. COMPILADORES Nombres: Carmen Vargas Jeremy Camacho Nivel: 6to “SIS” CAPITULO 1 Uno de los principales mecanismos de comunicación entre un ordenador y una persona viene dado por el envío y recepción de mensajes de tipo textual, el usuario escribe una orden mediante el teclado y el ordenador lo ejecuta devolviendo un mensaje sobre la acción llevada a cabo. Ningúninformático que se precie puede esquivar la indudable necesidad de conocer los estrejismos de la herramienta que utiliza durante su trabajo diario y sobre la que descansa la interacción hombre-máquina, el traductor. Traductor Un programa que traduce o convierte desde texto o programa escrito en un lenguaje fuente hasta un texto o programa equivalente escrito en un lenguaje destino produciendo, si cabe, mensaje de error 1.1Tipos de traductores Traductor del idioma: traduce un idioma dado a otro, como por ejemplo del ingles al español. Se pueden producir los siguientes errores: -Necesidad de inteligencia artificial y problema de las frases hechas. -Difícil formalización en la especificación del significado de las palabras -Cambio del sentido de las palabras según el contexto Compiladores: Es aquel traductor que tiene como entrada una sentencia en lenguaje formal y como salida tiene un fichero ejecutable, es decir, realiza un traducción de código de alto nivel a código máquina.
  • 2. Intérpretes: Es como un compilador solo que la salida es una ejecuccion. El programa de entrada se reconoce y se ejecuta a la vez. No se produce un resultado físico (Codigo maquina) sino lógico (una ejecución) Su principal ventaja es la depuración. Preprocesador: Permite modificar el programa fuente antes de la verdadera compilación. Hacen uso de macroinstrucciones y directivas de compilación. Los preprocesadores suelen actuar de manera transparente para el programador, pudiendo incluso considerarse que son una fase preliminar del compilador. Interprete de comandos: Traduce sentencias simples a invocaciones a programas de una biblioteca Se utiliza especialmente en los sistemas operativos (la Shell de Unix es un intérprete de comandos) Ensambladores y macroensambladores: Son los pioneros de los compiladores, ya que en los albores de la informática, los programadores escribían directamente en código máquina, y el primer paso hacia los lenguajes de alto nivel lo constituyen los ensambladores. Un ensamblador es un compilador sencillo, en el que el lenguaje fuente tiene una estructura tan sencilla que permite la traducción de cada sentencia fuente a una única instrucción de código máquina. Desde un punto formal, un macroensamblador puede entenderse como un ensamblador con un preprocesador previo. Conversores fuente-fuente: Permite traducir desde un lenguaje de alto nivel a otro lenguaje de alto nivel, consiguiendo así mayor portabilidad. Compiladores cruzados: Es un compilador que genera código para ser ejecutado en otra máquina. Se utiliza en la fase de desarrollo de nuevos ordenadores. 1.2.-Conceptos relacionados con la traducción Compilación,enlace y carga: Estas son las 3 fases asicas que hay que seguir para que un ordenador ejecute la interpretación de un texto mediante la utilización de lenguaje de alto nivel. El compilador no produce directamente un fichero ejecutable sino que el código generado se estructura en módulos que se almacenan en un fichero objeto. Los ficheros objetos poseen información relativa tanto al código maquina como a una tabla de símbolos que almacenan las variables y tipos utilizados en el programa fuente.
  • 3. Durante la fase de enlace resuelve las referencias cruzadas, que pueden estar declarados en otros ficherps objeto o en librerías, engloba en un único bloque los distintos registros que almacenan código maquina, estructura el bloque de memoria destinado a almacenar las variables en tiempo de ejecución y genera el ejecutable final. El cargador carga coloca sus diferentes segmentos en memoria y asigna los registros bases a sus posiciones correctas de manera que las direcciones relativas funcionen correctamente. Pasadas de compilación: Es el número de veces que el compilador debe leer el programa fuente para generar el código. Compilaciónincremental: Cuando se desarrolla un programa fuente este se recompila varias veces hasta obtener una versión definitiva libre de errores.
  • 4. Autocompilador:Es un compilador escrito en el mismo lenguaje que compila o parecido. Cuando este se extiende entre muchas maquinas diferentes el uso de un compilador, y este se desea mejorar, el nuevo compilador se escribe utilizando el lenguaje antiguo , de manera que pueda ser compilado por todas esas máquinas diferentes y de un compilador más potente. Metacompilador: Es un compilador de compiladores, se trata de un programa que acepte como entrada la descripción de un lenguaje y produce el compilador de dicho programa. Descompilador: Un descompilador realiza la labor de traducción inversa, esto es, pasa de un código maquina al equivalente escrito en el lenguaje que lo genero. Cada descompilador trabaja con un lenguaje de alto nivel concreto. 1.3 Estructura de un Traductor Un traductor se divide en dos etapas: Una que analiza la entrada y genera estructuras intermedias Otra que sintetiza la salida a partir de dichas estructuras. Los objetos de la etapa de análisis son: a. Controlar la corrección del programa fuente. b. Generar las estructuras necesarias para comenzar la etapa de síntesis. La etapa de análisis consta de las siguientes fases: a. Análisis lexicográfico.- Divide el programa fuente en los componentes básicos del lenguaje a compilar. b. Análisis sintáctico.- Comprueba que la estructura de los componentes básicos sea correcta. c. Análisis semántico.- Comprueba que el programa fuente respeta las directrices del lenguaje que se compila. Cualquiera de estas fases puede generar un mensaje de error por los fallos encontrados por el programador. Mientras más errores controle, menos problemas dará un programa en tiempo de ejecución. La etapa de síntesis se compone de tres fases para construir el programa objeto: a. Generación de código intermedio.- Genera un código intermediante de la máquina muy parecido al ensamblador. b. Generación del código máquina.- Crea un bloque de código máquina ejecutable.
  • 5. c. Fase de optimización.- Puede realizarse sobre el código intermedio, sobre el código máquina, o sobre ambos. 1.3.1 Construcción sistemática de compiladores Las fases anteriores se agrupan en una etapa inicial(front-end) y una etapa final(backend). Se ha convertido en una práctica común el tomar la etapa inicial de un compilador y rehacer su etapa final asociada para producir un compilador para el mismo lenguaje fuente en una máquina distinta. En lo que se requiere crear un compilador del lenguaje C para tres máquinas diferentes: Dec-Alpha (Unix), Motorola (Mac OS) e Intel (MS.DOS). Cada bloque de líneas punteadas agrupa un front-end con un back-end.
  • 6. 1.3.2 La Tabla de Símbolos Es una estructura de datos que posee información sobre los identificadores definidos por el usuario, ya sean constantes, variables, tipos u otros. Debe hacerse de forma que su estructura sea uniforme, esto es, no se guarda la misma información sobre una variable del programa que sobre un tipo definido por el usuario. Hace funciones de diccionario de datos y su estructura puede ser una tabla hash, un árbol binario de búsqueda, etc., con tal que las operaciones de acceso sean lo bastante eficiente. Tanto la etapa de análisis como la de síntesis accede a esta estructura, por lo que se halla muy acoplada al resto de fases del compilador. Conviene dotar a la tabla de símbolos de una interfaz lo suficiente genérica como para permitir cambio de las estructuras internas de almacenamiento sin que estas fases deban ser retocadas. Esto es así porque suele ser usual hacer un primer prototipo de un compilador con una tabla de símbolos fácil de construir, y cuando el compilador ya ha sido finalizado, entonces se procede a sustituir la tabla de símbolos por otra más eficiente en función de las necesidades que hayan ido surgiendo a lo largo de la etapa de desarrollo anterior. 1.4 Ejemplo de Compilación La sentencia con la que se va a trabajar es la siguiente: #define PORCENTAJE 8 comision = fijo + valor * PORCENTAJE; Asumiremos que las variables referenciada las sido previamente declaradas de tipo int, e inicializadas a los valores deseados.
  • 7. 1.4.1 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 procesador. El procesador 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. 1.4.2 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. 1.4.2.1 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. En nuestro ejemplo los caracteres de la proposición de asignación comision= fijo + valor * 8 ;
  • 8. se agruparían en los componentes léxicos siguientes: 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 ‘;’. 1.4.2.2 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
  • 9. 1.4.2.2.1 Compilación Dirigida por Sintaxis 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. 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. 1.4.2.3 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. 1.4.3 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. 1.4.3.1 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. 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. 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 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.
  • 10. • Algunas instrucciones tienen menos de tres operandos, como la primera y la última instrucciones del ejemplo. 1.4.3.2 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 1.4.3.3 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. 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: MOVE [1Ah], R1 MULT #8.0, R1 MOVE [15h], R2 ADD R1, R2 MOVE R2, [10h] 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 lector puede suponer, la variable comision se almacena en la dirección [10h], fijo en [15h] y valor en [1Ah].