Académique Documents
Professionnel Documents
Culture Documents
TABLA DE SIMBOLOS
NOMBRE
TIPO
ROL
TAMAO
POSICION
A
procedure
procedure
48
B
entero
var/global
1
0
entero
var/global
1
1
D
entero
var/global
1
2
MAT
entero
var/arreglo/parametro
40
3-43
I
entero
var/parametro
1
44
J
entero
var/local
1
45
K
entero
var/local
1
46
L
entero
var/local/while
1
47
Nota:
no esta declarada
//filas consecutivas
//fila - columna
//https://drive.google.com/file/d/0B3FpP3NEnzZPZDZRUm4zdnI3Qlk/view?
usp=sharing
pila[1000]
p=0
procedure A () {
L1:
t1 = p + 44
t2 = pila[t1]
t3 = p + 46
t4 = pila[t3]
if( t2 < t4 ) goto L2
goto L3
L2:
t5 = B + 3
if ( t5 <= 40 ) goto L4
goto L5
L5 :
if ( D < C ) goto L6
goto L7
L4:
L6:
t6 = p + 44
t7 = pila[t6] // I
t8 = t7 + 1
t9 = p + 45
pila[t9] = t8 // J
L8:
t10 = p + 45
t11 = pila[t10]
t12 = p + 47
t13 = pila[t12]
if ( t11 < t13 ) goto L9
goto L10
L9:
//obtener mat
t14 = p + 3
t15 = p + 45
t16 = pila[t15]
t17 = t16 - 1
t18 = t17 * 8
t19 = p + 44
t20 = pila[t19]
t21 = t18 + t20
t22 = t14 + t21
//asignacion
t23 = p + 3
//MAT[i,c] * B
t24 = p + 3
t25 = p + 44
t26 = pila[t25] // i
t27 = t26 - 1
t28 = t27 * 8
t29 = t28 + C
t30 = t24 + t29
t31 = pila[t30]
t32 = t31 * B
t33 = t32 - 1
t34 = t33 * 8
//k - 1
t35 = p + 46
pila[t22] = t40
// B = Mat [ I , D ] + 1 ;
t41 = p + 3
t42 = p + 44
t43 = pila[t42] // i
t44 = t45 - 1
t46 = t47 * 8
t48 = t46 + D
t49 = t41 + t48
t50 = pila[t49]
t51 = t50 + 1
B = t51
goto L8
L10:
t52 = C + 1
D = t52
goto L1
L3:
L7:
t53 = p + 3
t56 = p + 48
t57 = t56 + 44
//obtener k
t58 = p + 46
t59 = pila[t58]
pila[t57] = t59
p = p + 48
call A()
p = p - 48
}
Tema 2 ( 25 puntos )
Escriba una definicin dirigida por la sintaxis para la produccin Call como se
define a continuacin:
S call ID ( L_parametros ) ;
L_parametros L_parametros , ID
| ID
S call ID ( L_parametros ) ;
{
}
L_parametros L_parametros , ID
{
L_parametros.contador = L_parametros1.contador + 1
L_parametros.ambito = L_parametros1.ambito
t1 = generaTemp()
Write ( t1 , = p + , L_parametros1.ambito)
t2 = generaTemp()
posParametro = getPosParametro(L_parametros.contador)
Write ( t2 , = , t1 , +, posParametro )
t3 = obtenerID (ID.val)
Write ( pila[, t2, ] = , t3 )
}
| ID
{
L_parametros.contador = 0
L_parametros.ambito = obtenerAmbito()
t1 = generaTemp()
Write ( t1 , = p + , ambito)
t2 = generaTemp()
posParametro = getPosParametro(L_parametros.contador)
Write ( t2 , = , t1 , +, posParametro )
t3 = obtenerID (ID.val)
Write ( pila[, t2, ] = , t3 )
}