Examen final de CL 11 de Enero de 2012 Fecha de publicación de notas: 19-1-2012 Fecha de revisión: 20-1-2012



Documentos relacionados
Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Universidad de Buenos Aires Facultad De Ingeniería. Operaciones Lógicas. [75.40] Algoritmos y Programación I. 2do Cuatrimestre 2010

Elementos léxicos del lenguaje de programación Java

ACTIONSCRIPT (AS) Proyectos II. Audiovisuales. Dpto. Escultura. UPV. [sintaxis elemental]

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Contenido de la Presentación

Estructura de Datos [Tipos de datos concretos y tipos de datos abstractos]

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

SEMINARIO DE ESPECIFICACIONES ALGEBRAICAS

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Examen escrito de Programación 1

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos.

Tipos Abstractos de Datos

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

Introducción a la programación orientada a objetos

PHP y MySQL. Indice: Switch Bucles For While do...while

OPERADORES LÓGICOS Y DE COMPARACIÓN EN PHP. PRIORIDADES. EJEMPLOS. EJERCICIOS RESUELTOS. (CU00818B)

Fundamentos de la Programación

Semántica Denotacional

Ejercicio 1 (3 puntos).-

Capítulo 5. Álgebra booleana. Continuar

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8.

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Tiempo de Compilación. Programa fuente. Secuencia. de caracteres. Scanner. Secuencia. de símbolos Parser. Compilador.

Tema 4.- Pilas y Colas

col Type mismatch cadena vacía fila 1 z + i 4 1 fila 2

PRÁCTICA: LENGUAJE VHDL

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2.

Processadors de Llenguatge II. Compiladores

Instituto de Computación - Facultad de Ingeniería - Universidad de la República

Contenidos. Archivos en C++ Archivos en C++ Introducción

SOLUCION EXAMEN junio 2006

4. SUMADORES EN BINARIO PURO (I)

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

UNIDAD I: LÓGICA PROPOSICIONAL

APRENDE A CREAR UNA PÁGINA WEB CON HTML

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Modulo 1 El lenguaje Java

Que es PHP? Que se puede hacer con PHP? Sintaxis del lenguaje. Variables. Operadores básicos. Condicionales. Ciclos.

