Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
INTRODUCCIÓN
1
Evolución de los conceptos
ABSTRACCIÓN DE DATOS
Tipos de datos
• Elementales (HW)
• Estructurados (LP)
• Abstractos (U)
2
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
4
Tipos de datos: Abstractos
• Stacks
• Colas, etc
5
Evolución de los conceptos
ABSTRACCIÓN DE CONTROL
6
Sentencias
• Asignación
• Decisión
• Iteración
7
Unidades de programas
8
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 Nivel
• Imperativos
• Funcionales
• Lógicos
• OO
10
Categorización de los LP
C++ Delphi
Pascal C
Mayor grado de
abstracción L ENS
LM
11
1.3 Criterios de :Definición y Diseño de LP
12
Lenguajes Naturales
13
Lenguajes de Programación
14
Lenguajes de Máquina
15
Lenguajes Simbólicos
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
18
Lenguajes Imperativos
19
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 ))
21
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.
22
Lenguajes Lógicos
23
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
24
1.3 Criterios de :Definición y
Diseño de LP
Ortogonalidad
Claridad Sintáctica
Orientación
Extensión
Portabilidad
Eficiencia
25
1.4 Sintáxis
26
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
28
Ejemplo: Pascal
debiéndose declarar
Type
Vector = Array1..10 of Real;
29
Ventajas de LP Ortogonales
• Es fácil de aprender
30
Desventajas de LP Ortogonales
31
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. Su sintáxis es encriptada
v 5 0
33
ORIENTACIÓN
Proveer una sintaxis comprometida con la
orientación del lenguaje.
34
EXTENSIÓN
Facilitar laimplementación de estructuras
inexistentes en función de las que éste provee,
permitiendo al usuario:
35
PORTABILIDAD
Proveer una definición del lenguaje independiente
de las características de una máquina en particular.
36
Ejemplo: Java
Java crea una versión ejecutable portable
37
EFICIENCIA
En traducción: LP orientados a la educación.
Rápida compilación
38
1.4 Sintáxis
Conjunto de reglas que determinan
si las sentencias de un programa están
bien formadas o no.
39
1.4 Sintáxis
Criterios Sintácticos
Elementos Sintácticos
40
Gramática
41
Criterios Sintácticos
Legibilidad:
COBOL: Write sueldo after advancing 2 lines
Facilidad de escritura:
APL: AA*-1 Invierte una matriz
42
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
43
Criterios Sintácticos
Por ejemplo, en Fortran:
44
Criterios Sintácticos
Solución en Pascal:
Por ejemplo, en Pascal:
If (x=0)
If (x=0) then
then Begin
If (y=0) If (y=0)
then then
S1 S1;
else End
S2; else
S2;
45
Elementos Sintácticos
Set de Caracteres
Identificadores
Comentarios
Abreviaciones
Espacios
46
Elementos Sintácticos (Cont.)
Delimitadores
Formatos Fijo y Libre
Expresiones
Sentencias
Estructura de Unidades de
programa
47
Gramática
48
Set de Caracteres
Datos estandarizados:
ASCII - EBCDIC
Datos propios:
Algol: ASCII Extended
APL
49
Identificadores
Escritura básica de los LP.
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.
50
Símbolos para Operadores
General: +, -, *, etc
APL: Posee caracteres especiales
Lisp: Plus, Times
Fortan: .EQ., **, .GT.
Pascal: div, mod
COBOL: Add, Multiply
51
Palabras Claves y Reservadas
52
Ventaja Palabras Reservadas
54
Ejemplo en COBOL
•Posee demasiadas palabras reservadas,
lo que hace imposible recordarlas todas.
55
Comentarios
56
Comentarios
Comentarios delimitados por marcas
especiales sin límite de líneas:
Pascal: (* .. *) , { .. }
C: /* .. */
• a = a+1 a++
• a = a+b a+=b
• a = a % b a%=b
58
Espacios
Su uso varía entre los LP
59
Delimitadores
Expresión. ( )
Ventajas
60
Delimitadores
Else colgante:
• Su uso mejora la legibilidad If (x=0)
then
• Simplifica el análisis sintáctico
Begin
• Permite remover la If (y=0)
ambigüedad, definiendo en then
forma explícita los límites S1;
de una estructura End
else
S2;
61
Formatos Fijo y Libre
Es histórico, viene de la época de las tarjetas perforadas.
62
Formatos Fijo y Libre
Ejemplo:
Pascal, C, etc.
63
Expresiones
• identificadores
• Operadores y
• Variables
64
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 Estructuradas
66
Estructuras de Unidades de Programas
• Definición Separada
• Definición Anidada
• Definición separada de datos
67
Gramática
68
Metalenguajes
70
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
72
BNF Expresión aritmética
Expresión:
x a*b - c/d a * b
término término término factor factor
73
BNF Sentencia For de Pascal
74
BNF Recursivas
<entero>::= <dígito> | <dígito><entero>
dígito>::= 0|1||..|9
75
BNF Recursivas
<identificador> ::= <letra> | <letra> <secuencia>
<secuencia> ::= <carácter> |<carácter><secuencia>
<carácter> ::= <letra> | <dígito>
Multilista: (1 2 (3 4 (5)6)7 8)
<Mlista> ::= ( ) | ( <lista> )
<lista> ::= <elemento> | <elemento> <lista>
<elemento>::= <átomo> | <Mlista>
76
BNF Sentencia Pascal
<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:
x a*b - c/d a * b
término término término factor factor
Ejemplo: (a+b)*c
78
BNF Expresión Recursiva
Expresión
Factor Término
a + b*c
Identificador Factor * Término
a Identificador Factor
b Identificador
c
79
BNF Expresión Recursiva
Expresión
Término
- Expresión b-c
a-b-c
Factor Término - Expresión
a Identificador Factor
b Identificador
c
80
BNF Expresión Recursiva
Expresión
Término
Factor * Término
(a +b) *c
(Expresión) Factor
Identificador
Término + Expresión
Factor Término c
Identificador Factor
a Identificador
81
BNF Sentencias Pascal
82
BNF Sentencias C
do
{printf("Número ");
scanf("%d",&n);
}while (n<=0);
83
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";
}
84
Diagramas Sintácticos
85
Diagramas Sintácticos
<S> ::= <v1> | <v2> ··· | <vn> Cada ocurrencia de un símbolo
terminal corresponde al diagrama
V1
V2
Cada ocurrencia de un símbolo no
Vn terminal corresponde al diagrama
86
Diagramas Sintácticos
Una producción de la forma: Una producción de la forma:
<S> ::= {<x>}0 <S> ::= <x>{<x>}0
corresponde al siguiente diagrama corresponde al siguiente diagrama
(mientras) (repetir)
X
87
Diagramas Sintácticos Pascal
Identificador: Letra: A
B
Letra
z
Letra
Dígito
_ Dígito: 0
1
88
Diagramas Sintácticos Pascal
Número Entero:
Dígito
Número Real:
Dígito Dígito
89
Diagramas Sintácticos Pascal
Sentencia: Sentencia Compuesta:
Simple
Compuesta
Begin Simple End
Sentencia Simple: ;
Asignación
Invocación
Decisión
Iteración
90
Diagramas Sintácticos Pascal
Sentencia Asignación:
Identificador := Exp
Sentencia if:
If Exp B then Sentencia
else Sentencia
Sentencia while:
91
CBL COBOL - like
92
CBL COBOL - like
93
CBL COBOL - like
<digito>
<identificador> ::= <letra> <letra>
...
-
NUMERIC
<condición>::=<identificador> IS NOT
ALPHABETIC
94
1.5 Semántica
95
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
97
Métodos formales
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
98
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
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 TRADUCTOR
de bajo nivel.
100
Traductores
Es un decodificador que acepta programas escritos en algún
lenguaje fuente y genera programas, funcionalmente
equivalentes, en algún lenguaje objeto
Preprocesador
Compilador
Intérprete
Ensamblador
Ligador
Cargador
101
Capítulo 2
102
Pre-Procesador
Traductor, 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.
103
Compilador
Es un traductor cuyo
lenguaje fuente es un lenguaje de alto nivel
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:
Constantes
Identificadores
Palabras reservadas, etc
105
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
a + b*c Término
Factor
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) de un lenguaje.
107
Compilador: Optimizació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.
109
Diferencias: Compilador-Intérprete
El compilador : El intérprete :
Sólo traduce Decodifica y ejecuta
110
Ensamblador
Traductor, cuyo
Lenguaje fuente es un lenguaje ensamblador
(representación simbólica de un LM)
Lenguaje objeto es el LM del computador
111
Ligador
Traductor cuyo
Lenguaje fuente es lenguaje orientado a la máquina
112
Cargador
Traductor cuyo
lenguaje fuente es lenguaje orientado a la máquina reubicable
113