1 INTRODUCCIN 1 Evolucin de los conceptos n

  • Slides: 113
Download presentation
1. INTRODUCCIÓN 1

1. INTRODUCCIÓN 1

Evolución de los conceptos n ABSTRACCIÓN DE DATOS n Tipos de datos • Elementales

Evolución de los conceptos n ABSTRACCIÓN DE DATOS n Tipos de datos • Elementales (HW) • Estructurados (LP) • Abstractos (U) 2

 Tipos de datos: Elementales • Enteros • Reales • Booleanos • Caracteres •

Tipos de datos: Elementales • Enteros • Reales • Booleanos • Caracteres • Nivel: de la máquina • Primitivos • Tipo básico • Proporcionados por el Hw 3

 Tipos de datos: Estructurados • Arreglos • Registros • Nivel: Del Lenguaje de

Tipos de datos: Estructurados • Arreglos • Registros • Nivel: Del Lenguaje de Programación • Proporcionado por los LP • Con base en tipos elementales • Se utilizan constructores de tipo que al LP 4

 Tipos de datos: Abstractos • Stacks • Colas, etc • Nivel: Del usuario

Tipos de datos: Abstractos • Stacks • Colas, etc • Nivel: Del usuario • Definidos por el usuario para enriquecer el LP 5

Evolución de los conceptos n ABSTRACCIÓN DE CONTROL n Lógica del código • Sentencias

Evolución de los conceptos n ABSTRACCIÓN DE CONTROL n Lógica del código • Sentencias • Unidades de Programas 6

 Sentencias Constructores de código que facilitan la programación estructurada • Asignación • Decisión

Sentencias Constructores de código que facilitan la programación estructurada • Asignación • Decisión • Iteración 7

 Unidades de programas • Permiten programación modular • Generalizan la noción de operador

Unidades de programas • Permiten programación modular • Generalizan la noción de operador • Permiten encapsular parte de un algoritmo • Tienen una única definición • Tienen múltiples activaciones 8

Clasificación de los Lenguajes De Programación 9

Clasificación de los Lenguajes De Programación 9

Clasificación de los LP Lenguajes Naturales De Programación De Máquina Simbólicos Bajo nivel Alto

Clasificación de los LP Lenguajes Naturales De Programación De Máquina Simbólicos Bajo nivel Alto Nivel • Imperativos • Funcionales • Lógicos • OO 10

 Categorización de los LP C++ Delphi Pascal For. Tra N n A L

Categorización de los LP C++ Delphi Pascal For. Tra N n A L L ENS LM COBOL Mayor grado de abstracción C 11

1. 3 Criterios de : Definición y Diseño de LP 12

1. 3 Criterios de : Definición y Diseño de LP 12

 Lenguajes Naturales Conjunto de sonidos articulados con que el hombre manifiesta a otros

Lenguajes Naturales Conjunto de sonidos articulados con que el hombre manifiesta a otros lo que siente o piensa 13

 Lenguajes de Programación Notación sistemática por la cual describimos procesos computacionales 14

Lenguajes de Programación Notación sistemática por la cual describimos procesos computacionales 14

 Lenguajes de Máquina Las instrucciones se expresan como strings binarios que la CPU

Lenguajes de Máquina Las instrucciones se expresan como strings binarios que la CPU es capaz de entender, por lo tanto: • Es característico de cada computador y • Depende de la máquina 15

 Lenguajes Simbólicos Manejan identificadores en vez de strings de bits, para: • Operaciones

Lenguajes Simbólicos Manejan identificadores en vez de strings de bits, para: • Operaciones • Valores • Localidades de almacenamiento Aparece la necesidad de otro Sw, puesto que NO es posible ejecutar notaciones diferentes del LM 16

 Lenguajes Bajo Nivel n n n Se denominan ensambladores Es necesario el conocimiento

Lenguajes Bajo Nivel n n n Se denominan ensambladores Es necesario el conocimiento de la arquitectura subyacente. LP simbólico más cercano al LM La relación entre las sentencias del LM y el leng. ensamblador es 1: 1 Los LP ensambladores utilizan símbolos llamados códigos mnemónicos: Add, Store, etc. 17

 Lenguajes Alto Nivel n n LP que permite un estilo de escritura fácil

Lenguajes Alto Nivel n n LP que permite un estilo de escritura fácil de leer y comprender por otros programadores Permite crear programas portables, sin cambios sustanciales, por los que se dice, que son independientes de la máquina. 18

 Lenguajes Imperativos n n n Los primeros LP fueron creados en los 50's:

