You are on page 1of 68

1.

GENERALIDADES

Justificacin del Estudio de Lenguajes

Justificacin del Estudio

Disponer de opciones de eleccin


de lenguajes alternativos
Facilitar el aprendizaje de nuevos
lenguajes
Permitir el diseo adecuado de un
lenguaje (e. g. una API)
3

Importancia de un Lenguaje

Importancia de un
Lenguaje

Provee una notacin de alto nivel


para implementar algoritmos
Provee una abstraccin de una
mquina difcil de programar

Caractersticas Deseables

Caractersticas Deseables

Rapidez de aprendizaje
Integridad conceptual (pocos conceptos)
Ortogonalidad (composicin de abstracciones,
pocos casos especiales)
Expresividad
Rapidez de programacin
Legibilidad

Evolucin de Conceptos

Evolucin de conceptos

ABSTRACCIN DE DATOS
Tipos simples
Tipos compuestos
Tipos abstractos

Evolucin de conceptos

ABSTRACCIN DEL CONTROL


Sentencias
Unidades de Programas

10

Sentencias
Asignacin
Seleccin (simple, doble y mltiple)
Repeticin(con expresin
con variable de control)

booleana

Entrada-Salida
Invocacin

11

Unidades de
programas
Favorecen la programacin modular
Generalizan la nocin de operador
Permiten encapsular parte de un
algoritmo
Tienen una nica definicin
Posibilitan mltiples activaciones

12

Clasificacin de los Lenguajes

13

Clasificacin
Lenguaje
s
Naturales
De Programaci
n
De Mquina
Simblicos
Bajo nivel

Alto Nivel
Imperativos
Declarativos
OO
OW
Concurrentes
14

Niveles de abstraccin
C++

Pascal
C F
orTra
n
Ensamblador
es

Mquin
a

COBOL

Mayor nivel
de
abstraccin

Delphi

he
c
S
e
Pyt

Java
ho n

C#

Ruby

15

Lenguajes Imperativos
Surgen como los primeros lenguajes de alto
nivel: Fortran, COBOL, Pascal, C, Ada
Se denominan tambin procedurales
Se caracterizan por cambiar el estado de las
variables mediante asignacin
Segn Wirth
Programa = Algoritmos + Estructuras de
Datos
Es
imprescindible conocer la naturaleza
(tipo) de los datos

16

Lenguajes Declarativos

Declaran
condiciones,
proposiciones,
afirmaciones, restricciones, ecuaciones o
transformaciones
Describen qu hacer y no cmo hacer
No existen la asignacin ni la tipificacin
Segn Kowalski Programa = Lgica + Control
Las variables estn dotadas de transparencia
referencial
La computacin se entiende como un conjunto
de relaciones de inferencia entre objetos
17

Lenguajes Declarativos
Se subclasifican en:

Funcionales, por ejemplo

Lisp
Haskell

Lgicos, por ejemplo

Prolog
Gdel

Algebraicos, por ejemplo

SQL
Maude

18

Lenguajes Funcionales

Funcionales puros: Haskell, Miranda

Funcionales hbridos: ML, Lisp, Scheme

Funcionales tcitos: J, Apl

Aplican
funciones,
ya
recursivamente o por composicin

La programacin se basa en expresiones


(sin asignaciones)

sea,

19

Lenguajes
Funcionales
Ejemplo en Scheme:
Funcin f(x) = (x + 1)2 + (2x)2
(define (cuad x) (* x x))
(define (sum x y) (+ x y))
(define (mult x y) (* x y))
(define (f x) (sum (cuad (sum x 1)) (cuad (mult 2
x))))
(f 2)
25
20

Lenguajes OO

Algunos de ellos son Smalltalk, C++,


Java, C#, Python

Representan un modelo de interaccin


entre objetos, cada uno de los cuales
acta en funcin un estado y un
comportamiento

Se construyen objetos complejos a partir


de objetos simples, bajo el principio de la
reutilizacin de cdigo (herencia)
21

Lenguajes OW

Presentacin: SGML, HTML, XML

Desarrollo: JavaScript,
Dart, Haxe

Destinados
a
la
programacin
aplicaciones
soportadas
por
navegadores web

Orientados a satisfacer la dinmica de la


interaccin entre clientes y servidores en
internet

PHP,

Ruby,
de
los

22

Lenguajes
Concurrentes

