1. INTRODUCCIÓN

113
1 1. INTRODUCCIÓN

description

Cobol. C. Pascal. Fortran. 1. INTRODUCCIÓN. SmallTalk. Java. C++. Evolución de los conceptos. ABSTRACCIÓN DE DATOS Tipos de datos. Elementales (HW) Estructurados (LP) Abstractos (U). Tipos de datos: Elementales. Enteros Reales Booleanos Caracteres. - PowerPoint PPT Presentation

Transcript of 1. INTRODUCCIÓN

Page 1: 1. INTRODUCCIÓN

1

1. INTRODUCCIÓN

Page 2: 1. INTRODUCCIÓN

2

Evolución de los conceptos

ABSTRACCIÓN DE DATOS

Tipos de datos

• Elementales (HW)

• Estructurados (LP)

• Abstractos (U)

Page 3: 1. INTRODUCCIÓN

3

Tipos de datos: Elementales

• Nivel: de la máquina

• Primitivos

• Tipo básico

• Proporcionados por el Hw

• Enteros• Reales• Booleanos• Caracteres

Page 4: 1. INTRODUCCIÓN

4

• Nivel: Del Lenguaje de Programación

• Proporcionado por los LP

• Con base en tipos elementales

• Se utilizan constructores de tipo que al LP

• Arreglos• Registros

Tipos de datos: Estructurados

Page 5: 1. INTRODUCCIÓN

5

• Nivel: Del usuario

• Definidos por el usuario para enriquecer el LP

• Stacks• Colas, etc

Tipos de datos: Abstractos

Page 6: 1. INTRODUCCIÓN

6

Evolución de los conceptos

ABSTRACCIÓN DE CONTROL

Lógica del código

• Sentencias

• Unidades de Programas

Page 7: 1. INTRODUCCIÓN

7

Sentencias

• Asignación

• Decisión

• Iteración

Constructores de código que facilitan la programación estructurada

Page 8: 1. INTRODUCCIÓN

8

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

Page 9: 1. INTRODUCCIÓN

9

Clasificación de los Lenguajes De Programación

Page 10: 1. INTRODUCCIÓN

10

Clasificación de los LP

Lenguajes

Naturales

De Programación De Máquina Simbólicos

Bajo nivel Alto Nivel• Imperativos• Funcionales• Lógicos• OO

Page 11: 1. INTRODUCCIÓN

11

Categorización de los LP

L ENSLM

LAN ForTran

CO

BO

L

Pascal C

C++ Delphi

Mayor grado de abstracción

Page 12: 1. INTRODUCCIÓN

12

1.3 Criterios de :Definición y Diseño de LP

Page 13: 1. INTRODUCCIÓN

13

Lenguajes Naturales

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

Page 14: 1. INTRODUCCIÓN

14

Lenguajes de Programación

Notación sistemática por la cual describimos procesos computacionales

Page 15: 1. INTRODUCCIÓN

15

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

Page 16: 1. INTRODUCCIÓN

16

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

Page 17: 1. INTRODUCCIÓN

17

Lenguajes Bajo Nivel

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.

Page 18: 1. INTRODUCCIÓN

18

Lenguajes Alto Nivel

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.

Page 19: 1. INTRODUCCIÓN

19

Lenguajes Imperativos

Los primeros LP fueron creados en los 50's: Fortran, Pascal, C, Ada

Se denominan también, procedurales Los LP que tienen a ForTran 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

Page 20: 1. INTRODUCCIÓN

20

Lenguajes Funcionales

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.

Page 21: 1. INTRODUCCIÓN

21

Lenguajes Funcionales

Ejemplos:1. x + y => (Plus x y)

2. 2*y => (Times 2 y)

3. x5 => (Exp x 5)

4. 5xyz => (Times 5(Times x (Times y z)))

5. ax2 + bx + c => ax2 + (bx + c) =>

(Plus (Times a (Exp x 2)) (Plus (Times b x) c ))

Page 22: 1. INTRODUCCIÓN

22

Lenguajes Lógicos 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.

Page 23: 1. INTRODUCCIÓN

23

Lenguajes Lógicos

Ejemplo:

Una forma de programación lógica son las tablas de decisión utilizadas en aplicaciones administrativas.

Acción 1 if (cond1)Acción 2 if (cond2)

:

Page 24: 1. INTRODUCCIÓN

24

Lenguajes OO 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.

Page 25: 1. INTRODUCCIÓN

25

1.3 Criterios de :Definición y Diseño de LP

Ortogonalidad Claridad

Sintáctica Orientación Extensión Portabilidad Eficiencia

