CI-2700 Tópicos Especiales - Compiladores
Proyecto Tres - Más Extensiones a Tiny
Agregar las siguientes construcciones a Tiny:
1) El tipo de dato 'char'.
2) Definiciones de constantes, à la Pascal, e.g.,
const Three = 3;
F = 'f';
T = true;
3) Definición de tipos enumerados por el usuario. Ejemplo:
type Color = (red,white,blue);
El tipo intrínsico 'boolean' debe ser re-implementado,
como si fuera un tipo enumerado. Permitir también definiciones
de 'sinónimos', de modo que un nombre de tipo es sinónimo
de otro. Si esto se usa junto con ámbitos (scopes), podemos
intercambiar nombres de tipos:
type A = integer;
integer = boolean;
boolean = A;
4) Para tipos enumeraods, usar la instrucción LIMIT para
producir errores de ejecución si un valor está fuera de
rango. La instrucción LIMIT no tiene operandos, y
opera como se indica en código C abajo. De hecho,
este es el código de la instrucción LIMIT, en
el interpretador.
case LIMITOP : temp2 = PopLf(); /* U */
temp1 = PopLf(); /* L */
temp = PopLf(); /* X */
if ((temp >= temp1) && (temp <= temp2))
PushLf(temp);
else {
fprintf(output,"<<< MACHINE ERROR >>>: ");
fprintf(output,"VALUE OUT OF RANGE0);
DumpMemory(output);
FatalError();
}
break;
5) Agregar las funciones intrínsicas "succ", "pred" y "ord"
(para enteros y caracteres y tipos enumerados), y "chr"
para convertir enteros a caracteres.
6) Cambiar la manera en que se leen datos en Tiny, eliminado
la función (sin parámetros) intrínsica "read", y agregando
la instrucción "read". Se leerán variables así:
read(a,b,c,x,y,z)
Cada argumento de "read" debe ser una variable, de tipo
entero o caracter. Cada variable se lee de una línea
aparte en la entrada. Dos instrucciones máquina son
útiles para esto:
SOS INPUTC
SOS OUTPUTC
7) Permitir la salida de enteros y caracteres, por ejemplo
output('a','=',' ',a,' ',b,3,'x')
También permitir hileras literales, pero solo en la
instrucción "output". Por ejemplo,
output ("a's value is ", a)
Para este proyecto, implementarán "modos" de identificadores.
Detalles en clase.
FECHA DE ENTREGA: Lunes 27 de octubre, 11:59 p.m.