Lenguajes Imperativos n n n Los primeros LP fueron creados en los 50's: Fortran, Pascal, C, Ada Se denominan también, procedurales Los LP que tienen a For. Tran y COBOL como raíz, se denominan imperativos. Tienen como característica cambiar el estado de las variables por asignación. Están influenciados por la máquina en la que deben "correr": Máquina de Von Neuman. CPU RAM 19

 Lenguajes Funcionales n n n Los primeros aparecieron en los 60's: Lisp, Apl,

Lenguajes Funcionales n n n Los primeros aparecieron en los 60's: Lisp, Apl, Forth Se denominan también aplicativos. Aplican funciones, ya sea, recursivamente o por composición. Se caracterizan por una programación sin asignaciones , ie, puramente funcional. Los usuarios de los LP funcionales NO deben preocuparse de manejar el almacenamiento de datos. 20

 Lenguajes Funcionales Ejemplos: 1. x + y => (Plus x y) 2. 2*y

Lenguajes Funcionales Ejemplos: 1. x + y => (Plus x y) 2. 2*y => (Times 2 y) 3. x 5 => (Exp x 5) 4. 5 xyz => (Times 5(Times x (Times y z))) 5. ax 2 + bx + c => ax 2 + (bx + c) => (Plus (Times a (Exp x 2)) (Plus (Times b x) c )) 21

 Lenguajes Lógicos n n Aparecieron en los 70's : PROLOG Son LP diseñados

Lenguajes Lógicos n n Aparecieron en los 70's : PROLOG Son LP diseñados principalmente para aplicaciones de IA, máquinas de 5° generación. Los LP lógicos revisan la presencia de una determinada condición, la que, si es verdadera se ejecuta una acción apropiada Se basa en la noción de definir objetos y relaciones de inferencia en clases de objetos. 22

 Lenguajes Lógicos Ejemplo: Acción 1 if (cond 1) Acción 2 if (cond 2)

Lenguajes Lógicos Ejemplo: Acción 1 if (cond 1) Acción 2 if (cond 2) : Una forma de programación lógica son las tablas de decisión utilizadas en aplicaciones administrativas. 23

 Lenguajes OO n n n Ejemplos de estos lenguajes son: Smalltalk, Eiffel, C++,

Lenguajes OO n n n Ejemplos de estos lenguajes son: Smalltalk, Eiffel, C++, Java. Son LP que incorporan nuevas formas de pensar con respecto a cómo estructurar la información dentro del computador Se construyen complejos objetos de datos y se diseña un conjunto de funciones para operar con tales datos. 24

1. 3 Criterios de : Definición y Diseño de LP n n n Ortogonalidad

1. 3 Criterios de : Definición y Diseño de LP n n n Ortogonalidad Claridad Sintáctica Orientación Extensión Portabilidad Eficiencia 25

1. 4 Sintáxis 26

1. 4 Sintáxis 26

ORTOGONALIDAD Dotar al lenguaje de la máxima generalidad posible de modo que NO existan

ORTOGONALIDAD Dotar al lenguaje de la máxima generalidad posible de modo que NO existan restricciones o casos especiales. Ejemplos: Ventajas: Desventajas: 27

 Ejemplo: Pascal Como ejemplo de FALTA de ortogonalidad en Pascal, el tipo de

Ejemplo: Pascal Como ejemplo de FALTA de ortogonalidad en Pascal, el tipo de dato de un parámetro formal NO puede ser anónimo, es decir, no es posible declararlo explícitamente Procedure A(Var v : Array 1. . 10 of Real); 28

 Ejemplo: Pascal debiéndose declarar Type Vector = Array 1. . 10 of Real;

Ejemplo: Pascal debiéndose declarar Type Vector = Array 1. . 10 of Real; Procedure A(var v : Vector); 29

 Ventajas de LP Ortogonales Si un lenguaje es ortogonal, entonces tal LP: •

Ventajas de LP Ortogonales Si un lenguaje es ortogonal, entonces tal LP: • Es fácil de aprender • Permite facilidad en la escritura de programas. Porque NO tiene excepciones ni casos especiales que recordar. 30

 Desventajas de LP Ortogonales Si un lenguaje es ortogonal, entonces: Un programa generalmentes

Desventajas de LP Ortogonales Si un lenguaje es ortogonal, entonces: Un programa generalmentes compilará SIN errores, aún cuando contenga combinaciones que son lógicamente incoherentes o extremadamente ineficientes 31