Destinados a la programacin de aplicaciones


que interactan simultneamente

Las
aplicaciones
son
subprocesos
denominados tareas (tasks), hilos (threads) o
actores (actors)

Dado
que
los
subprocesos
comparten
recursos, los lenguajes concurrentes deben
facilitar tanto la exclusin mutua como la
sincronizacin

Algunos de ellos: Ada, Java, Scala


23

Ranking de Lenguajes
Visitar el ndice mensual TIOBE de
popularidad
de
los
lenguajes
de
programacin a nivel mundial, basado en la
opinin
de
ingenieros
informticos
calificados, de oferentes de capacitacin y
de proveedores de software.
http://www.tiobe.com/index.php/conte
nt/paperinfo/tpci/index.html
24

Sintaxis

25

Sintaxis

Conjunto de reglas que determinan si


las sentencias de un programa estn
bien formadas o no
Su objetivo es proveer una notacin
que permita la comunicacin entre
el programador y el procesador del
lenguaje

26

Elementos
Sintcticos

Set de caracteres
Identificadores
Smbolos para operadores
Palabras claves y reservadas
Comentarios
Delimitadores
Expresiones
Sentencias
Unidades de programas
27

Gramticas

28

Gramtica
Representa la definicin 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

29

Metalenguaje
Gramtica formal destinada a la
descripcin de la sintaxis de un lenguaje

El
mximo
exponente
de
los
metalenguajes es BNF (Backus-NaurForm), a partir del cual derivan CBL
(COBOL-Like) y los Diagramas sintcticos

30

BNF
Notacin desarrollada por los especialistas
Backus y Naur para definir lenguaje Algol 60
Metasmbolos:
<
::=

>: indica smbolo NO-TERMINAL o meta variable


: "Se define como"

|: "o"
identificador: Palabra reservada, constante o smbolo
TERMINAL

31

BNF
Nmero entero sin signo
<entero sin signo> ::=
signo>

<dgito> | <dgito> <entero sin

<dgito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Nmero real sin signo
<real sin signo> ::= <secuencia> . <secuencia>
<secuencia> ::= <dgito> | <dgito> <secuencia>
<dgito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

32

BNF
Sentencia if
<s-if> ::= if ( <expresin booleana> ) <sentencia> |
if ( <expresin booleana> ) <sentencia> else
<sentencia>
Sentencia while
<s-while> ::= while ( <expresin booleana> ) <sentencia>
Sentencia do-while
<s-do-while> ::= do <sentencia> while (<expresin
booleana> )
33

BNF
<identificador> ::= <letra> | <letra> <secuencia>
<secuencia> ::= <carcter> | <carcter> <secuencia>
<carcter> ::= <letra> | <dgito>
<letra> ::= A | B | | Z | a | b | | z
Multilista: (1 2 (3 4 (5) 6) 7 8)
<mlista> ::= () | (<lista>)
<lista> ::= <elemento> | <elemento> <lista>
<elemento> ::= <tomo> | <mlista>

34

BNF
Sentencia
<sentencia> ::= <simple> | <compuesta>
<simple> ::= <asignacin> | <invocacin> | <seleccin> |
<repeticin>
<compuesta> ::= {<sentencias>}
<sentencias> ::= <simple>; | <simple>; <sentencias>

35

BNF
Expresin aritmtica

a*b c/d

x
trmin
o

<ea> ::=

trmin
o

trmin
o

a * b
factor

factor

<trmino> | <st> <trmino> | <ea> <st>


<trmino>

<trmino> ::= <factor> | <factor> <sf> <trmino>


<factor> ::= <id> | <constante> | (<ea>)
<st> ::= + |
<sf> ::= * | /
36

Semntica

37

Semntica
Sintaxis

Cmo se expresa un concepto!

Semntica

Qu significa ese concepto!

Semntica se define como el conjunto de reglas que


establecen
el significado de las expresiones
sintcticas
Es decir, el conjunto de reglas que determinan el
comportamiento de un lenguaje en tiempo de
ejecucin

38

Semntica
Existen cuatro modelos de especificacin
significado de los constructores sintcticos:

del

Semntica descriptiva
Notacin usada por los diccionarios enciclopdicos
Semntica operacional (Plotkin)
Orientada a la implementacin del lenguaje, el
significado se define mediante una mquina
abstracta (con estados) y secuencias de cmputos
sobre dicha mquina
39

