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)