CLARIDAD SINTÁCTICA Permitir que las diferencias semánticas se manifiesten en diferencias sintácticas • COBOL

CLARIDAD SINTÁCTICA Permitir que las diferencias semánticas se manifiesten en diferencias sintácticas • COBOL : Es claro 32

CLARIDAD SINTÁCTICA • APL : No es claro, puesto que está lleno de símbolos.

CLARIDAD SINTÁCTICA • APL : No es claro, puesto que está lleno de símbolos. Su sintáxis es encriptada v 5 0 • Facilita la escritura a programadores experimentados • Son difíciles de leer al momento de efectuar modificaciones futuras. 33

ORIENTACIÓN Proveer una sintaxis comprometida con la orientación del lenguaje. • Es más bien

ORIENTACIÓN Proveer una sintaxis comprometida con la orientación del lenguaje. • Es más bien de carácter histórico • Es un compromiso con las personas En general, la notación utilizada por un LP debiera ser consistente con las notaciones usadas en ese campo. 34

EXTENSIÓN Facilitar la implementación de estructuras inexistentes en función de las que éste provee,

EXTENSIÓN Facilitar la implementación de estructuras inexistentes en función de las que éste provee, permitiendo al usuario: • Definir sus propios EDT • Codificar sus propios operadores 35

PORTABILIDAD Proveer una definición del lenguaje independiente de las características de una máquina en

PORTABILIDAD Proveer una definición del lenguaje independiente de las características de una máquina en particular. Dos impedimentos para la independencia de la máquina son: • La aritmética de la máquina y • El tamaño de la word Incompatible con: • Realidad • Objet. Comerciales 36

Ejemplo: Java crea una versión ejecutable portable El proceso de compilación se detiene antes

Ejemplo: Java crea una versión ejecutable portable El proceso de compilación se detiene antes de generar el código de máquina: Código de Byte El proceso de traducción continúa en cada máquina donde se ejecutará el programa Código Byte HOT JAVA Cód. Ejecutable 37

EFICIENCIA En traducción: LP orientados a la educación. Rápida compilación En ejecución: LP orientados

EFICIENCIA En traducción: LP orientados a la educación. Rápida compilación En ejecución: LP orientados a rutinas muy utilizadas, como la verificación de claves En construcción LP que permiten una rápida y clara construcción de programas y ayuda en el diagnóstico 38

1. 4 Sintáxis Conjunto de reglas que determinan si las sentencias de un programa

1. 4 Sintáxis Conjunto de reglas que determinan si las sentencias de un programa están bien formadas o no. • Manual del usuario: Reglas de cómo escribir. • Compilador: Mecanismo que determina si el programa está bien escrito 39

1. 4 Sintáxis n Objetivo: Proveer una notación que permita la comunicación entre el

1. 4 Sintáxis n Objetivo: Proveer una notación que permita la comunicación entre el programador y el compilador (procesador del lenguaje). Criterios Sintácticos Elementos Sintácticos 40

Gramática 41

Gramática 41

Criterios Sintácticos n Legibilidad: COBOL: Write sueldo after advancing 2 lines n Facilidad de

Criterios Sintácticos n Legibilidad: COBOL: Write sueldo after advancing 2 lines n Facilidad de escritura: APL: A A*-1 Invierte una matriz 42

Criterios Sintácticos n Facilidad de traducción: El compilador debiera generar poco código n Ausencia

Criterios Sintácticos n Facilidad de traducción: El compilador debiera generar poco código n Ausencia de ambigüedad: Evitar que una estructura tenga más de un significado 43

Criterios Sintácticos Por ejemplo, en Fortran: M(i) puede significar un elemento del arreglo M,

Criterios Sintácticos Por ejemplo, en Fortran: M(i) puede significar un elemento del arreglo M, ó n M(i) una llamada a la función M. Con el parámetro i. n Por ejemplo, en PL/1: A=B=C: Asignación múltiple B=C, A=B n Asignación de un valor booleano: A=(B=C) n 44

Criterios Sintácticos Por ejemplo, en Pascal: If (x=0) then If (y=0) then S 1

Criterios Sintácticos Por ejemplo, en Pascal: If (x=0) then If (y=0) then S 1 else S 2; Solución en Pascal: If (x=0) then Begin If (y=0) then S 1; End else S 2; 45

Elementos Sintácticos Set de Caracteres n Identificadores n Símbolos para operadores n Palabras claves

