748
Capítulo 17 Estructuras de datos
Sección especial: construya su propio compilador
En los ejercicios 7.34 y 7.35 presentamos el Lenguaje Máquina Simpletron (LMS) y usted implementó un simulador
de computadora Simpletron para ejecutar programas escritos en LMS. En esta sección crearemos un compilador que
convierta los programas escritos en un lenguaje de programación de alto nivel a LMS. Esta sección “enlaza” entre sí
todo el proceso de programación. Usted escribirá programas en este nuevo lenguaje de alto nivel, los compilará en el
compilador que va a construir y los ejecutará en el simulador que construyó en el ejercicio 7.35. Usted deberá hacer
todo el esfuerzo posible por implementar su compilador con un enfoque orientado a objetos.
17.26
(El lenguaje Simple) Antes de empezar a construir el compilador, hablaremos sobre un lenguaje de alto nivel
simple pero poderoso, similar a las primeras versiones del popular lenguaje BASIC. Llamaremos a este lenguaje
Simple.
Cada
instrucción de Simple consiste de un número de línea y de una instrucción de Simple. Los números de línea deben
aparecer en orden ascendente. Cada instrucción empieza con uno de los siguientes
comandos de Simple:
rem
,
input
,
let
,
,
goto
,
if/goto
o
end
(vea la fi gura 17.22). Todos los comandos excepto
end
pueden utilizarse en forma repetida.
Simple evalúa solamente las expresiones de enteros que utilizan los operadores
+
,
-
,
*
y
/
. Estos operadores tienen la
misma precedencia que en Java. Pueden utilizarse paréntesis para cambiar el orden de evaluación de una expresión.
Nuestro compilador de Simple reconoce solamente letras en minúscula; por lo tanto, todos los caracteres en un
archivo de Simple deben estar en minúsculas. (Las letras mayúsculas producen un error de sintaxis a menos que aparez-
can en una instrucción
rem
, en cuyo caso se ignoran). Un
nombre de variable es una sola letra. Simple no permite el uso
de nombres descriptivos para las variables, por lo que éstas deben explicarse en comentarios para indicar su uso en un
programa. Simple utiliza solamente variables enteras. Simple no tiene declaraciones de variables; con sólo mencionar
el nombre de una variable en un programa, ésta se declara y se inicializa con cero. La sintaxis de Simple no permite la
manipulación de cadenas (leer una cadena, escribir una cadena, comparar cadenas, etcétera). Si se encuentra una cadena
en un programa de Simple (después de un comando distinto de
rem
), el compilador genera un error de sintaxis. La pri-
mera versión de nuestro compilador supone que los programas de Simple se introducen correctamente. En el ejercicio
17.29 pedimos al lector que modifi que el compilador para llevar a cabo la comprobación de errores de sintaxis.
Simple utiliza la instrucción
if/goto
condicional y la instrucción
goto
incondicional para alterar el fl ujo de con-
trol durante la ejecución del programa. Si la condición en la instrucción
if/goto
es verdadera, el control se transfi ere
a una línea específi ca del programa. Los siguientes operadores relacionales y de igualdad son válidos en una instrucción
if/goto
:
<
,
>
,
<=
,
>=
,
==
o
!=
. La precedencia de estos operadores es la misma que en Java.
Consideremos ahora varios programas para demostrar las características de Simple. El primer programa (fi gura
17.23) lee dos enteros del teclado, almacena los valores en las variables
a
y
b
, calcula e imprime su suma (almacenada
en la variable
c
).
El programa de la fi gura 17.24 determina e imprime el mayor de dos enteros. Los enteros se introducen desde
el teclado y se almacenan en
s
y
t
. La instrucción
if/goto
evalúa la condición
s
>=
t
. Si es verdadera, el control se
transfi ere a la línea
90
y se muestra el valor de
s
en pantalla; en caso contrario se muestra
t
y el control se transfi ere a la
instrucción
end
de la línea
99
, en donde termina el programa.
99
97
92
83
72
71
69
49
44
40
32
28
19
18
11
Figura 17.21
| Resultados de ejemplo del método recursivo
mostrarArbol
.
17_MAQ_CAP_17_DEITEL.indd748
4/19/081:30:14AM