BraulioVM / pl

0 stars 0 forks source link

Problemas con scopes de procedimientos #11

Closed BraulioVM closed 6 years ago

BraulioVM commented 6 years ago

Actualmente el código:

BIENVENIDO {
 procedimiento foo(entero a) {}

procedimiento bar(entero a) {}
}

da un error por haber redeclarado a. Habría que evitar ese comportamiento

namasme commented 6 years ago

110c0699585a913ecdfb424da1a24d1d8527e72d debería haber solucionado esto (?)

namasme commented 6 years ago

En efecto, 110c069 debería haberlo solucionado, pero introdujimos otro error en 6e3b0d956f9164dad263b490ec6284ee591c34b9. El problema era que procedimiento foo(entero a){} triggereaba https://github.com/BraulioVM/pl/blob/6e3b0d956f9164dad263b490ec6284ee591c34b9/compilador/gramatica.y#L115, pero también, obviamente, https://github.com/BraulioVM/pl/blob/6e3b0d956f9164dad263b490ec6284ee591c34b9/compilador/gramatica.y#L89-L90 De modo que en la tabla aparecían una variable y un parámetro de nombre n entre el procedimiento y la marca. Al terminar el bloque TS_fin_bloque eliminaba el parametro_formal pero no la variable y en la siguiente declaración de procedimiento se intentaba introducir de nuevo n como variable, produciendo un error. 828d48e soluciona esto y #9 de forma más elegante.