Sie sind auf Seite 1von 9

TALLER-1 COMPILADORES

1. ¿En qué otras disciplinas tiene sus raíces la teoría de autómatas y


lenguajes formales?

• Teoría de Control.
• Teoría de la Comunicación
• Ordenadores.
• Lógica de los Circuitos Secuenciales.
• Fisiología del Sistema Nervioso.
• Teoría Lógica de los Sistemas Evolutivos y Auto-reproductivos.
• Traducción Automática de Lenguajes.

2. Explica la utilidad de un preprocesador.

Permite modificar el programa (eliminar comentarios, incluir otros archivos


entre otros) antes de que comience la traducción real, es invocado por el
compilador. Además puede ser utilizado de forma independiente del
compilador mediante el comando cpp, es un programa que puede procesar
un amplio catálogo de directivas.

3. En que se diferencian los lenguajes ensambladores de los autocodes.

Los lenguajes ensambladores son traductores sencillos en los que el


lenguaje fuente tiene una estructura simple. La función del ensamblador
consiste en reservar zonas de memoria, de cargar algún dato inmediato en
la memoria del ordenador, etc.

Ahora bien el lenguaje autocode es un lenguaje de máquina, se diferencia


del ensamblador por la introducción de la macro-instrucción. Se denomina
así por que en el momento de la traducción genera varias instrucciones de
código máquina.
4. Explique la diferencia entre compilación e interpretación.

Las diferencias entre estos dos programas, determinan que el compilador es


más efectivo a la hora de utilizar.

INTERPRETE Compilador

Lee línea a línea un programa Es un programa que lee


escrito en un lenguaje; en lenguaje totalmente un programa escrito en
fuente y lo va traduciendo a un un lenguaje; el lenguaje fuente, y
código intermedio, para ejecutarlo. lo traduce a un programa
equivalente a otro lenguaje,
lenguaje objeto.

Traduce el programa cuando lo Un programa que ha sido


lee, convirtiendo el código del compilado puede correr por si
programa directamente en solo, pues en el proceso de
acciones. compilación se lo transformo en
otro lenguaje (lenguaje máquina).

La ventaja del intérprete es que El archivo generado por el


dado cualquier programa se puede compilador solo funciona en la
interpretarlo en cualquier plataforma en donde se lo ha
plataforma (sistema operativo). creado.

No genera un ejecutable Un archivo compilado puede ser


distribuido fácilmente conociendo
la plataforma, mientras que un
archivo interpretado no funciona si
no se tiene el intérprete.

El proceso de traducción se realiza Hablando de la velocidad de


en cada ejecución ejecución un archivo compilado es
de 10 a 20 veces más rápido que
un archivo interpretado.

La ejecución es más lenta, ya que Genera un ejecutable


para cada línea del programa es
necesario realizar la traducción
No hay ejecutable, así que si existe El proceso de traducción se realiza
un intérprete para una plataforma una sola vez
concreta, el programa se podrá
ejecutar en ambas. Típicamente,
los programas interpretados son
mucho más portables que los
compilados, ya que suelen existir
intérpretes del mismo lenguaje en
distintas plataformas. Los
programas que se van a interpretar
no suelen ser muy dependientes
de su plataforma de destino,
siendo más portables.
Los lenguajes interpretados no La ejecución es muy rápida debido
suelen ser muy dependientes de la a que el programa ya ha sido
plataforma de destino, pero en traducido a código máquina
contrapartida suelen ser menos
flexibles y potentes que los
compilados.
El código fuente es necesario en El ejecutable va dirigido a una
cada ejecución, así que no puede plataforma concreta (una CPU, un
permanecer en secreto sistema operativo, y quizá alguna
otra consideración), siendo
prácticamente imposible portarlo a
otra. En ocasiones, si existe un
compilador para otra plataforma,
se puede recompilar el programa,
aunque normalmente esto plantea
serias dificultades. Los programas
que se van a compilar suelen estar
muy ligados a la plataforma de
destino.

Los errores sintácticos se detectan Los lenguajes compilados suelen


durante la ejecución, ya que proporcionar al programador
traducción y ejecución se van mecanismos más potentes y
haciendo simultáneamente. Algún flexibles, a costa de una mayor
error sintáctico podría quedar ligazón a la plataforma.
enmascarado, si para una
ejecución concreta no es
necesario traducir la línea que lo
contiene. (Algunos intérpretes son
capaces de evitar esto)
Un programa interpretado con un Una vez compilado el programa, el
comportamiento torpe código fuente no es necesario
normalmente puede ser para ejecutarlo, así que puede
interrumpido sin dificultad, ya que permanecer en secreto si se
su ejecución está bajo el control desea.
del intérprete, y no sólo del sistema
operativo.
Los errores sintácticos se detectan
durante la compilación. Si el fuente
contiene errores sintácticos, el
compilador no producirá un
ejecutable.

