SlideShare una empresa de Scribd logo
1 de 28
Compiladores
Unidad 1. Introducción al proceso
de compilación.
Contenido
 Introducción a la compilación
 Estructura y fases de un compilador
 Lenguajes y tipos de traductores
 Herramientas para el desarrollo de un
compilador
 Clasificación de los compiladores
Introducción a la compilación
 La escritura de compiladores comprende los
lenguajes de programación, la arquitectura
de computadoras, la teoría de lenguajes, los
algoritmos y la ingeniería de software
[Aho98].
Introducción a la compilación (2)
 A grandes rasgos, un compilador es un programa
que lee un programa escrito en algún lenguaje
(fuente) y lo traduce a un programa equivalente en
otro lenguaje (objeto).
 Una parte importante de éste proceso de traducción
es presentar los errores del programa fuente.
Programa
Fuente Compilador
Programa
Objeto
Mensajes
de error
Introducción a la compilación (3)
 Modelo de análisis y síntesis de la
compilación
 Fase de análisis
 Divide al programa fuente en sus elementos
componentes y crea una representación intermedia.
 Fase de síntesis
 Construye el programa objeto a partir de la
representación intermedia.
Introducción a la compilación (4)
 Existe una gran variedad de software que realiza algún tipo de análisis sobre
programas fuente, por ejemplo:
 Editores de estructuras
 Analiza el texto del programa fuente imponiéndole una estructura jerárquica apropiada.
 También puede proporcionar:
 Palabras clave de forma automática
 Saltos desde un paréntesis, llave, o corchete que abre hasta su correspondiente que cierra.
 Ayuda en la edición de las estructuras propias del lenguaje.
 Visualizadores estéticos
 Imprime el programa fuente de tal forma que visiblemente claro. Por ejemplo:
 Los comentarios pueden aparecer con un tipo de letra especial, al igual que las palabras clave.
 Indentación proporcional a la profundidad del anidamiento.
 Verificadores estáticos
 Lee el programa fuente y lo analiza para intentar descubrir errores potenciales sin
ejecutar el programa. Por ejemplo:
 Partes del programa que nunca se podrán ejecutar.
 Si una variable se utiliza antes de ser definida.
 Intentar utilizar una variable de tipo real como apuntador.
 Intérpretes
 En lugar de producir un programa objeto como resultado de una traducción, realiza las
operaciones que implica el programa fuente.
 En la mayoría de las ocasiones son utilizados para ejecutar órdenes (por ejemplo: el
intérprete de comandos).
Introducción a la compilación (5)
 Tradicionalmente se concibe a un
compilador como un programa que recibe
un programa fuente, escrito en algún
lenguaje de alto nivel, y genera código
máquina.
 Sin embargo, los principios con los que se
construyen compiladores también son
utilizados en otros lugares:
 Formadores de textos (LaTex).
 Intérpretes de consultas (SQL).
Introducción a la
compilación (6)
 El contexto de un compilador
 Cuando se requiere generar un
objeto ejecutable, el compilador
requiere de otros programas.
Estructura del programa fuente
Preprocesador
Programa fuente
Compilador
Programa objeto en lenguaje ensamblador
Ensamblador
Código máquina relocalizable
Enlazador y cargador
Código máquina absoluto
Librerías, bibliotecas y
Archivos objeto relocalizables
Estructura y fases de un
compilador
 En la compilación el análisis consta de tres fases:
 Análisis lineal
 La secuencia de caracteres que forma 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 colectivo.
 Análisis jerárquico
 Los componentes léxicos se agrupan jerárquicamente en
colecciones anidadas con un significado colectivo.
 Análisis semántico
 Se realizan ciertas revisiones para asegurar que los
componentes de un programa se ajustan de un modo
significativo.
Estructura y fases de un
compilador (2)
 Análisis lineal
 También conocido como: análisis léxico o exploración.
 Ejemplo, en la proposición de asignación:
 posicion = inicial + velocidad * 60
 Se identifican los siguientes componentes léxicos
 Identificador (posicion)
 Símbolo de asignación (=)
 Identificador (inicial)
 Signo de suma (+)
 Identificador (velocidad)
 Signo de multiplicación (*)
 Número (60)
Estructura y fases de un
compilador (3)
 Análisis jerárquico
 También llamado análisis sintáctico.
 Implica agrupar los componentes léxicos en frases
gramaticales que el compilador utiliza para sintetizar la
salida.
 Por lo general, las frases gramaticales se representan
mediante un árbol de análisis sintáctico.
 Ejemplo: Proposición
de asignación
Identificador
posición
= expresión
expresión
identificador
+ expresión
inicial
expresión
identificador
* expresión
velocidad
Número
60
Estructura y fases de un
compilador (4)
 La estructura jerárquica de un programa normalmente se
expresa utilizando reglas recursivas. Para el ejemplo anterior de
la proposición de asignación se tiene:
 Cualquier identificador es una expresión
 Cualquier número es una expresión
 Si expresión1 y expresión2 son expresiones, entonces también lo
son:
 expresión1 + expresión2
 expresión1 * expresión2
 (expresión1)
Proposición
de asignación
Identificador
posicion
= expresión
expresión
identificador
+ expresión
inicial
expresión
identificador
* expresión
velocidad
Número
60
Estructura y fases de un
compilador (5)
 Muchos lenguajes definen recursivamente las proposiciones
