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.