BraulioVM / pl

0 stars 0 forks source link

Problema con scopes en bucles for #12

Closed BraulioVM closed 6 years ago

BraulioVM commented 6 years ago

Actualmente el código:

...
para i:=0 hasta 4 {}

para i:=0 hasta 10 {}
...

da un error por redeclarar la variable i. Habría que arreglar ese comportamiento

namasme commented 6 years ago

El problema aquí es que la declaración de la variable iteradora es antes del bloque, como en los procedimientos, por lo que el identificador se queda por encima de la marca. En los procedimientos, sin embargo, se puede usar el caso especial de parametro_formal, i.e., si hay parametro_formal justo antes de la marca podemos hacer las comprobaciones necesarias porque sabemos que estamos en el scope de un procedimiento.

En este caso la alternativa sería crear un nuevo t_entrada de nombre iterador o similar, lo cual añadiría cierta complejidad porque tendríamos una nueva comprobación en TS_identificador_libre, TS_fin_bloque et al. Otra opción, más hackish, es guardar en una variable iterador el nombre que se le da, comprobar en TS_inicio_bloque si existe y, en tal caso, añadirlo como identificador. Después en TS_fin_bloque habría que eliminar también la de antes de la marca y resetear la variable, de modo que la complejidad nos la comemos igual. No parece haber solución buena.

BraulioVM commented 6 years ago

Solucionado porque de acuerdo con el profesor la variable que se utiliza en el bucle for debe ser declarada con anterioridad