Elementos Sintácticos Set de Caracteres n Identificadores n Símbolos para operadores n Palabras claves y reservadas n Comentarios n Abreviaciones n Espacios n 46

Elementos Sintácticos (Cont. ) Delimitadores n Formatos Fijo y Libre n Expresiones n Sentencias

Elementos Sintácticos (Cont. ) Delimitadores n Formatos Fijo y Libre n Expresiones n Sentencias n Estructura de Unidades de programa n 47

Gramática 48

Gramática 48

Set de Caracteres n Datos estandarizados: ASCII - EBCDIC § Datos propios: Algol: ASCII

Set de Caracteres n Datos estandarizados: ASCII - EBCDIC § Datos propios: Algol: ASCII Extended APL 49

Identificadores n n n Escritura básica de los LP. Tienen una cantidad máxima de

Identificadores n n n Escritura básica de los LP. Tienen una cantidad máxima de símbolos definidos por la versión Generalmente es: n n Un string con letras y/o dígitos comenzando con letra La legibilidad aumenta si las versiones permiten identificadores de varios caracteres. 50

Símbolos para Operadores n n n General: +, -, *, etc APL: Posee caracteres

Símbolos para Operadores n n n General: +, -, *, etc APL: Posee caracteres especiales Lisp: Plus, Times Fortan: . EQ. , **, . GT. Pascal: div, mod COBOL: Add, Multiply 51

Palabras Claves y Reservadas n n Una palabra clave es un identificador que constituye

Palabras Claves y Reservadas n n Una palabra clave es un identificador que constituye la parte no cambiante de una instrucción. Una palabra reservada es una palabra clave no declarable como identificador de usuario. 52

Ventaja Palabras Reservadas La mayoría de los LP utilizan palabras reservadas, así: n n

Ventaja Palabras Reservadas La mayoría de los LP utilizan palabras reservadas, así: n n El análisis sintáctico es más fácil y, La detección de errores es más eficiente. Ejemplos: 53

Ejemplo en For. Tran Las sentencias: Do , If NO son palabras reservadas, Son

Ejemplo en For. Tran Las sentencias: Do , If NO son palabras reservadas, Son palabras claves, por lo tanto el programador las puede usar como identificadores. 54

Ejemplo en COBOL • Posee demasiadas palabras reservadas, lo que hace imposible recordarlas todas.

Ejemplo en COBOL • Posee demasiadas palabras reservadas, lo que hace imposible recordarlas todas. Esto facilita el camino para que el programador elija una de ellas como identificador, ocasionando ERRORES en la compilación. 55

Comentarios n Auto documentación del código fuente. n Comentarios en líneas separadas: Fortran: en

Comentarios n Auto documentación del código fuente. n Comentarios en líneas separadas: Fortran: en la primera columna: C 56

Comentarios n n Comentarios delimitados por marcas especiales sin límite de líneas: n Pascal:

Comentarios n n Comentarios delimitados por marcas especiales sin límite de líneas: n Pascal: (* . . *) , { . . } n C: /* . . */ Se indica el comienzo y termina con el fin de línea: n Ada: n C++: // n Fortan 90: ! 57

Abreviaciones Relacionado con la legibilidad, por ejemplo: • a = a+1 a++ • a

Abreviaciones Relacionado con la legibilidad, por ejemplo: • a = a+1 a++ • a = a+b a+=b • a = a % b a%=b 58

Espacios Su uso varía entre los LP • For. Tran: No son significativos •

Espacios Su uso varía entre los LP • For. Tran: No son significativos • SNOBOL 4: Genera confusión. • Concatenación • Separador entre elementos de una instrucción 59

Delimitadores Se utilizan para demarcar una unidad sintáctica como: n Sentencia Begin End, n

Delimitadores Se utilizan para demarcar una unidad sintáctica como: n Sentencia Begin End, n Expresión. ( ) { } Ventajas 60

Delimitadores • Su uso mejora la legibilidad • Simplifica el análisis sintáctico • Permite

Delimitadores • Su uso mejora la legibilidad • Simplifica el análisis sintáctico • Permite remover la ambigüedad, definiendo en forma explícita los límites de una estructura Else colgante: If (x=0) then Begin If (y=0) then S 1; End else S 2; 61

Formatos Fijo y Libre Es histórico, viene de la época de las tarjetas perforadas.

