Professional Documents
Culture Documents
UNIDAD II
Analizar
una mquina virtual que ejecute cdigo intermedio a partir del cdigo fuente de un lenguaje prototipo.
2.1 Notaciones
2.1.1 Prefija 2.1.2 Infija 2.2.3 Postfija
Fases independientes del lenguaje Fuente pero dependientes del cdigo Intermedio y de la maquina final
CODIGO FUENTE
CODIGO INTERMEDIO
ANALISIS LEXICO
FRONT END
BACK END
Diferencia
ejecutable.
Diferencia
interpretable
Obtencin
de cdigo ejecutable.
Arquitectura bsica de Von Neumann En la memoria se almacena el programa y los datos necesarios para que ste opere
Unidad Central de Proceso CPU Componente encargado de ejecutar las instrucciones que estn en memoria principal. Capaz de ejecutar millones de instrucciones MHz
Las
instrucciones de los programas son almacenados en la memoria primaria. La primer tarea del CPU es leer una instruccin de la memoria.
EL PROCESADOR
La
unidad Prefetch le indica al bus que instruccin o conjunto de instrucciones tiene que leer (direcciones de memoria). Prelectura de la instruccin desde la memoria principal.
EL PROCESADOR
La
Unidad de Decodificacin toma las instrucciones ledas y las traslada a una forma adecuada para el procesamiento interno de CPU. operador operando1 operando2
EL PROCESADOR
FORMATO DE INSTRUCCIN
La
Unidad de Control coordina y organiza cuales elementos del CPU realizarn funciones.
EL PROCESADOR
La
Unidad Aritmtico Lgica (Logic Unit) se encarga de ejecutar las operaciones correspondientes. Incluye registros de 32 o 64 bits generalmente.
EL PROCESADOR
Creacin
El
cdigo intermedio (CI) es la representacin en un lenguaje sencillo de la secuencia real de las operaciones que se harn como resultado de las fases anteriores.
trata de representar de una manera formalizada las operaciones a llevar a cabo en un lenguaje ms cercano a la mquina final, aunque no a una mquina concreta si no a una mquina abstracta.
Se
Ventajas
Aumenta la portabilidad del compilador de una mquina a otra. EJEMPLO Java Fcil de producir. Reglas claras de construccin. Fcil de traducir al lenguaje objeto.
Las
notaciones son una forma especial en la que se pueden expresar una expresin matemtica y puedan ser de 3 formas: infija, prefija y posfija. Los prefijos, Pre - Pos - In se refieren a la posicin relativa del operador con respecto a los dos operandos.
a
Operando
+
Operador
b
Operando
La
caracterstica distintiva de esta notacin es que coloca los operadores a la izquierda de sus operandos. 2+3 + 2 3
No
requiere de parntesis para indicar el orden de precedencia de operadores. Se evala de izquierda a derecha hasta que se encuentre el primer operador seguido inmediatamente de un par de operandos.
(3*6)/
(2+4)
EVALUACIN
LECTURA FINAL
/*36+24
EVALUACIN
EVALUACIN
(3*6)/ (2+4)
4 2 + 6 3 * /
LECTURA FINAL
/*36+24
+
) ) E /
)
/
* / E
/*36+24
EVALUACIN
3 2 6 6 18 6 3
2+4
3*6
18/6
Nodo,
(3*6)/ (2+4)
/*36+24
4
Es
la notacin comn de frmulas aritmticas y lgicas, en la cual se escriben los operadores entre los operandos en que estn actuando: 2+2 No es tan simple de analizar por las computadoras, como la notacin prefija o la notacin postfija, aunque muchos lenguajes de programacin la utilizan debido a su familiaridad.
Hijo_izquierdo,
3*6 / 2+4
S=A+B*C S A B C * + =
Su principio es el de evaluar los datos directamente cuando se introducen y manejarlos dentro de una estructura LIFO (Last In First Out), lo que optimiza los procesos a la hora de programar.
(3*6)/
(2+4)
EVALUACIN
LECTURA FINAL
36*24+/
EVALUACIN
(3*6)/
(2+4)
2 4 + /
EVALUACIN
LECTURA FINAL
36*24+/
*
( ( E /
(
/
(
/ E
36*24+/
EVALUACIN
4 6 3 3 18 2 18 2 18 6 18 3
3*6
4+2
18/6
Hijo_izquierdo,
(3*6)/ (2+4)
36*24+/
4
Generacin
de cdigo:
Optimizacin
Es difcil de reordenar ya que hay que considerar el contenido de la pila (Polaca Inversa)
Interpretacin
rpida
Es muy fcil de interpretar ya que solo necesita una pila Si, ya que todos los procesadores implementan una pila.
Transportable:
Su principio es el de evaluar los datos directamente cuando se introducen y manejarlos dentro de una estructura LIFO (Last In First Out), lo que optimiza los procesos.
No se puede traducir a <cond> <instr1> <instr2> If Cdigo generado <cond> Salta Si falso Etiqueta1 <Instr1> Salta Etiqueta2 Etiqueta1: <Instr2>
Es
una especificacin de una Unidad Central de Procesamiento donde las instrucciones estn diseadas a ser ejecutadas por software (interpretadas) en lugar de Hardware.
El
cdigo P comenz como un cdigo ensamblador objetivo estndar producido por varios compiladores Pascal en la dcada de 1970.
Fue
diseado para una maquina de pila hipottica la idea era hacer que los compiladores de Pascal se transportaran fcilmente.
En la creacin de cdigo intermedio se utilizan instrucciones simblicas para representar los datos (variables, parmetros, etc.) que posteriormente se trasladarn a direcciones reales en el mapa fsico de memoria.
Cada instruccin de tres direcciones tiene a lo sumo un operador. El compilador debe generar un nombre temporal para guardar los valores calculados por cada instruccin. Algunas instrucciones de "tres direcciones" tiene menos de tres operadores.
Cudruplos Triplos
Ejemplo:
x=x+1; //Supongamos que x representa un entero
Pasos para generar el CI R1= valor (x) R2= valor (1) R3= R1 + R2 x=R3
CARGAR 0 null 10000 CARGAR 10000 null 9000 CARGAR 9000 null 10001 CARGAR 1 null 10002 SUMAR 10001 10002 10003 CARGAR 10003 null 9000
OTROS ARGUMENTOS DEL CI RESTAR, MULTIPLICAR, DIVIDIR OR, AND MAYOR, MENOR (Si se cumple coloca 1 en el res) IGUAL, DISTINTO ETIQUETA Salto incondicional SALTAR_ETIQUETA null null etiq Saltos condicionales SALTAR_CONDICION
IMPRIMIR_ENTERO 7 null null IMPRIMIR_CADENA cad null null Llamada al procedimiento p(x 1,x 2,...,x n).
If a<b then x=b CARGAR A NULL R1 CARGAR B NULL R2 MAYOR R1 R2 R3 SALTAR_CONDICION R3 E1 E1 NULL NULL E1
Ejemplo: W*X+(Y+Z)
Control
de flujo:
IF X>Y THEN Z=X ELSE Z=Y+1 1 (>, X, Y) 2 (Saltar si falso, (1), 5) 3 (=, Z, X) 4 (Saltar, , 7) 5 (+, Y, 1) 6. (=, Z, (5)) 7. ...
SI FALSO
EJERCICIO:
A=B+C*D/E F=C*D Operaciones 1. (1) 2. (2) 3. (3) 4. (4) 5. (1) 6. (5)
Tripletas (1) *, C, D (2) /, (1), E (3) +, B (2) (4) =, A, (3) (5) =, F, (1)
Ocupan
demasiado espacio Requieren muchas variables auxiliares para almacenar los resultados intermedios
Los tercetos resuelven este problema suprimiendo el operando del resultado, queda implcito y asociado a dicho terceto Inconvenientes
x=x-1;
} print(Si leer); if(x==0 && y>54){ print(Si leer); }else{ print(No leer); } }
CARGAR 10 null 10001 CARGAR 0 null 10002 ETIQUETA null null BUCLE_1 CARGAR 10001 null 10003 CARGAR 0 null 10004 MAYOR 10003 10004 10005 SALTAR_CONDICION 10005 null FIN_BUCLE_1 CARGAR 10002 null 10006 CARGAR 10001 null 10007 SUMAR 10006 10007 10008 CARGAR 10008 null 10002 CARGAR 10001 null 10009 CARGAR 1null 10010 RESTAR 10009 10010 10011 CARGAR 10011 null 10001 SALTAR_ETIQUETA null null BUCLE_1 ETIQUETA null null FINBUCLE_1 IMPRIMIR_CADENA cadena1 null null
int x = 10; int y = 0; main(){ while(x>0){ y =y+x; CARGAR 10001 null 10013 CARGAR 0 null10014 IGUAL 10013 10014 10015 CARGAR 10002 null 10016 CARGAR 54 null10017 MAYOR 10016 10017 10018 AND 10015 10018 10019 SALTAR_CONDICION 10019 null ELSE_1 IMPRIMIR_CADENA cadena2 null null ETIQUETA null null ELSE_1 IMPRIMIR_CADENA cadena3 null null
x=x-1;
} print(Si leer); if(x==0 && y>54){ print(Si leer); }else{ print(No leer); } }
CARGAR 10 null 10001 CARGAR 20 null 10002 ETIQUETA null null BUCLE_1 CARGAR 10001 null 10003 CARGAR 2 null 10004 MULTIPLICAR 10003 10004 10005 CARGAR 10002 null 10006 MENOR 10005 10006 10007 SALTAR_CONDICION 10007 null FIN_BUCLE_1 ETIQUETA null null BUCLE_2 CARGAR 10002 null 10008 CARGAR 10001 null 10009 CARGAR 4 null 10010 MULTIPLICAR 10009 10010 10011 MAYOR 10008 10011 10012 SALTAR_CONDICION 10012 null FIN_BUCLE_2 CARGAR 10001 null 10013 CARGAR 1 null 10014 SUMAR 10013 10014 10015 CARGAR 10001 null 10015 SALTAR_ETIQUETA null null BUCLE_2 SALTAR_ETIQUETA null null BUCLE_1 ETIQUETA null null FIN_BUCLE_2 ETIQUETA null null FIN_BUCLE_1
int x=1-12; TAREA int y=x*32 CUADRUPLOS main(){ Y TRIPLOS x=1-12; y=x*32; x=(32/12)*y; if(x>7){ while(y>0){ y=y-1; if(y>1){ print(y); } } } }