Código Intermedio
Para generar el código intermedio se cuenta con una clase que simula una tabla (la tabla es guardada en memoria). La tabla esta estructurada con los siguientes elementos: Operador, Argumento1, Argumento2 y Resultado (cada elemento es del tipo ArrayList), al recorrer la gramática en la tabla se van almacenando información (esta información es manejada de acuerdo a los estándares del programador) que después será utilizada para generar el código Mips,
X=2+5
Oper: “:=#” -- Arg1:”2” -- Arg2:”” -- Resol:”$t0”
Oper: “:=#” -- Arg1:”5” -- Arg2:”” -- Resol:”$t1”
Oper: “operplus” -- Arg1:”$t0” -- Arg2:”$t1” -- Resol:”$t2”
Hasta el momento el código intermedio funciona para realizar traducciones de Código Mips para sumas, multiplicaciones, divisiones, restas, leer entero, escribir string, escribir entero, asignaciones, llamar funciones o procedimientos, pasar parámetros, detectar si existen arreglos (entero o char).
Preguntas sobre el proyecto de compiladores
1 pregunta:
program ejemplo();
var x,y : integer;
function suma(n,m:integer):integer;
begin
x := 5; //Asigno 5 a x
suma:=n+m
end;
begin
y:=suma(5,5);
writeint( x ) // debería imprimir 5
writeint( y ) // debería imprimir 10
end.
Cómo hago para guardar el valor 5 en la variable x, la cual es global.
En MIPS x esta representada como:
x: .word 0 ( el valor de x es 0, pero yo quiero saber como guardar el valor 5 cuando se le asigna a x, y ya el valor de x no seria 0 sino que 5. Esto debería pasar también con la variable y (debería almacenar la suma – 10)
2 pregunta:
Con la instrucción readchar, como hacer para leer el carácter.
#---------- Leer número ----------
addi $v0, $zero, 5
syscall
add $s0, $v0, $zero # $s0 almacena el numero
#---------- ¿Leer char? ----------
3 pregunta:
Con la instrucción writechar, como hacer para escribir el carácter.
#---------- Escribir número ----------
addi $v0, $zero, 1
add $a0, $zero, $t0
syscall
#---------- ¿Escribir char? ----------
domingo, diciembre 04, 2005
Suscribirse a:
Entradas (Atom)