Lenguajes de programacion tema 2_compiladores e interpretes
-
Upload
israel-castillo-cruz -
Category
Engineering
-
view
308 -
download
4
description
Transcript of Lenguajes de programacion tema 2_compiladores e interpretes
Un compilador es un programa que
convierte o traduce el código fuente de
un programa hecho en lenguaje de alto
nivel, a un lenguaje de bajo nivel
(lenguaje de máquina).
En pocas palabras, es un software que
se encarga de traducir el programa
hecho en lenguaje de programación, a un
lenguaje de máquina que pueda ser
comprendido por el equipo y pueda ser
procesado o ejecutado por este.
Características principales de un
compilador
Para cada lenguaje de programación se requiere un
compilador separado.
• El compilador traduce todo el programa antes de
ejecutarlo.
• Los programas compilados se ejecutan más rápido que
los interpretados, debido a que han sido completamente
traducidos a lenguaje máquina.
• Informa al usuario de la presencia de errores en el
programa fuente.
• Poseen un editor integrado con un sistema de coloreado
para los comandos, funciones, variables y demás partes
de un programa.
La importancia de los
compiladores radica en
que, sin estos programas
no existiría ninguna
aplicación informática, ya
que son la base de la
programación en
cualquier plataforma.
Intérprete
Es un programa informático capaz de analizar y ejecutar
otros programas, escritos en un lenguaje de alto nivel.
Los intérpretes sólo realizan la traducción a medida que
sea necesaria, típicamente, instrucción por instrucción, y
normalmente no guardan el resultado de dicha
traducción.
Se trata de traductores-ejecutores ya que con cada
instrucción realizan un proceso triple de lectura-
traducción-ejecución.
El funcionamiento de un intérprete se caracteriza por
traducir y ejecutar, de una en una, las instrucciones
del código fuente de un programa, pero, sin generar
como salida código objeto. El proceso que realiza un
intérprete es el siguiente: lee la primera instrucción del
código fuente, la traduce a código objeto y la ejecuta;
a continuación, hace lo mismo con la segunda
instrucción; y así sucesivamente, hasta llegar a la
última instrucción del programa, siempre y cuando, no
se produzca ningún error que detenga el proceso.
Características de un interprete
Son más fáciles de aprender que los lenguajescompilados.
Son sencillos de implementar y alta flexibilidad endepurar.
Facilita la búsqueda de errores.
El programa se puede ejecutar de inmediato, sinesperar a ser compilado.
Puede ser interrumpido con facilidad.
Puede ser rápidamente modificado y ejecutadonuevamente.
Suelen ser más lentos.
Estructura de un compilador
An
ális
is L
éxic
o
Gestíon de errores
Tabla de símbolos
An
ális
is S
emán
tico
An
ális
is S
intá
ctic
o
Gen
erac
ión
de
Có
dig
o In
term
edio
Op
tim
izac
ión
de
Có
dig
o in
term
edio
Gen
erac
ión
y
Op
tim
izac
ión
de
cód
igo
fin
al
Estructura de un compilador
Análisis sintáctico
• Comprueba los valores unitarios del programa (tokens):
• Palabras reservadas(do, while, if, …)
• Palabras no especificas(identificadores, constantes)
• Formados por tipo y lexema
Int contador
Identificador = tipo
“contador” = lexema
Estructura de un compilador
Análisis Sintáctico
• Recibe los tokens del analizador léxico y comprueba que están ordenados conforme a la gramática
Estructura de un compilador
Análisis Semántico
• Comprueba la validez del programa
• Comprobación de tipos en operadores
Estructura de un compilador
Generación de código intermedio
• Codifica el lenguaje fuente en un lenguaje intermedio entre el lenguaje objeto
• Permite la separación entre front-end y back-end
• Utilización de código de 3 direcciones (A=B+C)
• Instrucciones condicionales y saltos
Estructura de un compilador
Optimización de código intermedio
• Permite realizar mejoras en el código intermedio
• Eliminación de saltos consecutivos
• Factorizaciones
• Eliminar código inútil
• Optimización de bucles
Estructura de un compilador
Generación de código objeto
• Generar una secuencia de instrucciones en código ensamblador o máquina a partir del código intermedio
• A=B+C
• LOAD B
• ADD C
• STORE A
Estructura de un compilador
Tabla de símbolos
• Tabla donde se registran los identificadores, constantes, funciones y otros objetos especificados en el programa fuente
• El compilador desarrolla funciones comunes de acceso a ella
Estructura de un compilador
Manejo de errores• Mensajes de error que el compilador emite cuando encuentra una
inconsistencia en cualquiera de las fases de compilación
• Normalmente en una compilación no se muestran todos los errores producidos:
• Ocultación de otros errores
• Avalancha de errores
• Se puede
• Pararse al encontrar cualquier error
• Intentar recuperar todos los errores de una pasada
Estructura de un compilador
Análisis léxicoAnálisis sintácticoAnálisis semantico
Generación de código intermedio
Fuente
Optimización de código intermedioGeneración de código objeto
Optimización de código objeto
CódigoIntermedio
Código objeto
BACK-END
FRONT-END
Especificación de un compilador
Especificación léxica:
• Tokens mediante expresiones regulares
Especificación sintáctica:
• Gramáticas independientes del contexto
Especificación semántica:
• Lenguaje natural
/* Inclusión de archivos */#include <stdio.h>
/* Función principal */int main (int argc,char **argv){
/* Impresión por pantalla y salida del programa*/
printf("Hola mundo\n");return 0;
}
Código en C
A la hora de construir un intérprete es conveniente utilizaruna Representación Interna (RI) del lenguaje fuente aanalizar. De esta forma, la organización interna de lamayoría de los intérpretes se descompone en losmódulos:
1.
:
Toma como entrada el código del programa P en Lenguaje Fuente, lo analiza y lo transforma a la representación interna correspondiente a dicho programa P.
2.
La representación interna debe ser consistente con el programa original. Entre los tipos de representación interna, los árboles sintácticos son los más utilizados y, si las características del lenguaje lo permiten, pueden utilizarse estructuras de pila para una mayor eficiencia
3.
Durante el proceso de traducción, es conveniente ir creando una tabla con información relativa a los símbolos que aparecen. La información a almacenar en dicha tabla de símbolos depende de la complejidad del lenguaje fuente. Se pueden almacenar etiquetas para instrucciones de salto, información sobre identificadores (nombre, tipo, línea en la que aparecen, etc.) o cualquier otro tipo de información que se necesite en la etapa de evaluación.
4
A partir de la Representación Interna anterior y de los datos de entrada, se llevan a cabo las acciones indicadas para obtener los resultados. Durante el proceso de evaluación es necesario contemplar la aparición de errores.
5.
Durante el proceso de evaluación pueden aparecer diversos errores como desbordamiento de la pila, divisiones por cero, etc. que el intérprete debe contemplar.
>>> i=5
>>> if i>4:
... print "Mayor"
... elif i==4:
... print "Igual"
... else:
... print "Menor"
...
Mayor
Python
Nota: Programas escritos en lenguajes como C o Pascal prácticamente siempre se compilan, y otros como Perl o Python prácticamente siempre se interpretan.
Son lenguajes interpretados y pueden cumplir aspectos de cualquier paradigmas pueden acompañar un documento HTML o estar contenido en su interior. Las instrucciones del programa se ejecutan cuando se carga el documento, o cuando se produce alguna circunstancia tal como la activación de enlace por parte del usuario.
Estos lenguajes no necesitan ser compilados, una maquina es capaz de interpretar el código fuente y ejecutarlo, lo que hace de los lenguajes script la mejor solución para programación en entornos web
Ejemplos:
Awk
Phyton
Perl
Shell
etc
Todos los lenguajes tienen sus pros y sus contras por lo que no hay ninguno que sea mejor que el resto.
El nombre del lenguaje proviene de la afición de su
creador por los humoristas británicos MontyPython
Python permite dividir el programa en módulos reutilizables desde otros programas Python. También viene con una gran colección de módulos estándar que proporcionan E/S de ficheros, llamadas al sistema, sockets, interfaces GUI, etc.
Se trata de un lenguaje interpretado, lo que permite ahorrar el proceso de compilado.
Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible.
Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma.
Python fue creado a finales de los ochenta por Guido van Rossum en el Centro para las Matemáticas y la Informática (CWI, Centrum Wiskunde & Informática), en los Países Bajos como un sucesor del lenguaje de programación ABC, capaz de manejar excepciones e interactuar con el sistema operativo Amoeba.
- Lenguaje de programación de alto nivel del tipo scripting.
- Diseñado para ser fácil de leer y simple de implementar.
- Es código abierto (de libre uso).
- Puede ejecutarse en Mac, Windows y sistemas Unix; también ha sido portado a máquinas virtual JAVA y .NET.
- Es a menudo usado para desarrollar aplicaciones web y contenido web dinámico.
- Se utiliza para crear extensiones tipo plug-ins para programas de 2d y 3d como Autodesk Maya, Inkscape, etc.
- Los scripts de Python tienen la extensión de archivo .PY, que pueden ser parseados y ejecutados inmediatamente.
- Permite grabar programas compilados con extensión de archivo .PYC, los cuales suelen ser usados como módulo que pueden ser referenciados por otros programas Python.
Qué es PERL
Perl es un lenguaje de programación diseñado por Larry Wall en 1987. Perl toma características del lenguaje C, del lenguaje interpretado bourne shell(sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.
Estructuralmente, Perl está basado en un estilo de bloques como los del C o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto y no tener ninguna de las limitaciones de los otros lenguajes de script.
Es un lenguaje interpretado que tiene varias utilidades, pero está principalmente orientado a la busqueda, extracción y formateado de ficheros de tipo texto. También es muy usado para manejo y gestión de procesos (estado de procesos, conteo y extracción de parámetros característicos, etc...).
Es una combinación de las características de los lenguajes más usados por los programadores de sistemas, como son los shell del sistema operativo UNIX, los utilidad ( que incluye un lenguaje interpretado propio) awk para formateo y tratamiento de texto e incluso caracteristicas de Pascal, aunque su potencia se basa en la similitud con las mejores características del lenguaje estructurado C.
Algunas de las ventajas del uso del lenguaje PERL son las siguientes:
oConstrucción de pequeños programas que pueden ser usados como filtros para obtener información de ficheros, realizar busquedas, ...
oSe puede utilizar en varios entornos, como puede ser Windows 95, OS/2, ..., sin realizar cambios de código, siendo unicamente necesario la introducción del interprete PERL correspondiente a cada sistema operativo.
oTambién es uno de los lenguajes mas utilizados en la programación de CGI scripts, que son guiones o scripts que utilizan el interface CGI (CommonGateway Interface), para intercambio de información entre aplicaciones externas y servicios de información. Como ejemplo de ello tenemos los programas de búsqueda usados por el browser Netscape.
oEl mantenimiento y depuración de un programa en PERL es mucho más sencillo que la de cualquier programa en C.
Una Shell de Unix o también shell, es el término usado en informática para referirse a un intérprete de comandos, el cual consiste en la interfaz de usuario tradicional de los sistemas operativos basados en Unix y similares como GNU/Linux.
Mediante las instrucciones que aporta el intérprete, el usuario puede comunicarse con el núcleo y por extensión, ejecutar dichas órdenes, así como herramientas que le permiten controlar el funcionamiento de la computadora.
Los comandos que aportan los intérpretes, pueden usarse a modo de guion si se escriben en ficheros ejecutables denominados shell-scripts, de este modo, cuando el usuario necesita hacer uso de varios comandos o combinados de comandos con herramientas, escribe en un fichero de texto marcado como ejecutable, las operaciones que posteriormente, línea por línea, el intérprete traducirá al núcleo para que las realice.
En el sentido más genérico del término, shell significa cualquier intérprete que los usuarios usen para escribir comandos. Su etimología proviene del uso natural de consolas en computadores funcionando bajo unix antaño, cuando los usuarios conectaban al computador central, lo hacían mediante consolas, (shells) por las cuales a través de un intérprete, hacían inicio de sesión y manejaban la computadora principal. Posteriormente, con la proliferación de los computadores personales y su filosofía monousuario, un computador por usuario (entiéndase lo contrario de la filosofía inicial de Unix, un computador, muchos usuarios conectados por terminales), se desarrolló un software que emulase las características principales de las consolas físicas, a modo de poder seguir usándolas como clientes en un computador o núcleo que comprendiera la convención estándar usada para configurar y llevar a cabo tareas de administración de emergencia con servidores basados en Unix.
¿Qué es un interprete en programación?
Haber si entendieron.
Es un programa informático capaz de analizar y ejecutar otros programas en un lenguaje de alto nivel
Menciona 3 características de los interpretes.
• Son mas fáciles de aprender• Facilita búsqueda de errores• Puede ser interrumpido con facilidad
¿Qué es un compilador?
Es un programa que convierte o traduce el código fuentea un programa hecho de alto nivel
Menciona 3 características de un compilador
• Traduce todo un programa antes de ejecutarlo• informa al usuario de la presencia de errores en el
Programa fuente• Poseen un editor integrado con un sistema de
coloreado para los comandos.
¿Qué es un lenguaje scripting?
Son lenguajes interpretados
Es un lenguaje de programación cuya filosofía hace hincapié en una sintaxis
Python
Menciona 3 características de Python
• Es de código abierto• Lenguaje de programación de alto nivel• Se usa para desarrollar aplicaciones web y contenido web
dinámico
Lenguaje interpretado que tiene varias utilidades, pero eesta principalmente orientado a búsquedas
PERL
Menciona una ventaja del Lenguaje PERL
Construcción de pequeños programas que pueden ser usados como filtros para obtener información de ficheros
Lenguaje de programación que significa "cualquier interprete que los usuarios usen para escribir comandos"
SHELL