Generador de Código Intermedio
Generador de Código Intermedio
Generador de Código Intermedio
CDIGO
INTERMEDIO
INTEGRANTES
( )[ ] { }
^ raz
*/
+-
REGLAS
El cdigo P es utilizado por los lenguajes de programacin que emplean un interprete en lugar de
un compilador para obtener el cdigo fuente de un programa escrito en un lenguaje de
programacin de alto nivel. Las tareas fundamentales del interprete son analizar, convertir y
ejecutar lnea por lnea. Tan pronto como el interprete detecta un error en el programa fuente, y
sin importar de que tipo sea ste, la ejecucin se interrumpe.
El uso del cdigo P importa diversos beneficios, como la portabilidad, una implementacin
sencilla, ahorro de espacio y un manejo ptimo de la depuracin.
TRIPLOS O TRIPLETAS
Los triplos, triples o tripletas constituyen una estructura de datos que representa la perspectiva
lgica de la generacin de un cdigo intermedio basado en los operandos y operadores, para
generar operaciones temporales que, en conjunto, forman una operacin compuesta.
Estas operaciones temporales se almacenan en tablas de smbolos con tres columnas, en un
estilo acorde con el lenguaje ensamblador, de manera que cuando se llegue la etapa de
generacin de cdigo final solamente se lea estas tablas y se efectu automticamente la
conversin. Digamos, por ejemplo, que tenemos la asignacin w=x+y+24-z.
El siguiente es el anlisis del ensamblador:
MOV AX,X; PONE [ X ] EN AX
ADD AX,Y; SUMA [ Y ] A AX
ADD AX, 24; SUMA 24 A LA SUMA
SUB AX, Z; RESTA Z DE X+Y+24
MOV W, AX; ALMACENA EL
RESULTADO EN W
Posfija Prefija
wxy+24+z-= =w-++xy24z
En cualquier caso, se debe establecer un algoritmo de lectura para cualquiera de las dos
notaciones, y utilizar ese seguimiento para llenar el triplo.
PASOS
1. Se recorre la expresin que se encuentra en notacin prefija o posfija hasta el primer
operador, y le asignamos ese operador con los operadores previos o posteriores segn sea
el caso.
2. Cuando se utilizan triplos se realiza un algoritmo que asigne el primer operando a una
variable temporal y despus realice la operacin de esa variable temporal, y el segundo
operando con el operador.
3. Cuando se emplean cudruplos, se asigna directamente los dos operandos y el operador en
el registro del cudruplo. Esto se debe repetir hasta terminar la expresin completa.
NOTACIN
POSFIJA
Por ejemplo, considerando la cadena: wxy+24+z-, el algoritmo se desarrollar como sigue:
P1: Se asigna la expresin posfija a un identificador llamado cadena original:
Cadena original = wxy+24+z-=(en tokens ID01 ID02 ID03 OA01 CE01 OA01 ID04 OA02 ORAS)
P2: Se asigna token por token a una cadena auxiliar hasta que se encuentre el operador:
Cadena auxiliar =wxy+ (en tokens ID01 ID02 ID03 OA01)
P3: Se toma el operador y los dos operadores anteriores, y se asignan al identificador llamado
Cadena auxiliar 2=xy+(en tokens ID02 ID03 OA01)
P4: Se agregan dos registros en tripletas y uno en cudruplo:
P5: cadena auxiliar: =w-T1 (en tokens ORAS ID01 OA02 TE01)
P6: No termina an
Iteracin 3
P2: Cadena auxiliar = w-T1 z ( en tokens ORAS ID01 OA02 TE01 ID03)
P3: Cadena auxiliar 2: -T1 z (en tokens OA02 TE01 ID03)
P4:
Dato Dato Operador Dar Dato Dato Operador
objeto fuente objeto fuente 1 fuente 2
1 T1 ID02(x) = T1 ID02(x) ID03(y) OA01(+)
2 T1 ID03(y) OA01(+) T1 T1 CE01(24) OA01(+)
3 T1 CE01(24) OA01(+) T1 T1 ID04(z) OA02(-)
4 T1 ID04(z) 0A02(-)
01 w Real 01 24 Entero
02 x Entero
03 y Entero
04 z Real
Triplos o Tripletas
ID01 ID02 ID03 OA01 CE01 OA01 ID04 OA02 OASI Se asigna el identificador 2 a una variable temporal
ID01 T1 ID03 OA01 CE01 OA01 ID04 OA02 OASI Se aplica el operador aritmtico 1 a la variable
temporal 1 y al identificador 3
ID01 T1 CE01 OA01 ID04 OA02 OASI Se aplica el operador aritmtico 1 a la variable
temporal 1 y a la constante numrica 1
ID01 T1 ID04 OA02 OASI Se aplica el operador aritmtico 2 a la variable
temporal 1 y al identificador 4
ID01 T1 OASI Se aplica el operador de asignacin al identificador
1 y la variable temporal 1
Ejemplo:
PR06 POST ID01 CE01 OR01 ID01 CE02 OR02 OL01 POST PR07
POST ID01 ID01 CE03 OA01 OR03 POST
PR08
POST ID01 CE01 OR03 POST
PR09
Al analizar la instruccin mediante cdigo ensamblador tenemos que:
MOV AX, ID01 ; PONE [ ID01 ] EN AX
CMP AX, CE01 ; COMPARA AX y CE01
JG ET1; SI AX ES MAYOR TRASLADA EL CONTROL A LA ETIQUETA 1
JMP ET3; DE LO CONTRARIO TRASLADA EL CONTROL A LA ETIQUETA 3
ETI: CMP AX,CE02; COMPARA AX y CE02
JL ET2; SI AX ES MENOR TRASLADA EL CONTROL A LA ETIQUETA 2
JMP ET3; DE LO CONTRARIO TRASLADA EL CONTROL A LA ETIQUETA 3
ET2: ADD AX,1; SUMA 1 A AX
JMP ET4;
ET3: MOV AX,CE01; ASIGNA CE01 A AX
ET4: END
El cdigo en ensamblador es una gua de la estructura que debe tener el triplo o tripleta de
esta instruccin.
Triplo Cudruplo
T4 CE01(10) OR03(=)
1 T4 CE01(10) =