Formatos Fijo y Libre Es histórico, viene de la época de las tarjetas perforadas. Formato fijo: Las instrucciones deben aparecer en una determinada parte de la línea. Ejemplo: For. Tran Reserva las primeras 5 posiciones de cada línea 1° columna: carácter C para comentario 6° columna: Indicador de continuación de línea. 7°- 72° : Instrucciones 62

Formatos Fijo y Libre Formato Libre: Las instrucciones se pueden escribir sin preocuparse de

Formatos Fijo y Libre Formato Libre: Las instrucciones se pueden escribir sin preocuparse de su posición en la línea o del largo de ella Ejemplo: Pascal, C, etc. 63

Expresiones Funciones que acceden a ODD de un programa y retornan un valor. Esta

Expresiones Funciones que acceden a ODD de un programa y retornan un valor. Esta estructura sintáctica involucra: • identificadores • Operadores y • Variables 64

Expresiones En un LP Imperativo: Las expresiones forman las operaciones básicas que permiten a

Expresiones En un LP Imperativo: Las expresiones forman las operaciones básicas que permiten a las instrucciones cambiar el estado de las variables En LP funcionales: Las expresiones forman la secuencia básica de control que dirige la ejecución de un programa. 65

Sentencias Mínima unidad constitutiva de código Simples No permite instrucciones anidadas Estructuradas Permite instrucciones

Sentencias Mínima unidad constitutiva de código Simples No permite instrucciones anidadas Estructuradas Permite instrucciones anidadas 66

Estructuras de Unidades de Programas Formas que los LP utilizan para describir una organización

Estructuras de Unidades de Programas Formas que los LP utilizan para describir una organización sintáctica de: Programa Principal - Subprogramas en la que hay una desagrupación de código que evolucionó hacia la programación estructurada. • Definición Separada • Definición Anidada • Definición separada de datos 67

 Gramática Representa la definición formal de la sintaxis de un lenguaje. Consta de

Gramática Representa la definición formal de la sintaxis de un lenguaje. Consta de un conjunto de reglas que especifican las NORMAS de escritura para formar estructuras en un lenguaje. 68

Metalenguajes Gramática formal destinada a la descripción de un lenguaje. Existen tres metalenguajes comúnmente

Metalenguajes Gramática formal destinada a la descripción de un lenguaje. Existen tres metalenguajes comúnmente utilizados • BNF (Backus-Naur-Form) • Diagramas sintácticos • CBL (COBOL-Like) 69

1. 5 Semántica 70

1. 5 Semántica 70

BNF (Backus - Naur Form) Notación desarrollada por los especialistas Backus y Naur para

BNF (Backus - Naur Form) Notación desarrollada por los especialistas Backus y Naur para definir lenguaje Algol 60 Metasímbolos: • < >: indica símbolo NO-TERMINAL o meta variable • : : = : "Se define como" • |: " o" • { }n: Repetición. Mínimo n veces. • identificador: Palabra reservada, constante o carácter TERMINAL. 71

BNF Número real, identificador secuencia> <real> : : = <secuencia>. < <secuencia> : :

BNF Número real, identificador secuencia> <real> : : = <secuencia>. < <secuencia> : : = <dígito> {<dígito>}0 <dígito> : : = 0|1|2 |3|. . . 8|9 <identificador> : : = <letra> {<letra> | <dígito>}0 <letra> : : = A |B|C|. . . Y |Z|Aa|b|c. . . y|z 72

BNF Expresión aritmética Expresión: a * b a*b - c/d término factor x término

BNF Expresión aritmética Expresión: a * b a*b - c/d término factor x término factor <exp>: : = <término>| <término> +<término>|<término> -<término>: : = <factor>|<factor> * <factor>: : = <identificador>|<constante> |<factor> / <factor> (<exp>) 73

BNF Sentencia For de Pascal <s- for> : : = For <identificador> : =

BNF Sentencia For de Pascal <s- for> : : = For <identificador> : = <intervalo> do <sentencia> <intervalo> : : = < inicial> to <final> | <inicial> downto < final> <inicial> : : = <exp> <final> : : = <exp> 74

BNF Recursivas <entero>: : = <dígito> | <dígito><entero> dígito>: : = 0|1||. . |9

BNF Recursivas <entero>: : = <dígito> | <dígito><entero> dígito>: : = 0|1||. . |9 <real> : : = <secuencia> : : = <dígito> | <dígito> <secuencia> 75

BNF Recursivas <identificador> : : = <letra>| <letra> <secuencia> : : = <carácter> |<carácter><secuencia>

