Duda interpretando if-else anidados.

Started by Fede, January 08, 2011, 08:40:58 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Fede

Hola de nuevo.

Ante todo aclarar que cuando posteo una duda intento hacerla con la mínima expresión.

Es por eso que me salen en funciones aparentemente pequeñas y simples.

Particularmente esta duda me ha surgido en una función de unas 300 líneas con un comportamiento totalmente caótico.

Tras reducirla a la mínima expresión la duda se ha convertido en esto:

import "mod_say";


function main()

begin
if (true)
say("1");
if (false)
say("2");
else
say("3");
end
else
say("4");
end
end


Que produce como salida 1 y 3.

Pero si hacemos esto:

import "mod_say";


function main()

begin
if (true)
say("1");
if (false)
say("2");
else
say("3");
//end Tan sólo quito está línea.
else
say("4");
end
end


Tenemos como salida 1,3,4.

Lo que no entiendo es que es lo que interpreta en la segunda forma y por qué no da error de compilación.

Saludos,
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

FreeYourMind

Lo que veo es que si no pones el 'end' el segundo 'else' se ignora y su 'end' pasa a ser el end del primero. Deberia dar error de compilación como dices, pero ya veremos que dice el Maestro que estos dias ha tocado el corazón del compilador.

Fede

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

DCelso

Con esto parece que un if pudiera tener infinitos elses mientras no le pongas un end. :D, habría que probar que salida da esto :D

if (false)
         say("2");
      else
         say("3");
      else
         say("4");
      else
         say("5");
      else
         say("6");
end
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/


Fede

Esto da: 1,3,4

import "mod_say";


function main()

begin
if (true)
say("1");
if (false)
say("2");
else
say("3");
//end
else
say("4");
else
say("5");
end
end


Y esto:

import "mod_say";


function main()

begin
if (true)
say("1");
if (false)
say("2");
else
say("3");
//end
else
say("4");
else
say("5");
else
say("6");
end
end


Error de compilación.

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

SplinterGU

#6
Quote from: DCelso on January 08, 2011, 09:35:14 PM
Con esto parece que un if pudiera tener infinitos elses mientras no le pongas un end. :D, habría que probar que salida da esto :D

if (false)
         say("2");
      else
         say("3");
      else
         say("4");
      else
         say("5");
      else
         say("6");
end

esto es asi... lamentablemente es un "feature" conocido, creo que pasa lo mismo con case con mismos valores.

lo otro ahora lo chequeo... puede que los else se interpreten como end...

va, no se necesita chequear, esta clarito en los ejemplos...

lo del else else else, sabia que lo tomaba sin dar mensaje de error, pero no sabia que lo interpretaba como END, en realidad no me puse a pensarlo aun, lo tome como un error heradado y lo deje como un pendiente.

ahora se lo que es, vere cuando lo corrijo... ahora estoy dejando a punto los nuevos scripts de compilacion y estoy intentando generar una version dingux.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Eso, eso, que estoy loco por desenpolvorar mis Dingoo's :)

Noivern

Ánimos con la versión Dingux. Será un notición cuando tengas una version lista!!

Windgate

Hará como un año o más que Pixel comentó por ahí el problema de los ELSE infinitos...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2