Utilizando ya el concepto de Stack(pila) como arreglo dinamico para llevar el control de la ejecucion del codigo 3D, desarrollaremos ejemplo de metodos por valor y por referencia donde el primero envia el dato del la variable o bien el numero, en cambio el segundo envia una posicion en la pila
para que sea accedida directamente entonces lo cambio se vean reflejados asi se realizen en otros metodos que tenga los parametros por referencia.
El siguiente codigo no conoce el concepto de objeto y es estructurado por lo tanto esto
se refleja en el movimiento entre ambitos, se utilizan parametros de tipo entero.
Atributos por valor
Procedure Uno (Z, h int)
var I,J,K : integer
{
J = K + Z * H
}
Procedure Dos
var A,B,C,D: integer
{
A = B * 34 + K
call uno(A,34)
}
Codigo 3D:
Proc Dos
{
t1 = ptr + 0
...
t6 = ptr + 0
t7 = pila[t6]
t8 = ptr + 4
pila[t8]= t7
t9 = ptr + 4
pila[t9] = 34
ptr = ptr + 4
call uno
ptr = ptr - 4
}
proc Uno
{
t1 = ptr + 3
t2 = ptr + 4
t3 = pila[t2]
t4 = ptr + 0
t5 = pila[t4]
t6 = ptr + 1
t7 = pila[t6]
t8 = t5 * t7
t9 = t3 + t8
pila[t1]=t9
}
Atributos por Referencia
Se utiliza el mismo codigo anterior pero en este caso se cambio a parametros referencia los siguientes parametros:
Procedure Uno(var int z, var h int)
tambien la llamado al metodo se cambio de la siguiente manera:
Procedure Dos
{
...
call uno (A,D)
}
Codigo 3D:
Proc Dos
{
...
t6 = ptr + 0
t7 = ptr + 4
pila[t7] = t6
t8 = ptr + 3
t9 = ptr + 5
pila[t9] = t8
ptr =ptr + 4
call uno
ptr = ptr - 4
}
Proc Uno
{
t1 = ptr + 3
t2 = ptr + 4
t3 = pila[t2]
t4 = ptr + 0
t5 = pila[t4]//se accesa ala pos del parametro y si obtiene la inf que es una pos
t6 = pila[t5]//se obtiene el dato que estaba en la pos de la inf anterior
t7 = ptr + 1
t8 = pila[t7]
t9 = pila[t8]
t10 = t6 * t9
t11 = t3 + t10
pila[t1] = t11
}
Arreglos Utilizando pila y heap (Ejemplo)
Todo tipo de dato no primitivo se almacena en el heap sea este de una variable local o global.
Se asume que el arreglo tiene valores desde 0 a hasta el numero tamaƱo-1 donde: MAT[10,10]
MAT[X,Y] = 15
Codigo 3D:
t1 = ptrh + 2//punt del heap mas la pos obtenida de tabla de simbolos
t2 = ptr + 0
t3 = pila[t2]
t4 = ptr + 1
t5 = pila[t4]
t6 = t5 - 1
t7 = t6 * 10
t8 = t7 + t3
t9 = t1 + t8//se suma el punt de inicio del arreglo mas la pos
heap[t9] = 15 //en esa posicion en el heap se ingresa el valor
No comments:
Post a Comment