Computación (Curso 2005-2006)
2º de la Licenciatura de Matemáticas

 

La forma en que se escriben los programas GOTO en el intérprete GL no es exactamente igual que la forma vista en teoría, pero se adapta sin problemas y resulta obvia sin explicaciones.

La siguiente tabla representa la instrucción original en la columna de la izquierda, y su formato tal y como debe darse al intérprete GL en la columna de la derecha:

Instrucción GOTO
Instrucción GL
instr
(instr)
[L] instr
([L] instr)
V ¬ V-1
V --
V ¬ V+1
V ++
SKIP
skip
IF V¹0 GOTO L
if v goto L
GOTO L
goto L
V ¬ V'
V <- V'
V¬ f(V1,...,Vk)
v <- ([f] v1 ... vk)
IF P(V1,...,Vn) GOTO L
if ([P] v1 ... vn) goto L

Donde f y P deben haber sido definidas como funciones GOTO anteriormente, y V y L representan, respectivamente, una variable y una etiqueta válida para el lenguaje.

Se recuerda, que las variables válidas para GOTO son de la forma: X1,X2,...,Z1,Z2,...,Y que se usarán con la notación: X1,X2,...,Z1,Z2,...Y. Donde las variables Xi son las variables de entrada, las variables Zi son las de trabajo, y la variable Y es la variable de salida.

Asimismo, las etiquetas válidas para GOTO son de la forma: A,A1,A2,..., B,B1,B2,..., C,C1,C2,..., D,D1,D2,..., E,E1,E2,..., que se usarán con la notación: A,A1,A2,..., B,B1,B2,..., C,C1,C2,..., D,D1,D2,..., E,E1,E2,...

En general, el intérprete de GOTO del que disponemos no hace distinción entre letras mayúsculas o minúsculas, por lo que las siguientes líneas se reconocen como idénticas:

(if x1 goto a)
(IF X1 GOTO A)

Sin embargo, se aconseja hacer uso de una nomenclatura uniforme para evitar posibles confusiones, es decir, usar o siempre mayúsculas, o siempre minúsculas.

A continuación vemos cómo definir un programa GOTO. A la izquierda damos el programa P (que calcula la función f(x)=2x+1) en su formato habitual, a su derecha, tal y como debe darse al intérprete GL:

Z <- X
Y <- Y+1
[A1] IF Z¹0 GOTO A2
GOTO E
[A2] Y <- Y+1
Y <- Y+1
Z <- Z-1
GOTO A1

======> (define P
  (programa
  (z <- x)
(y ++)
([A1] if z goto A2)
(goto E)
([A2] y ++)
(y ++)
(z --)
(goto A1)))
    
Para ejecutar este programa GOTO sobre un dato de entrada el formato es:
      ([P] 5)
Una vez definido un programa GOTO, es posible usarlo como macro para otro programa, por ejemplo, para llamar al programa anterior y asignar el resultado de su ejecución a la variable Y, se podría hacer:
(y <- ([P] z2))
que asignaría a Y el valor de 2Z2+1, donde el valor de Z2 sería el que tuviera dicha variable en el momento de ejecutarse esa línea.

Esta versión de GOTO dispone también de numerales, es decir, de las funciones constantes, representadas por medio de sus valores numéricos, por ejemplo, si queremos asignar a una variable el valor 5, no es necesario realizar 5 veces un incremento, sino que podemos escribir directamente:

(z1 <- 5)

También es posible pasar un valor numérico como dato de entrada de una función definida anteriormente. Así, una vez definido el programa anterior, es posible realizar una llamada del tipo:

      (z1 <- ([P] 5))

que asignaría a Z1 el valor devuelto por el programa P sobre el dato de entrada 5, es decir, Z1 tomaría el valor 11.

Cuando se escribe un programa GOTO y se evalúa la instrucción que lo crea, el primer paso que da el intérprete es el de analizar sintácticamente las líneas que lo forman, devolviendo, si fuera necesario, un mensaje indicando en qué líneas se ha cometido un error de escritura (falta de paréntesis, de espacios, uso incorrecto de una instrucción,...). Se debe tener en cuenta que el análisis que lleva a cabo no es completo, lo que quiere decir que puede haber errores que el analizador no detecta, aunque todos los que detecta son errores. Un ejemplo de error no detectado es el uso incorrecto de una macro, ya que el analizador no puede saber qué macros han sido definidas con anterioridad ni en qué forma se han definido (tampoco sería deseable que nos considerase ese tipo de errores, puesto que puede presentarse el caso de escribir un programa que hace uso de macros todavía no definidas). Si el analizador encuentra algún tipo de error el programa no se crea, sino que deberá modificarse su código y volver a evaluarlo hasta que no contenga errores sintácticos. En caso de que no se encuentre ningún error, devuelve un mensaje que indica que la evaluación ha sido correcta. Una vez evaluado correctamente, el programa GOTO que hemos creado podrá ser usado directamente, o como macro para otros programas GOTO, en la forma que se indicó anteriormente.