Procesadores de Lenguajes

Anuncio
Procesadores de Lenguajes
Examen final
9/6/2006
APELLIDOS:
NOMBRE:
1.1
1.2
2.1
3.1
TOTAL
NOTA
Cuestiones:
En el lenguaje de “scripting” BASH los números se representan en la forma
base#numero. Por ejemplo, 16#42 será interpretado como 42 en base 16. La
siguiente gramática describe la estructura de este formato, y las acciones
semánticas asociadas para calcular el equivalente de un número en base 10.
1.
Reglas
N ::= DS1 ‘#’ DS2
DS ::= DS1 digito
DS ::= digito
Acciones semánticas
N.v = DS2.v
DS2.b = DS1.v
DS1.b = 10
DS.v = DS1.v * DS1.b + digito.v
DS1.b = DS.b
DS.v = digito.v
Cada símbolo terminal ‘digito’corresponde a un dígito entre 0-9, y se reconoce
durante el análisis morfológico. El analizador morfológico asigna como valor del
atributo ‘v’ del símbolo ‘digito’ el valor entero correspondiente al dígito.
Se pide:
1.1 (0,2 puntos) Dibujar el árbol de análisis para la entrada ‘8#45’.
1.2 (0,8 puntos) Calcular los valores de todos los atributos en el árbol de análisis.
2.
Suponer que en un lenguaje parecido a BASH se permiten números en el
formato siguiente:
Entero Decimal:
Entero en base x:
[0-9]+
[0-9]+#[0-9]+
ej., 79
ej., 8#77
‘+’ indica que ocurre el carácter anterior 1 o más veces.
Una gramática posible para este lenguaje, que cumple los requisitos de
precedencia simple, sería la siguiente:
Num ::= DS | DS1 # DS1
DS1 ::= DS
DS ::= DS digito | digito
Se pide:
2.1 (1 punto) Construir la tabla de precedencia simple para la gramática anterior.
3.
Dado el siguiente programa:
int i=0, b = 10, c=5, d;
while (i++ < 10) {
if (c != i)
d = b /(c – i);
}
Se pide:
3.1 (1 punto) Proporcionar el resultado de generar el código intermedio en forma de
cuádruplas.
Procesadores de Lenguajes
Examen final
9/6/2006
APELLIDOS:
NOMBRE:
4.a
4.b
5
6.a
6.b
6.c
6.d
TOTAL
NOTA
4. Un lenguaje de programación acepta la definición de series finitas de números naturales,
por ejemplo: {1,2,3,4,6} o {10,12,14}. Todas las series deben tener al menos un elemento.
Se pide:
a) (0,5 puntos) Construir una gramática LL(1) que defina este lenguaje.
b) (0,5 puntos) Construir la tabla de análisis LL(1) para la gramática del apartado
anterior
5. (1 punto) Dado el siguiente código ¿cuál será el contenido de la pila una vez alcanzado
el punto indicado por la flecha? Indicar la posición del puntero base (BP o EBP) y del
puntero de pila (SP o ESP).
int rutina (int a, char *b)
{
double i;
int j, k;
i = 7;
j = 4;
...
m = rutina(3, 5);
...
if (a < b) k=i
else k = j;
return k;
}
6. Conteste a las siguientes preguntas sobre la tabla de símbolos:
a) (0,25 puntos)¿qué es una tabla de símbolos?
b) (0,25 puntos)¿qué tipo de información se almacena en una tabla de símbolos?
c) (0,25 puntos)¿cuáles son las operaciones que pueden realizarse sobre una tabla de
símbolos?
d) (0,25 puntos)¿en qué situaciones se utilizan cada una de las operaciones descritas
en el apartado c)
Procesadores de Lenguajes
Examen final
9/6/2006
APELLIDOS:
NOMBRE:
7
8.1
8.2
8.3
9
TOTAL
NOTA
7. (1 punto) Se está diseñando un lenguaje de programación para manejar objetos gráficos.
Entre las constantes que tiene que manipular están las siguientes:
 Constantes numéricas de tipo real con los dos siguientes formatos:
 La parte entera y la parte fraccionaria separadas por un punto “.”. En este caso,
tanto la parte entera como la parte fraccionaria son números naturales con la
notación matemática habitual.
 Notación base-exponente en la que se separan ambas partes mediante el símbolo