Page 26: 1. INTRODUCCIÓN

26

1.4 Sintáxis

Page 27: 1. INTRODUCCIÓN

27

ORTOGONALIDAD

Dotar al lenguaje de la máxima generalidad posible de modo que NO existan restricciones o casos especiales.

Ejemplos:

Ventajas:

Desventajas:

Page 28: 1. INTRODUCCIÓN

28

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 : Array1..10 of Real);

Page 29: 1. INTRODUCCIÓN

29

Ejemplo: Pascal

debiéndose declarar 

Type Vector = Array1..10 of Real;

Procedure A(var v : Vector);

Page 30: 1. INTRODUCCIÓN

30

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.

Page 31: 1. INTRODUCCIÓN

31

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

Page 32: 1. INTRODUCCIÓN

32

CLARIDAD SINTÁCTICA

Permitir que las diferencias semánticas se manifiesten en diferencias sintácticas

• COBOL : Es claro

Page 33: 1. INTRODUCCIÓN

33

CLARIDAD SINTÁCTICA

• APL : No es claro, puesto que está lleno de símbolos. Su sintáxis es encriptada

• Facilita la escritura a programadores experimentados

• Son difíciles de leer al momento de efectuar modificaciones futuras.

v 5 0

Page 34: 1. INTRODUCCIÓN

34

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.

Page 35: 1. INTRODUCCIÓN

35

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

Page 36: 1. INTRODUCCIÓN

36

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

Page 37: 1. INTRODUCCIÓN

37

Ejemplo: Java

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

Page 38: 1. INTRODUCCIÓN

38

EFICIENCIA

En traducción: LP orientados a la educación.

Rápida compilación

En ejecución: LP orientados a rutinas muy utiliza-

das, como la verificación de claves En construcción LP que permiten una rápida y clara

construcción de programas y ayudaen el diagnóstico

Page 39: 1. INTRODUCCIÓN

39

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

Page 40: 1. INTRODUCCIÓN

40

1.4 Sintáxis

Objetivo: Proveer una notación que permita la comunicación entre el programador y el compilador (procesador del lenguaje).

Criterios SintácticosElementos Sintácticos

Page 41: 1. INTRODUCCIÓN

41

Gramática

Page 42: 1. INTRODUCCIÓN

42

Criterios Sintácticos Legibilidad:

COBOL: Write sueldo after advancing 2 lines

Facilidad de escritura:APL: AA*-1 Invierte una

matriz

Page 43: 1. INTRODUCCIÓN

43

Criterios Sintácticos Facilidad de traducción:

El compilador debiera generar poco código

Ausencia de ambigüedad:Evitar que una estructura tenga

más de un significado

Page 44: 1. INTRODUCCIÓN

44

Criterios SintácticosPor ejemplo, en Fortran:

M(i) puede significar un elemento del arreglo M, ó M(i) una llamada a la función M. Con el parámetro i.

Por ejemplo, en PL/1:

A=B=C: Asignación múltiple B=C, A=B Asignación de un valor booleano: A=(B=C)

Page 45: 1. INTRODUCCIÓN

45

Criterios Sintácticos

Por ejemplo, en Pascal:

If (x=0)then

If (y=0) then

S1else

S2;

Solución en Pascal:

If (x=0)then

Begin If (y=0)

then S1;

Endelse

S2;

Page 46: 1. INTRODUCCIÓN

46

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

Page 47: 1. INTRODUCCIÓN

47

Elementos Sintácticos (Cont.)

Delimitadores Formatos Fijo y Libre Expresiones Sentencias Estructura de Unidades de pr

ograma

Page 48: 1. INTRODUCCIÓN

48

Gramática

Page 49: 1. INTRODUCCIÓN

49

Set de Caracteres

Datos estandarizados:

ASCII - EBCDIC

Algol: ASCII Extended

APL

Datos propios:

Page 50: 1. INTRODUCCIÓN

50

Identificadores

Tienen una cantidad máxima de símbolos definidos por la versión

Generalmente es: Un string con letras y/o dígitos

comenzando con letra La legibilidad aumenta si las

versiones permiten identificadores de varios caracteres.

Escritura básica de los LP.

Page 51: 1. INTRODUCCIÓN

51

Símbolos para Operadores

APL: Posee caracteres especiales Lisp: Plus, Times Fortan: .EQ., **, .GT. Pascal: div, mod COBOL: Add, Multiply

General: +, -, *, etc

Page 52: 1. INTRODUCCIÓN

52

Palabras Claves y Reservadas

Una palabra reservada es una palabra clave no declarable como identificador de usuario.