Cómo nombrar variables ( 2&

ELO211: Sistemas Digitales. Tomás Arredondo Vidal

Objetivos. Contenidos. Revisar los principales conceptos de la lógica de primer orden

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Nociones Básicas de Sémantica: Semántica Denotacional

INTRODUCCIÓN A HDL VERILOG

Organización de Computadoras

GENERACIÓN DE CÓDIGO

Curso 0 de Informática

Tema: Arreglos de Objetos en C++.

Tema 2. El lenguaje de programación Java (Parte 1)

Introducción a la Programación en MATLAB

1.00 Clase 3. Tipos de datos en Java

TIPOS DE DATOS DEFINIDOS POR EL PROGRAMADOR: Estructuras CONTENIDOS

Introducción a los Tipos Abstractos de Datos

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

Procesadores de lenguaje Tema 5 Comprobación de tipos

Diseño Lógico I Facultad de Ciencias Exactas y Tecnología UNT. LENGUAJES DE DESCRIPCIÓN DE HARDWARE

Introducción al lenguaje de especificación JML

En el presente capítulo se describe la programación del instrumento virtual y cómo

Arquitectura de Aplicaciones

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Traductores DDS con CUP

Operaciones y Expresiones METATRADER, CONCEPTOS BÁSICOS DE PROGRAMACIÓN III

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

V. Elementos de la Arquitectura

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

Árboles binarios de búsqueda

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz

Curso PHP Módulo 1 R-Luis

Grados Ing. Inf. y Mat. Inf. Julio 2014 Algoritmos y Estructura de Datos Página 1 de 6

Instrumentación Virtual con LabVIEW

! Una variable declarada con final no puede volver a ser reinicializada. numero = 2;! ! Para definir constantes

Anexo I. Profesorado en Matemática/Profesorado en Computación (Plan 1998) Prácticos: 4 horas semanales Teórico-prácticos:

Introducción a la Programación 11 O. Humberto Cervantes Maceda

Universidad Católica del Maule. Fundamentos de Computación Especificación de tipos de datos ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS

CDI Exclusión mutua a nivel alto. conceptos

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

1 Estructura básica de un programa C++

Concurrencia. Primitivas IPC con bloqueo

Programación Avanzada para Sistemas de Telecomunicación Arrays

ANÁLISIS Casos de uso: Identificar Usuario. Diagrama de secuencia del sistema: Contratos:

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Introducción a ZEUS. Introducción. Curso Doctorado Sistemas Multi-agente. Zeus es una herramienta de desarrollo de SMA.

Basic Object Oriented Programming (BOOP) Gramática del Lenguaje. Ever Mitta Flores

Práctica 2: Simón dice

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

Proyecto Unico Interpretador de SetCalc

11. Algunas clases estándar de Java (II)

k 11 N. de publicación: ES k 51 Int. Cl. 5 : G01R 21/133

PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores

Tema 3. Monitores Programación Concurrente

Transcripción:

Examen final de CL 11 de Enero de 2012 Fecha de publicación de notas: 19-1-2012 Fecha de revisión: 20-1-2012 Sin apuntes. Tiemp: 3h. Nombre y Apellidos: Problema de analisis léxico, sintáctico e intérpretes [5 puntos] Deseamos crear una herramienta de diseño de circuitos que permita especificar su lógica con un lenguaje de descripción de hardware. Cada circuito se representará como un módulo con un interfaz de señales lógicas de entrada/salida. Cada módulo estará implementado con un conjunto de equaciones lógicas y otros módulos. Así por ejemplo, los circuitos de la figura podrán ser descritos de la siguiente forma: x1 z a a b c xor3 x sum x2 a b c x1 x2 xor2 xor2 z w xor3 x1 x2 xor2 z x b cin full_adder cout module xor2 (input x1, input x2, output z) z = not x1 and x2 or x1 and not x2; module xor3 (input a, input b, input c, output x) wire w; xor2 (a, b, w); xor2 (w, c, x); module full_adder (input a, input b, output sum, input cin, output cout) xor3 (a, b, cin, sum); cout = a and b or cin and (a or b); Dentro de cada módulo pueden declararse señales internas (wire) para conectar diversos módulos o ecuaciones. Así por ejemplo, el módulo full adder podría también describirse de la siguiente forma: module full_adder (input a, input b, output sum, input cin, output cout) wire x, y; xor3 (a, b, cin, sum); x = a and b; y = a or b; cout = x or cin and y; 1. Gramática Diseñar la gramática del lenguaje utilizando EBNF. Para ello, suponer que:

Los operadores para expresiones lógicas son not, and y or, utilizando este orden de prioridad en la evaluación, tal como se define en los lenguajes de programación convencionales. Solo existe una declaración de wire con todas las señales internas del módulo. Utilizar las siguientes definiciones y completar la gramática: Circuit : (Module)* ; Module : "module" IDENT ( FormalParams ) WireDeclaration Components "" ; Components : (ModuleOrEquation ; )+ ; ModuleOrEquation : ModuleInstance Equation ; Equation : IDENT "=" Expression... 2. First y Follow Calcular First y Follow de los siguientes símbolos no terminales: FormalParams, WireDeclaration y Expression. 3. Comprobaciones semánticas a x1 xor2 z b x2 module error (input a, input b, input c, input d, input e, output x, output y) c? xor2 (a, b, x); x d x = c and d; y = not d; y e? error Se desea diseñar una función que compruebe ciertas propiedades en un circuito. La figura previa muestra un ejemplo de los dos errores que deberán comprobarse. El primero consiste en que una de las señales del circuito no sea utilizada en ninguno de los componentes o ecuaciones. Este es el caso de la señal e en el circuito. Esta comprobación deberá realizarse tanto para la señales de entrada (input) como las internas (wire). El segundo error consiste en que alguna de las señales esté conectada a mas de una salida de una función lógica, ya sea generada por el propio módulo o por otro módulo conectado a este. Este es el caso de la señal x en el circuito, que está generada por la instancia xor2 y por la ecuación x = c and d. Un error similar ocurriría si una de las entradas del circuito estuviese conectada a la salida de una función lógica. Diseñar las siguientes dos funciones: bool AllSignalsConnected (Module &M); bool SingleDrivenSignals (Module &M); 2

La primera función comprueba que todas las señales de un módulo están conectadas. La segunda función comprueba que no hay mas de una función lógica generando una señal. Para diseñar dichas funciones, se puede suponer que el circuito está representado con un árbol semántico utilizando las siguientes estructuras: struct Module { vector<string> Interface; // input/output signals (in order of declaration) vector<bool> InOut; // same size as Interface (true if input, false if output) vector<string> Wires; // Set of internal signals vector<equation> Equations; // Equations inside the module vector<moduleinstance> Modules; // Module instances struct Equation { // Represents: signal = expression string signal; Expression expr; struct Expression { // Structure to represent expressions as trees. // Leaves only represent identifiers. int type; // 0: ident, 1: not, 2: and, 3: or Expression* Left; // used for not, and, or (NULL for ident) Expression* Right; // used for and, or (NULL for ident, not) string Ident; // only used for ident struct ModuleInstance { // Represents: name (ActualParams) string name; vector<string> ActualParams; Todos los módulos declarados en un circuito están almacenados en una tabla a la que puede accederse por el nombre del módulo: map<string, Module*> Circuit; 3

Sin apuntes. Tiemp: 3h. Nombre y Apellidos: Problema de generación de código [2 puntos] 1. Asserts Explica formalmente (mediante GenRight, GenLeft, etc...) como sería la generación de código para instrucciones del estilo assert(boolean expression) cuya semántica es: la expresión Booleana es evaluada y en caso de no ser cierta el programa suspenderá su ejecución. 2. Iteradores sobre arrays Explica formalmente (mediante GenRight, GenLeft, GenCode, etc...) como sería la generación de código en el caso de disponer de iteradores de arrays simples de enteros. Disponemos de los siguientes operadores, funciones e instrucciones nuevas del lenguaje: Operadores Comportamiento!i Devuelve el valor apuntado por el iterador i. i1!= i2 Devuelve true si ambos iteradores apuntan a diferentes posiciones del array. Instrucciones Comportamiento i++ Avanza en una posición el iterador i. Funciones Comportamiento first(a) Dado un array a, devuelve un iterador apuntando al primer elemento. last(a) Dado un array a, devuelve un iterador apuntando al elemento posterior al último elemento. En concreto, el siguiente programa describe un ejemplo: Program Vars a array [10] of Int it IntIterator max Int EndVars 4

it := first(a) max :=!it it++ While (it!= last(a)) Do If (max <!it) Then max :=!it EndIf it++ EndWhile WriteLn(max) EndProgram Describe formalmente la generación de código para cada una de las nuevas construcciones descritas en la tabla anterior. 5

Sin apuntes. Tiemp: 3h. Nombre y Apellidos: Problema de optimización [3 puntos] 6