“e”. En este caso la base es un número natural con la notación matemática habitual
pero el exponente es un número entero que podría estar precedido de manera
opcional por el signo menos “-“ (en el caso de ser negativo)
 A continuación se muestran ejemplos de estas constantes
1.2 34.1 1234e2 1234e-1
 Constantes que representan puntos tanto de dos dimensiones como de tres.
 Se representan de manera funcional con la palabra punto seguida, entre paréntesis,
por los valores reales de las coordenadas separadas por el símbolo punto y coma “;”.
 A continuación se muestran ejemplos de estas constantes
punto(1.2;1234e-1)
punto(1.2;34.1;1234e1)
 Constantes que representan polígonos.
 Con una notación funcional similar a los puntos, con la palabra polígono seguida,
entre paréntesis, por los puntos que definen sus vértices separados mediante el
símbolo punto y coma “;”. No se permite mezclar puntos de diferente dimensión en
el mismo polígono y el número de vértices tiene que ser mayor o igual que 1.
poligono(punto(1.2;1234e-1);punto(1e2;1234.1))
Se pide diseñar un conjunto de expresiones regulares que identifique los siguientes
elementos (para su comodidad puede utilizar la notación de flex; en otro caso especifique
previamente la notación que va a utilizar para cada operador de las expresiones regulares):
 Las constantes de tipo real.
 Las constantes que representen puntos.
 Las constantes que representen polígonos.
8.1. (0,6 puntos)¿A qué técnica de análisis ascendente no puede corresponder la siguiente
tabla de análisis? ¿Por qué?
T
d e
0
1
2 d3
3
4
5 d8 d7
6
7
8
9
10
d7
11
Acción
b ;
d2
f
$
N
B D E
1
acc
4
r2
d5
6
d9
d10 r4
r3
r1
11
r5
Ir_a
8.2. (0,7 puntos) Para las parejas de estados que considere que pueden unificarse según el
algoritmo LALR visto en clase, modifique en el estado de la derecha lo que considere
oportuno para realizar esa unificación. Recuerde que en la notación AA+ {$} el punto
indica una posición en la parte derecha de la regla por lo que este ejemplo sería equivalente
a la configuración (x,2,{$}), donde x indica un número de regla. Nótese que para este
ejercicio conocer el valor de dicho número no afecta a la solución.
a)
b)
c)
8.3. (0,7 puntos) Considere la gramática que contiene el subconjunto de reglas que se
muestra a continuación:
···
Q(E+E)
EE*E
E(E)
Ei
···
SS;S
SA
Ai
···
Se desea realizar un analizador sintáctico ascendente con la técnica LR(1).
Complete los dos estados del siguiente fragmento de analizador sintáctico LR(1):
9. Dado el siguiente fragmento de código
for (j=1; j<50; j=j+2;)
{
···
k= ( … d+j*f… )
···
}
Donde se puede considerar que d y f son invariantes del bucle.
Responda razonadamente las preguntas que se le plantean a continuación:
Suponga que en el grupo de cuádruplas que aparecerán a continuación
 La etiqueta INIT, se refiere a la parte de inicialización del bucle.
 La etiqueta LOOP, indica el principio del cuerpo del bucle.
 La etiqueta INCR, se refiere a las cuádruplas en las que se realizan los incrementos
de las variables del bucle.
a) (0,2 puntos) Considere el siguiente conjunto de cuádruplas que podría obtenerse al
procesar el fragmento de código anterior:
INIT:(=,
LOOP:···
(*,
(+,
···
INCR:(+,
1,
,
j)
j,
t1,
f,
d,
t1)
t2)
j,
2,
j)
¿Cuál es la variable del bucle ?
¿Cuál es el incremento del bucle?
b) (0,4 puntos) Tomando como punto de partida el conjunto de cuádruplas del apartado a)
¿Cuál es el conjunto de cuádruplas resultante al aplicar el algoritmo para la optimización de
reducción de fuerza en bucles contenido en el temario de la asignatura a la cuádrupla
(*,j,f,t1)?
c) (0,4 puntos) Considere el siguiente conjunto de cuádruplas:
INIT:(=,
LOOP:···
(+,
(*,
···
INCR:(+,
1,
,
j)
t1,
j,
d,
f,
t2)
t1)
j,
2,
j)
¿Cuál es el conjunto de cuádruplas resultante al aplicar el algoritmo para la optimización de
reducción de fuerza en bucles contenido en el temario de la asignatura a la cuádrupla
(+,t1,d,t2)?
SOLUCIONES
1.
N v=37
b=10 DS v=8
b=8 DS v=37
b=8 DS v=4
dig v=8
‘#’
dig v=4
dig v=5
2.
#
#
digit
NUM
DS
DS1
>
>
=
3.
1. (:=, 0, , i)
2. (:=, 10, , b)
3. (:=, 5, , c)
4. (<, i, 10, t1)
5. (+, i, 1, i)
6. (jfalse, t1, 13, )
7. (!=, c, i, t2)
8. (jfalse, t2, 12, )
9. (-, c, i, t3)
10. (/, b, t3, t4)
11. (:=, t4, , d)
12. (jmp, 4, , )
13.
4.a)
(1) Serie ::= { Lista }
(2) Lista ::= NUM FinLista
(3) FinLista ::= , NUM FinLista
(4)
|
digit
<
>
=
NUM
DS
<
DS1
=
4.b)
Serie
Lista
FinLista
{
{ Lista }
NUM
}
,
$
NUM FinLista