BNF Recursivas <identificador> : : = <letra>| <letra> <secuencia> : : = <carácter> |<carácter><secuencia> <letra> | <dígito> <carácter> : : = Multilista: (1 2 (3 4 (5)6)7 8) <Mlista> : : = ( ) | ( <lista> ) <lista> : : = <elemento> | <elemento> <lista> <elemento>: : = <átomo> | <Mlista> 76

BNF Sentencia Pascal <sentencia> : : = <simple> | <compuesta> <simple>: : = <s-asig>|<s-inv>|<s-dec>|<s-iter>

BNF Sentencia Pascal <sentencia> : : = <simple> | <compuesta> <simple>: : = <s-asig>|<s-inv>|<s-dec>|<s-iter> <compuesta>: : = Begin <grupo-sentencia> End <grupo-sentencia>: : =<simple>|<simple>; <grupo-sentencia> 77

BNF Otra vez la expresión aritmética REC Expresión: a * b a*b - c/d

BNF Otra vez la expresión aritmética REC Expresión: a * b a*b - c/d término factor x término factor <exp>: : = <término>| <término> +<exp>|<término> - <exp> <término>: : = <factor>|<factor> * <término>|<factor> / <término> <factor>: : = <identificador>|<constante> (<exp>) Ejemplo: (a+b)*c 78

BNF Expresión Recursiva Expresión Término a + b*c + Expresión Término Factor Identificador a

BNF Expresión Recursiva Expresión Término a + b*c + Expresión Término Factor Identificador a b*c Factor * Identificador b Término Factor Identificador c 79

BNF Expresión Recursiva Expresión Término a - b - c - Expresión Factor Término

BNF Expresión Recursiva Expresión Término a - b - c - Expresión Factor Término Identificador Factor a - Identificador b b-c Expresión Término Factor Identificador c 80

BNF Expresión Recursiva Expresión Término Factor (a +b) *c * (Expresión) Término + Factor

BNF Expresión Recursiva Expresión Término Factor (a +b) *c * (Expresión) Término + Factor Expresión Factor Término Identificador Factor a Término Identificador c Identificador b 81

BNF Sentencias Pascal <s-While>: : = While <exp B> do <sentencia> <s-If>: : =

BNF Sentencias Pascal <s-While>: : = While <exp B> do <sentencia> <s-If>: : = If <exp B> then <sentencia> |If <exp B> then <sentencia> else <sentencia> 82

BNF Sentencias C do {printf("Número "); scanf("%d", &n); }while (n<=0); <do-while>: : = do

BNF Sentencias C do {printf("Número "); scanf("%d", &n); }while (n<=0); <do-while>: : = do <sentencia> while <exp B> 83