Semntica
Semntica axiomtica (Floyd-Hoare)
Orientada al uso del lenguaje, el significado se
establece mediante sentencias lgicas sobre el
efecto de la ejecucin de un programa
Semntica denotacional (Scott-Strachey)
Orientada al diseo del lenguaje, el significado se
modela como entidad matemtica (en general una
funcin), estando presente an la nocin de estado

40

Procesadores de Lenguajes

41

Procesador
DEFINICIN
Un procesador es una mquina capaz de
ejecutar acciones expresadas en algn
lenguaje concreto
Actualmente, el nico lenguaje concreto que
existe es el lenguaje de mquina

42

Traductor
Es un decodificador que acepta programas escritos en
algn lenguaje fuente y genera programas, funcionalmente
equivalentes, en algn lenguaje objeto
Programa en
Lenguaje Fuente

Traductor

Programa en
Lenguaje Objeto

Preprocesador
Compilador
Ensamblador
Ligador
Cargador
43

Pre-procesador
Es un traductor cuyo
lenguaje fuente es una extensin de un lenguaje de alto nivel
lenguaje objeto es el estndar del lenguaje de alto nivel

Por ejemplo, C y C++


Programa en
extensin de LAN

Pre-procesador

C++

Preprocesador

Compilador

Ensamblador

Leng.
Ensam.

Programa en
LAN estndar

Cargador

Cdigo
Reubicable

Cdigo
Ejecutable

44

Pre-procesador
#define entero int
#define si if
#define mientras while
#define retornar return
entero prod(entero x, entero y){
entero z=0;
mientras(y){
si(y%2) z += x;
x *= 2;
y /= 2;
}
retornar z;
}
45

Compilador
Es un traductor cuyo
lenguaje fuente es un lenguaje de alto nivel
lenguaje
objeto es un lenguaje orientado a la
mquina
Programa en
lenguaje de alto
nivel
Cdigo Fuente

Compilador

Fases de
Compilacin

Programa en
lenguaje orientado a
la mquina
Cdigo Objeto

Anlisis lxico
Anlisis sintctico
Anlisis semntico
Generacin de cdigo
intermedio
Generacin de cdigo
ejecutable

46

Compilador
Anlisis lxico
Reconocimiento y clasificacin de tokens bsicos:
Constantes
Identificadores
Palabras reservadas, etc.
Construccin de la tabla de smbolos
Lista de todos los smbolos y sus atributos usados en un
programa (variables, etiquetas, rutinas, etc)

47

Compilador
Anlisis sintctico
Generacin del rbol sintctico del programa fuente, en el
cual:
Las hojas corresponden a los tokens
Los nodos internos representan reducciones gramaticales
La raz constituye el nodo inicial de la gramtica del lenguaje

48

Compilador
Anlisis sintctico

a + b*c

Expresin
Trmino +

Expresin

Factor

Trmino

IdentificadorFacto Trmino
*
r
IdentificadorFactor
a
b

Identificad
or
c
49

Compilador
Anlisis semntico
Anlisis de tipos
Aplicacin de reglas de inferencia para determinar el
tipo las expresiones
Consistencia semntica del rbol sintctico
Coherencia entre operadores y operandos

50

Compilador
Generacin de cdigo intermedio
Convierte el programa en un cdigo de mquina abstracto
(independiente de la arquitectura del procesador de
destino)

Transforma el rbol sintctico en una


equivalente de instrucciones de bajo nivel

lista

51

Compilador
Generacin de cdigo intermedio
while((a>b) && (a<=2*b 4)) a = a +b;

L1:
if(a>b) goto L2;
goto L3;
L2:
t1 = 2*b;
t2 = t1 4;
if(a <= t2) goto L4;
goto L3;
L4:
a = a + b;
goto L1;
L3:

52

Compilador
Optimizacin de cdigo intermedio
Objetivo: obtener un cdigo ejecutable eficiente segn los
criterios de optimizacin tanto temporal como espacial
Funcionamiento: revisa el cdigo generado segn los
niveles de abstraccin fijados y aplica las optimizaciones
que correspondan
Condiciones: el cdigo optimizado debe demandar menos
tiempo
y
espacio
que
la
versin
previa;
las
transformaciones aplicadas deben preservar la semntica
de los programas

53

Compilador
Optimizacin de cdigo intermedio

