Está en la página 1de 30

Programación

de sistemas

Estructura de un compilador

MC. Eduardo Gasca Figueroa


Departamento de Sistemas y Computación, ITH, Hermosillo, Sonora.
eduardo.gasca@hotmail.com
Temario
Fuentes

• Compiladores principios, técnicas y herramientas


• Compiladores e Interpretes: Teoría y practica.
• Programación de sistemas I
http://sistemas.itlp.edu.mx/tutoriales/progsis1/index.htm
Compiladores

• El software que se ejecuta en todas las


computadoras se escribió en algún lenguaje de
programación. Pero antes de poder ejecutar un
programa debe de traducirse a un formato en
el que una computadora pueda ejecutarlo.

• Los sistemas de software que se encargan de


esta traducción se llaman compiladores.
Compiladores

• Dicho en forma simple, un compilador es un programa


que puede leer un programa en un lenguaje (el
lenguaje fuente) y traducirlo en un programa
equivalente en otro lenguaje (el lenguaje destino).

• Una función importante del compilador es reportar


cualquier error en el programa fuente que detecte
durante el proceso de traducción.
Características de un compilador

• Analiza el programa fuente


• Genera un código equivalente(PO)
– Primera generación
– Segunda generación

• El PO puede guardarse y ejecutarse tantas


varias veces como se quiera sin necesidad de
traducirlo de nuevo.
Lenguajes que compilan

• Entre los lenguajes que usualmente se compilan


podemos citar

• Fortran
• Cobol
• C
• C++
• Pascal
• ADA
Interprete

• Es otro tipo común de procesador de lenguaje.


En vez de producir un programa destino como
una traducción, el interprete nos da la
apariencia de ejecutar directamente las
operaciones especificadas en el programa
origen (fuente) con las entradas
proporcionadas.
Esquema de un interprete
Compilador Vs Interprete

• Los intérpretes se diferencian de los compiladores en que mientras estos


traducen un programa desde su descripción en un lenguaje de programación
al código máquina del sistema destino, los primeros (los interpretes) sólo
realizan la traducción a medida que sea necesario, típicamente, instrucción
por instrucción, y normalmente no guardan el resultado de dicha traducción.

• Los programas interpretados suelen ser más lentos que los compilados
debido a la necesidad de traducir el programa mientras se ejecuta, pero a
cambio son más flexibles como entornos de programación y depuración.

• Por lo regular, el interprete puede ofrecer mejores diagnósticos de error que


un compilador, ya que ejecuta el programa fuente instrucción a instrucción.
• Algunos ejemplos de lenguajes que son normalmente
interpretados en vez de compilados son:

– Perl
– PHP
– Java
– Java script
– Logo
– ASP (hasta la versión 3)
– Python
– C#
– J#
Características de un interprete

• Analiza el programa fuente


– Ejecuta directamente instrucción por instrucción.
• Si se quiere ejecutar necesidad de traducirlo
de nuevo.
Ensambladores

• El término ensamblador (del inglés assembler)


se refiere a un tipo de programa informático
que se encarga de traducir un fichero fuente
escrito en un lenguaje ensamblador, a un
fichero objeto que contiene código máquina,
ejecutable directamente por la máquina para
la que se ha generado.
Ensambladores

• El propósito para el que se crearon este tipo de


aplicaciones es la de facilitar la escritura de
programas, ya que escribir directamente en código
binario, que es el único código entendible por la
computadora, es en la práctica imposible. La
evolución de los lenguajes de programación a partir
del lenguaje ensamblador originó también la
evolución de este programa ensamblador hacia lo
que se conoce como programa compilador.
Funcionamiento ensamblador

• El programa lee el fichero escrito en lenguaje


ensamblador y sustituye cada uno de los
códigos mnemotécnicos que aparecen por su
código de operación correspondiente en
sistema binario.
Compilador - Interprete

• Traduce el programa fuente a un formato o


lenguaje intermedio que después se
interpreta.

• Los procesadores del lenguaje JAVA combinan


la compilacion y la interpretacion.
Como funciona Compilador - interprete

• Un programa fuente puede compilarse primero


en un formato intermedio llamado bycodes.

• Después una maquina virtual los interpreta.

• Ventaja:
– El bycode que se compila en la maquina puede
interpretarse en otra.
Lenguajes Compilador - interprete

Fuente

Interprete

Programa Intermedio
Lenguaje
Interprete Salida
Intermedio Entrada
Sistema de procesamiento de lenguaje

• Además de un compilador puede requerirse


otros programas para la creación de un
programa destino.
Preprocesador Compilador Ensamblado
Archivos de Librería

• Program
• Program • Códi
a
a maq
destino
Fuente a
en
Modific reloc
ensambl
ado able
ador
Preguntas

1. Cual es la diferencia entre un compilador y un interprete?

2. Cuales son las ventajas de un compilador sobre un interprete


y las de un interprete sobre un compilador

3. Que ventajas hay para un sistema de procesamiento de


lenguajes en el cual el compilador produce lenguaje
ensamblador en vez de lenguaje maquina.

4. Describe algunas de las tareas que necesita realizar un


ensamblador.
La estructura de un compilador
Analizador Morfologico o lexico

•     En un compilador, el análisis lineal se llama


análisis lineal o exploración. Por análisis lineal
entendemos la cadena de caracteres que
constituye el programa fuente se lee de
izquierda a derecha y se agrupan en
componentes léxicos, que son secuencias de
caracteres que tiene un significado colectivo
Ejemplo ilustrativo
Consideraciones.

Los espacios en blanco (delimitadores) que


separan los caracteres de estos componentes
léxicos normalmente se eliminan durante el
análisis léxico.
Automatas Finitos

• Autómata Finito NoDeterminístico


• Un NFA esa un modelo matemático que consiste de:
• 1.- Un conjunto de estados.
• 2.- Un conjunto de símbolos de entrada.
• 3.- Una función de transición que corresponde pares
estado-símbolo a conjuntos de estados.
• 4.- Un estado So que denota como el estado inicial.
• 5.- Un conjunto de estados F que denotan los
estados de aceptación o finales.
Automatas Finitos

• Un NFA no tiene restricciones para que exista


mas de una transición con el mismo nombre a
diferentes estados, por lo que en una
representacióntabular no es posible
determinar de manera única el estado destino
para un símbolo determinado. Por ejemplo, el
siguiente diagrama representala expresion
(a | b)* a b b
Automatas Finitos

no podemos determinar a qué estado se avanza


del estado 0 con el símbolo a; puede ser al propio
0 o al 1 pero ¿bajo qué condición? No está
determinado.
Autómatas Finitos

• Un DFA es un caso especial de NFA en el que


ningúnestado tiene transiciones para diversos
estados bajo el mismo símboloy no se
permiten transiciones epsilon. Los diagramas
de transiciónson autómatas determinísticos.
Por ejemplo, el DFA de (a | b)* a b b puede
ser:
Autómatas Finitos

También podría gustarte