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 |
======> | (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)
(y <- ([P] z2))
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.