SlideShare una empresa de Scribd logo
1 de 17
COMPILADORES
Autor:
PEDRO ANTONIO VASQUEZ CASTELLANOS
CÓDIGO: 1094164397
Tutor (a):
Ing. MILIAN YANETH CARDENAS
Cúcuta, Abril 2014
COMPILADORES
Autor:
PEDRO ANTONIO VASQUEZ CASTELLANOS
CÓDIGO: 1094164397
Tutor (a):
Ing. MILIAN YANETH CARDENAS
Materia compiladores
Carrera ingeniería de sistemas
Vi semestre
Cúcuta, abril 2014
TABLA DE CONTENIDO
INTRODUCCIÓN
JUSTIFICACIÓN
OBJETIVOS
OBJETIVO GENERAL
OBJETIVOS ESPECÍFICOS
1. QUE ES UN COMPILADOR
2. FASES DE UN COMPILADOR
2.1 Fase de análisis.
2.1.1 Análisis léxico
2.1.2 Análisis sintáctico
2.1.3 Análisis semántico
2.2 Fase de síntesis
2.3 Generación de código intermedio
2.4 Optimización de código
3. Analizador léxico
4. AUTÓMATA FINITO
5. AUTÓMATA DE PILA
6. DIAGRAMA DE ESTADOS
7. MÁQUINA DE PILA
CONCLUSIONES
BIBLIOGRAFÍA
INTRODUCCIÓN
Los compiladores en la actualidad están siendo importante en la conquista del mundo,
en cada una de las cosas que están presente en nuestra vida lo podemos encontrar en el trabajo en
cada una de las situaciones que nos encontramos pues encontramos en los ratones y teclados de
los computadores que funcionan como programas que facilitan que las personas lo puedan
interpretar de una manera más sencilla.
En un comienzo las maquinas solo se encargaban de ejecutar instrucciones que solo se
basaban en códigos numéricos que señalaban cada una de las operaciones que se realizaban por
lo cual este primer leguaje se llamaba lenguaje de máquina que se daba a través de un
microprograma que muy poco se entendía y gracias a esto se ha ido evolucionando hasta llegar a
los compiladores que hay hoy en día con una forma más sencilla para las personas que lo usan.
JUSTIFICACIÓN
Es de gran importancia dado que los lenguajes de los humanos es mucho mas abstracto
y son pocos precisos lo cual no se hacen aptos para una comunicación con los computadores por
lo que se hace necesario establecer una comunicación entre los humanos y los computadores con
un prototipo conocido como lenguaje de programación, el cual se puede definir como un
conjunto de notaciones usadas para describir procesos computacionales a las personas y los
programas en la importancia que se radica en que han ayudado a construir el mundo actual que
conocemos basado en el computador, esto debido a que todo el software existente en un
computador debe ser escrito en algún lenguaje de programación con lo que conocemos con el
nombre de compiladores.
En la actualidad la importancia de los compiladores durante el desarrollo académico y
profesional de una persona que hace uso de las ciencias de la computación, es importante que se
comprenda los principios fundamentales de cómo diseñar e implementar los mismos, para esto se
le dotará de las ideas básicas que le permitan construir un compilador o interprete, sin importar el
lenguaje o máquina para la cual se haga.
OBJETIVOS
OBJETIVO GENERAL
Investigar acerca de los usos y compiladores que existen en la actualidad
OBJETIVOS ESPECÍFICOS
Conocer que es un compilador y para que nos sirve.
Establecer las funciones de un compilador
Investigar las clases de compiladores que hay y para qué sirve cada uno de ellos.
Comprender fundamentos teóricos de la Ciencia Computacional.
1. QUE ES UN COMPILADOR
Un compilador es un programa informático que traduce un programa escrito en
un lenguaje de programación a otro lenguaje de programación, generando un programa
equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje
es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente
texto. Este proceso de traducción se conoce como compilación.
Un compilador es un programa que permite traducir el código fuente de un programa
en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De
esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a
cómo piensa un ser humano, para luego compilarlo a un programa más manejable por una
computadora.
COMPILADORPROGRAMA EN LEGUANJE
FUENTE
PROGRAMA EN LEGUAJE
DESTINO
MENSAJE DE ERROR
2. FASES DE UN COMPILADOR
El proceso de traducción se compone internamente de varias etapas o fases, que realizan
distintas operaciones lógicas. Es útil pensar en estas fases como en piezas separadas dentro del
traductor, y pueden en realidad escribirse como operaciones codificadas separadamente aunque
en la práctica a menudo se integren juntas.
2.1 Fase de análisis.
2.1.1 Análisis léxico
El análisis léxico constituye la primera fase, aquí se lee el programa fuente de izquierda
a derecha y se agrupa en componentes léxicos (tokens), que son secuencias de caracteres que
tienen un significado. Además, todos los espacios en blanco, líneas en blanco, comentarios y
COMPILACION
analisis
generacion
de codigo
sintesis
lexico semanticosintatico
demás información innecesaria se elimina del programa fuente. También se comprueba que los
símbolos del lenguaje (palabras clave, operadores, etc.) se han escrito correctamente.
Como la tarea que realiza el analizador léxico es un caso especial de coincidencia de
patrones, se necesitan los métodos de especificación y reconocimiento de patrones, se usan
principalmente los autómatas finitos que acepten expresiones regulares. Sin embargo, un
analizador léxico también es la parte del traductor que maneja la entrada del código fuente, y
puesto que esta entrada a menudo involucra un importante gasto de tiempo, el analizador léxico
debe funcionar de manera tan eficiente como sea posible.
2.1.2 Análisis sintáctico
En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en frases
gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la
fase anterior es sintácticamente correcto (obedece a la gramática del lenguaje). Por lo general, las
frases gramaticales del programa fuente se representan mediante un árbol de análisis sintáctico.
La estructura jerárquica de un programa normalmente se expresa utilizando
reglas recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definición de
expresiones:
1. Cualquier identificador es una expresión.
2. Cualquier número es una expresión.
3. Si expresión1 y expresión2 son expresiones, entonces también lo son:
expresión1 + expresión2
expresión1 * expresión2
( expresión1 )
Las reglas 1 y 2 son reglas básicas (no recursivas), en tanto que la regla 3 define
expresiones en función de operadores aplicados a otras expresiones.
La división entre análisis léxico y análisis sintáctico es algo arbitraria. Un factor para
determinar la división es si una construcción del lenguaje fuente es inherentemente recursiva o
no. Las construcciones léxicas no requieren recursión, mientras que las construcciones
sintácticas suelen requerirla. No se requiere recursión para reconocer los identificadores, que
suelen ser cadenas de letras y dígitos que comienzan con una letra. Normalmente, se reconocen
los identificadores por el simple examen del flujo de entrada, esperando hasta encontrar un
carácter que no sea ni letra ni dígito, y agrupando después todas las letras y dígitos encontrados
hasta ese punto en un componente léxico llamado identificador. Por otra parte, esta clase de
análisis no es suficientemente poderoso para analizar expresiones o proposiciones. Por ejemplo,
no podemos emparejar de manera apropiada los paréntesis de las expresiones, o las
palabras begin y end en proposiciones sin imponer alguna clase de estructura jerárquica o de
anidamiento a la entrada.
2.1.3 Análisis semántico
La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores
semánticos y reúne la información sobre los tipos para la fase posterior de generación de código.
En ella se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para
identificar los operadores y operandos de expresiones y proposiciones.
Un componente importante del análisis semántico es la verificación de tipos. Aquí, el
compilador verifica si cada operador tiene operandos permitidos por la especificación del
lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programación requieren
que el compilador indique un error cada vez que se use un número real como índice de
una matriz. Sin embargo, la especificación del lenguaje puede imponer restricciones a los
operandos, por ejemplo, cuando un operador aritmético binario se aplica a un número entero y a
un número real.2
Revisa que los arreglos tengan definido el tamaño correcto.
2.2 Fase de síntesis
Consiste en generar el código objeto equivalente al programa fuente. Sólo se genera
código objeto cuando el programa fuente está libre de errores de análisis, lo cual no quiere decir
que el programa se ejecute correctamente, ya que un programa puede tener errores de concepto o
expresiones mal calculadas. Por lo general el código objeto es código de máquina relocalizable o
código ensamblador. Las posiciones de memoria se seleccionan para cada una de las variables
usadas por el programa. Después, cada una de las instrucciones intermedias se traduce a una
secuencia de instrucciones de máquina que ejecuta la misma tarea. Un aspecto decisivo es la
asignación de variables a registros.
2.3 Generación de código intermedio
Después de los análisis sintáctico y semántico, algunos compiladores generan una
representación intermedia explícita del programa fuente. Se puede considerar esta representación
intermedia como un programa para una máquina abstracta. Esta representación intermedia debe
tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa
objeto.
La representación intermedia puede tener diversas formas. Existe una forma intermedia
llamada «código de tres direcciones» que es como el lenguaje ensamblador de una máquina en la
que cada posición de memoria puede actuar como un registro. El código de tres direcciones
consiste en una secuencia de instrucciones, cada una de las cuales tiene como máximo tres
operandos. Esta representación intermedia tiene varias propiedades:
 Primera.- Cada instrucción de tres direcciones tiene a lo sumo un operador,