Un programa compilado puede,


por error, afectar seriamente a la
estabilidad de la plataforma,
comprometiendo la ejecución de
los otros procesos, por ejemplo,
acaparando la CPU, la memoria o
algún otro recurso, siendo a veces
complicado para el sistema
operativo interrumpir su ejecución.

5. En qué consiste el proceso de compilación cruzada.

La compilación de código fuente que, realizada bajo una determinada


arquitectura genera código ejecutable para una arquitectura diferente se
denomina compilación cruzada.

Un compilador cruzado es aquel que obtiene código para ejecutar en otra


máquina. Se utilizan en la fase de desarrollo de nuevos ordenadores.
Esta herramienta es útil cuando se quiere compilar código para una
plataforma a la que no se tiene acceso o cuando es incómodo o imposible
compilar en dicha plataforma como es el caso de los sistemas embebidos.
6. Seleccione un compilador conocido que venga empacado con un
ambiente de desarrollo, y haga una lista de todos los programas
acompañantes que se encuentran disponibles con el compilador junto
con una breve descripción de sus funciones.

7. Indique los lexemas de la siguiente expresión y como quedaría


estructurada la tabla de símbolos A[ï+1] = a[i] + 2

8. Los errores de compilación pueden dividirse aproximadamente en dos


categorías: errores sintácticos y errores semánticos. Los errores
sintácticos incluyen tokens olvidados o manera incorrecta, tal como el
paréntesis derecho olvidado en la expresión aritmética (2+3. Los
errores semánticos incluyen tipos incorrectos en expresiones y
variables no declaradas (en la mayoría de los lenguajes), tal como la
asignación x := 2, donde x es una variable de tipo arreglo.

a. Proporcione dos ejemplos más de errores de cada clase en un


lenguaje de su elección.

En java unos errores sintácticos pueden ser:

1. La falta de un punto y coma al final de una instrucción.


2. En Java este error puede ser incluso un error de lógica o sintaxis.
Para comparar 2 referencias para igualarlas se usa el operador ==
(el operador de igualdad). Para asignar el valor de la derecha a la
variable de la izquierda se usa el operador = (operador de
asignación).

En java unos errores semánticos pueden ser:


1. las mayúsculas y minúsculas se deben respetar. (miVar no es igual
a mivar).
2. María==2,5 donde María es una variable de tipo entero.
b. Seleccione un compilador con el que esté familiarizado y determine si
se enumeran todos los errores sintácticos antes de los errores
semánticos o si los errores de sintaxis y de semántica están
entremezclados. ¿Cómo influye esto en el número de pasadas'?

9. Cree una aplicación de ejemplo en Java y utilice la herramienta JProfiler


(Perfilador) para monitorear el trabajo de la CPU, la memoria y otras
características. Muestre los resultados.

10. Realice una lista de lenguajes intérpretes y de lenguajes compilados.

Lenguajes Intérpretes:

• ActionScript
• ASP (hasta su versión 3)
• Bash
• Basic4GL (Basic para OpenGL)
• BeanShell
• COBOL (compilador COBOL85)
• Gambas
• Inform
• IO
• JavaScript
• Logo
• R
• Lisp
• Lua
• Lush (Lisp para gráficos Linux)
• NWNScript (empleado en los videojuegos Neverwinter Nights y Neverwinter
Nights 2)
• Perl
• PHP
• Pike
• Prolog
• Python
• REXX y variantes como Object REXX
• Ruby
• Tcl
• VBScript (Microsoft Windows)

Lenguajes Compilados;

• Ada
• ALGOL
• Algol 60
• Algol 68
• SMALL
• BASIC
• C
• C++
• Objective-C
• C# (a bytecode)
• D
• CLEO
• COBOL
• Cobra
• Common Lisp
• Delphi
• Eiffel
• Sather
• Ubercode
• Factor (las últimas versiones)
• Forth
• Fortran
• Go
• Haskell
• Haxe (to bytecode)
• IBM RPG
• Java (a bytecode)
• JOVIAL
• G
• Lisp
• Lush
• Mercury
• Meta Lenguaje
• Standard ML
• Alice
• OCaml
• Modula-2
• Modula-3
• Open-URQ
• PureBasic
• Pascal
• PL/I
• Rust
• Seed7
• Visual Basic
• Visual Foxpro
• Visual Prolog
El trabajo debe ser presentado en un archivo Zip con la siguiente estructura de
nombre:

Apellido1_Apellido2_Nombres_TallerNroX_GrupoX.zip o rar

Das könnte Ihnen auch gefallen