mediante reglas como:
 Si identificador1 es un identificador y expresión2 es un
identificador, entonces:
 Identificador1 = expresión2
 Si expresión1 es una expresión y proposición2 es una
proposición, entonces:
 while ( expresión1 ) do proposición2
 if ( expresión1 ) then proposición2
 El análisis lineal (léxico) no es suficientemente poderoso para
analizar proposiciones o expresiones recursivas.
 Cuándo una construcción del lenguaje fuente es recursiva,
entonces es factible emplear una gramática libre de contexto
para formalizar la recursión.
Estructura y fases de un
compilador (6)
 Análisis semántico
 Revisa el programa e intenta encontrar errores semánticos.
 Reúne la información sobre los tipos para la fase posterior de
generación de código.
 Un componente importante es la verificación de tipos.
 Se verifica si cada operador tiene los operandos permitidos.
 Un real no debe utilizarse como índice de un arreglo.
 Convertir un número entero a real para algunos operadores.
Estructura y fases de un
compilador (7)
 Conceptualmente un compilador opera en fases, cada una de las
cuales transforma al programa fuente de una representación a otra.
Analizador léxico
Programa fuente
Analizador sintáctico
Analizador semántico
Generador de
código intermedio
Optimizador de código
Generador de código
Programa objeto
Manejador
de errores
Administrador de la
Tabla de símbolos
Estructura y fases de un
compilador (8)
 Administración de la tabla de símbolos
 Registra los identificadores e información referente
a ellos.
 Se tiene un registro por cada identificador.
 Todas las fases hacen uso de esta tabla.
 Detección e información de errores
 En cada fase se pueden encontrar errores.
 Se debe definir como se deben tratar los errores
en cada una de las fases.
 Las fases de análisis
 Cambian la representación interna del programa
fuente conforme avanza cada una de ellas.
 Generación de código intermedio
 Se puede considerar como código para una
máquina abstracta.
 Dicha representación debe ser fácil de producir y
fácil de traducir al código objeto.
 Optimización de código
 Trata de mejorar el código intermedio de modo
que resulte un código máquina más rápido de
ejecutar.
 Generación de código
 Por lo general se trata de código máquina
relocalizable o código ensamblador.
 Se deben seleccionar posiciones de memoria para
cada una de las variables.
posicion = inicial + velocidad * 60
Analizador léxico
id1 = id2 + id3 * 60
Analizador sintáctico
=
id1 +
id2 *
id3 60
Analizador semántico
=
id1 +
id2 *
id3 ent a real
60
Generador de código intermedio
temp1 = entreal(60)
temp2 = id3 * temp1
temp3
= id2
+temp2
Id1 = temp3
Optimizador de código
temp1 = id3 * 60.0
temp2 = id2 +temp1
Id1 = temp2
Generador de código
MOVF id3, R2
MULF #60.0, R2
MOVF id2, R1
ADDF R2, R1
MOV R1, id1
TABLA DE SIMBOLOS
posicion …
inicial …
velocidad …
1
2
3
4
Estructura y fases de un
compilador (9)
 Con frecuencia las fases de un compilador
se agrupan en una etapa inicial y una etapa
final:
 Etapa inicial
 Comprende aquellas fases que dependen
principalmente del código fuente.
 Normalmente incluye el análisis léxico,
sintáctico y semántico, la creación de la tabla
de símbolos, la generación de código
intermedio y cierta optimización de éste.
 También incluye el manejo de errores
correspondientes a cada etapa.
 Etapa final
 Comprende aquellas partes del compilador
que dependen de la máquina objeto.
 En general estas partes dependen del
lenguaje intermedio, más que del lenguaje
fuente.
 Comprende aspectos de optimización y
generación de código, junto con el manejo
de errores necesario y las operaciones con
la tabla de símbolos.
CLR Architecture.PNG
Estructura y fases de un
compilador (10)
 Pasadas
 Consiste en leer un archivo de entrada y escribir uno de salida.
 Es común que se apliquen varias fases de la compilación en una
sola pasada
 Reducción de pasadas
 Es deseable tener pocas pasadas dado que la lectura y la escritura
de archivos intermedios lleva tiempo.
 Sin embargo, en ocasiones resulta muy difícil generar código si no
se tiene una representación intermedia completa. Por ejemplo:
 Las instrucciones de tipo goto que saltan hacia delante. En este caso
es posible dejar un espacio en blanco y rellenar cuando la
información esté disponible
Lenguajes y tipos de
traductores
 Un lenguaje de programación se puede definir como:
 Notación formal para describir algoritmos o funciones que serán
ejecutadas por una computadora.
 Lenguaje para comunicar instrucciones a la computadora.
 Convención para escribir descripciones que pueden ser evaluadas.
 Dentro de los atributos de un buen lenguaje están:
 Claridad y sencillez
 Naturalidad para la aplicación
 Apoyo para la abstracción
 Facilidad para verificar programas
 Entorno de programación
 Portabilidad de programas
 Costo de uso
 Costo de ejecución
 Costo de traducción
 Costo de creación y prueba
 Costo de mantenimiento
Lenguajes y tipos de traductores
(2)
 El término general traductor denota cualquier procesador de