además de la asignación, por tanto, cuando se generan estas instrucciones, el traductor tiene
que decidir el orden en que deben efectuarse las operaciones.
 Segunda.- El traductor debe generar un nombre temporal para guardar los valores
calculados por cada instrucción.
 Tercera.- Algunas instrucciones de «tres direcciones» tienen menos de tres
operandos, por ejemplo, la asignación.
2.4 Optimización de código
La fase de optimización de código consiste en mejorar el código intermedio, de modo
que resulte un código máquina más rápido de ejecutar. Esta fase de la etapa de síntesis es posible
sobre todo si el traductor es un compilador (difícilmente un intérprete puede optimizar el código
objeto). Hay mucha variación en la cantidad de optimización de código que ejecutan los distintos
compiladores. En los que hacen mucha optimización, llamados «compiladores optimizadores»,
una parte significativa del tiempo del compilador se ocupa en esta fase. Sin embargo, hay
optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecución del programa objeto
sin retardar demasiado la compilación.
3. Analizador léxico
Un analizador léxico y/o analizador lexicográfico (en inglés scanner) es la primera fase
de un compilador consistente en un programa que recibe como entrada el código fuente de otro
programa (secuencia de caracteres) y produce una salida compuesta de tokens (componentes
léxicos) o símbolos. Estos tokens sirven para una posterior etapa del proceso de traducción,
siendo la entrada para el analizador sintáctico (en inglés parser).
La especificación de un lenguaje de programación a menudo incluye un conjunto de reglas que
definen el léxico. Estas reglas consisten comumente en expresiones regularesque indican el
conjunto de posibles secuencias de caracteres que definen un token o lexema.
En algunos lenguajes de programación es necesario establecer patrones para caracteres
especiales (como el espacio en blanco) que la gramática pueda reconocer sin que constituya un
token en sí.
4. AUTÓMATA FINITO
Un autómata finito (AF) o máquina de estado finito es un modelo computacional que
realiza cómputos en forma automática sobre una entrada para producir una salida.
Este modelo está conformado por un alfabeto, un conjunto de estados y un conjunto de
transiciones entre dichos estados. Su funcionamiento se basa en una función de transición, que
recibe a partir de un estado inicial unos caracteres pertenecientes al alfabeto (la entrada), y que
va leyendo dicha cadena a medida que el autómata se desplaza de un estado a otro, para
finalmente detenerse en un estado final o de aceptación, que representa la salida.
La finalidad de los autómatas finitos es la de reconocer lenguajes regulares, que
corresponden a los lenguajes formales más simples según la Jerarquía de Chomsky.
5. AUTÓMATA DE PILA
Son máquinas idénticas a los AFD (o AFI), exceptuando el hecho de que disponen de
una memoria adicional, haciendo uso de una pila. La función de transición ahora dependerá
también de los símbolos que se encuentren al principio de la pila. Esta función determinará como
cambia la pila en cada transición. Este tipo de autómatas aceptan los lenguajes independientes
del contexto.
6. DIAGRAMA DE ESTADOS
Un diagrama de estados muestra el flujo de control entre estados (en qué estados
posibles puede estar “cierto algo” y como se producen los cambios entre dichos estados). Una
máquina de estados es un comportamiento que especifica las secuencias de estados por las que
pasa un objeto a lo largo de su vida en respuesta a eventos, junto con sus respuestas a esos
eventos.
7. MÁQUINA DE PILA
Una máquina de pila es un modelo computacional en el cual la memoria de la
computadora toma la forma de una o más pilas. El término también se refiere a un computador
real implementando o simulando una máquina de pila idealizada.
Adicionalmente, una máquina de pila también puede referirse a una máquina verdadera
o simulada con un conjunto de instrucciones de "0 operandos". En tal máquina, la mayoría de las
instrucciones implícitamente operan en valores en el tope de la pila y reemplazan esos valores
por el resultado. Típicamente tales máquinas también tienen una instrucción "load" y una
instrucción "store" que leen y escriben a posiciones arbitrarias de la RAM. (Como el resto de las
instrucciones, las instrucciones "load" y "store" no necesitan ningún operando en una máquina de
pila típica - ellas siempre toman la dirección de la RAM que se quiere leer o escribir desde el
tope de la pila).
La ventaja de las máquinas de pila ("conjunto de instrucciones de 0 operandos") sobre
las máquinas de acumulador ("conjunto de instrucciones de 1 operando") y las máquinas de
registro ("conjunto de instrucciones de 2 operandos" o un "conjunto de instrucciones de 3
operandos") es que los programas escritos para un conjunto de instrucciones de "0 operandos"
generalmente tienen una densidad de código más alta que los programas equivalentes escritos
para otros conjuntos de instrucciones.
CONCLUSIONES
Un compilador es un programa que vuelve lenguajes escritos o lenguajes de
programación, el mismo genera un programa que la maquina es capaz de descifrar. Este proceso
de traducción se conoce como compilador.
Los compiladores para lenguajes de alto nivel tienen muchas fases, en las que
progresivamente se va transformando un texto de un lenguaje a otro.
BIBLIOGRAFÍA
[ANECA 2005] ANECA; (2005) Libro blanco del Título de grado en Ingeniería Informática.
(http://www.aneca.es/modal_eval/docs/libroblanco_informatica.pdf).
[Brusilovsky 1996] Brusilovsky, Peter, and Weber, G., 1996: “Collaborative example selection in
an intelligent example-based programming environment”, Procs. of the International Conference
on Learning Sciences.
Compiladores: Conceptos Fundamentales. B. Teufel, S. Schmidt, T. Teufel. Addison Wesley
Iberoamericana.
Compiladores, Principios, técnicas y herramientas, Alfred V. Aho, Ravi Sethi, Jeffrey D.
Ullman. Addison Wesley iberoamericana.

Más contenido relacionado

La actualidad más candente

3.4 Sintaxis de las reglas de producción.pptx
3.4 Sintaxis de las reglas de producción.pptx3.4 Sintaxis de las reglas de producción.pptx
3.4 Sintaxis de las reglas de producción.pptxRam Vazquez
 
Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.Yamilee Valerio
 
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_
 
Tareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosTareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosnenyta08
 
Generaciones de los sistemas operativos
Generaciones de los sistemas operativosGeneraciones de los sistemas operativos
Generaciones de los sistemas operativosKenneth Tacuri Mora
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2perlallamas
 
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
 
COMPILADORES-Tabla de Simbolos
COMPILADORES-Tabla de SimbolosCOMPILADORES-Tabla de Simbolos
COMPILADORES-Tabla de SimbolosLilian León Meza
 
Maquina de turing y resolubilidad e Irresolubilidad
Maquina de turing y resolubilidad e IrresolubilidadMaquina de turing y resolubilidad e Irresolubilidad
Maquina de turing y resolubilidad e Irresolubilidadlluis31
 
Control de concurrencias investigación
Control de concurrencias investigaciónControl de concurrencias investigación
Control de concurrencias investigaciónJhoel Dgez Garcia
 
Fundamentos de Telecomunicaciones Unidad 5 Dispositivos de Comunicación
Fundamentos de TelecomunicacionesUnidad 5 Dispositivos de ComunicaciónFundamentos de TelecomunicacionesUnidad 5 Dispositivos de Comunicación
Fundamentos de Telecomunicaciones Unidad 5 Dispositivos de ComunicaciónJosé Antonio Sandoval Acosta
 
La maquina de Turing, sus tipos y aplicaciones.
La maquina de Turing, sus tipos y aplicaciones.La maquina de Turing, sus tipos y aplicaciones.
La maquina de Turing, sus tipos y aplicaciones.Emmanuel Colon
 

La actualidad más candente (20)

3.4 Sintaxis de las reglas de producción.pptx
3.4 Sintaxis de las reglas de producción.pptx3.4 Sintaxis de las reglas de producción.pptx
3.4 Sintaxis de las reglas de producción.pptx
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
 
Lenguajes de una maquina de turing
Lenguajes de una maquina de turingLenguajes de una maquina de turing
Lenguajes de una maquina de turing
 
Los 10 Principios Heurísticos de Nielsen
Los  10 Principios Heurísticos de Nielsen Los  10 Principios Heurísticos de Nielsen
Los 10 Principios Heurísticos de Nielsen
 
Compilador
CompiladorCompilador
Compilador
 
Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.
 
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
 
Tareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosTareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientos
 
Tabla de símbolos
Tabla de símbolosTabla de símbolos
Tabla de símbolos
 
Generaciones de los sistemas operativos
Generaciones de los sistemas operativosGeneraciones de los sistemas operativos
Generaciones de los sistemas operativos
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
Análisis Semántico con Cup
Análisis Semántico con CupAnálisis Semántico con Cup
Análisis Semántico con Cup
 
COMPILADORES-Tabla de Simbolos
COMPILADORES-Tabla de SimbolosCOMPILADORES-Tabla de Simbolos
COMPILADORES-Tabla de Simbolos
 
Maquina de turing y resolubilidad e Irresolubilidad
Maquina de turing y resolubilidad e IrresolubilidadMaquina de turing y resolubilidad e Irresolubilidad
Maquina de turing y resolubilidad e Irresolubilidad
 
Control de concurrencias investigación
Control de concurrencias investigaciónControl de concurrencias investigación
Control de concurrencias investigación
 
Fundamentos de Telecomunicaciones Unidad 5 Dispositivos de Comunicación
Fundamentos de TelecomunicacionesUnidad 5 Dispositivos de ComunicaciónFundamentos de TelecomunicacionesUnidad 5 Dispositivos de Comunicación
Fundamentos de Telecomunicaciones Unidad 5 Dispositivos de Comunicación
 
PSeInt
PSeIntPSeInt
PSeInt
 
Monografia de pipeline
Monografia de pipelineMonografia de pipeline
Monografia de pipeline
 
La maquina de Turing, sus tipos y aplicaciones.
La maquina de Turing, sus tipos y aplicaciones.La maquina de Turing, sus tipos y aplicaciones.
La maquina de Turing, sus tipos y aplicaciones.
 

Similar a Compiladores (1) pedro vasques

Compiladores y analizador lexicos
Compiladores y analizador lexicosCompiladores y analizador lexicos
Compiladores y analizador lexicosdiana8320
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1udalrico
 
Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iRossana Sosa
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraAlexandraMolinaSanchez
 
Compiladores unidad1
Compiladores unidad1Compiladores unidad1
Compiladores unidad1X3025990
 
Introduccion a la Programación I parte
Introduccion a la Programación I parte Introduccion a la Programación I parte
Introduccion a la Programación I parte Yelixa Araque Angulo
 
Introduccion a la programación I Parte
Introduccion a la programación I Parte Introduccion a la programación I Parte
Introduccion a la programación I Parte Yelixa Araque Angulo
 
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
 
Manual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfManual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfDavidErnestoT
 
Clase 1 de introduccion a la programacion
Clase 1 de introduccion a la programacionClase 1 de introduccion a la programacion
Clase 1 de introduccion a la programacionjoel210696
 

Similar a Compiladores (1) pedro vasques (20)

Compiladores y analizador lexicos
Compiladores y analizador lexicosCompiladores y analizador lexicos
Compiladores y analizador lexicos
 
Proyecto fernando compiladores 1
Proyecto fernando compiladores 1Proyecto fernando compiladores 1
Proyecto fernando compiladores 1
 
Resumen1
Resumen1Resumen1
Resumen1
 
Evolucion de los compiladores1
Evolucion de los compiladores1Evolucion de los compiladores1
Evolucion de los compiladores1
 
Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes i
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Resumencap1 carmen vargas_jeremycamacho
Resumencap1 carmen vargas_jeremycamachoResumencap1 carmen vargas_jeremycamacho
Resumencap1 carmen vargas_jeremycamacho
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandra
 
Compiladores unidad1
Compiladores unidad1Compiladores unidad1
Compiladores unidad1
 
Introduccion a la Programación I parte
Introduccion a la Programación I parte Introduccion a la Programación I parte
Introduccion a la Programación I parte
 
Introduccion a la programación I Parte
Introduccion a la programación I Parte Introduccion a la programación I Parte
Introduccion a la programación I Parte
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Traductor y su estructura
Traductor y su estructuraTraductor y su estructura
Traductor y su estructura
 
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
 
Unidad1 2 Lenguajes y automatas
Unidad1 2  Lenguajes y automatasUnidad1 2  Lenguajes y automatas
Unidad1 2 Lenguajes y automatas
 
Programacion
ProgramacionProgramacion
Programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
Manual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfManual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdf
 
Clase 1 de introduccion a la programacion
Clase 1 de introduccion a la programacionClase 1 de introduccion a la programacion
Clase 1 de introduccion a la programacion
 

Compiladores (1) pedro vasques

  • 1. COMPILADORES Autor: PEDRO ANTONIO VASQUEZ CASTELLANOS CÓDIGO: 1094164397 Tutor (a): Ing. MILIAN YANETH CARDENAS Cúcuta, Abril 2014
  • 2. COMPILADORES Autor: PEDRO ANTONIO VASQUEZ CASTELLANOS CÓDIGO: 1094164397 Tutor (a): Ing. MILIAN YANETH CARDENAS Materia compiladores Carrera ingeniería de sistemas Vi semestre Cúcuta, abril 2014
  • 3. TABLA DE CONTENIDO INTRODUCCIÓN JUSTIFICACIÓN OBJETIVOS OBJETIVO GENERAL OBJETIVOS ESPECÍFICOS 1. QUE ES UN COMPILADOR 2. FASES DE UN COMPILADOR 2.1 Fase de análisis. 2.1.1 Análisis léxico 2.1.2 Análisis sintáctico 2.1.3 Análisis semántico 2.2 Fase de síntesis 2.3 Generación de código intermedio 2.4 Optimización de código 3. Analizador léxico 4. AUTÓMATA FINITO 5. AUTÓMATA DE PILA 6. DIAGRAMA DE ESTADOS 7. MÁQUINA DE PILA CONCLUSIONES BIBLIOGRAFÍA
  • 4. INTRODUCCIÓN Los compiladores en la actualidad están siendo importante en la conquista del mundo, en cada una de las cosas que están presente en nuestra vida lo podemos encontrar en el trabajo en cada una de las situaciones que nos encontramos pues encontramos en los ratones y teclados de los computadores que funcionan como programas que facilitan que las personas lo puedan interpretar de una manera más sencilla. En un comienzo las maquinas solo se encargaban de ejecutar instrucciones que solo se basaban en códigos numéricos que señalaban cada una de las operaciones que se realizaban por lo cual este primer leguaje se llamaba lenguaje de máquina que se daba a través de un microprograma que muy poco se entendía y gracias a esto se ha ido evolucionando hasta llegar a los compiladores que hay hoy en día con una forma más sencilla para las personas que lo usan.
  • 5. JUSTIFICACIÓN Es de gran importancia dado que los lenguajes de los humanos es mucho mas abstracto y son pocos precisos lo cual no se hacen aptos para una comunicación con los computadores por lo que se hace necesario establecer una comunicación entre los humanos y los computadores con un prototipo conocido como lenguaje de programación, el cual se puede definir como un conjunto de notaciones usadas para describir procesos computacionales a las personas y los programas en la importancia que se radica en que han ayudado a construir el mundo actual que conocemos basado en el computador, esto debido a que todo el software existente en un computador debe ser escrito en algún lenguaje de programación con lo que conocemos con el nombre de compiladores. En la actualidad la importancia de los compiladores durante el desarrollo académico y profesional de una persona que hace uso de las ciencias de la computación, es importante que se comprenda los principios fundamentales de cómo diseñar e implementar los mismos, para esto se le dotará de las ideas básicas que le permitan construir un compilador o interprete, sin importar el lenguaje o máquina para la cual se haga.
  • 6. OBJETIVOS OBJETIVO GENERAL Investigar acerca de los usos y compiladores que existen en la actualidad OBJETIVOS ESPECÍFICOS Conocer que es un compilador y para que nos sirve. Establecer las funciones de un compilador Investigar las clases de compiladores que hay y para qué sirve cada uno de ellos. Comprender fundamentos teóricos de la Ciencia Computacional.
  • 7. 1. QUE ES UN COMPILADOR Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación. Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a cómo piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora. COMPILADORPROGRAMA EN LEGUANJE FUENTE PROGRAMA EN LEGUAJE DESTINO MENSAJE DE ERROR
  • 8. 2. FASES DE UN COMPILADOR El proceso de traducción se compone internamente de varias etapas o fases, que realizan distintas operaciones lógicas. Es útil pensar en estas fases como en piezas separadas dentro del traductor, y pueden en realidad escribirse como operaciones codificadas separadamente aunque en la práctica a menudo se integren juntas. 2.1 Fase de análisis. 2.1.1 Análisis léxico El análisis léxico constituye la primera fase, aquí se lee el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (tokens), que son secuencias de caracteres que tienen un significado. Además, todos los espacios en blanco, líneas en blanco, comentarios y COMPILACION analisis generacion de codigo sintesis lexico semanticosintatico
  • 9. demás información innecesaria se elimina del programa fuente. También se comprueba que los símbolos del lenguaje (palabras clave, operadores, etc.) se han escrito correctamente. Como la tarea que realiza el analizador léxico es un caso especial de coincidencia de patrones, se necesitan los métodos de especificación y reconocimiento de patrones, se usan principalmente los autómatas finitos que acepten expresiones regulares. Sin embargo, un analizador léxico también es la parte del traductor que maneja la entrada del código fuente, y puesto que esta entrada a menudo involucra un importante gasto de tiempo, el analizador léxico debe funcionar de manera tan eficiente como sea posible. 2.1.2 Análisis sintáctico En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es sintácticamente correcto (obedece a la gramática del lenguaje). Por lo general, las frases gramaticales del programa fuente se representan mediante un árbol de análisis sintáctico. La estructura jerárquica de un programa normalmente se expresa utilizando reglas recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definición de expresiones: 1. Cualquier identificador es una expresión. 2. Cualquier número es una expresión. 3. Si expresión1 y expresión2 son expresiones, entonces también lo son: expresión1 + expresión2 expresión1 * expresión2
  • 10. ( expresión1 ) Las reglas 1 y 2 son reglas básicas (no recursivas), en tanto que la regla 3 define expresiones en función de operadores aplicados a otras expresiones. La división entre análisis léxico y análisis sintáctico es algo arbitraria. Un factor para determinar la división es si una construcción del lenguaje fuente es inherentemente recursiva o no. Las construcciones léxicas no requieren recursión, mientras que las construcciones sintácticas suelen requerirla. No se requiere recursión para reconocer los identificadores, que suelen ser cadenas de letras y dígitos que comienzan con una letra. Normalmente, se reconocen los identificadores por el simple examen del flujo de entrada, esperando hasta encontrar un carácter que no sea ni letra ni dígito, y agrupando después todas las letras y dígitos encontrados hasta ese punto en un componente léxico llamado identificador. Por otra parte, esta clase de análisis no es suficientemente poderoso para analizar expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera apropiada los paréntesis de las expresiones, o las palabras begin y end en proposiciones sin imponer alguna clase de estructura jerárquica o de anidamiento a la entrada. 2.1.3 Análisis semántico La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones. Un componente importante del análisis semántico es la verificación de tipos. Aquí, el compilador verifica si cada operador tiene operandos permitidos por la especificación del
  • 11. lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programación requieren que el compilador indique un error cada vez que se use un número real como índice de una matriz. Sin embargo, la especificación del lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un operador aritmético binario se aplica a un número entero y a un número real.2 Revisa que los arreglos tengan definido el tamaño correcto. 2.2 Fase de síntesis Consiste en generar el código objeto equivalente al programa fuente. Sólo se genera código objeto cuando el programa fuente está libre de errores de análisis, lo cual no quiere decir que el programa se ejecute correctamente, ya que un programa puede tener errores de concepto o expresiones mal calculadas. Por lo general el código objeto es código de máquina relocalizable o código ensamblador. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Después, cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de máquina que ejecuta la misma tarea. Un aspecto decisivo es la asignación de variables a registros. 2.3 Generación de código intermedio Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita del programa fuente. Se puede considerar esta representación intermedia como un programa para una máquina abstracta. Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto.
  • 12. La representación intermedia puede tener diversas formas. Existe una forma intermedia llamada «código de tres direcciones» que es como el lenguaje ensamblador de una máquina en la que cada posición de memoria puede actuar como un registro. El código de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como máximo tres operandos. Esta representación intermedia tiene varias propiedades:  Primera.- Cada instrucción de tres direcciones tiene a lo sumo un operador, además de la asignación, por tanto, cuando se generan estas instrucciones, el traductor tiene que decidir el orden en que deben efectuarse las operaciones.  Segunda.- El traductor debe generar un nombre temporal para guardar los valores calculados por cada instrucción.  Tercera.- Algunas instrucciones de «tres direcciones» tienen menos de tres operandos, por ejemplo, la asignación. 2.4 Optimización de código La fase de optimización de código consiste en mejorar el código intermedio, de modo que resulte un código máquina más rápido de ejecutar. Esta fase de la etapa de síntesis es posible sobre todo si el traductor es un compilador (difícilmente un intérprete puede optimizar el código objeto). Hay mucha variación en la cantidad de optimización de código que ejecutan los distintos compiladores. En los que hacen mucha optimización, llamados «compiladores optimizadores», una parte significativa del tiempo del compilador se ocupa en esta fase. Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecución del programa objeto sin retardar demasiado la compilación.
  • 13. 3. Analizador léxico Un analizador léxico y/o analizador lexicográfico (en inglés scanner) es la primera fase de un compilador consistente en un programa que recibe como entrada el código fuente de otro programa (secuencia de caracteres) y produce una salida compuesta de tokens (componentes léxicos) o símbolos. Estos tokens sirven para una posterior etapa del proceso de traducción, siendo la entrada para el analizador sintáctico (en inglés parser). La especificación de un lenguaje de programación a menudo incluye un conjunto de reglas que definen el léxico. Estas reglas consisten comumente en expresiones regularesque indican el conjunto de posibles secuencias de caracteres que definen un token o lexema. En algunos lenguajes de programación es necesario establecer patrones para caracteres especiales (como el espacio en blanco) que la gramática pueda reconocer sin que constituya un token en sí. 4. AUTÓMATA FINITO Un autómata finito (AF) o máquina de estado finito es un modelo computacional que realiza cómputos en forma automática sobre una entrada para producir una salida. Este modelo está conformado por un alfabeto, un conjunto de estados y un conjunto de transiciones entre dichos estados. Su funcionamiento se basa en una función de transición, que recibe a partir de un estado inicial unos caracteres pertenecientes al alfabeto (la entrada), y que
  • 14. va leyendo dicha cadena a medida que el autómata se desplaza de un estado a otro, para finalmente detenerse en un estado final o de aceptación, que representa la salida. La finalidad de los autómatas finitos es la de reconocer lenguajes regulares, que corresponden a los lenguajes formales más simples según la Jerarquía de Chomsky. 5. AUTÓMATA DE PILA Son máquinas idénticas a los AFD (o AFI), exceptuando el hecho de que disponen de una memoria adicional, haciendo uso de una pila. La función de transición ahora dependerá también de los símbolos que se encuentren al principio de la pila. Esta función determinará como cambia la pila en cada transición. Este tipo de autómatas aceptan los lenguajes independientes del contexto. 6. DIAGRAMA DE ESTADOS Un diagrama de estados muestra el flujo de control entre estados (en qué estados posibles puede estar “cierto algo” y como se producen los cambios entre dichos estados). Una máquina de estados es un comportamiento que especifica las secuencias de estados por las que pasa un objeto a lo largo de su vida en respuesta a eventos, junto con sus respuestas a esos eventos.
  • 15. 7. MÁQUINA DE PILA Una máquina de pila es un modelo computacional en el cual la memoria de la computadora toma la forma de una o más pilas. El término también se refiere a un computador real implementando o simulando una máquina de pila idealizada. Adicionalmente, una máquina de pila también puede referirse a una máquina verdadera o simulada con un conjunto de instrucciones de "0 operandos". En tal máquina, la mayoría de las instrucciones implícitamente operan en valores en el tope de la pila y reemplazan esos valores por el resultado. Típicamente tales máquinas también tienen una instrucción "load" y una instrucción "store" que leen y escriben a posiciones arbitrarias de la RAM. (Como el resto de las instrucciones, las instrucciones "load" y "store" no necesitan ningún operando en una máquina de pila típica - ellas siempre toman la dirección de la RAM que se quiere leer o escribir desde el tope de la pila). La ventaja de las máquinas de pila ("conjunto de instrucciones de 0 operandos") sobre las máquinas de acumulador ("conjunto de instrucciones de 1 operando") y las máquinas de registro ("conjunto de instrucciones de 2 operandos" o un "conjunto de instrucciones de 3 operandos") es que los programas escritos para un conjunto de instrucciones de "0 operandos" generalmente tienen una densidad de código más alta que los programas equivalentes escritos para otros conjuntos de instrucciones.
  • 16. CONCLUSIONES Un compilador es un programa que vuelve lenguajes escritos o lenguajes de programación, el mismo genera un programa que la maquina es capaz de descifrar. Este proceso de traducción se conoce como compilador. Los compiladores para lenguajes de alto nivel tienen muchas fases, en las que progresivamente se va transformando un texto de un lenguaje a otro.
  • 17. BIBLIOGRAFÍA [ANECA 2005] ANECA; (2005) Libro blanco del Título de grado en Ingeniería Informática. (http://www.aneca.es/modal_eval/docs/libroblanco_informatica.pdf). [Brusilovsky 1996] Brusilovsky, Peter, and Weber, G., 1996: “Collaborative example selection in an intelligent example-based programming environment”, Procs. of the International Conference on Learning Sciences. Compiladores: Conceptos Fundamentales. B. Teufel, S. Schmidt, T. Teufel. Addison Wesley Iberoamericana. Compiladores, Principios, técnicas y herramientas, Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. Addison Wesley iberoamericana.