compilador e interpretador

21

Click here to load reader

Upload: francisco-leal

Post on 04-Jul-2015

7.162 views

Category:

Technology


1 download

DESCRIPTION

Trabajo de Introduccion a la computacion.

TRANSCRIPT

Page 1: Compilador e interpretador

Introducción a la Computación

República Bolivariana de VenezuelaUniversidad Fermín ToroEscuela de Ciencias e IngenieríaCabudare – Estado Lara

Alumno:Francisco J. Leal A.Ing. En telecomunicaciones

Page 2: Compilador e interpretador

Un compilador es un programa o una herramientacuya función es compilar; es decir es aquel que toma un textoo código fuente escrito en un lenguaje de alto nivel y lotraduce a un lenguaje compresible para las computadoras.

Básicamente, existen dos grandes formas de ejecutarprogramas: programas compilados (previamente pasados porun compilador) y programas interpretados (necesitan pasarpor un intérprete para ejecutarse en tiempo real). en este casohablamos de los compiladores.

Page 3: Compilador e interpretador

Generalmente un compilador se divide en dos partes:

* Front End: parte que analiza e l código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Parte que suele ser independiente de la plataforma o sistema operativo para el que funcionará.

* Back End: parte en donde se genera el código máquina exclusivo para una plataforma a partir de lo analizado en el front end.

Page 4: Compilador e interpretador

Por lo general el resultado del back end no puede ser ejecutado directamente, se necesita pasar por un proceso de enlazado (linker).

Existen varios tipos de compiladores: Compiladores cruzados, Compiladores optimizadores, Compiladores de una sola pasada, Compiladores de varias pasadas, Compiladores JIT (Just In Time).

De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

Page 5: Compilador e interpretador

A grandes rasgos el proceso se puede describir en los siguientes pasos:* El compilador recibe el código fuente.* Se analiza lexicográficamente.* Se analiza semántica y sintácticamente.* Se genera el código intermedio no optimizado.* Se optimiza el código intermedio.* Se genera el código objeto para una plataforma específica.

Page 6: Compilador e interpretador

Finalmente ya puede ejecutarse el código máquina. temp1 := entarea1(60) temp2 := id3 * temp1 (2) temp3 := id2 + temp2 id1 := temp3

Esta representación intermedia tiene varias propiedades.Primera, cada instrucción de tres direcciones tiene a lo sumo unoperador, además de la asignación. Por tanto, cuando se generanesas instrucciones el compilador tiene que decidir el orden en quedeben efectuarse, las operaciones; la multiplicación precede a laadición al programa fuente de. Segunda, el compilador debegenerar un nombre temporal para guardar los valores calculadospor cada instrucción. Tercera, algunas instrucciones de "tresdirecciones" tienen menos de tres operadores, por ejemplo laprimera y la última instrucciones de.

Page 7: Compilador e interpretador

Un interpretador es un programa informático capaz de analizary ejecutar otros programas, escritos en un lenguaje de alto nivel.Los intérpretes se diferencian de los compiladores en que mientrasestos traducen un programa desde su descripción en un lenguajede programación al código de máquina del sistema, los intérpretessólo realizan la traducción a medida que seanecesaria, típicamente, instrucción por instrucción, y normalmenteno guardan el resultado de dicha traducción.

Page 8: Compilador e interpretador

Algunos ejemplos de lenguajes que son normalmente interpretados en vez de compilados son:PerlPHPJavascriptLogoASP (hasta la versión 3)PythonTclRubyJ#ASP

Page 9: Compilador e interpretador

Un lenguaje de programación de alto nivel se caracterizapor expresar los algoritmos de una manera adecuada a lacapacidad cognitiva humana, en lugar de a la capacidad ejecutorade las máquinas.

En los primeros lenguajes de alto nivel la limitación era quese orientaban a un área específica y sus instrucciones requerían deuna sintaxis predefinida. Se clasifican como lenguajesprocedimentales.

Otra limitación de los lenguajes de alto nivel es que serequiere de ciertos conocimientos de programación para realizarlas secuencias de instrucciones lógicas. Los lenguajes de alto nivelse crearon para que el usuario común pudiese solucionar unproblema de procesamiento de datos de una manera más fácil yrápida.

Page 10: Compilador e interpretador

Ventajas e inconvenientes

Ventajas Genera un código más sencillo y comprensible.

Escribir un código válido para diversas máquinas y, posiblemente, sistemas operativos.

Inconvenientes Reducción de velocidad al ceder el trabajo de bajo nivel a la máquina.

