Examen CP1 de prácticas

Anuncio
7 de Febrero de 2007
Examen CP1 de prácticas
Nombre:
Apellidos:
DNI:
1
2
3
4
5
6
7
8
9
10
Respuestas al Test
a
b
c
d
a
b
c
d
a
b
c
d
a
b
c
d
a
b
c
d
a
b
c
d
a
b
c
d
a
b
c
d
a
b
c
d
a
b
c
d
e
e
e
e
e
e
e
e
e
e
1. La gramática que generamos en la práctica es:
a. LR(0) y libre de contexto.
b. LR(k) para k>1
c. LL(1) y ambigua.
d. LL(1) y no ambigua.
e. Ninguna de las anteriores.
2. El compilador que generamos en la práctica es:
a. De una pasada y el análisis sintáctico Bottop-up (ascendente).
b. De una pasada y el análisis sintáctico Top-down (descendente).
c. De n pasadas siendo n el número de pasadas necesarias para el análisis y el
análisis sintáctico Bottop-up (ascendente).
d. De n pasadas siendo n el número de pasadas necesarias para el análisis y el
análisis sintáctico Top-down (descendente).
e. Ninguna de las anteriores.
3. ¿Cómo se define la instrucción de escritura de la gramática de la práctica?
a. write “(“ ( string | <exp_aritmetica> ) { , ( string | <exp_aritmetica> ) } “)” “;”
b. write “(“ <exp> { , <exp> } “)” “;”
c. write “(“ ( ident “[“numero”]” | string ) { , ( ident “[“numero”]” ) } “)” “;”
d. write “(“ ( <exp> | string ) { , ( <exp> | string ) } “)” “;”
e. Respuestas c y d.
4. ¿Cómo se define la instrucción de control de flujo if de la gramática de la práctica?
a. if <exp> then {<instruccio>} [else {<instruccio>} ] endif
b. if <exp_booleana> then {<instruccio>} [else {<instruccio>} ] endif
c. if “(“ <exp_booleana> “)” <instruccio> [else <instruccio>]
d. if <exp> then <instruccio> [else <instruccio>] end
e. Ninguna de las anteriores.
5. ¿Cuál de los siguientes códigos es correcto en la práctica?
a.
b.
c.
real notas(int a)
int notas;
real notas(int a)
body
body
if a<5 then
real notas()
if a<5 then
int notas;
body
int notas;
else notas = 1;
notas=1;
endif
endif;
notas = 1;
endbody
endbody
endbody
d.
real notas()
body
int notas;
notas = 1;
endbody
e. Ninguna de las anteriores.
6. ¿Qué información guardamos en la T.S referente a las funciones en la práctica?
a. El nombre, el número de parámetros, y el tipo de retorno.
b. El nombre, el número y tipo de los parámetros ordenados.
c. El nombre, el número y tipo de parámetros, el desplazamiento y tipo del valor de
retorno y la posición.
d. El nombre, el número y tipo de parámetros, el desplazamiento y tipo del valor de
retorno y el nivel.
e. Ninguna de las anteriores.
7. ¿Cuándo creamos y eliminamos ámbitos en la gramática de la práctica?
a. Al declarar una función o un procedimiento.
b. La opción a) y en los cuerpos de instrucciones de las instrucciones if/else y
while.
c. Al declarar una función y en el cuerpo de instrucciones del if/else y while.
d. La opción b) y c) son correctas.
e. Ninguna de las anteriores.
8. Si tenemos el siguiente programa ejemplo.txt:
int main()
body
real[2] r;
int i;
r[0] = 2.3;
r[1] = 2.0;
r[2] = r[0]*r[1];
i=r;
write (“Resultado: “,i);
endbody
¿Cual será la salida si compilamos y ejecutamos el código de la práctica?
a.
b.
c.
d.
Resultado: 4
Resultado: 4.6
Error: EXCEPTION_ACCESS_VIOLATION
Error a la linea 8 del fitxer ejemplo.txt
i=r;
^ Error de tipus de dades en =
e. Ninguna de las anteriores.
9. Si tenemos el siguiente programa ejemplo1.txt:
int i;
int multiplica(int m)
body
return m*2;
endbody
int main()
body
i = 2;
i = multiplica(i) + multiplica(i-1);
endbody
¿Cual será el código en pseudosassembler correcto que podemos generar para la
instrucción: i = multiplica(i) + multiplica(i-1); ?
a.
b.
c.
d.
IAddSP -4
IPushBVar 4 -4
ICall multiplica
IAddSP 4
IAddSP -4
IPushBVar 4 -4
IPushLit 4 1
ISubInt
ICall multiplica
IAddSP 4
IAddInt
IPopBVar 4 -4
IAddSP -4
IPushGVar 4 i
ICall multiplica
IAddSP 4
IAddSP -4
IPushGVar 4 i
IPushLit 4 1
ISubInt
ICall multiplica
IAddSP 4
IAddInt
IPopGVar 4 i
e. Ninguna de las anteriores.
IPushGVar 4 -4
IAddSP -4
ICall multiplica
IAddSP 4
IPushGVar 4 -4
IPushLit 4 1
ISubInt
IAddSP -4
ICall multiplica
IAddSP 4
IAddInt
IPopGVar 4 -4
IAddSP -4
IPushBVar 4 -4
ICall multiplica
IAddSP 8
IAddSP -4
IPushBVar 4 -4
IPushLit 4 1
ISubInt
ICall multiplica
IAddSP 8
IAddInt
IPopBVar 4 -4
10. Si tenemos el siguiente programa ejemplo2.txt:
real[30] lista;
int notas(int pos)
body
read(lista [pos]);
if lista [pos]>=5.0 then return 1;
else
endif
return 0;
endbody
int main()
body
int result;
notas(0);
endbody
¿Cual será el código en pseudosassembler correcto que podemos generar para la
instrucción: if lista[pos]>=5.0 then return 1; else endif?
a.
b.
IPushAddressGVar lista
IPushLit 4 0
IPushLit 4 8
IMultInt
IAddInt
IPushInd 8
IPushLit 8 5
IGreaterEqReal
IJmpFalse L_Else
IPushLit 4 1
IPopBVar 4 12
IUnlink
IRet
IJmp L_FiIf
L_Else:
L_FiIf:
c.
IPushAddressGVar lista
IPushBVar 4 8
IPushLit 4 8
IMultInt
IAddInt
IPushInd 8
IPushLit 8 5
IGreaterEqReal
IJmpFalse L_Else
IPushLit 4 1
IPopBVar 4 12
IUnlink
IRet
IJmp L_FiIf
L_Else:
L_FiIf:
e. Ninguna de las anteriores.
IPushAddressGVar lista
IPushBVar 4 8
IPushLit 4 8
IMultInt
IAddInt
IPushInd 8
IPushLit 8 5
IGreaterEqReal
IJmpFalse L_Else
IPushLit 4 1
IPopBVar 4 12
IJmp L_FiIf
L_Else:
L_FiIf:
d.
IPushAddressGVar lista
IPushBVar 4 8
IPushLit 4 8
IMultInt
IAddInt
IPushInd 8
IPushLit 4 5
IIntToReal
IGreaterEqReal
IJmpFalse L_Else
IPushLit 4 1
IPopBVar 4 12
IUnlink
IRet
L_Else:
L_FiIf:
Descargar