Una palabra clave es un identificador que constituye la parte no cambiante de una instrucción.

Page 53: 1. INTRODUCCIÓN

53

Ventaja Palabras Reservadas

La mayoría de los LP utilizan palabras reservadas, así:

El análisis sintáctico es más fácil y,

La detección de errores es más eficiente. Ejemplos

:

Page 54: 1. INTRODUCCIÓN

54

Ejemplo en ForTran

Las sentencias:

Do , If

NO son palabras reservadas,

Son palabras claves, por lo tanto el programador las puede usar como identificadores.

Page 55: 1. INTRODUCCIÓN

55

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.

Page 56: 1. INTRODUCCIÓN

56

Comentarios

Auto documentación del código fuente.

Comentarios en líneas separadas:

Fortran: en la primera columna: C

Page 57: 1. INTRODUCCIÓN

57

Comentarios Comentarios delimitados por

marcas especiales sin límite de líneas:

Pascal: (* .. *) , { .. } C: /* .. */

Se indica el comienzo y termina con el fin de línea:

Ada: - C++: // Fortan 90: !

Page 58: 1. INTRODUCCIÓN

58

Abreviaciones

Relacionado con la legibilidad, por ejemplo:

• a = a+1 a++

• a = a+b a+=b

• a = a % b a%=b

Page 59: 1. INTRODUCCIÓN

59

Espacios

Su uso varía entre los LP

• ForTran: No son significativos

• SNOBOL 4: Genera confusión.

• Concatenación

• Separador entre elementos de una instrucción

Page 60: 1. INTRODUCCIÓN

60

Delimitadores

Se utilizan para demarcar una unidad sintáctica como:

Sentencia

Expresión.

Begin End, { }

( )

Ventajas

Page 61: 1. INTRODUCCIÓN

61

Else colgante:

If (x=0)then

Begin If (y=0)

then S1;

Endelse

S2;

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

Page 62: 1. INTRODUCCIÓN

62

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: ForTran

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

Page 63: 1. INTRODUCCIÓN

63

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.

Page 64: 1. INTRODUCCIÓN

64

Expresiones

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

Esta estructura sintáctica involucra:

• identificadores

• Operadores y

• Variables

Page 65: 1. INTRODUCCIÓN

65

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.

Page 66: 1. INTRODUCCIÓN

66

Sentencias

Mínima unidad constitutiva de código

Simples

Estructuradas

No permite instrucciones anidadas

Permite instrucciones anidadas

Page 67: 1. INTRODUCCIÓN

67

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

Page 68: 1. INTRODUCCIÓN

68

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.

Page 69: 1. INTRODUCCIÓN

69

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)

Page 70: 1. INTRODUCCIÓN

70

1.5 Semántica

Page 71: 1. INTRODUCCIÓN

71

BNF (Backus - Naur Form)

Notación desarrollada por los especialistas Backus y Naur para definir lenguaje Algol 60

• < >: 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.

Metasímbolos:

Page 72: 1. INTRODUCCIÓN

72

BNF Número real, identificador

<real> ::=

<letra> ::=

<secuencia> ::=

<secuencia>

<identificador> ::=

<letra>

<dígito>

<dígito> ::= 0

. <secuencia>

{<dígito>}0

|1|2|3|...8|9

{<letra> | <dígito>}0|B|C|...Y |Z|Aa|b|c...y|zA

Page 73: 1. INTRODUCCIÓN

73

BNF Expresión aritmética

 <exp>::=<término>::=<factor>::=

Expresión:

x

término

término

término

a*b - c/d a * bfactor

factor

<término>

| <término> +<término>

<factor>

|<factor> * <factor>

|<término> -<término>|<factor> / <factor>

<identificador>

|<constante>

(<exp>)

Page 74: 1. INTRODUCCIÓN

74

BNF Sentencia For de Pascal

<s- for> ::= For <identificador> := <intervalo> do <sentencia>

<intervalo> ::= < inicial> to <final> | <inicial> downto < final>

<inicial> ::= <exp>

<final> ::= <exp>

Page 75: 1. INTRODUCCIÓN

75

BNF Recursivas

  <entero>::=

.

0|1||..|9

| <dígito> <secuencia>

<dígito>

|

dígito>::=

<secuencia> ::=

<dígito>

<dígito><entero>

<real> ::=

<secuencia>

<secuencia>

Page 76: 1. INTRODUCCIÓN

76

BNF Recursivas

<identificador> ::=<secuencia> ::= <carácter><carácter> ::=

<letra>

<Mlista> ::=

( )