lenguajes que acepta programas en cierto lenguaje fuente
como entrada y produce lenguajes funcionalmente equivalentes
en otro lenguaje objeto.
 Varios tipos de traductores tienen nombres especializados:
 Ensamblador
 Compilador
 Cargador o editor de vínculos
 Preprocesador o macroprocesador
 Conversor fuente-fuente
 Simulador o intérprete de software
 Compresores
 Formateadores
Lenguajes y tipos de traductores
(3)
 Se puede hacer una clara división
entre dos tipos de lenguajes:
 Lenguajes compilados
 Ordinariamente se traducen al
lenguaje máquina de la computadora
real que los ejecutará.
 El traductor para estos lenguajes es
relativamente grande y complejo,
además produce código objeto que se
ejecutará con tanta eficiencia como
sea posible
 Lenguajes interpretados
 No producen código para una máquina
real.
 Producen una forma intermedia del
programa cuya ejecución es más fácil
que la ejecución del programa original.
 Ordinariamente la ejecución en un
intérprete de software es más lenta.
 La complejidad de implementación
suele cargarse más en el software de
simulación
Código en C
Precompilador
Compilador
Código objeto
Enlazador
Código máquina
Hardware
Archivos
de Cabecera
Archivos
de Librería
Tiempo
de
compilación
(Traducción)
Código en Java
Compilador
Java
Bytecode Java
Bibliotecas
o
Paquetes
Tiempo
de
ejecución
Red
Cargador de clases
Verificador de
Bytecode
Intérprete Generador
de
Código
JVM Runtime
Hardware
Máquina
virtual
Java
Procesamiento de un
programa en lenguaje C
Procesamiento de un
programa en lenguaje Java
Herramientas para la
construcción de compiladores
 Existen herramientas especializadas
para implementar las diferentes fases
de un compilador.
 Los sistemas de ayuda para construir
compiladores se conocen como:
 Compiladores de compiladores
 Generadores de compiladores
 Sistemas generadores de compiladores
Herramientas para la
construcción de compiladores (2)
 Algunas herramientas útiles para la construcción de
compiladores
 Generadores de analizadores léxicos
 Por lo general, trabajan a partir de una especificación basada en
expresiones regulares.
 La organización básica del analizador léxico resultante es un
autómata finito.
 Generadores de analizadores sintácticos
 Trabajan a partir de una gramática independiente del contexto.
 El generador hace de esta fase una de las más fáciles de aplicar.
 Se utilizan poderosos y complejos algoritmos para realizar el análisis.
 Dispositivos de traducción dirigida por la sintaxis
 Producen grupos de rutinas que recorren el árbol de análisis
sintáctico generando código intermedio.
 Generadores automáticos de código
 Toman un conjunto de reglas que definen la traducción de cada
operación del lenguaje intermedio al lenguaje de máquina objeto.
 La técnica fundamental es la concordancia de plantillas.
Herramientas para la
construcción de compiladores (3)
 Un compilador es muy complejo como para programarlo en
ensamblador.
 En el entorno de programación UNIX, los compiladores se escriben
generalmente en C.
 Se deben utilizar las ventajas del lenguaje para compilarse a sí mismo
(los compiladores de C se escriben en C).
 Sin embargo, un compilador sólo es un programa. El entorno en el que
se desarrolle este programa puede afectar la velocidad y la fiabilidad
de la implantación del compilador.
 La mayoría de las personas que escriben compiladores eligen un
lenguaje orientado a sistemas como C.
Herramientas para la
construcción de compiladores (3)
 La escritura de compiladores, y en general de cualquier herramienta,
tendrá un usuario final. Dicho usuario es quien hace realmente útil al
software. Es necesario aplicar técnicas de ingeniería de software en la
construcción de compiladores para evitar …
Clasificación de los
compiladores
 Una característica que identifica a los compiladores es el hecho
de que traducen completamente el lenguaje fuente de entrada
previo a la ejecución del lenguaje objeto a ejecutar.
 Los compiladores se pueden clasificar por el número de pasadas
en:
 Compilador de una pasada
 Examinan solo una vez el código fuente para generar el código
objeto
 Compiladores de múltiples pasadas
 Requiere de pasos intermedios (código intermedio) antes de generar
el código objeto final.
 Entre menos pasadas menor tiempo de compilación, sin embargo
más pasadas pueden generar código objeto más eficiente.
Clasificación de los
compiladores (2)
 Por el código objeto generado se pueden clasificar en:
 Metacompilador
 Es un programa que acepta como entrada la descripción de
un lenguaje y produce el compilador de dicho lenguaje.
 Por lo regular hay dos tipos de metacompiladores, los que
trabajan con expresiones regulares y aquellos que lo hacen
con gramáticas libres de contexto.
 Ejemplos clásicos son Lex (generador de analizadores
léxicos) y Yacc (generador de analizadores sintácticos).
 Descompilador
 Realiza una tarea de traducción inversa, es decir, va del
código máquina al lenguaje de alto nivel.
 Es relativamente sencillo cuando se trata de ir a código
ensamblador o macro ensamblador, pero no cuando se
quiere llegar a un lenguaje de alto nivel.
Clasificación de los
compiladores (3)
 Compiladores-intérpretes
 Realizan dos fases: la fase de compilación y
la fase de interpretación
 La fase de compilación traduce la entrada en
una representación intermedia por una única
vez.
 La fase de interpretación parte de la
representación generada por la primera fase
para la ejecución del programa.
 Compiladores cruzados
 Surgen como solución al problema de
