# Primer examen intermedio de la asignatura Procesadores de Lenguajes

1/4/2003:

                  1.1 1.2 1.3 2.1 2.2 TOTAL
                  -------------------------
    CALIFICACION: |   |   |   |   |   |   |
                  -------------------------

## Cuestiones:

1. Sea el lenguaje {anbm+nam|m,n>=0}
   Se pide:
   1. Construir una gramática LL(1) que lo reconozca (2 puntos).
   2. Construir el analizador sintáctico correspondiente (2 puntos).
   3. Analizar las siguientes palabras: aabbba, aaabb (2 puntos).
2. Decir cuáles son los dos métodos principales que se utilizan para resolver colisiones en tablas hash. Describir el procedimiento de búsqueda de una clave k para los dos casos (4 puntos).

# Examen final de la asignatura Procesadores de Lenguajes

13/6/2003

                  1.1 1.2 1.3 1.4 1.5 2.1 2.2 2.3  3  TOTAL
                  -----------------------------------------
    CALIFICACION: |   |   |   |   |   |   |   |   |   |   |
                  -----------------------------------------

## Cuestiones:

1. Se desea construir un intérprete para un lenguaje de partituras musicales. Una partitura contiene al menos una nota y está formada por uno o más mandatos de los siguientes tipos:
   - Indicaciones de velocidad (tempo): la letra T seguida por una cifra de 0 a 6, con la siguiente interpretación:
     - 0: Largo; 1: Larguetto; 2: Adagio; 3: Andante; 4: Moderato; 5: Allegro; 6: Presto
   - Indicaciones de octava: la letra O seguida por una cifra de 0 a 6, con la siguiente interpretación:
     - 0: La octava más grave
     - 3: La octava central
     - 6: La octava más aguda
   - Indicaciones de pausa: la letra P seguida por una cifra de 0 a 6, que representa la duración de la pausa con la siguiente interpretación:
     - 0: Redonda; 1: Blanca; 2: Negra; 3: Corchea; 4: Semicorchea; 5: Fusa; 6: Semifusa
   - Indicaciones de nota: una de las letras de la A a la G, seguida por una alteración opcional y por la duración de la nota (una cifra de 0 a 6, con la misma interpretación que en las pausas).

     La nota se interpreta así:

     - A: La; B: Si; C: Do; D: Re; E: Mi; F: Fa; G: Sol

     La alteración puede ser una de las siguientes:

     - +: Sostenido
     - -: Bemol

   Ejemplo de partitura musical: T3O3C2E2G2B-2 toca las notas Do, Mi, Sol y Si bemol de la octava central, con duración de notas negras y tempo andante.

   Se pide:

   1. Construir una gramática SLR1 que represente el lenguaje. Puede utilizarse el símbolo terminal LETRA para representar el conjunto de las letras A a G (las notas) y el símbolo terminal CIFRA para representar las cifras 0 a 6. Los demás caracteres mencionados (T,O,P,+,-) son símbolos terminales independientes (1 punto).
   2. Construir la tabla del análisis correspondiente (2 puntos).
   3. Analizar la partitura del ejemplo (1 punto).
   4. Construir una gramática LL(1) equivalente (1 punto).
   5. Construir el analizador sintáctico correspondiente (1 punto).

   # Examen final de la asignatura Procesadores de Lenguajes

   13/6/2003:

                     1.1 1.2 1.3 1.4 1.5 2.1 2.2 2.3  3  TOTAL
                     -----------------------------------------
       CALIFICACION: |   |   |   |   |   |   |   |   |   |   |
                     -----------------------------------------

2. Dado el siguiente programa:

           int x, y, z, m, n, p;
           ......
           m = y + z;
           x = 1;
           while (x < n) {
              p =(y+z)*x;
              x++;
           }

   1. Convertirlo en cuádruplas (1 punto).
   2. Aplicar el algoritmo de eliminación de redundancias a las cuádruplas anteriores (1 punto).
   3. Aplicar reducción de fuerza a las cuádruplas anteriores (1 punto).
3. Describir el algoritmo que se utiliza para calcular el número mínimo de variables auxiliares necesarias al generar las cuádruplas para una expresión (1 punto).

Las notas se harán públicas el 30 de junio. La revisión de teoría será el 2 de julio en los despachos B304 y B320 a las 10 de la mañana.

# Soluciones

- 1.1 Gramática SLR1

       PART    ::=   MAND CIFRA PART
                |    NOTA CONT
       CONT    ::=   MAND CIFRA CONT
                |    NOTA CONT
                |    ^
       MAND    ::=   T
                |    O
                |    P
       NOTA    ::=   LETRA ALTER CIFRA
       ALTER   ::=   +
                |    -
                |    ^

