La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES.

Presentaciones similares


Presentación del tema: "TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES."— Transcripción de la presentación:

1 TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES 1.PRECEDENCIA Y ASOCIATIVIDAD 2.ASIGNACIONES 3.ORDENAMIENTO CON EXPRESIONES 4.EVALUACIÓN DE CORTO-CIRCUITO - FLUJO ESTRUCTURADO Y NO ESTRUCTURADO

2 - REGLAS DE ALCANCE: Ejemplo 1: function foo: integer;... type foo =...... begin... foo = 10 (* Error Semántico Estático *) TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES

3 - REGLAS DE ALCANCE: Ejemplo 2: const missing = -1 // Primera declaración de missing... procedure foo; const null = missing; (* Error Semántico Estático *)... missing = 0; // Segunda declaración de missing

4 TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE: Ejemplo 3: procedure foo;... end;... procedure A;... procedure B; begin... foo; (*ERROR*)... end;... procedure foo;

5 TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE: Ejemplo 4: type Alink= ^A; A= record next: Alink; data:... En Pascal, los apuntadores son una excepción a la regla de nombres debido a que pueden ser declarados antes de ser usados. Conocer el alcance de una declaración comienza a ser complicado por la necesidad de definir tipos recursivos y subrutinas recursivas.

6 TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - COMPILACIÓN POR SEPARADO: Los programas muy largos son costruidos y probados incrementalmente y su compilación puede durar muchas horas. Este problema de esperar tanto tiempo nos lleva a pensar en la compilación por separado. Cualquier diseño de un lenguaje que soporte programas largos debe proveer una facilidad de compilación por separado. Debido a que ellos son diseñados para la encapsulación y para proveer una estrecha interface, los módulos son la elección natural para las unidades de compilación de muchos lenguajes de programación. En algunos lenguajes, como en Java, se habla de paquetes.

7 CONTROL DE FLUJO 1. Secuenciación: sentencias que son ejecutadas en un orden específico. 2. Selección: Dependiendo sobre alguna condición en tiempo de corrida, se realiza una elección entre dos o más sentencias o expresiones. 3. Iteración: fragmento de código ejecutado repetidamente, un cierto número de veces o hasta que se cumpla una condición. 4. Abstracción Procedimental: Una subrutina es encapsulada como una simple unidad, frecuentemente sujeta a parametrizaciones.

8 CONTROL DE FLUJO 5. Recursión: una expresión es definida en términos de sí misma. Se requiere de una pila en el cual guardar información acerca de instancias evaluadas parcialmente de la expresión. 6. Concurrencia: Dos o más fragmentos del programa son ejecutados o evaluados al mismo tiempo 7. No Determinismo: El orden o elección de las sentencias o expresiones no es especificado, implicando que cualquier alternativa podría ser el resultado correcto.

9 EVALUACIÓN DE EXPRESIONES Expresión: Es un simple objeto (una constante, variable o constante literal) ó un operador o función aplicado a una colección de operandos o argumentos, cada uno de los cuales es una expresión. Ejemplos: - Notación Prefija: (* (+ 1 3) 2) - Notación Infija: (1+3) * 2 - Notación Postfija: Operadores ++ y – de C, C++ y Java

10 EVALUACIÓN DE EXPRESIONES 1. Precedencia y Asociatividad: No influyen en notación prefija ni en postfija. Las “reglas de precedencia” especifica que ciertos operadores, en ausencia de paréntesis, se resuelven primero que otros operadores. Las “reglas de asociatividad” especifíca de aquellas secuencias de operadores de igual precedencia, si se resuelven por la derecha o por la izquierda. left-to-right : 9-3-2 = 4 right-to-left : 9-3-2 = 8

11 EVALUACIÓN DE EXPRESIONES 2. Asignaciones: Una asignación toca un par de argumentos: un valor; y una referencia a una variable en la cual el valor puede ser ubicado. En lenguajes funcionales no existen los efectos de borde, mientras que en los lenguajes imperativos si puede haber efectos de borde. Qué es una Variable? d = a ; el lado derecho de la asignación se refiere al valor de a a = b + c; el lado izquierdo se refiere a la ubicación de a Existen dos modelos de variables: por valor y por referencia. Ejemplo Por Valor Por Referencia B := 2 C := B A := B + C ABCABC ABCABC 4 2 2 4 2