Algunos requieren que la máquina cliente posea una determinada plataforma.

Principales lenguajes de alto nivel

Ada

ALGOL

Page 11: Compilador e interpretador

Lenguaje de medio nivel es un lenguaje de programacióninformática como el lenguaje C, que se encuentran entre los lenguajes dealto nivel y los lenguajes de bajo nivel.

Suelen ser clasificados muchas veces de alto nivel, pero permitenciertos manejos de bajo nivel. Son precisos para ciertas aplicaciones comola creación de sistemas operativos, ya que permiten un manejo abstracto(independiente de la máquina, a diferencia del ensamblador), pero sinperder mucho del poder y eficiencia que tienen los lenguajes de bajonivel.

Una característica distintiva, por ejemplo, que convierte a C en unlenguaje de medio nivel y al Pascal en un lenguaje de alto nivel es que enel primero es posible manejar las letras como si fueran números (en Pascalno), y por el contrario en Pascal es posible concatenar las cadenas decaracteres con el operador suma y copiarlas con la asignación (en C es elusuario el responsable de llamar a las funciones correspondientes).

Page 12: Compilador e interpretador

Un lenguaje de programación de bajo nivel es el queproporciona un conjunto de instrucciones aritmeticológicas sin lacapacidad de encapsular dichas instrucciones en funciones que noestén ya contempladas en la arquitectura del hardware.

Dicho lenguaje es muy simple o nada complicado, peroestructurar programas a ese nivel es muy difícil. Dado que estelenguaje viene dado por las especificaciones técnicas delhardware, no permite una abstracción fuera de lo estipulado parael microprocesador de un ordenador. Consecuentemente, esfácilmente trasladado a lenguaje de máquina.

Page 13: Compilador e interpretador

La estructura de los lenguajes son como sigue: Lenguaje Máquina - Las invocaciones a memoria, como los

procesos aritmético lógicos son posiciones literales deconmutadores físicos del hardware en su representación booleana.Estos lenguajes son literales de tareas.

Lenguajes de bajo nivel - Son instrucciones que ensamblan losgrupos de conmutadores necesarios para expresar una mínimalógica aritmética. Están íntimamente vinculados al hardware. Pornorma general están disponibles a nivel firmware, cmos o chip set.Estos lenguajes están orientados a procesos. Los procesos secomponen de tareas. Contienen tantas instrucciones como laarquitectura del hardware así haya sido diseñada.

Por ejemplo: La arquitectura CISC contiene muchas masinstrucciones a este nivel, que la RISC.

Son denominados como ensambladores de un hardware concreto.

Page 14: Compilador e interpretador

Los lenguajes de bajo nivel son mas fáciles de utilizar que loslenguajes máquina, pero, al igual que ellos, dependen de la máquina enparticular. El lenguaje de bajo nivel por excelencia es el ensamblador. Lasinstrucciones en lenguaje ensamblador son instrucciones conocidas comonemotécnicos. Por ejemplo, nemotécnicos típicos de operacionesaritméticas son: en inglés, ADD, SUB, DIV, etc.; enespañol, SUM,RES,DIV,etc. Una instrucción típica de suma sería:

ADD M, N, P

Esta instrucción podría significar “sumar el número contenido en laposición de memoria M al número almacenado en la posición de memoriaN y situar el resultado en la posición de memoria P”. Evidentemente esmucho más sencillo recordar la instrucción anterior con un nemotécnicoque su equivalente en código máquina”.

0110 1001 1010 1011

Page 15: Compilador e interpretador

C es un lenguaje de programación de propósito general que ofreceeconomía sintáctica, control de flujo y estructuras sencillas y un buenconjunto de operadores. No es un lenguaje de muy alto nivel y más bienun lenguaje pequeño, sencillo y no está especializado en ningún tipo deaplicación. Esto lo hace un lenguaje potente, con un campo de aplicaciónilimitado y sobre todo, se aprende rápidamente. En poco tiempo, unprogramador puede utilizar la totalidad del lenguaje.

C trabaja con tipos de datos que son directamente tratables por elhardware de la mayoría de computadoras actuales, como son loscaracteres, números y direcciones. Estos tipos de datos pueden sermanipulados por las operaciones aritméticas que proporcionan lascomputadoras.

Page 16: Compilador e interpretador