<lista> ::=

<elemento>

| <elemento> <lista><elemento>::

=<átomo>

| <Mlista>

| <letra> <secuencia>|

<carácter><secuencia>

<letra> | <dígito>

| ( <lista> )

Multilista: (1 2 (3 4 (5)6)7 8)

Page 77: 1. INTRODUCCIÓN

77

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>

Page 78: 1. INTRODUCCIÓN

78

BNF Otra vez la expresión aritmética REC

 <exp>::=<término>::=<factor>::=

Expresión:

x

término

término

término

a*b - c/d a * bfactor

factor

<término>

| <término> +<exp>

<factor>

|<factor> * <término>

|<término> - <exp>

|<factor> / <término>

<identificador>

|<constante>

(<exp>)

(a+b)*cEjemplo:

Page 79: 1. INTRODUCCIÓN

79

BNF Expresión Recursiva

a + b*c

Expresión

Término Expresión +

Factor

Identificador

a

*

Identificador

b

Factor

Identificador

c

b*c

Término

Factor Término

Page 80: 1. INTRODUCCIÓN

80

BNF Expresión RecursivaExpresión

Término Expresión -

Términoa - b - c

Factor

Identificador

a

Factor

-

Identificador

b

Factor

Identificador

c

b - c

Expresión

Término

Page 81: 1. INTRODUCCIÓN

81

BNF Expresión RecursivaExpresión

Término Expresión +

(a +b) *c

Factor

Identificador

a

*

Factor

Identificador

c

Término

Factor Término

(Expresión)

Término

Factor

Identificador

b

Page 82: 1. INTRODUCCIÓN

82

BNF Sentencias Pascal

<s-While>::=

While

<exp B>

do <sentencia>

<s-If>::=

|If <exp B> then <sentencia> else <sentencia>

If <exp B> then <sentencia>

Page 83: 1. INTRODUCCIÓN

83

BNF Sentencias C

<do-while>::=

do <sentencia> while <exp B>

do

{printf("Número ");

scanf("%d",&n);

}while (n<=0);

Page 84: 1. INTRODUCCIÓN

84

BNF Sentencias C

<switch>::=switch (<exp>) {<secuencia>}

<caso> ::=case<constante>

:<sentencias>;<secuencia> ::=<caso> <secuencia><caso>

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";}

| case <constante><sentencias>; break;:

<caso><defecto>

<defecto> ::=

default :<sentencias>;<constante>::

=enteros | caracteres

Page 85: 1. INTRODUCCIÓN

85

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:

Page 86: 1. INTRODUCCIÓN

86

Diagramas Sintácticos

<S> ::= <v1> | <v2> ··· | <vn>

Cada ocurrencia de un símbolo terminal corresponde al diagrama

Vn

V1

V2

Cada ocurrencia de un símbolo no terminal corresponde al diagrama

X

Page 87: 1. INTRODUCCIÓN

87

Diagramas Sintácticos

Una producción de la forma: <S> ::= {<x>}0

corresponde al siguiente diagrama

X

(mientras)

Una producción de la forma:

<S> ::= <x>{<x>}0

corresponde al siguiente diagrama

X

(repetir)

Page 88: 1. INTRODUCCIÓN

88

Diagramas Sintácticos Pascal

Identificador: Letra:

A

B

z

Dígito: 0

1

9

_

Letra

Dígito

Letra

Page 89: 1. INTRODUCCIÓN

89

Diagramas Sintácticos Pascal

Número Entero:

Dígito

Número Real:

DígitoDígito

Page 90: 1. INTRODUCCIÓN

90

Diagramas Sintácticos Pascal

Sentencia: Sentencia Compuesta:

Compuesta

Simple

Sentencia Simple:

Invocación

Asignación

Decisión

Iteración

Simple

;

Begin End

Page 91: 1. INTRODUCCIÓN

91

Diagramas Sintácticos Pascal

Sentencia Asignación:

Identificador := Exp

Sentencia if: If Exp B then Sentencia

else Sentencia

Sentencia while:

Exp B do SentenciaWhile

Page 92: 1. INTRODUCCIÓN

92

CBL COBOL - like

Constituye una extensión de la BNF destinada a la descripción sintáctica del lenguaje Cobol.

Page 93: 1. INTRODUCCIÓN

93

CBL COBOL - like

• Elementos opcionales se denotan entre paréntesis cuadrados x

• Elementos alternativos se listan verticalmente entre paréntesis llave

• La repetición de los elementos se indica mediante tres puntos a continuación de una ocurrencia del elemento x ...

