1 / 81

Elementos de un lenguaje de programación

Elementos de un lenguaje de programación. Que nos brinda el lenguaje. a + b que tipos de valores brinda qué operaciones proporciona qué significan los símbolos a y b es legal sumar a y b expresiones y funciones. Little Quilt. Manipula objetos geométricos ancho altura patrón

sofia
Télécharger la présentation

Elementos de un lenguaje de programación

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Elementos de un lenguaje de programación Lenguajes de Programación

  2. Que nos brinda el lenguaje • a + b • que tipos de valores brinda • qué operaciones proporciona • qué significan los símbolos a y b • es legal sumar a y b • expresiones y funciones Lenguajes de Programación

  3. Little Quilt • Manipula objetos geométricos • ancho • altura • patrón • pueden estudiarse y visualizarse de manera independiente de los constructores del lenguaje. Lenguajes de Programación

  4. Los primeros lenguajes de programación, manejaban: enteros, reales y arreglos de enteros y reales. Que podía ser visualizados y estudiados de forma independiente de cualquier lenguaje. Lenguajes de Programación

  5. los dos objetos primitivos del lenguaje son piezas cuadradas con los siguientes patrones: • los retazos se pueden girar y coser Lenguajes de Programación

  6. Reglas de retazos • un retazo es una de las piezas primitivas, o • se forma girando 90° un retazo hacia la derecha, o • se forma cosiendo un retazo a la derecha de otro de igual altura • ninguna otra cosa es un retazo Lenguajes de Programación

  7. los retazos se pueden girar y coser • los giros conducen a retazos diferentes Lenguajes de Programación

  8. Sintaxis de las expresiones que denotan retazos • La primera etapa en la construcción de un lenguaje es asignar nombres a las piezas primitivas y a las operaciones sobre retazos. • Los objetos se llaman a y b ;las operaciones son giro y costura. Lenguajes de Programación

  9. Las expresiones complejas se construyen a partir de expresiones más simples y las más simples comienzan con los nombres a y b. • E es una expresión si: • E es a, o • E es b, o • E es giro (E1) y E1 es una expresión , o • E es costura (E1 , E2) y E1y E2 son expresiones • Ninguna otra cosa es una expresión. Lenguajes de Programación

  10. Una versión BNF • < expresión> ::= a • | b • | giro (<expresión>) • | costura (<expresión>), <expresión>) Lenguajes de Programación

  11. Semántica de las expresiones • La semántica de las expresiones especifica el retazo formado por la aplicación de una expresión. ¿ qué retazo genera la siguiente expresión ? • costura (giro (giro ( b ) ), a) • la respuesta se construye a partir de los retazos generados por las sub-expresiones {28} Lenguajes de Programación

  12. Funciones definidas por el usuario • El universo de las expresiones se expande al definir funciones de retazos a retazos. • Las funciones permiten que los retazos se especifiquen de manera más conveniente. • girar a la izquierda (giro_iz) • colocar un retazo encima de otro del mismo ancho (apila) {29} Lenguajes de Programación

  13. De esta forma las operaciones pueden usarse sin que se necesite pensar: • fungiro_iz (x) = giro(giro(giro(x))) • fun apila (x,y) = giro_iz (costura (giro (y), giro (x))) • ahora se usa giro_iz (E) para cualquier expresión y puede usarse para declarar otras; como es el caso de apila. Lenguajes de Programación

  14. Declaraciones locales • Las expresiones de asignación o asociaciones de asignación permiten que las declaraciones aparezcan dentro de las expresiones. • let <declaraciones> in <expresión> end Lenguajes de Programación

  15. Las expresiones de asignación permiten el uso de nombres en los lenguajes de programación • letfungiro_iz (x) = giro(giro(giro(x))) • fun apila (x,y) = giro_iz (costura (giro (y),giro (x))) • in apila (giro_iz (b), giro (b)) • end Lenguajes de Programación

  16. Nombres definidos por el usuario para valores • las declaraciones locales convienen cuando se escriben expresiones grandes en términos de otras más simples • val <nombre> = <expresión> • asigna nombre a una expresión • y así la declaración de valores se usa junto con las declaraciones locales Lenguajes de Programación

  17. letval x = E1inE2end • significa las apariciones del nombre x en E2 representan el valor de E1 • se puede usar cualquier otro nombre en lugar de x, sin que cambie el significado de la expresión. Lenguajes de Programación

  18. let valsup_izq = giro_izq (b) • valinf_der = giro (b) • in • apila (sup_izq, inf_der) • end • {31} Lenguajes de Programación

  19. Notaciones de expresiones • Operador binario: necesita dos operandos • notación infija • a+b • notación prefija • +ab • notación posfija • ab + Lenguajes de Programación

  20. Propiedad asociativa y precedencia • En notación infija los operadores aparecen entre sus operandos • + b *c • la división y la multiplicación tienen precedencia sobre la suma y la resta. • Sin reglas de precedencia, los paréntesis serían necesarios • los operadores con la misma precedencia se agrupan de izquierda a derecha • 4-2-1 = 1 Lenguajes de Programación

  21. Operadores • asociativo a la izquierda: si las sub-expresiones que contienen apariciones múltiples del operador se agrupan de izq a der; 4-2-1 = (4-2) -1 = 1. Porque la resta de la izq es la primera en efectuarse. • +, -, * y / • asociativo a la derecha: si las sub-expresiones que contienen apariciones múltiples del operador se agrupan de der a izq; 234; • 3 a la 4 = 81 • 2 a la 81 Lenguajes de Programación

  22. Declaraciones y aplicaciones de funciones • Una vez declarada una función se puede aplicar como un operador • funciones como correspondencias • función es total • función es parcial Lenguajes de Programación

  23. Función total • Si se asocia un elemento del conjunto B con cada elemento del conjunto A; siendo A el domino y B el contra dominio. • A  B, para el conjunto de todas las funciones de A en B. Si f hace corresponder a y b, escribimos f(a) = b y b se conoce como el valor de f en a. Lenguajes de Programación

  24. Función parcial • Una función es parcial si, por cada a en su domino A, se tiene que f(a) = b, para alguna b en B, o f(a) se encuentra indefinida debido a que no existe una b tal que b = f(a) Lenguajes de Programación

  25. Cómo se calcula el valor de f en a • Es posible definir una función • enumeración explícita de sus valores para cada elemento de su dominio. • Sucesor (0) = 1 • Sucesor (1) = 2 • Sucesor (2) = 3 • Sucesor (3) = 4 • ... Lenguajes de Programación

  26. g(x) es el entero n 0 más grande tal que n2  x • esta regla no nos indica explícitamente cómo calcular el valor de g en x Lenguajes de Programación

  27. Funciones como algoritmos • En cualquier lenguaje de programación una función va de la mano con un algoritmo para calcular el valor de la función en cada elemento de su dominio. • Las declaraciones de funciones tienen 3 partes: • el nombre de la función • los parámetros de la función y • una regla para calcular un resultado a través de los parámetros Lenguajes de Programación

  28. fun <nombre> (<parámetros - formales>) = <cuerpo>; • ejem: funsucesor (n) = n + 1; • la notación prefija es la regla para la aplicación de funciones declaradas: • <nombre> (<parámetros-actuales>) • sucesor (2+3) {notación infija} Lenguajes de Programación

  29. Nombres que se utilizan para designar a los parámetros: • parámetro = parámetros formales • argumento = parámetros actuales Lenguajes de Programación

  30. Evaluación más interna • Se calcula como sigue: • se evalúan las expresiones en <parámetros - actuales>, • se substituyen los resultados en los parámetros formales del cuerpo de la función, • se evalúa el cuerpo de la función y • se devuelve el valor de la función como respuesta Lenguajes de Programación

  31. Ejemplo: • sucesor (2 + 3) • se activa activa + para evaluar +(2,3) • se devuelve el resultado 5 de + • se activa el sucesor (5) y • se devuelve la respuesta 6 • la técnica de evaluar los argumentos antes del cuerpo se conoce también como técnica de invocación por valor Lenguajes de Programación

  32. Evaluación selectiva • Si <condición> entonces <expresión>1 otro <expresión>2 • condición da como resultado verdadero/falso • expresiones booleanas • sólo se evalúa una de las expresiones dependiendo del valor de la condición falso/verdadero Lenguajes de Programación

  33. Funciones recursivas • Una función es recursiva si su cuerpo contiene una aplicación de f • f es recursiva si f puede activarse a sí misma • Existen dos tipos de recursión • lineal • cola Lenguajes de Programación

  34. Recursión lineal • Si la activación f(a) de f puede iniciar como máximo una nueva activación de f. • ejemlo: • funfactorial (n) = • si n = 0 entonces 1 otro n*factorial (n-1); Lenguajes de Programación

  35. La evaluación de una función recursiva lineal tiene dos fases: • una fase de activación, en la cual se inician las nuevas activaciones, y • una fase de solución, en la cual el control regresa de las activaciones con una modalidad última entrada - primera salida Lenguajes de Programación

  36. Función factorial líneal • Ejemplo: • f(3) = 3 * f(2) • = 3 * (2*(f (1)) • = 3 * (2*(1*f(0))) • = 3 * (2*(1*1)) • = 3 * (2*1) • = 3 *2 • = 6 Lenguajes de Programación

  37. Recursión de cola • si una función recursiva puede ser eficientes si se puede implementar con recursión de cola • si devuelve un valor sin necesidad de recursión o si devuleve simplemente el resultado de una activación recursiva Lenguajes de Programación

  38. ejemplo: • fung (n,a) = • sin = 0 entonces a otrog (n-1, n*a) • a si n = 0 • g (n,a) = • g(n-1, n*a) en caso contrario Lenguajes de Programación

  39. g (3,1) • si 3 entonces 1 otrog(3-1, 3*1) • g(3,1) = g(2,3) = g(1,6) = g (0,6) = 6 Lenguajes de Programación

  40. g(3,1) = g(2,3) g(2,3) = g(1,6) g(1,6) = g(0,6) Función factorial con recursión de cola g(0,6) = 6 Lenguajes de Programación

  41. Todo el trabajo de una función lineal con recursión de cola se realiza en la fase de activación, cuando se inician las activaciones nuevas; siendo la fase de solución trivial debido a que el valor calculado por la activación final se convierte en el valor de toda la evaluación. Lenguajes de Programación

  42. En el caso de f(3) = 3 * f(2) • la multiplicación se realiza después de que el control regresa de la activación de f(2). Lenguajes de Programación

  43. Ambito léxico • EL cambio de nombre no tiene efecto en el valor de una expresión, siempre y cuando cambio es consistente • la re-asignación de nombres se especifica con precisión mediante la presentación de una noción de variables locales o acotadas Lenguajes de Programación

  44. El principio de re-asignación de nombres es la base para la regla de ámbito léxico, que ayuda a determinar el significado de los nombres en los programas. • fun sucesor (x) = x +1; • fun sucesor (n) = n +1; Lenguajes de Programación

  45. surgen ciertas sutilezas cuando una declaración de función puede hacer referencia a nombres no locales, es decir , a nombres que no son parámetros formales, por ejemplo el resultado de la función sumay depende del valor de y: • funsumay (x) = x + y • como yno es local algún contexto determina su valor Lenguajes de Programación

  46. Las reglas de ámbito léxico usan el texto del programa que rodea a la declaración de la función para determinar el contexto en el cual se evaluarán los nombres no locales. • El texto del programa es estático, a diferencia de la ejecución, así que tales reglas se conocen también como reglas de ámbito estático. Lenguajes de Programación

  47. Utilizaremos let ... • Para comprender las reglas de ámbito léxico: • let valx = 2 inx + xend • a val se le conoce como una asociación dex Lenguajes de Programación

  48. let valx = E1 inE2end • que todas las apariciones de x en E2 se encuentran dentro del ámbito de esta asociación • el valor de una expresión no se altera si se cambia de variable • let valz = E1 inE2end Lenguajes de Programación

  49. Caso de asociaciones anidadas de la misma variable • let valx = 2 in valx = x + 1 inx *xend end Lenguajes de Programación

  50. Se aplica una reasignación de nombres de la asociación más interna • let valx = 2 in valy = x + 1 iny *yend end Lenguajes de Programación

More Related