12 EVALUACIÓN DE EXPRESIONES Ortogonalidad: los operadores de un lenguaje ortogonal pueden ser usados en cualquier combinación, teniendo sentido tanto las combinaciones como su significado. Algol 68 fue uno de los primeros lenguajes en permitir ortogonalidad, veamos un ejemplo válido: begin a := if b < c then d else e; a := begin f(b); g(c) end; g(d); 2+3 end

13 EVALUACIÓN DE EXPRESIONES Inicialización: Probablemente sea imposible para el compilador saber todos los usos de las variables no inicializadas. Razones por las cuales la inicialización puede ser útil: En el caso de variables ubicadas estáticamente, un valor inicial que es especificado en el contexto de la declaración puede ser colocada en memoria por el compilador. Uno de los errores más comunes en programación es usar una variable en una expresión antes de que tenga un valor. Una de las formas más fáciles para prevenir estos errores es que a cada variable se le asigne un valor cuando ésta es declarada.

14 EVALUACIÓN DE EXPRESIONES 3. Ordenamiento con Expresiones: Existen dos razones fundamentales del porqué el orden puede ser importante. Ejemplo: a – f(b) – c * d a – f(b) se evalúa antes o despues de c*d? Efecto de borde: Si f(b) modifica el valor de d, entonces el valor de a – f(b) – c * d puede depender si realizo primero a – f(b) ó c * d Mejoramiento de código: El orden de evaluación de subexpresiones tiene un impacto sobre el registro de ubicación y sobre la lista de instrucciones. En la expresión a * b + f(c) es deseable llamar primero a f(c) antes que a*b, debido a que el producto si se calcula primero, podría necesitar ser guardado durante la llamada a f(c), y f(c) podría necesitar usar todos los registros.

15 EVALUACIÓN DE EXPRESIONES 4. Evaluación de Corto-Circuito: Puede ahorrar significantes cantidades de tiempo. (and a b) : Si a es falso, no se necesita chequear b (or a b): Si a es verdadero, no se necesita chequear b Un compilador que genera código podría saltar la evaluación de b haciendo funcionar la evaluación de corto- circuito (implementado como parte de optimización de código) Algunos lenguajes proveen tanto la versión de evaluación booleana como la versión de evaluacion de corto-circuito.

16 FLUJO ESTRUCTURADO Y NO ESTRUCTURADO Flujo No Estructurado: Sentencia GOTO. Es usado en algunos lenguajes para salir a la mitad de un ciclo, de una subrutina o salir de un contexto profundamente anidado. Salida a Mitad de un Ciclo(No estructurado): ej. Pascal while true do begin readln (line) if all_blanks (line) then goto 100; consume_line (line) end; 100: Solución: ”One-and-a-half loop” (Estructurado): ej. Modula (1) LOOP line := ReadLine; WHEN AllBlanks (line) exit; ConsumeLine (line) END;

17 FLUJO ESTRUCTURADO Y NO ESTRUCTURADO Retorno de Subrutinas (No estructurado): procedure consume_line (var line:string); begin... if line[i] = ´%´ then goto 100... 100: end; Solución (Estructurada): Esto se puede evitar introduciendo una variable auxiliar que debe ser chequeada repetidamente en la subrutina (if not comment_line then...)

18 FLUJO ESTRUCTURADO Y NO ESTRUCTURADO Errores y otras excepciones: Los gotos no locales son dificiles de implementar correctamente, y aún más dificiles de entender. Son un problema para el mantenimiento de un programa. Ya existen numerosos lenguajes que proveen un manejo estructurado de excepciones que regularizan tanto la implementación como la semántica. Flujo Estructurado: Elimina la sentencia GOTO, Diseñ o Top- Down, modularización de código, tipos estructurados (records, conjuntos, arreglos, apuntadores, etc), variables descriptivas, convenciones de comentarios. Cualquier programa puede ser expresado usando secuenciación, selección e iteración.


Descargar ppt "TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES."

Presentaciones similares


Anuncios Google