• Elementos alternativos opcionales se listan verticalmente entre paréntesis cuadrados

Page 94: 1. INTRODUCCIÓN

94

CBL COBOL - like

<identificador> ::= <letra> ...

<digito><letra> -

<condición>::=

<identificador> IS NOTNUMERICALPHABETIC

<entero> ::= [ + ] <digito> ...

Page 95: 1. INTRODUCCIÓN

95

1.5 Semántica

Page 96: 1. INTRODUCCIÓN

96

1.5 Semántica

Se define como un conjunto de reglas que describen el comportamiento de ese lenguaje en tiempo de ejecución

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.

¿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?

Page 97: 1. INTRODUCCIÓN

97

Ejemplo

<fecha> ::= <d><d>/<d><d>/<d><d><d><d>

puede tener dos interpretaciones semánticas; por ejemplo:

Una expresión sintáctica, mediante BNF, como

09/04/2002 se entiende como

• 9 de Abril de 2002 en Chile

• 4 de Septiembre de 2002 en EEUU.

Page 98: 1. INTRODUCCIÓN

98

Métodos formales

Para especificar la semántica de una sentencia, lo haremos vía definición

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

Page 99: 1. INTRODUCCIÓN

99

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.

Page 100: 1. INTRODUCCIÓN

100

Procesadores En teoría, es posible construir:

Computadores - LISP Computadores - C, etc.

Desventajas: Son máquinas poco flexibles De alto costo.

Se favorece la construcción de máquinas que operen con LP de bajo nivel.

TRADUCTOR

Page 101: 1. INTRODUCCIÓN

101

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

PreprocesadorCompiladorIntérpreteEnsambladorLigadorCargador

Page 102: 1. INTRODUCCIÓN

102

Capítulo 2

Page 103: 1. INTRODUCCIÓN

103

Pre-ProcesadorTraductor, cuyo lenguaje fuente es una extensión de un lenguaje de alto nivel.l lenguaje objeto es el estándar del lenguaje de alto nivel.

Ej: C, C++, etc.

Programa en extensión de LAN

Preprocesador Programa en LAN estándar

Pre-procesador Compilador Ensamblador Cargador

C++ CLeng.Ensam.

CódigoReubicable

CódigoEjecutable

Page 104: 1. INTRODUCCIÓN

104

CompiladorEs un traductor cuyo lenguaje fuente es un lenguaje de alto nivel lenguaje objeto es un lenguaje intermedio orientado a la máquina.

Programa en Lenguaje de Alto

Nivel

Compilador Programa en L orientado a la

Máquina

Análisis lexicográficoAnálisis sintáctico

Generación de código

Optimización

código objeto

Page 105: 1. INTRODUCCIÓN

105

Compilador: Análisis lexicográfico

Reconocimiento y clasificación de tokens básicos:

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)

Page 106: 1. INTRODUCCIÓN

106

Compilador: Análisis sintáctico

Generación de un árbol de reconocimiento usando una representación interna de la gramática del lenguaje como guía.

Expresión

Término Expresión +

Factor

Identificador

a

*

Identificador

b

Factor

Identificador

c

Término

Factor Término

a + b*c

Page 107: 1. INTRODUCCIÓN

107

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.

Page 108: 1. INTRODUCCIÓN

108

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.

Page 109: 1. INTRODUCCIÓN

109

IntérpreteEs 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

Page 110: 1. INTRODUCCIÓN

110

Diferencias: Compilador-Intérprete

El compilador : El intérprete :

Sólo traduce 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 lógica

Acepta las instrucciones según su secuencialidad física

Page 111: 1. INTRODUCCIÓN

111

EnsambladorTraductor, cuyo Lenguaje fuente es un lenguaje ensamblador

(representación simbólica de un LM)

Lenguaje objeto es el LM del computador

Programa en Leng. Ensam.

Ensamblador Programa en LM

Page 112: 1. INTRODUCCIÓN

112

Ligador

Traductor cuyo Lenguaje fuente es lenguaje orientado a la máquina

Programa en L orientado a la

máquina

Linker Programa en LM

código reubicable

Lenguaje objeto es el L orientado a la máquina, pero denominado código reubicable

Enlaza de manera conjunta código compilado independientemente en UN solo módulo de carga, libre de referencias de un módulo a otro.

Page 113: 1. INTRODUCCIÓN

113

Cargador

Traductor cuyo lenguaje fuente es lenguaje orientado a la máquina

reubicable

Programa en código reubicable

Loader Programa en LM

código real

Lenguaje objeto es el LM del computador. Módulo ejecutable

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.

Programa Ejecutable