- 1.2 Tabla del análisis

      Estados
      1:   ( 0 0 )  ( 1 0 )  ( 2 0 )  ( 6 0 )  ( 7 0 )  ( 8 0 )  ( 9 0 )
      2:   ( 0 1 )
      3:   ( 1 1 )
      4:   ( 2 1 )  ( 3 0 )  ( 6 0 )  ( 7 0 )  ( 8 0 )
      5:   ( 6 1 )
      6:   ( 7 1 )
      7:   ( 8 1 )
      8:   ( 9 1 )  ( 10 0 ) ( 11 0 ) ( 12 0 )
      9:   ( 1 2 )  ( 1 0 )  ( 2 0 )  ( 6 0 )  ( 7 0 )  ( 8 0 )  ( 9 0 )
      10:  ( 2 2 )
      11:  ( 3 1 )
      12:  ( 9 2 )
      13:  ( 10 1 )
      14:  ( 11 1 )
      15:  ( 1 3 )
      16:  ( 3 2 )  ( 4 0 )  ( 5 0 )  ( 9 0 )
      17:  ( 9 3 )
      18:  ( 3 3 )
      19:  ( 4 1 )  ( 3 0 )  ( 6 0 )  ( 7 0 )  ( 8 0 )
      20:  ( 4 2 )

      Tabla de análisis
           PART CONT COND MAND NOTA ALTER +  -  CIFRA LETRA O  P  T   -|
         1    2    .    .    3    4     .  .  .     .     8  6  7  5   .
         2    .    .    .    .    .     .  .  .     .     .  .  .  . FIN
         3    .    .    .    .    .     .  .  .     9     .  .  .  .   .
         4    .   10    .   11    .     .  .  .     .     .  6  7  5   .
         5    .    .    .    .    .     .  .  .    -6     .  .  .  .   .
         6    .    .    .    .    .     .  .  .    -7     .  .  .  .   .
         7    .    .    .    .    .     .  .  .    -8     .  .  .  .   .
         8    .    .    .    .    .    12 13 14   -12     .  .  .  .   .
         9   15    .    .    3    4     .  .  .     .     8  6  7  5   .
        10    .    .    .    .    .     .  .  .     .     .  .  .  .  -2
        11    .    .    .    .    .     .  .  .    16     .  .  .  .   .
        12    .    .    .    .    .     .  .  .    17     .  .  .  .   .
        13    .    .    .    .    .     .  .  .   -10     .  .  .  .   .
        14    .    .    .    .    .     .  .  .   -11     .  .  .  .   .
        15    .    .    .    .    .     .  .  .     .     .  .  .  .  -1
        16    .    .   18    .   19     .  .  .     .     8  .  .  .  -5
        17    .    .    .    .    .     .  .  .     .     . -9 -9 -9   .
        18    .    .    .    .    .     .  .  .     .     .  .  .  .  -3
        19    .   20    .   11    .     .  .  .     .     .  6  7  5   .
        20    .    .    .    .    .     .  .  .     .     .  .  .  .  -4

- 1.3 Gramática LL(1)

       PART    ::=   T CIFRA PART
                |    O CIFRA PART
                |    P CIFRA PART
                |    LETRA ALTER CIFRA CONT
       CONT    ::=   T CIFRA CONT
                |    O CIFRA CONT
                |    P CIFRA CONT
                |    LETRA ALTER CIFRA CONT
                |    ^
       ALTER   ::=   +
                |    -
                |    ^

- 2.1.

      (1)  (+,y,z,t1)
      (2)  (=,t1,,m)
      (3)  (=,1,,x)
      (4)  (60,x,n,t2)
      (5)  (TRF,t2,,12)
      (6)  (+,y,z,t3)
      (7)  (*,t3,x,t4)
      (8)  (=,t4,,p)
      (9)  (+,x,1,t6)
      (10) (=,t6,,x)
      (11) (TR,,,4)

- 2.2.

      (1)  (+,y,z,t1)
      (2)  (=,t1,,m)
      (3)  (=,1,,x)
      (4)  (60,x,n,t2)
      (5)  (TRF,t2,,11)
      (6)  (*,t1,x,t4)
      (7)  (=,t4,,p)
      (8)  (+,x,1,t6)
      (9)  (=,t6,,x)
      (10) (TR,,,4)

- 2.3.

      (1)  (+,y,z,t1)
      (2)  (=,t1,,m)
      (3)  (=,1,,x)
      (4)  (*,t1,x,t4)
      (5)  (*,1,t1,t7)
      (6)  (60,x,n,t2)
      (7)  (TRF,t2,,13)
      (8)  (=,t4,,p)
      (9)  (+,x,1,t6)
      (10) (=,t6,,x)
      (11) (+,t4,t7,t4)
      (12) (TR,,,6)