desarrollar un primer compilador para una
nueva arquitectura.
 Dado que el desarrollo de compiladores es
una tarea compleja, resulta más fácil
construirlos sobre una máquina que ya
disponga de herramientas de software.
 Se denomina compilador cruzado a un
compilador que se ejecuta en una máquina
pero el código objeto es para otra máquina.

Más contenido relacionado

Similar a Compiladores Ex..ppt

Cap4
Cap4Cap4
Cap4CJAO
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladoresCJAO
 
Compiladores y analizador lexicos
Compiladores y analizador lexicosCompiladores y analizador lexicos
Compiladores y analizador lexicosdiana8320
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesIsrael Castillo Cruz
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2perlallamas
 
C:\fakepath\compilador
C:\fakepath\compiladorC:\fakepath\compilador
C:\fakepath\compiladorDLACGP
 
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
 
Algoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionAlgoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionBoris Salleg
 
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
 
Introducción A Compiladores
Introducción A Compiladores Introducción A Compiladores
Introducción A Compiladores Nestor Traña
 
Introducción a Compiladores
Introducción a  CompiladoresIntroducción a  Compiladores
Introducción a CompiladoresLeopoldo Capa
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador FuncionamientoKriz Kozlov
 
Compiladores unidad1
Compiladores unidad1Compiladores unidad1
Compiladores unidad1X3025990
 

Similar a Compiladores Ex..ppt (20)

Cap4
Cap4Cap4
Cap4
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladores
 
Compiladores y analizador lexicos
Compiladores y analizador lexicosCompiladores y analizador lexicos
Compiladores y analizador lexicos
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretes
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
Compiladores (1) pedro vasques
Compiladores (1) pedro vasquesCompiladores (1) pedro vasques
Compiladores (1) pedro vasques
 
C:\fakepath\compilador
C:\fakepath\compiladorC:\fakepath\compilador
C:\fakepath\compilador
 
C:\fakepath\compilador
C:\fakepath\compiladorC:\fakepath\compilador
C:\fakepath\compilador
 
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
 
Algoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionAlgoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacion
 
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)
 
Introducción A Compiladores
Introducción A Compiladores Introducción A Compiladores
Introducción A Compiladores
 
Introducción a Compiladores
Introducción a  CompiladoresIntroducción a  Compiladores
Introducción a Compiladores
 
Traductor y su estructura
Traductor y su estructuraTraductor y su estructura
Traductor y su estructura
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador Funcionamiento
 
Compilador (by BSMM)
Compilador    (by  BSMM)Compilador    (by  BSMM)
Compilador (by BSMM)
 
Resumen1
Resumen1Resumen1
Resumen1
 
Resumencap1 carmen vargas_jeremycamacho
Resumencap1 carmen vargas_jeremycamachoResumencap1 carmen vargas_jeremycamacho
Resumencap1 carmen vargas_jeremycamacho
 
Jin Unidad6
Jin Unidad6Jin Unidad6
Jin Unidad6
 
Compiladores unidad1
Compiladores unidad1Compiladores unidad1
Compiladores unidad1
 

Más de Marko Zapata

REDES INFORMATICAS para la buena elaboracion de las redes empresariales y com...
REDES INFORMATICAS para la buena elaboracion de las redes empresariales y com...REDES INFORMATICAS para la buena elaboracion de las redes empresariales y com...
REDES INFORMATICAS para la buena elaboracion de las redes empresariales y com...Marko Zapata
 
Comunicaciones Satelitales.pptx
Comunicaciones Satelitales.pptxComunicaciones Satelitales.pptx
Comunicaciones Satelitales.pptxMarko Zapata
 
ELEMENTOS DE LA CONFIGURACION DE SOFTWARE.ppt
ELEMENTOS DE LA CONFIGURACION DE SOFTWARE.pptELEMENTOS DE LA CONFIGURACION DE SOFTWARE.ppt
ELEMENTOS DE LA CONFIGURACION DE SOFTWARE.pptMarko Zapata
 
AUDITORIA DE SEGURIDAD.ppsx
AUDITORIA DE  SEGURIDAD.ppsxAUDITORIA DE  SEGURIDAD.ppsx
AUDITORIA DE SEGURIDAD.ppsxMarko Zapata
 
Desarrollo de Proyecto Informatico.ppt
Desarrollo  de  Proyecto Informatico.pptDesarrollo  de  Proyecto Informatico.ppt
Desarrollo de Proyecto Informatico.pptMarko Zapata
 
evaluacion-curricular-22503.pptx
evaluacion-curricular-22503.pptxevaluacion-curricular-22503.pptx
evaluacion-curricular-22503.pptxMarko Zapata
 
GESTION DE CONTRATO.pptx
GESTION DE CONTRATO.pptxGESTION DE CONTRATO.pptx
GESTION DE CONTRATO.pptxMarko Zapata
 
Auditoría informática de sistemas .pptx
Auditoría informática de sistemas .pptxAuditoría informática de sistemas .pptx
Auditoría informática de sistemas .pptxMarko Zapata
 
Automatizacion.pptx
Automatizacion.pptxAutomatizacion.pptx
Automatizacion.pptxMarko Zapata
 
Fundamentos de Caja Intro.pptx
Fundamentos de Caja Intro.pptxFundamentos de Caja Intro.pptx
Fundamentos de Caja Intro.pptxMarko Zapata
 