, NUM FinLista
5.
5
3
Dirección retorno
BP
BP antiguo
7
4
7
SP
6.
a) Una tabla de símbolos es un conjunto de pares clave-valor
b) En la TS se almacena toda la información referente a variables del programa: tipo,
número de dimensiones (si se trata de un array), número y tipo de argumentos (si se
trata de una función), etc.
c) Las operaciones que se realizan sobre una tabla de símbolos son: búsqueda,
inserción, cambio de valor
d) Cuando se procesa una declaración se realiza primero una búsqueda para comprobar
que el identificador no ha sido previamente declarado, y una inserción
Cuando se procesa una instrucción ejecutable se realiza una búsqueda para
comprobar que el identificador se ha declarado previamente
La operación de cambio de valor puede utilizarse por ejemplo, cuando localizamos
la etiqueta correspondiente a un GOTO que se había procesado previamente. En ese
momento podemos modificar el atributo dirección_salto del identificador
correspondiente a la etiqueta.
7.
 Constantes de tipo real.
DIGITO [0-9]
ENTERO {DIGITO}+
REAL1 {ENTERO}"."{ENTERO}
REAL2 {ENTERO}e{ENTERO}|{ENTERO}e”-“{ENTERO}
REAL {REAL1}|{REAL2}
 Constantes que representen puntos.
PUNTO2D punto"("{REAL}";"{REAL}")"
PUNTO3D punto"("{REAL}";"{REAL}";"{REAL}")"
 Constantes que representen polígonos.
POLIGONO2D poligono"("{PUNTO2D}(";"{PUNTO2D})*")"
POLIGONO3D poligono"("{PUNTO3D}(";"{PUNTO3D})*")"
8.1. No puede ser LR(0) porque faltan reducciones en todas las casillas de la misma fila
(en la parte azul)
8.2. Sólo se puede unificar el que se muestra:
8.3
Q(E+E) {$,i}
Q(E+E) {$,i}
EE*E {),*}
E(E) {),*}
Ei {),*}
;
SS;S {$}
SS;S {$}
SS;S {$,;}
SA {$,;}
Ai {$,;}
9.a) La variable del bucle es j y el incremento 2.
9.b) En la cuádrupla (*,j,f,t1) la variable del bucle es j con incremento 2 y la
invariante del bucle es f por lo tanto se puede eliminar la cuádrupla y
 Pasar a la parte INIT: ya que el incremento es 2 y t3 es una variable temporal
nueva.
(*,j,f,t1)
(*,2,f,t3)
 Pasar a la parte INCR: ya que la variable que contiene el resultado de la cuádrupla
optimizada es t1 y t3 es la variable temporal nueva creada en la optimización.
(+,t1,t2,t1)
El resultado es
INIT:(=,
(*,
(*,
LOOP:···
(+,
···
INCR:(+,
(+,
1,
j,
2,
,
f,
f,
j)
t1)
t3)
t1,
d,
t2)
j,
t1,
2,
t3,
j)
t1)
9.c) En este caso la cuádrupla (+,t1,d,t2) no tiene la estructura necesaria para la
optimización (+,variable_bucle, invariante_bucle, variable) ya que
aunque d es invariante del bucle, t1 no es la variable del bucle (lo es j).
Descargar