| INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO |

Introducción | Contenido | Bibliografía

Introducción
Contenido
UNIDAD I
UNIDAD II
UNIDAD III
UNIDAD IV
UNIDAD V
UNIDAD VI
UNIDAD VII
UNIDAD VIII
UNIDAD IX Introdución 9.1 Máquina Virtual 9.2 Máquina Objeto 9.3 Administración de la memoria durante la ejecución

9.4 Código de 3 y 4 direcciones

9.5 Estructuras de control de flujo y de repetición (if then else, case, while, for)

PROBLEMARIO
Bibliografía

9.1 Máquina Virtual

> La figura que se presenta en seguida muestra cómo el desarrollador debe optar por crear un compilador mediante un diseño versátil o mediante un diseño fácil. La elección final depende de la utilidad que se le vaya a dar al código fuente del compilador a corto o medio plazo, esto es, si se van a crear varios compiladores o uno sólo.

> La filosofía versátil en la construcción de compiladores llega a su extremo en la implementación de lenguajes que son compilados y pseudointerpretados en ejecución. Esto quiere decir que en tiempo de compilación se genera un código máquina propio de un microprocesador virtual (llamado código-P en UCSD Pascal, bytecodes en Java, etc.) que, a su vez, se interpreta en tiempo de ejecución a través de lo que se llama motor de ejecución.

> A estos lenguajes no se les puede catalogar como interpretados ya que lo que se interpreta en tiempo de ejecución no es exactamente el programa fuente; pero tampoco se les puede considerar compilados del todo ya que lo que se genera en tiempo de compilación no es exactamente código máquina. Esta filosofía de diseño tiene la ventaja de que facilita la portabilidad de los programas.

> El lenguaje más actual que trabaja con esta filosofía es Java, que utiliza archivos .class, en lugar de .exe. Los archivos .class contienen bytecodes que se someten a una Java Virtual Machine (JVM) en tiempo de ejecución, para que los interprete. La JVM hace las veces de microprocesador virtual y los bytecodes hacen las veces de instrucciones máquina. Por supuesto, para poder ejecutar los bytecodes en diferentes plataformas es necesario que cada una de ellas posea una implementación adaptada de la JVM. Se muestra cómo se pueden utilizar los métodos de análisis dirigidos por la sintaxis para traducir un programa fuente a un programa objeto equivalente escrito en código intermedio. Dado que las declaraciones de variables no generan código, los siguientes epígrafes se centran en las sentencias propias de un lenguaje de programación imperativo, especialmente asignaciones y cláusulas de control del flujo de ejecución. La generación de código intermedio se puede intercalar en el análisis sintáctico mediante las apropiadas acciones semánticas.

> También es importante notar que, a veces, puede resultar interesante construir un traductor fuente-fuente en lugar de un compilador completo. Por ejemplo, si disponemos de un compilador de C y queremos construir un compilador de Pascal, puede resultar mucho más cómodo construir un programa que traduzca de Pascal a C, de manera que, una vez obtenido el programa C equivalente al de Pascal, bastará con compilar éste para obtener el resultado apetecido. Básicamente, las técnicas básicas generan código intermedio y también pueden aplicarse a la generación de código de alto nivel.

> Atrás Siguiente

##### Introducción / Contenido / Unidad I / Unidad II / Unidad III / Unidad IV / Unidad V / Unidad VI / Unidad VII / Unidad VIII / Unidad IX / Problemario / Bibliografía

##### Inicio

##### Créditos

José Sánchez Juárez, Andrés Ortigoza Campos, Fabiola Ocampo Botello