Lenguajes de Programación FCC Verano 2002 BANCO DE PREGUNTAS 1.- En base a los temas estudiados en el curso, que criterios utilizaría para analizar y escoger un lenguaje, para resolver un cierto tipo de problema. 2.- ¿A que se refiere cuando se habla de la ortogonalidad de un lenguaje?¿Qué entendería por un lenguaje 100% Ortogonal? ¿Puede haber un lenguaje no ortogonal? 3.-¿De que le sirve contar con un lenguaje que permita un gran nivel de abstracción? 4.- ¿Cuáles son los principales problemas que enfrenta la compilación por separado de subprogramas? 5.- Enumere dos de las estrategias que se siguen para resolver los problemas de la compilación por separado que mencionó en la pregunta 4. 6.- ¿Cuáles son los aspectos básicos que hay que considerar en el Diseño de un Lenguaje? Descríbalos. 7.-¿Cuáles son los componentes fundamentales de un Lenguaje? Descríbalos. 8.-¿Cuando es necesario utilizar un Cargador o Editor de Vínculos para generar un programa ejecutable? Explique el por qué? 9.- ¿Trate de describir con sus propias palabras los conceptos de Enlace y Tiempo de Enlace? 10.- Explique que significan los conceptos de Enlace Temprano y Enlace Tardío, y ¿Para qué le sirve a un diseñador definir si un lenguaje realizará enlaces tardíos o tempranos? Y a usted ¿Para qué le sirve saber esto? 11.- ¿Cuál es la principal diferencia entre un Lenguaje Imperativo y uno Declarativo? 12.- ¿Cuál es la principal diferencia entre un Lenguaje Estructurado en Bloques y uno Orientado a Objetos? 13.- ¿Sí los Lenguajes Funcionales y los Lógicos son ambos declarativos, ¿porqué se clasifican por separado?, es decir ¿cuáles son sus diferencias?. 14.-¿Para qué sirve especificar la Sintaxis de un Lenguaje? 15.-¿Por qué la descripción de la Sintaxis de un Lenguaje no es suficiente para la especificación del mismo, es decir porque se requiere de su Semántica? 16.- Describa y enliste los, que a su juicio son los tres principales Elementos Sintácticos de un Lenguaje. 17.- Describa las etapas por las que pasa el proceso de traducción de un programa, desde su sintaxis original hasta una forma ejecutable. 1 Lenguajes de Programación FCC Verano 2002 18.- ¿Qué es y para que sirve una Gramática BNF? 19.- ¿Qué es y para que sirve un Árbol Semántico? 20.- ¿Qué es y para que sirve una Gramática de Atributos? 21.- ¿En qué consiste el Análisis Léxico de un Programa? 22.- ¿En qué consiste el Análisis Sintáctico de un Programa? 23.- ¿En qué consiste el Análisis Semántico de un Programa? 2 Lenguajes de Programación FCC Verano 2002 PROBLEMAS 1. Para un lenguaje que se utilice, evalúe las razones de su éxito de acuerdo con la lista de 8 atributos de un buen lenguaje.¿Se debería ampliar la lista? 2. Considere el lenguaje simple siguiente. a y b representan nombres de variables enteras. Cada enunciado puede tener un rótulo como prefijo. Los enunciados en el lenguaje incluyen: a=b a=a+l a=a-1 si a = 0 entonces ir a L si a > 0 entonces ir a L ir a L alto Asignar a a el valor de b Sumar 1 a a Restar 1 de a Si a = 0 transferir el control al enunciado L Si a > 0 transferir el control al enunciado L Transferir el control al enunciado L Detener la ejecución Por ejemplo, el programa que computa a = a + b puede estar dado por: L: a=a+1 B=b-1 si b > 0 entonces ir a L alto (a) Escriba los programas siguientes en este lenguaje: (1) Dados a y b, computar X = a + b (2) Dados a y b, computar X = a * b (3) Dados a, b, c y d, computar X = a * b y Y = e * d (b) Exponga un conjunto mínimo de extensiones necesario para que este lenguaje sea fácil de usar. Tome en cuenta conceptos como subprogramas, enunciados nuevos, declaraciones, etcétera. 2. Las características del C permiten expresar el mismo significado de muchas maneras ¿Cuántos enunciados diferentes puede usted escribir en C que sumen 1 a la variable X, es decir, que sean equivalentes a X = X + 1 ? Analice las ventajas y desventajas de este aspecto del diseño del C. 3. Suponga que un nuevo diseño de lenguaje provee tres tipos básicos de datos: entero, real y de carácter. También proporciona la capacidad para declarar arreglos y registros de datos. Los arreglos tienen elementos del mismo tipo y los registros los tienen de tipos mixtos. Use el concepto de ortogonalidad para criticar estas dos variantes del nuevo diseño: (a) Los elementos de arreglos y registros pueden ser de cualquiera de estos tipos básicos de datos y ellos mismos también pueden ser arreglos o registros (por ejemplo, un elemento de un registro puede ser un arreglo). (b) Los elementos de arreglos y registros pueden ser del tipo entero o real. Los arreglos de caracteres se llaman cadenas y reciben un tratamiento especial. Los elementos de registros pueden ser del tipo de carácter. Los registros pueden tener arreglos o elementos, pero los arreglos 3 Lenguajes de Programación FCC Verano 2002 no pueden tener registros como elementos. Los arreglos no pueden tener arreglos como elementos, pero se suministran arreglos multidimensionales para obtener el mismo efecto. 4. Escriba una gramática BNF para el lenguaje compuesto por todos los números binarios que contienen al menos tres 1 consecutivos. (El lenguaje incluye las cadenas 011101011, 000011110100 y 1111110, pero no 010101l.) 5. La sintaxis del lenguaje mono es bastante simple, aunque sólo los monos lo pueden hablar sin cometer errores. El alfabeto del lenguaje es {a, b, d, #} donde # representa un espacio. La gramática es: <alto> ::= <oclusiva>::= <sílaba> ::= <palabra> ::= <oración>::= b|d <alto> a <oclusiva> | <oclusiva> <alto> | a <oclusiva> | a <alto> <sílaba> | <sílaba> <palabra> <sílaba> <palabra> | <oración># <palabra> De los oradores siguientes, ¿cuál es el agente secreto que se hace pasar por un mono? Simio: Chimpancé: Babuino: ba # ababadada # bad # dabbada abdabaadab # ada dad # ad # abaadad # badadbaad 6. Usando la gramática BNF para enunciados de asignación simples, siguiente: 1 .<enunciado de asignación> ::= <variable> = <expresión aritmética> 2 .<expresión aritmética> ::= <término> | <expresión aritmética> + <término> <expresión aritmética) - <término> 3. <término> ::= <factor) <término> × <factor> | <término>| <factor> 4. <factor> ::= <variable> <número> | <expresión aritmética> 5. <variable> ::= <identificador> | <identificador> [<lista de subíndices>] 6. <lista de subíndices> ::= <expresión aritmética> | <lista de subíndices>, <expresión aritmética> construya los árboles de análisis sintáctico para los enunciados de asignación siguientes: (a) X:= U V×W+X/Y ó (b) A[I,J] := I + J 7. Desarrolle una gramática de atributos para la gramática del problema 5, tal que permita evaluar las expresiones (a) ó (b). 8. Proponga una extensión al lenguaje Litte Quilt y desarrolle el código para construir la figura: 4 Lenguajes de Programación FCC Verano 2002 9. Pase a notación postfija la expresión X:= U V × W + X / Y y calcule su valor mediante un árbol ó una pila, con U=1, V=2, W=3, Y=4, X=16. 10. Obtenga el valor de la expresión: let val x = 5 in y = 2 * x in let val x = y + 2 in x = x*x + y*y end end. 5