Considere la siguiente sintaxis para un lenguaje sencillo de

Anuncio
Universidad de los Andes
Ingeniería de Sistemas y Computación
ISIS-4109 Diseño de Lenguajes
Parcial 1
23 de septiembre de 2009
Nombre:
Carné:
Esta prueba es INDIVIDUAL.
Está permitido el uso de libros, fotocopias y/o apuntes.
El intercambio de información relevante a esta prueba con otro estudiante está
terminantemente prohibido.
Cualquier irregularidad con respecto a estas reglas podría ser considerada fraude.
Responda en los espacios proporcionados para cada pregunta. No se
aceptarán hojas adicionales.
No olvide marcar el examen antes de entregarlo.
IMPORTANTE: Soy consciente de que cualquier tipo de fraude en los exámenes es considerado
como una falta grave en la Universidad. Al firmar y entregar este examen doy expreso testimonio de
que este trabajo fue desarrollado de acuerdo con las normas establecidas, del mismo modo aseguro
que no participé en ningún tipo de fraude.
Firma :
Fecha:
CALIFICACIÓN
NO ESCRIBA NADA ABAJO
Punto 1.
Punto 2a.
Punto 2b.
Punto 3.
TOTAL
20%
15%
15%
50%
100%
OJO: SE TENDRÁ EN CUENTA ORTOGRAFÍA Y REDACCIÓN AL CALIFICAR. PUEDE PERDER HASTA EL
20% DE SU NOTA POR ESTE CONCEPTO.
Lenguajes Procedimentales
Considere la siguiente gramática que define la sintaxis para un lenguaje sencillo de
programación.
P
Prog id Decs Begin Is End
Decs
Decs
dec ; decs
Dec
Dec
Dec
tipo nombres
tipo fun id (Pars) Decs Begin Is End
proc id ( Pars ) Decs Begin Is End
PArss
Par Pars
Pars Pars
Par
Par
Par
NAME tipo id
REF tipo id
VAL tipo id
Nombres
Nombres
Tipo
Tipo
Is
Is
id , Nombres
id
int
float
I
I ; Is
I
I
I
I
I
I
id := E
write ( E )
If CondE then Is else Is fi
If CondE then Is fi
While CondE do Is od
id ( actuals)
I
return RV
CondE
CondE
CondT
CondT
CondT and CondF
CondF
CondF
CondF
CE
CE opRel CE
OpRel
< | >| >= | <= | = | !=
E
E
E
E+T
E-T
T
T
T
T
T
SignedF * T
SignedF / T
SignedF mod T
SignedF
SignedF
SignedF
SignedF
F
F
F
F
F
F
F
not F
-F
F
num
id
true
false
(E)
read()
id ( actuals)
CondE or CondT
CondT
Considere una máquina abstracta (la máquina P) con para implementar este lenguaje con las
siguientes estructuras:
Aclaraciones y supuestos:





Suponemos que sí se admiten funciones y procedimientos recursivos.
Se pueden pasar argumentos por referencia, por valor, por nombre o por valor resultado.
Alcance estático.
Se admiten definiciones dentro de definiciones.
No se distinguen mayúsculas y minúsculas.
Conteste las siguientes preguntas, justificando su respuesta.
1. Binding
Dada la arquitectura y la sintaxis propuesta es posible que desde un procedimiento o función se pueda
acceder a los datos internos de otro procedimiento o función. Por ejemplo: en programa principal están
definidos dos procedimientos: poo, y moo. Dentro de moo hay una función foo. Es posible que desde
foo se pueda acceder a los datos definidos en poo?
2. Parámetros
Considere el siguiente programa:
Prog test
int a,b,c;
Proc hoo(PARAMTYPE int x, PARAMTYPE
int z)
begin
x := x + 1;
b := a + y;
z := x + y
end
int y, PARAMTYPE
Begin
a := 1;
b := 2;
c := 3;
// invocación a hoo;
End
a. Suponga que PARAMTYPE es NAME. Para cada una de las siguientes invocaciones de hoo,
diga cómo quedan los valores finales de las variables globales. Si hay error en la invocación
explique por qué.
hoo(a,b+2*a,c)
hoo(a,b,c+a)
b. Suponga que PARAMTYPE es REFERENCIA para el primer y ultimo parámetro y valor para
el segundo. Para cada una de las siguientes invocaciones de hoo, diga cómo quedan los valores
finales de las variables globales. Si hay error en la invocación explique por qué.
hoo(a,b+2*a,c)
hoo(a, a ,a)
Lenguajes Funcionales
Considere el lenguaje funcional visto en clase:
E
E
Es
Es
E
E
E
E
E
E
atom
(Es)
E
E , Es
if E then E else E
fun x  E
(E,E)
let v = x in E
let rec v = E in E
prim E
Conteste la siguiente pregunta, justificando su respuesta.
Cómo implementaría este lenguaje sobre la máquina P? En su respuesta debe incluir lo siguiente:
Los impactos sobre la máquina (nuevas estructuras, instrucciones, si se necesitan)
El esquema de traducción (Puede ser a través de ejemplos).
El esquema de ejecución (Si se ve afectado)
Descargar