MUSIM/0 - ENSAMPOCO/0

5
MUSIM/0 Los componentes léxicos o tokens que conforman el lenguaje son los siguientes: Identificadores, que solo son nombres de variables y están compuestos por una única letra minúscula de rango a-z. Constantes numéricas de un solo digito, de rango 0-9. Operadores: +,-,*,/, y %. Símbolo de asignación: = (igual). Paréntesis: ( y ). Separador de sentencias: ; (punto y coma). Indicadores de principio y fin de bloque: { y }. Palabras reservadas que están formadas por una letra mayúscula. Tan solo son tres: R (lectura), W (escritura) y M (programa principal). Puede observarse que este lenguaje solo permite tres tipos de sentencias: lectura, asignación y escritura. Tiene un solo tipo de datos: entero. Las variables están formadas por una única letra minúscula, y las constantes son de un dígito. Tiene cinco operadores + (adición), -(diferencia), *(producto), / (división entera), y %(modulo). Se permite el uso de paréntesis. Ejemplo 1: M { R a; R b; c = a + b; W c; } Analicemos lo que hace este programa: “R a” y “R b” indica que le leen las variables a y b. “c = a + b” indica que en la variable c se asignara el resultado de la suma de a y b. “W c” indica que se escribirá la variable c. En pocas palabras, este programa leerá dos variables, las sumara y finalmente mostrará el resultado en pantalla. Ejercicio 1 M { R a; R b; R c; p = (a + b + c)/3; W p; }

Transcript of MUSIM/0 - ENSAMPOCO/0

Page 1: MUSIM/0 - ENSAMPOCO/0

MUSIM/0

Los componentes léxicos o tokens que conforman el lenguaje son los siguientes:

Identificadores, que solo son nombres de variables y están compuestos por una única

letra minúscula de rango a-z.

Constantes numéricas de un solo digito, de rango 0-9.

Operadores: +,-,*,/, y %.

Símbolo de asignación: = (igual).

Paréntesis: ( y ).

Separador de sentencias: ; (punto y coma).

Indicadores de principio y fin de bloque: { y }.

Palabras reservadas que están formadas por una letra mayúscula.

Tan solo son tres: R (lectura), W (escritura) y M (programa principal).

Puede observarse que este lenguaje solo permite tres tipos de sentencias: lectura, asignación y

escritura. Tiene un solo tipo de datos: entero. Las variables están formadas por una única letra

minúscula, y las constantes son de un dígito.

Tiene cinco operadores + (adición), -(diferencia), *(producto), / (división entera), y %(modulo).

Se permite el uso de paréntesis.

Ejemplo 1:

M { R a; R b; c = a + b; W c; }

Analicemos lo que hace este programa:

“R a” y “R b” indica que le leen las variables a y b.

“c = a + b” indica que en la variable c se asignara el resultado de la suma de a y b.

“W c” indica que se escribirá la variable c.

En pocas palabras, este programa leerá dos variables, las sumara y finalmente

mostrará el resultado en pantalla.

Ejercicio 1

M { R a; R b; R c; p = (a + b + c)/3; W p; }

Page 2: MUSIM/0 - ENSAMPOCO/0

Describa lo que hace el programa anterior según las definiciones del lenguaje:

Ejercicio 2

M { R a; R b; r = (a * a) + (b * b); W r; }

Describa lo que hace el programa anterior.

Ejercicio 3

Escriba un programa en MUSIM/0 que lea un número, calcule y muestre en pantalla cuanto es

ese número elevado al cubo.

Ejercicio 4

Escriba un programa en MUSIM/0 que lea 5 números, calcule y muestre en pantalla: la suma,

promedio y multiplicación de los 5 números.

Ejercicio 5

Escriba un programa en MUSIM/0 que lea un número y determine si este es par o impar. Si es

par deberá mostrar 0 en pantalla, mientras que si es impar deberá mostrar 1

Page 3: MUSIM/0 - ENSAMPOCO/0

ENSAMPOCO/0

Como lenguaje objeto se utiliza un lenguaje intermedio que es un pequeño ensamblador, que

se denomina ENSAMPOCO/0. Este ensamblador trabaja sobre una maquina abstracta, en este

caso particular es una máquina de pila. La máquina tendrá una memoria de 26 celdas cuyas

direcciones se nombrarán con las letras de la ‘a’ a la ‘z’, y una pila LIFO donde se realizarán las

operaciones aritméticas.

A continuación se describe la forma de trabajo de las distintas instrucciones:

Instrucción Descripción

Instrucción Descripción

.CODE Indica el comienzo del código.

PUSHC Coloca una constante en la pila. El operando es una constante.

PUSHA Coloca en la pila la dirección de una variable. El operando es una variable, dado que las direcciones se denominan con el nombre de las variables.

LOAD Asume que el último valor insertado en la pila es una dirección. Esta dirección es extraída de la pila y en su lugar se pone el valor ubicado en dicha dirección. No tiene operando.

STORE Usa los dos últimos elementos de la pila. Uno es la dirección de una celda y memoria y el otro el valor a almacenar en dicha celda. El último elemento de la pila es el valor y el otro la dirección. Después de ejecutada la instrucción, los dos elementos implicados son extraídos de la pila, dejándolos en el mismo lugar. No tiene operando.

NEG Cambia el signo del último valor introducido en la pila, dejándolo en el mismo lugar. No tiene operando.

ADD Cambia el signo del último valor introducido en la pila, dejándolo en el mismo lugar. No tiene operando.

MUL Opera con los dos últimos elementos introducidos en la pila, extrayéndolos y dejando en su lugar el producto. Por tanto la pila habrá disminuido en un elemento. No tiene operando.

DIV Opera con los dos últimos elementos introducidos en la pila, extrayendo primero el denominador y después el numerador y dejando en su lugar la división entera. Por tanto la pila habrá disminuido en un elemento. No tiene operando.

MOD Opera con los dos últimos elementos introducidos en la pila, extrayendo primero el denominador y después el numerador y dejando en su lugar el modulo. Por tanto, la pila habrá disminuido en un elemento. No tiene operando.

INPUT Toma el valor del buffer de entrada, en este caso el teclado, y lo coloca en la dirección asignada a la variable. La pila no sufre cambios.

OUTPUT Toma el valor de la dirección indicada y lo lleva al buffer de salida, en este caso la pantalla. La pila no sufre cambios.

END Indica el fin de programa.

Ejemplo 2

A continuación se muestran un programa fuente en MUSIM/0, y su traducción al código

intermedio ENSAMPOCO/0

Código en MUSIM/0

Page 4: MUSIM/0 - ENSAMPOCO/0

M { R a; R b; z = a + b; W z; }

Traducción a ENSAMPOCO/0

.CODE INPUT a INPUT b PUSHA z PUSHA a LOAD PUSHA b LOAD ADD STORE OUTPUT z END

Ejercicio 6

Traducir el siguiente código en MUSIM/0 A ENSAMPOCO/0

M { R a; R b; z = a + b - 2; W z; }

Traducción a ENSAMPOCO/0

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

Ejercicio 7

Traducir el siguiente código en MUSIM/0 a ENSAMPOCO/0

Page 5: MUSIM/0 - ENSAMPOCO/0

M { R a; R b; R c; q = (a * a) + (b * b) + (c * c); W q; }

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________

_____________________________________________________________