Bueno, Jltursan, comentarte que puedes contribuir despejando mis dudas en pseudocódigo.
Ahora mismo tengo un dilema...
el tema tiene que ver con la recursividad:
si yo creo una funcion, ejemplo:
def sumar(a,b):
codigo
programa principal en principio mi compilador lo que realiza es una busqueda de todas las funciones definidas en el programa y guarda sus nombres. Pero se salta el paso de entrar en
cada función y traducir a assembler su contenido, lo veo totalmente ilogico, pues en el futuro pienso crear una biblioteca Msxera de gran tamaño, y claro no estaré compilando algo innecesario no?
Pues tenemos:
1ero - 1 trazado al programa para guardar nombres de funciones definidas en todo el programa y librerias y variables utilizadas sólo en la zona global
2o ---- 1 trazado que empieza a traducir todo lo que se encuentra el la zona global, o sea del ejemplo anterior lo que es el programa principal
si el programa ppal no llama a la funcion suma(a,b)... esta nunca se traducirá
por el contrario si se llama a suma... mi programa tiene que llamar otra vez a la función traducir para traducir el interior del bloque que contiene suma... si, a su vez:
def get_sumando(x):
input(a)
def suma(a,b):
get_sumando(a)
get_sumando(b)
return a+bla función de suma llama a otra función de mi librería................ pues otra vez a llamar a la función de traducción de bloque,
y así hasta que se resuelve todo el embrollo...........pero tendré que utilizar un detector de recursividad porque si la funcion
get_sumando(x) en su interior contubiera codigo que vuelve a llamar a la función
suma(a,b) mi compilador entraría en un bucle indefinido y .......... cuelgue.
La verdad es que no se muy bien como deben funcionar los compiladores en este aspecto, si hay alguien que conozca el tema que me eche un cable.
l