L1:
if(a<=b) goto L3;
t1 = 2*b;
t2 = t1 4;
if(a > t2) goto L3;
a = a + b;
goto L1;
L3:

54

Compilador
Optimizacin de cdigo intermedio
a = b + c + d;
e = b + c + f;

t1 = b + c;
a = t1 + d;
e = t1 + f;

55

Compilador
Optimizacin de cdigo intermedio
do {
b = 1;
a = a b;
} while(a ! = 0);

b = 1;
do {
a = a b;
} while(a ! = 0);
56

Compilador
Generacin del cdigo ejecutable
Existen dos enfoques:
Archivos binarios
Compilacin JIT (Just In Time), es decir, compilacin en
tiempo de ejecucin, conocida tambin como traduccin
dinmica

57

Compilador

58

Compilador
Archivos binarios
1.A partir del cdigo intermedio, el compilador genera un
programa en lenguaje ensamblador
2.Luego, el ensamblador genera un archivo binario del
programa, el cual es directamente ejecutable
3.Finalmente, el ncleo del sistema operativo ejecuta el
archivo binario, creando un proceso con su espacio de
direcciones

59

Compilador
Compilador JIT
1.El compilador JIT traduce cdigo intermedio (byte code) a
cdigo nativo (binario ejecutable), por lo cual es
dependiente de la plataforma
2.El cdigo intermedio se guarda en un archivo F
independiente
de
la
plataforma
y
distribuible
prescindiendo del cdigo fuente
3.La ejecucin de F implica la compilacin JIT de un
mtodo ante el envo del respectivo primer mensaje

60

Compilador

61

Ensamblador
Es un traductor cuyo
Lenguaje fuente es un lenguaje ensamblador
(representacin simblica del lenguaje de mquina)
Lenguaje objeto es el lenguaje de mquina del
computador
Programa en
Leng. Ensam.

Ensamblador

Programa en
LM

62

Ligador
Es un traductor cuyo
Lenguaje fuente es el lenguaje de mquina

Integra, en un nico mdulo de carga, el cdigo


compilado de la aplicacin con el cdigo compilado
preexistente
correspondiente
a
las
libreras
utilizadas
Lenguaje objeto es el lenguaje mquina, pero en la
versin denominada cdigo reubicable
Programa en
lenguaje de
mquina

Linker

Programa en
leng. de mquina
cdigo reubicable

63

Cargador
Es un traductor cuyo
Lenguaje fuente
es el cdigo reubicable (lenguaje de
mquina con direcciones relativas)

Carga el programa en la RAM, actualizando las tablas


de datos, es decir, transformado direcciones relativa
en absolutas
Lenguaje objeto es el cdigo real (lenguaje de mquina
con direcciones absolutas)
Programa como
cdigo reubicable

Loader

Programa
Ejecutable
Programa como
cdigo real

64

Intrprete
Es un procesador cuyo lenguaje concreto es un
lenguaje simblico

Hoy, ningn computador es capaz de ejecutar cdigo


distinto al de mquina

Se debe simular mediante software la existencia de


un computador cuyo lenguaje de mquina es un
lenguaje simblico (mquina virtual)

65

Intrprete
Interpretacin del cdigo fuente
El lenguaje simblico es un lenguaje de alto nivel
Cada vez que se ejecuta el programa, el intrprete realiza
las fases de compilacin desde el anlisis lxico hasta la
generacin de cdigo intermedio
Seguidamente, el intrprete decodifica y ejecuta ese
cdigo intermedio

66

Intrprete
Interpretacin del cdigo intermedio
El lenguaje simblico es un lenguaje de bajo nivel
El
cdigo intermedio se guarda en un archivo F
independiente
de
la
plataforma
y
distribuible
prescindiendo del cdigo fuente
El archivo F constituye una versin ejecutable por el
intrprete
La ejecucin del programa es realizada por el intrprete,
leyendo y decodificando cada una de las instrucciones del
archivo F.

67

Compilador-Intrprete

Compilador

Diferencia
s
Intrprete

Slo traduce

Decodifica y ejecuta

Traduce slo una vez cada


sentencia

Puede procesar varias veces


algunas
e
ignorar
completamente
otras
instrucciones

Acepta las instrucciones


de
acuerdo
a
su
secuencialidad fsica

Acepta
segn
lgica

las
su

instrucciones
secuencialidad

68

You might also like