El Código
Intermedio es un código abstracto
independiente de la máquina para la que se generará el Código Objeto
El Código
intermedio ha de cumplir requisitos importantes:
- ser fácil de producir a partir del análisis sintáctico
- ser fácil de traducir al lenguaje objeto
Tipos de Código Intermedio
Formas de código intermedio:
-
- Árbol sintáctico
- Notación Postfija
- Código de tres direcciones
Código de tres direcciones
Es una especie
de código máquina de la forma general:
- X:=y op z
- No se permite ninguna expresión arítmética compuesta, pues solo hay operadores del lado derecho de la proposición.
- Expresiones compuestas se descomponen en una secuencia generando elementos temporales
Notación Postfija
La notación
postfija pone el operador al final de los dos operandos
Árbol Sintáctico
Permite demostrar
que una secuencia de caracteres es una determinada categoría sintáctica.
Extraido el 28/01/2014 de: http://www.slideshare.net/blankardz/cdigo-intermedio-5717987
Son asimismo interesantes los denominados p-Codes,
similares a bytecodes pero cuyos códigos de operación pueden constar de más de
un byte y pueden ser variables en tamaño, como los opcodes de muchas
CPUs. Estos códigos trabajan a muy alto nivel, incluyendo instrucciones del
estilo de «imprime esta cadena» o «borra la pantalla». Por ejemplo, BASIC
utiliza p-Codes.
El bytecode
es un código intermedio más abstracto que el código máquina.
Habitualmente es tratado como un archivo binario que contiene un programa ejecutable
similar a un módulo objeto, que es un archivo binario producido por el compilador cuyo contenido es el código
objeto o código máquina .
El bytecode
recibe su nombre porque usualmente cada código de operación tiene una longitud
de un byte, si bien la longitud del código de las instrucciones varía. Cada
instrucción tiene un código de operación entre 0 y 255 seguido de parámetros
tales como los registros o las direcciones de memoria. Esta sería la
descripción de un caso típico, si bien la especificación del bytecode depende
ampliamente del lenguaje.
Como código
intermedio, se trata de una forma de salida utilizada por los implementadores
de lenguajes para reducir la dependencia respecto del hardware específico y
facilitar la interpretación. Menos frecuentemente se utiliza el bytecode como
código intermedio en un compilador. Algunos sistemas, llamados traductores
dinámicos o compiladores just-in-time traducen el bytecode a código
máquina inmediatamente antes de su ejecución para mejorar la velocidad de
ejecución.
Los
programas en bytecode suelen ser interpretados por un intérprete de bytecode
(en general llamado máquina virtual, dado que es análogo a un ordenador). Su
ventaja es su portabilidad: el mismo código binario puede ser ejecutado en
diferentes plataformas y arquitecturas. Es la misma ventaja que presentan los
lenguajes interpretados. Sin embargo, como el bytecode es en general menos
abstracto, más compacto y más orientado a la máquina que un programa pensado
para su modificación por humanos, su rendimiento suele ser mejor que el de los
lenguajes interpretados. A causa de esa mejora en el rendimiento, muchos
lenguajes interpretados, de hecho, se compilan para convertirlos en bytecode y
después son ejecutados por un intérprete de bytecode. Entre esos lenguajes se
encuentran Perl, Gambas, PHP y Python. El código Java
se suele trasmitir como bytecode a la máquina receptora, que utiliza un
compilador just-in-time para traducir el bytecode en código máquina antes de su
ejecución.
Extraido el 29/01/2014 de: http://es.wikipedia.org/wiki/Bytecode
No hay comentarios:
Publicar un comentario