No proporciona mecanismos para tratar tipos de datos que no sean los básicos, debiendo ser el programador el que los desarrolle. Esto permite que el código generado sea muy eficiente y de ahí el éxito que ha tenido como lenguaje de desarrollo de sistemas. No proporciona otros mecanismos de almacenamiento de datos que no sea el estático y no proporciona mecanismos de entrada ni salida. Ello permite que el lenguaje sea reducido y los compiladores de fácil implementación en distintos sistemas. Por contra, estas carencias se compensan mediante la inclusión de funciones de librería para realizar todas estas tareas, que normalmente dependen del sistema operativo.

C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL.

Page 17: Compilador e interpretador

Un núcleo del lenguaje simple, con funcionalidades añadidasimportantes, como funciones matemáticas y de manejo dearchivos, proporcionadas por bibliotecas.

Es un lenguaje muy flexible que permite programar con múltiples estilos. Unode los más empleados es el estructurado "no llevado al extremo" (permitiendociertas licencias de ruptura).

Un sistema de tipos que impide operaciones sin sentido. Usa un lenguaje de preprocesado ,preprocesador de C, para tareas como definir

macros e incluir múltiples archivos de código fuente Acceso a memoria de bajo nivel mediante el uso de punteros Interrupciones al procesador con uniones. Un conjunto reducido de palabras clave. Por defecto, el paso de parámetros a una función se realiza por valor. El paso

por referencia se consigue pasando explícitamente a las funciones lasdirecciones de memoria de dichos parámetros.

Punteros a funciones y variables estáticas, que permiten una formarudimentaria de encapsulado y polimorfismo.

Tipos de datos agregados (struct) que permiten que datos relacionados (comoun empleado, que tiene un id, un nombre y un salario) se combinen y semanipulen como un todo (en una única variable "empleado").

Page 18: Compilador e interpretador

Recolección de basura nativa, sin embargo se encuentran atal efecto bibliotecas como la "libgc" desarrollada por SunMicrosystems, o el Recolector de basura de Boehm.

Soporte para programación orientada a objetos, aunque laimplementación original de C++ fue un preprocesador quetraducía código fuente de C++ a C.

Encapsulación. Funciones anidadas, aunque GCC tiene esta característica

como extensión. Polimorfismo en tiempo de código en forma de

sobrecarga, sobrecarga de operadores y sólo dispone de unsoporte rudimentario para la programación genérica

Soporte nativo para programación multihilo y redes decomputadores.

Page 19: Compilador e interpretador

Desde el inicio del lenguaje han surgido varias ramas de evolución que han generado varios lenguajes:

Objective-C un primer intento de proporcionar soporte para la programación orientada a objetos en C, de escasa difusión, pero actualmente usado en Mac OS XyGNUstep

C++ (pronunciado C Plus Plus) diseñado por Bjarne Stroustrup fue el segundo intento de proporcionar orientación a objetosa C y es la variante más difundida y aceptada. Esta versión combina la flexibilidad y el acceso de bajo nivel de C con las características de la programación orientada a objetos como abstracción, encapsulación y ocultación.

También se han creado numerosos lenguajes inspirados en la sintaxis de C, pero que no son compatibles con él:

Java, que une una sintaxis inspirada en la del C++ con una orientación a objetos más similar a la de Smalltalk y Objective C.

JavaScript, un lenguaje de scripting creado en Netscape e inspirado en la sintaxis de Java diseñado para dar a las páginas web mayor interactividad. A la versión estandarizada se la conoce como ECMAScript.

C#(pronunciado C Sharp) es un lenguaje desarrollado por Microsoft derivado de C/C++ y Java

Page 20: Compilador e interpretador

Un programa C está formado por un conjunto de funciones que al menos contiene la funciónmain. Una función se declara con el nombre de la función precedido del tipo de valor que retorna yuna lista de argumentos encerrados entre paréntesis. El cuerpo de la función está formado por unconjunto de declaraciones y de sentencias comprendidas entre llaves. Veamos un ejemplo deutilización de funciones:

#include <stdio.h> #define VALOR 5 #define FACT 120 int fact_i ( int v ) { int r = 1, i = 0; while ( i <= v ) { r = r * i; i = i + 1; } return r; } int fact_r ( int v ) { if ( v == 0 ) return 1; else return v * fact_r(v-1); } main() { int r, valor = VALOR; if ( (r = fact_i(valor)) != fact_r(valor) ) printf("Codificación errónea!!.\n"); else if ( r == FACT ) printf("Codificación correcta.\n"); else printf("Algo falla!!.\n"); }

Page 21: Compilador e interpretador

FIN...