BNF Sentencias C switch (x) {case 1: cout<<"es UNO"; break; case 2: case 3:

BNF Sentencias C switch (x) {case 1: cout<<"es UNO"; break; case 2: case 3: cout <<"es dos o tres"; break; default : cout <<"es distinto de 1, 2 ó 3"; } <switch>: : = switch (<exp>) {<secuencia>} <secuencia> : : = <caso> <secuencia> <caso><defecto> <caso> : : = case <constante>: <sentencias>; | case <constante> : <sentencias>; break; <defecto> : : = default : <sentencias>; <constante>: : = enteros | caracteres 84

Diagramas Sintácticos Constituyen un método de descripción de lenguajes, equivalente a la BNF, originalmente

Diagramas Sintácticos Constituyen un método de descripción de lenguajes, equivalente a la BNF, originalmente propuesto por N. Wirth. para definir sintáxis de Pascal. Equivalencias entre BNF y Diagramas sintácticos: 85

Diagramas Sintácticos <S> : : = <v 1> | <v 2> ··· | <vn>

Diagramas Sintácticos <S> : : = <v 1> | <v 2> ··· | <vn> V 1 Cada ocurrencia de un símbolo terminal corresponde al diagrama V 2 Vn Cada ocurrencia de un símbolo no terminal corresponde al diagrama X 86

Diagramas Sintácticos Una producción de la forma: <S> : : = {<x>}0 corresponde al

Diagramas Sintácticos Una producción de la forma: <S> : : = {<x>}0 corresponde al siguiente diagrama (mientras) Una producción de la forma: <S> : : = <x>{<x>}0 corresponde al siguiente diagrama (repetir) X X 87

Diagramas Sintácticos Identificador: Pascal Letra: A B Letra z Letra Dígito _ Dígito: 0

Diagramas Sintácticos Identificador: Pascal Letra: A B Letra z Letra Dígito _ Dígito: 0 1 9 88

Diagramas Sintácticos Pascal Número Entero: Dígito Número Real: Dígito 89

Diagramas Sintácticos Pascal Número Entero: Dígito Número Real: Dígito 89

Diagramas Sintácticos Sentencia: Pascal Sentencia Compuesta: Simple Compuesta Begin Sentencia Simple: Simple End ;

Diagramas Sintácticos Sentencia: Pascal Sentencia Compuesta: Simple Compuesta Begin Sentencia Simple: Simple End ; Asignación Invocación Decisión Iteración 90

Diagramas Sintácticos Pascal Sentencia Asignación: : = Identificador Exp Sentencia if: If Exp B

Diagramas Sintácticos Pascal Sentencia Asignación: : = Identificador Exp Sentencia if: If Exp B then Sentencia else Sentencia while: While Exp B do Sentencia 91

CBL COBOL - like Constituye una extensión de la BNF destinada a la descripción

CBL COBOL - like Constituye una extensión de la BNF destinada a la descripción sintáctica del lenguaje Cobol. 92

CBL COBOL - like • Elementos opcionales se denotan entre paréntesis cuadrados x •

CBL COBOL - like • Elementos opcionales se denotan entre paréntesis cuadrados x • Elementos alternativos se listan verticalmente entre paréntesis llave • Elementos alternativos opcionales se listan verticalmente entre paréntesis cuadrados • La repetición de los elementos se indica mediante tres puntos a continuación de una ocurrencia del elemento x . . . 93

CBL COBOL - like <entero> : : = [ + ] <digito>. . .

CBL COBOL - like <entero> : : = [ + ] <digito>. . . <digito> <identificador> : : = <letra> . . . <letra> - <condición>: : =<identificador> IS NOT NUMERIC ALPHABETIC 94

1. 5 Semántica 95

1. 5 Semántica 95

1. 5 Semántica § La sintáxis se refiere sólo a la forma de un

1. 5 Semántica § La sintáxis se refiere sólo a la forma de un programa. Está fuertemente ligada a la semántica la que da el significado al programa. § Se define como un conjunto de reglas que describen el comportamiento de ese lenguaje en tiempo de ejecución § ¿Qué ocurre con la ejecución de un programa ? § ¿Qué sentencias se ejecutarán? § ¿Qué valores se asignan a determinadas variables? § ¿Qué salidas se obtienen? 96

Ejemplo Una expresión sintáctica, mediante BNF, como <fecha> : : = <d><d>/<d><d> puede tener

Ejemplo Una expresión sintáctica, mediante BNF, como <fecha> : : = <d><d>/<d><d> puede tener dos interpretaciones semánticas; por ejemplo: 09/04/2002 se entiende como • 9 de Abril de 2002 en Chile • 4 de Septiembre de 2002 en EEUU. 97

Métodos formales de semántica: § Axiomático : Cálculo del predicado (PROLOG) § Denotacional :

Métodos formales de semántica: § Axiomático : Cálculo del predicado (PROLOG) § Denotacional : Teoría de las funciones (Lisp) § Compilador : Máquina teórica Para especificar la semántica de una sentencia, lo haremos vía definición 98

1. 6 Procesadores El diseño de compiladores es el corazón de la implementación de

1. 6 Procesadores El diseño de compiladores es el corazón de la implementación de un lenguaje. DEFINICIÓN Es una máquina capaz de ejecutar acciones expresadas en algún lenguaje concreto, actualmente, sólo lenguaje de máquina. 99

Procesadores n En teoría, es posible construir: n n n Computadores - LISP Computadores

Procesadores n En teoría, es posible construir: n n n Computadores - LISP Computadores - C, etc. Desventajas: Son máquinas poco flexibles n De alto costo. n Se favorece la construcción de máquinas que operen con LP de bajo nivel. TRADUCTOR 100

Traductores Es un decodificador que acepta programas escritos en algún lenguaje fuente y genera

Traductores Es un decodificador que acepta programas escritos en algún lenguaje fuente y genera programas, funcionalmente equivalentes, en algún lenguaje objeto Programa en Lenguaje Fuente Traductor Programa en Lenguaje Objeto Preprocesador Compilador Intérprete Ensamblador Ligador Cargador 101

Capítulo 2 102

Capítulo 2 102

Pre-Procesador Traductor, cuyo n lenguaje fuente es una extensión de un lenguaje de alto

Pre-Procesador Traductor, cuyo n lenguaje fuente es una extensión de un lenguaje de alto nivel. l n lenguaje objeto es el estándar del lenguaje de alto nivel. Ej: C, C++, etc. n Programa en extensión de LAN Pre-procesador C++ Preprocesador Compilador C Ensamblador Leng. Ensam. Programa en LAN estándar Cargador Código Reubicable Código Ejecutable 103

Compilador Es un traductor cuyo n lenguaje fuente es un lenguaje de alto nivel

Compilador Es un traductor cuyo n lenguaje fuente es un lenguaje de alto nivel n lenguaje objeto es un lenguaje intermedio orientado a la máquina. código objeto Programa en Lenguaje de Alto Nivel Compilador Programa en L orientado a la Máquina Análisis lexicográfico Análisis sintáctico Generación de código Optimización 104

Compilador: Análisis lexicográfico Reconocimiento y clasificación de tokens básicos: n n n Constantes Identificadores

Compilador: Análisis lexicográfico Reconocimiento y clasificación de tokens básicos: n n n Constantes Identificadores Palabras reservadas, etc Construcción de la tabla de símbolos Lista de todos los símbolos y sus atributos usados en un programa (variables, etiquetas, rutinas, etc) 105

Compilador: Análisis sintáctico n Generación de un árbol de reconocimiento usando una representación interna

Compilador: Análisis sintáctico n Generación de un árbol de reconocimiento usando una representación interna de la gramática del lenguaje como guía. Expresión a + b*c Término + Expresión Factor Término Identificador Factor Término * a Identificador Factor b Identificador c 106

Compilador: Generación de código Enlace entre la sintáxis y la semántica (o representación máquina)

Compilador: Generación de código Enlace entre la sintáxis y la semántica (o representación máquina) de un lenguaje. Convierte el árbol de reconocimiento en una lista equivalente de instrucciones en lenguaje de máquina. 107

Compilador: Optimización Refinar el código generado para mejorar el rendimiento en tiempo de ejecución

Compilador: Optimización Refinar el código generado para mejorar el rendimiento en tiempo de ejecución Ubicación de • Construcciones semánticas redundantes • Uso ineficiente de registros, etc. 108

Intérprete Es un procesador cuyo lenguaje concreto es un lenguaje de alto nivel. Ningún

Intérprete Es un procesador cuyo lenguaje concreto es un lenguaje de alto nivel. Ningún computador es capaz de ejecutar un código distinto al de máquina Se debe simular mediante software la existencia de un computador cuyo lenguaje de máquina es un lenguaje de alto nivel 109

Diferencias: Compilador-Intérprete El compilador : § Sólo traduce n n El intérprete : §

Diferencias: Compilador-Intérprete El compilador : § Sólo traduce n n El intérprete : § Decodifica y ejecuta Traduce sólo una vez cada sentencia § Puede procesar varias veces algunas e ignorar completamente otras instrucciones Acepta las instrucciones según su secuencialidad física § Acepta las instrucciones según su secuencialidad lógica 110

Ensamblador Traductor, cuyo § Lenguaje fuente es un lenguaje ensamblador (representación simbólica de un

Ensamblador Traductor, cuyo § Lenguaje fuente es un lenguaje ensamblador (representación simbólica de un LM) § Lenguaje objeto es el LM del computador Programa en Leng. Ensamblador Programa en LM 111

Ligador Traductor cuyo n Lenguaje fuente es lenguaje orientado a la máquina Enlaza de

Ligador Traductor cuyo n Lenguaje fuente es lenguaje orientado a la máquina Enlaza de manera conjunta código compilado independientemente en UN solo módulo de carga, libre de referencias de un módulo a otro. § Lenguaje objeto es el L orientado a la máquina, pero denominado código reubicable Programa en L orientado a la máquina Linker Programa en LM código reubicable 112

Cargador Traductor cuyo n lenguaje fuente es lenguaje orientado a la máquina reubicable Carga

Cargador Traductor cuyo n lenguaje fuente es lenguaje orientado a la máquina reubicable Carga el programa en diversas localidades de memoria, actualizando las tablas de datos en que indican puntos de código reubicable que serán modificados para la ejecución del programa. § Lenguaje objeto es el LM del computador. Módulo ejecutable Programa Ejecutable Programa en código reubicable Loader Programa en LM código real 113