750
Capítulo 17 Estructuras de datos
if/goto
y
goto
. En la fi gura 17.25 se utiliza un ciclo controlado por centinela para calcular los cuadrados de varios
enteros. Cada entero se introduce desde el teclado y se almacena en la variable
j
. Si el valor introducido es el valor
centinela
-9999
, el control se transfi ere a la línea
99
, en donde termina el programa. En caso contrario, a
k
se le asigna
el cuadrado de
j
,
k
se muestra en pantalla y el control se pasa a la línea
20
, en donde se introduce el siguiente entero.
Utilizando los programas de ejemplo de las fi guras 17.23 a 17.25 como guía, escriba un programa de Simple para
realizar cada una de las siguientes acciones:
a) Introducir tres enteros, determinar su promedio e imprimir el resultado.
b) Usar un ciclo controlado por centinela para introducir 10 enteros, calcular e imprimir su suma.
c) Usar un ciclo controlado por contador para introducir 7 enteros, algunos positivos y otros negativos,
calcular e imprimir su promedio.
d) Introducir una serie de enteros, determinar e imprimir el mayor. El primer entero introducido indica cuán-
tos números deben procesarse.
e) Introducir 10 enteros e imprimir el menor.
f) Calcular e imprimir la suma de los enteros pares del 2 al 30.
g) Calcular e imprimir el producto de los enteros impares del 1 al 9.
1
10 rem
calcular los cuadrados de varios enteros
2
20 input j
3
23 rem
4
25 rem
evaluar el valor centinela
5
30 if j == -9999 goto 99
6
33 rem
7
35 rem
calcular el cuadrado de j y asignar el resultado a k
8
40 let k = j * j
9
50 print k
10
53 rem
11
55 rem
iterar para obtener el siguiente valor de j
12
60 goto 20
13
99 end
Figura 17.25
| Calcular los cuadrados de varios enteros.
17.27
(Construcción de un compilador; prerrequisitos: completar los ejercicios 7.34, 7.35, 17.12, 17.13 y 17.26) Ahora
que hemos presentado el lenguaje Simple (ejercicio 17.26), hablaremos sobre cómo construir un compilador de Simple.
Primero debemos considerar el proceso mediante el cual un programa de Simple se convierte a LMS y se ejecuta por
el simulador Simpletron (vea la fi gura 17.26). El compilador lee un archivo que contiene un programa de Simple y lo
convierte en código de LMS. Este código se envía a un archivo en disco, en el que las instrucciones de LMS aparecen
una en cada línea. Después el archivo de LMS se carga en el simulador Simpletron y los resultados se envían a un archi-
vo en disco y a la pantalla. Observe que el programa de Simpletron desarrollado en el ejercicio 7.35 acepta su entrada
mediante el teclado. Este programa debe modifi carse para que lea desde un archivo y así pueda ejecutar los programas
producidos por nuestro compilador.
El compilador de Simple realiza dos
pasadasdel programa de Simple para convertirlo en LMS. En la primera
pasada se construye una
tabla de símbolos (objeto) en la que cada número de línea (objeto), nombre de variable (objeto) y
constante(objeto) del programa de Simple se guarda con su tipo y ubicación correspondiente en el código fi nal de LMS
(la tabla de símbolos se describe detalladamente a continuación). En la primera pasada también se produce(n) el (los)
objeto(s) correspondientes a la instrucción de LMS para cada una de las instrucciones de Simple (objeto, etcétera). Si
el programa de Simple contiene instrucciones que transfi eren el control a una línea que se encuentra más adelante en el
programa, la primera pasada produce un programa de LMS que contiene algunas instrucciones “no terminadas”. En
la segunda pasada del compilador se localizan y completan las instrucciones no terminadas, y se envía el programa de
LMS a un archivo.
Primera pasada
El compilador empieza leyendo una instrucción del programa de Simple y la coloca en memoria. La línea debe separarse
en sus
tokens individuales (es decir, “piezas” de una instrucción) para su procesamiento y compilación. (Puede usarse la
clase
StreamTokenizer
del paquete
java.io
). Recuerde que todas las instrucciones empiezan con un número de línea,
17_MAQ_CAP_17_DEITEL.indd750
4/19/081:30:15AM