manejo de caja.pptx
manejo de caja.pptxmanejo de caja.pptx
manejo de caja.pptxMarko Zapata
 

Más de Marko Zapata (16)

REDES INFORMATICAS para la buena elaboracion de las redes empresariales y com...
REDES INFORMATICAS para la buena elaboracion de las redes empresariales y com...REDES INFORMATICAS para la buena elaboracion de las redes empresariales y com...
REDES INFORMATICAS para la buena elaboracion de las redes empresariales y com...
 
LTE COLOMBIA.pptx
LTE COLOMBIA.pptxLTE COLOMBIA.pptx
LTE COLOMBIA.pptx
 
Firewall.pptx
Firewall.pptxFirewall.pptx
Firewall.pptx
 
firmadigital.pptx
firmadigital.pptxfirmadigital.pptx
firmadigital.pptx
 
Comunicaciones Satelitales.pptx
Comunicaciones Satelitales.pptxComunicaciones Satelitales.pptx
Comunicaciones Satelitales.pptx
 
ELEMENTOS DE LA CONFIGURACION DE SOFTWARE.ppt
ELEMENTOS DE LA CONFIGURACION DE SOFTWARE.pptELEMENTOS DE LA CONFIGURACION DE SOFTWARE.ppt
ELEMENTOS DE LA CONFIGURACION DE SOFTWARE.ppt
 
ITIL.pptx
ITIL.pptxITIL.pptx
ITIL.pptx
 
NAI.pptx
NAI.pptxNAI.pptx
NAI.pptx
 
AUDITORIA DE SEGURIDAD.ppsx
AUDITORIA DE  SEGURIDAD.ppsxAUDITORIA DE  SEGURIDAD.ppsx
AUDITORIA DE SEGURIDAD.ppsx
 
Desarrollo de Proyecto Informatico.ppt
Desarrollo  de  Proyecto Informatico.pptDesarrollo  de  Proyecto Informatico.ppt
Desarrollo de Proyecto Informatico.ppt
 
evaluacion-curricular-22503.pptx
evaluacion-curricular-22503.pptxevaluacion-curricular-22503.pptx
evaluacion-curricular-22503.pptx
 
GESTION DE CONTRATO.pptx
GESTION DE CONTRATO.pptxGESTION DE CONTRATO.pptx
GESTION DE CONTRATO.pptx
 
Auditoría informática de sistemas .pptx
Auditoría informática de sistemas .pptxAuditoría informática de sistemas .pptx
Auditoría informática de sistemas .pptx
 
Automatizacion.pptx
Automatizacion.pptxAutomatizacion.pptx
Automatizacion.pptx
 
Fundamentos de Caja Intro.pptx
Fundamentos de Caja Intro.pptxFundamentos de Caja Intro.pptx
Fundamentos de Caja Intro.pptx
 
manejo de caja.pptx
manejo de caja.pptxmanejo de caja.pptx
manejo de caja.pptx
 

Último

Electromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfElectromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfAnonymous0pBRsQXfnx
 
Exposicion. del documentos de YPFB corporación
Exposicion. del documentos de YPFB corporaciónExposicion. del documentos de YPFB corporación
Exposicion. del documentos de YPFB corporaciónjas021085
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones025ca20
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptxGARCIARAMIREZCESAR
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para PlataformasSegundo Silva Maguiña
 
Manual de Usuario Estacion total Sokkia SERIE SET10K.pdf
Manual de Usuario Estacion total Sokkia SERIE SET10K.pdfManual de Usuario Estacion total Sokkia SERIE SET10K.pdf
Manual de Usuario Estacion total Sokkia SERIE SET10K.pdfSandXmovex
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCANDECE
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxLuisvila35
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
COMPONENTES DE LA VIA FERREA UAJMS - BOLIVIA
COMPONENTES DE LA VIA FERREA UAJMS - BOLIVIACOMPONENTES DE LA VIA FERREA UAJMS - BOLIVIA
COMPONENTES DE LA VIA FERREA UAJMS - BOLIVIARafaelPaco2
 
PRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potenciaPRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potenciazacariasd49
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIAMayraOchoa35
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IILauraFernandaValdovi
 
Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfIsbelRodrguez
 
Topografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasTopografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasSegundo Silva Maguiña
 
Conservatorio de danza Kina Jiménez de Almería
Conservatorio de danza Kina Jiménez de AlmeríaConservatorio de danza Kina Jiménez de Almería
Conservatorio de danza Kina Jiménez de AlmeríaANDECE
 
3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptx3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptxJhordanGonzalo
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfMirthaFernandez12
 
Linealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdfLinealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdfrolandolazartep
 

Último (20)

Electromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfElectromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdf
 
Exposicion. del documentos de YPFB corporación
Exposicion. del documentos de YPFB corporaciónExposicion. del documentos de YPFB corporación
Exposicion. del documentos de YPFB corporación
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para Plataformas
 
Manual de Usuario Estacion total Sokkia SERIE SET10K.pdf
Manual de Usuario Estacion total Sokkia SERIE SET10K.pdfManual de Usuario Estacion total Sokkia SERIE SET10K.pdf
Manual de Usuario Estacion total Sokkia SERIE SET10K.pdf
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRC
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
COMPONENTES DE LA VIA FERREA UAJMS - BOLIVIA
COMPONENTES DE LA VIA FERREA UAJMS - BOLIVIACOMPONENTES DE LA VIA FERREA UAJMS - BOLIVIA
COMPONENTES DE LA VIA FERREA UAJMS - BOLIVIA
 
PRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potenciaPRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potencia
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo II
 
Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdf
 
Topografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasTopografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la Ingenierías
 
Conservatorio de danza Kina Jiménez de Almería
Conservatorio de danza Kina Jiménez de AlmeríaConservatorio de danza Kina Jiménez de Almería
Conservatorio de danza Kina Jiménez de Almería
 
3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptx3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptx
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
 
Linealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdfLinealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdf
 

Compiladores Ex..ppt

  • 1. Compiladores Unidad 1. Introducción al proceso de compilación.
  • 2. Contenido  Introducción a la compilación  Estructura y fases de un compilador  Lenguajes y tipos de traductores  Herramientas para el desarrollo de un compilador  Clasificación de los compiladores
  • 3. Introducción a la compilación  La escritura de compiladores comprende los lenguajes de programación, la arquitectura de computadoras, la teoría de lenguajes, los algoritmos y la ingeniería de software [Aho98].
  • 4. Introducción a la compilación (2)  A grandes rasgos, un compilador es un programa que lee un programa escrito en algún lenguaje (fuente) y lo traduce a un programa equivalente en otro lenguaje (objeto).  Una parte importante de éste proceso de traducción es presentar los errores del programa fuente. Programa Fuente Compilador Programa Objeto Mensajes de error
  • 5. Introducción a la compilación (3)  Modelo de análisis y síntesis de la compilación  Fase de análisis  Divide al programa fuente en sus elementos componentes y crea una representación intermedia.  Fase de síntesis  Construye el programa objeto a partir de la representación intermedia.
  • 6. Introducción a la compilación (4)  Existe una gran variedad de software que realiza algún tipo de análisis sobre programas fuente, por ejemplo:  Editores de estructuras  Analiza el texto del programa fuente imponiéndole una estructura jerárquica apropiada.  También puede proporcionar:  Palabras clave de forma automática  Saltos desde un paréntesis, llave, o corchete que abre hasta su correspondiente que cierra.  Ayuda en la edición de las estructuras propias del lenguaje.  Visualizadores estéticos  Imprime el programa fuente de tal forma que visiblemente claro. Por ejemplo:  Los comentarios pueden aparecer con un tipo de letra especial, al igual que las palabras clave.  Indentación proporcional a la profundidad del anidamiento.  Verificadores estáticos  Lee el programa fuente y lo analiza para intentar descubrir errores potenciales sin ejecutar el programa. Por ejemplo:  Partes del programa que nunca se podrán ejecutar.  Si una variable se utiliza antes de ser definida.  Intentar utilizar una variable de tipo real como apuntador.  Intérpretes  En lugar de producir un programa objeto como resultado de una traducción, realiza las operaciones que implica el programa fuente.  En la mayoría de las ocasiones son utilizados para ejecutar órdenes (por ejemplo: el intérprete de comandos).
  • 7. Introducción a la compilación (5)  Tradicionalmente se concibe a un compilador como un programa que recibe un programa fuente, escrito en algún lenguaje de alto nivel, y genera código máquina.  Sin embargo, los principios con los que se construyen compiladores también son utilizados en otros lugares:  Formadores de textos (LaTex).  Intérpretes de consultas (SQL).
  • 8. Introducción a la compilación (6)  El contexto de un compilador  Cuando se requiere generar un objeto ejecutable, el compilador requiere de otros programas. Estructura del programa fuente Preprocesador Programa fuente Compilador Programa objeto en lenguaje ensamblador Ensamblador Código máquina relocalizable Enlazador y cargador Código máquina absoluto Librerías, bibliotecas y Archivos objeto relocalizables
  • 9. Estructura y fases de un compilador  En la compilación el análisis consta de tres fases:  Análisis lineal  La secuencia de caracteres que forma 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 colectivo.  Análisis jerárquico  Los componentes léxicos se agrupan jerárquicamente en colecciones anidadas con un significado colectivo.  Análisis semántico  Se realizan ciertas revisiones para asegurar que los componentes de un programa se ajustan de un modo significativo.
  • 10. Estructura y fases de un compilador (2)  Análisis lineal  También conocido como: análisis léxico o exploración.  Ejemplo, en la proposición de asignación:  posicion = inicial + velocidad * 60  Se identifican los siguientes componentes léxicos  Identificador (posicion)  Símbolo de asignación (=)  Identificador (inicial)  Signo de suma (+)  Identificador (velocidad)  Signo de multiplicación (*)  Número (60)
  • 11. Estructura y fases de un compilador (3)  Análisis jerárquico  También llamado análisis sintáctico.  Implica agrupar los componentes léxicos en frases gramaticales que el compilador utiliza para sintetizar la salida.  Por lo general, las frases gramaticales se representan mediante un árbol de análisis sintáctico.  Ejemplo: Proposición de asignación Identificador posición = expresión expresión identificador + expresión inicial expresión identificador * expresión velocidad Número 60
  • 12. Estructura y fases de un compilador (4)  La estructura jerárquica de un programa normalmente se expresa utilizando reglas recursivas. Para el ejemplo anterior de la proposición de asignación se tiene:  Cualquier identificador es una expresión  Cualquier número es una expresión  Si expresión1 y expresión2 son expresiones, entonces también lo son:  expresión1 + expresión2  expresión1 * expresión2  (expresión1) Proposición de asignación Identificador posicion = expresión expresión identificador + expresión inicial expresión identificador * expresión velocidad Número 60
  • 13. Estructura y fases de un compilador (5)  Muchos lenguajes definen recursivamente las proposiciones mediante reglas como:  Si identificador1 es un identificador y expresión2 es un identificador, entonces:  Identificador1 = expresión2  Si expresión1 es una expresión y proposición2 es una proposición, entonces:  while ( expresión1 ) do proposición2  if ( expresión1 ) then proposición2  El análisis lineal (léxico) no es suficientemente poderoso para analizar proposiciones o expresiones recursivas.  Cuándo una construcción del lenguaje fuente es recursiva, entonces es factible emplear una gramática libre de contexto para formalizar la recursión.
  • 14. Estructura y fases de un compilador (6)  Análisis semántico  Revisa el programa e intenta encontrar errores semánticos.  Reúne la información sobre los tipos para la fase posterior de generación de código.  Un componente importante es la verificación de tipos.  Se verifica si cada operador tiene los operandos permitidos.  Un real no debe utilizarse como índice de un arreglo.  Convertir un número entero a real para algunos operadores.
  • 15. Estructura y fases de un compilador (7)  Conceptualmente un compilador opera en fases, cada una de las cuales transforma al programa fuente de una representación a otra. Analizador léxico Programa fuente Analizador sintáctico Analizador semántico Generador de código intermedio Optimizador de código Generador de código Programa objeto Manejador de errores Administrador de la Tabla de símbolos
  • 16. Estructura y fases de un compilador (8)  Administración de la tabla de símbolos  Registra los identificadores e información referente a ellos.  Se tiene un registro por cada identificador.  Todas las fases hacen uso de esta tabla.  Detección e información de errores  En cada fase se pueden encontrar errores.  Se debe definir como se deben tratar los errores en cada una de las fases.  Las fases de análisis  Cambian la representación interna del programa fuente conforme avanza cada una de ellas.  Generación de código intermedio  Se puede considerar como código para una máquina abstracta.  Dicha representación debe ser fácil de producir y fácil de traducir al código objeto.  Optimización de código  Trata de mejorar el código intermedio de modo que resulte un código máquina más rápido de ejecutar.  Generación de código  Por lo general se trata de código máquina relocalizable o código ensamblador.  Se deben seleccionar posiciones de memoria para cada una de las variables. posicion = inicial + velocidad * 60 Analizador léxico id1 = id2 + id3 * 60 Analizador sintáctico = id1 + id2 * id3 60 Analizador semántico = id1 + id2 * id3 ent a real 60 Generador de código intermedio temp1 = entreal(60) temp2 = id3 * temp1 temp3 = id2 +temp2 Id1 = temp3 Optimizador de código temp1 = id3 * 60.0 temp2 = id2 +temp1 Id1 = temp2 Generador de código MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOV R1, id1 TABLA DE SIMBOLOS posicion … inicial … velocidad … 1 2 3 4
  • 17. Estructura y fases de un compilador (9)  Con frecuencia las fases de un compilador se agrupan en una etapa inicial y una etapa final:  Etapa inicial  Comprende aquellas fases que dependen principalmente del código fuente.  Normalmente incluye el análisis léxico, sintáctico y semántico, la creación de la tabla de símbolos, la generación de código intermedio y cierta optimización de éste.  También incluye el manejo de errores correspondientes a cada etapa.  Etapa final  Comprende aquellas partes del compilador que dependen de la máquina objeto.  En general estas partes dependen del lenguaje intermedio, más que del lenguaje fuente.  Comprende aspectos de optimización y generación de código, junto con el manejo de errores necesario y las operaciones con la tabla de símbolos. CLR Architecture.PNG
  • 18. Estructura y fases de un compilador (10)  Pasadas  Consiste en leer un archivo de entrada y escribir uno de salida.  Es común que se apliquen varias fases de la compilación en una sola pasada  Reducción de pasadas  Es deseable tener pocas pasadas dado que la lectura y la escritura de archivos intermedios lleva tiempo.  Sin embargo, en ocasiones resulta muy difícil generar código si no se tiene una representación intermedia completa. Por ejemplo:  Las instrucciones de tipo goto que saltan hacia delante. En este caso es posible dejar un espacio en blanco y rellenar cuando la información esté disponible
  • 19. Lenguajes y tipos de traductores  Un lenguaje de programación se puede definir como:  Notación formal para describir algoritmos o funciones que serán ejecutadas por una computadora.  Lenguaje para comunicar instrucciones a la computadora.  Convención para escribir descripciones que pueden ser evaluadas.  Dentro de los atributos de un buen lenguaje están:  Claridad y sencillez  Naturalidad para la aplicación  Apoyo para la abstracción  Facilidad para verificar programas  Entorno de programación  Portabilidad de programas  Costo de uso  Costo de ejecución  Costo de traducción  Costo de creación y prueba  Costo de mantenimiento
  • 20. Lenguajes y tipos de traductores (2)  El término general traductor denota cualquier procesador de lenguajes que acepta programas en cierto lenguaje fuente como entrada y produce lenguajes funcionalmente equivalentes en otro lenguaje objeto.  Varios tipos de traductores tienen nombres especializados:  Ensamblador  Compilador  Cargador o editor de vínculos  Preprocesador o macroprocesador  Conversor fuente-fuente  Simulador o intérprete de software  Compresores  Formateadores
  • 21. Lenguajes y tipos de traductores (3)  Se puede hacer una clara división entre dos tipos de lenguajes:  Lenguajes compilados  Ordinariamente se traducen al lenguaje máquina de la computadora real que los ejecutará.  El traductor para estos lenguajes es relativamente grande y complejo, además produce código objeto que se ejecutará con tanta eficiencia como sea posible  Lenguajes interpretados  No producen código para una máquina real.  Producen una forma intermedia del programa cuya ejecución es más fácil que la ejecución del programa original.  Ordinariamente la ejecución en un intérprete de software es más lenta.  La complejidad de implementación suele cargarse más en el software de simulación Código en C Precompilador Compilador Código objeto Enlazador Código máquina Hardware Archivos de Cabecera Archivos de Librería Tiempo de compilación (Traducción) Código en Java Compilador Java Bytecode Java Bibliotecas o Paquetes Tiempo de ejecución Red Cargador de clases Verificador de Bytecode Intérprete Generador de Código JVM Runtime Hardware Máquina virtual Java Procesamiento de un programa en lenguaje C Procesamiento de un programa en lenguaje Java
  • 22. Herramientas para la construcción de compiladores  Existen herramientas especializadas para implementar las diferentes fases de un compilador.  Los sistemas de ayuda para construir compiladores se conocen como:  Compiladores de compiladores  Generadores de compiladores  Sistemas generadores de compiladores
  • 23. Herramientas para la construcción de compiladores (2)  Algunas herramientas útiles para la construcción de compiladores  Generadores de analizadores léxicos  Por lo general, trabajan a partir de una especificación basada en expresiones regulares.  La organización básica del analizador léxico resultante es un autómata finito.  Generadores de analizadores sintácticos  Trabajan a partir de una gramática independiente del contexto.  El generador hace de esta fase una de las más fáciles de aplicar.  Se utilizan poderosos y complejos algoritmos para realizar el análisis.  Dispositivos de traducción dirigida por la sintaxis  Producen grupos de rutinas que recorren el árbol de análisis sintáctico generando código intermedio.  Generadores automáticos de código  Toman un conjunto de reglas que definen la traducción de cada operación del lenguaje intermedio al lenguaje de máquina objeto.  La técnica fundamental es la concordancia de plantillas.
  • 24. Herramientas para la construcción de compiladores (3)  Un compilador es muy complejo como para programarlo en ensamblador.  En el entorno de programación UNIX, los compiladores se escriben generalmente en C.  Se deben utilizar las ventajas del lenguaje para compilarse a sí mismo (los compiladores de C se escriben en C).  Sin embargo, un compilador sólo es un programa. El entorno en el que se desarrolle este programa puede afectar la velocidad y la fiabilidad de la implantación del compilador.  La mayoría de las personas que escriben compiladores eligen un lenguaje orientado a sistemas como C.
  • 25. Herramientas para la construcción de compiladores (3)  La escritura de compiladores, y en general de cualquier herramienta, tendrá un usuario final. Dicho usuario es quien hace realmente útil al software. Es necesario aplicar técnicas de ingeniería de software en la construcción de compiladores para evitar …
  • 26. Clasificación de los compiladores  Una característica que identifica a los compiladores es el hecho de que traducen completamente el lenguaje fuente de entrada previo a la ejecución del lenguaje objeto a ejecutar.  Los compiladores se pueden clasificar por el número de pasadas en:  Compilador de una pasada  Examinan solo una vez el código fuente para generar el código objeto  Compiladores de múltiples pasadas  Requiere de pasos intermedios (código intermedio) antes de generar el código objeto final.  Entre menos pasadas menor tiempo de compilación, sin embargo más pasadas pueden generar código objeto más eficiente.
  • 27. Clasificación de los compiladores (2)  Por el código objeto generado se pueden clasificar en:  Metacompilador  Es un programa que acepta como entrada la descripción de un lenguaje y produce el compilador de dicho lenguaje.  Por lo regular hay dos tipos de metacompiladores, los que trabajan con expresiones regulares y aquellos que lo hacen con gramáticas libres de contexto.  Ejemplos clásicos son Lex (generador de analizadores léxicos) y Yacc (generador de analizadores sintácticos).  Descompilador  Realiza una tarea de traducción inversa, es decir, va del código máquina al lenguaje de alto nivel.  Es relativamente sencillo cuando se trata de ir a código ensamblador o macro ensamblador, pero no cuando se quiere llegar a un lenguaje de alto nivel.
  • 28. Clasificación de los compiladores (3)  Compiladores-intérpretes  Realizan dos fases: la fase de compilación y la fase de interpretación  La fase de compilación traduce la entrada en una representación intermedia por una única vez.  La fase de interpretación parte de la representación generada por la primera fase para la ejecución del programa.  Compiladores cruzados  Surgen como solución al problema de desarrollar un primer compilador para una nueva arquitectura.  Dado que el desarrollo de compiladores es una tarea compleja, resulta más fácil construirlos sobre una máquina que ya disponga de herramientas de software.  Se denomina compilador cruzado a un compilador que se ejecuta en una máquina pero el código objeto es para otra máquina.