Está en la página 1de 12

E.T.S. de Ingeniera Informtica (Ing.

Informtica)

Dpto de Lenguajes y C. de la Computacin

III.1.- INTRODUCCIN.
UNIVERSIDAD DE MALAGA
DPTO. DE LENGUAJES Y C. DE LA COMPUTACION E.T.S. DE INGENIERIA INFORMATICA
INGENIERIA INFORMATICA
C. Maquina 1950 Ensamblador

Programacin Imperativa

Programacin Declarativa Funcional Lgica

ELEMENTOS DE PROGRAMACIN
1955

Fortran I

(CURSO 2003-2004)
1960

Algol 58 Cobol Algol 60 Fortran IV Basic 1965 Simula 67 Algol 68 1970 Pascal B Simula I

Lisp

TEMA III
LENGUAJES DE PROGRAMACIN

Prolog

1975 Fortran 77

Scheme

III.1. Introduccin. III.2. Reconocimiento de lenguajes. III.2.1. Gramticas. III.2.2. Traductores, compiladores e intrpretes. III.3. Introduccin al pseudolenguaje.

C Modula 2 1980 ADA

Smalltalk 1985 C++ Eiffel Haskell

1990 Delphi Fortran 9x

Programacion Orientada a Objetos


Java

Bibliografa:, [JOYA03], [CAST93].

1995

2000

Elementos de Programacin

Tema III. Lenguajes de Programacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

III.2.- RECONOCIMIENTO DE LENGUAJES. III.2.1.- Gramticas. Sintaxis de un lenguaje. - Asociada a cada L. P. existe una gramtica que establece la forma en la que se pueden generar las frases pertenecientes a dicho lenguaje. Toda gramtica vendr definida por la siguiente cuaterna: G = {N, T, A, R} - Entre las muchas formas de expresar la gramtica de un lenguaje. Las ms utilizadas son la notacin BNF y los diagramas sintcticos de CONWAY. Notacin BNF - Ejemplo: G = {N, T, A, R} N=E T = +, *, (, ), a A=E R = (1) (2) (3) (4) E ::= E + E E ::= E * E E ::= (E) E ::= a

Un ejemplo de frase perteneciente al lenguaje generado por esta gramtica sera: a + (a + a) * a


E
1 4

E+E
3

a+E
1

a+E*E

a + (E) * E a + (a + E) * E a + (a + a) * a

a + (E + E) * E a + (a + a) * E

Derivacin (Izquierda): 1-4-2-3-1-4-4-4 Existen otras posibles derivaciones para llegar a esa frase? Otros smbolos utilizados en notacin BNF para simplificar las reglas son: , |, {}, [], (). Cuando estos smbolos puedan confundirse con smbolos terminales del lenguaje que se est definiendo, los smbolos terminales aparecern entre comillas. Veamos su utilidad con algunos ejemplos: La regla La regla La regla E ::= E + E | E * E | (E) | a A ::= | bA | b A ::= {b} A ::= [B] A ::= (a|b) (c|d) A ::= | B es equivalente a las 4 reglas anteriores. se puede escribir como se puede escribir como La regla A ::= ac | ad | bc | bd se puede escribir como Si existe la posibilidad de confusin entre los smbolos de N y T, los primeros se ponen entre < >.
Tema III. Lenguajes de Programacin 3

( "::=" se lee como: "se define como")

Elementos de Programacin

Tema III. Lenguajes de Programacin

Elementos de Programacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

Diagramas sintcticos de CONWAY. Ejemplo: G = {N,T,A,R} N = <identificador>, <letra>, <digito> T = a,b,c,...,z,0,1,2,...,9 A = <identificador> R = (1) (2) (3) - Ejercicios: 1) Qu lenguaje genera la gramtica siguiente? G = {N,T,A,R} N= P T = a, b A=P R = (1) P ::= ab | aPb | 2) Dado el lenguaje L = {0m 1/ m >= 0}, encuentra la G en notacin BNF que lo genera. 3) Idem para L = {an / 3 divida a n} 4) Idem para L = {an bm / m > n} Para unir los smbolos anteriores. Para smbolos no terminales. <identificador> ::= <letra> {<letra> | <digito>} <letra> ::= a | b | ...| z <digito> ::= 0 | 1 | ...| 9 Para smbolos terminales. - Otra forma de describir las reglas sintcticas de un lenguaje. - Fcil comprensin debido a su representacin grfica. Una regla sintctica estar compuesta por una cabecera con el nombre del elemento que define, y a continuacin el grfico.

Elementos de Programacin

Tema III. Lenguajes de Programacin

Elementos de Programacin

Tema III. Lenguajes de Programacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

- Ejemplo: el anterior del identificador. Identificador

III.2.2.- Traductores, compiladores e intrpretes.. Esquema de un compilador.


Programa Fuente

Letra
A N A L I S I S Anlisis Lexicogrfico Rutinas Errores

Dgito

Anlisis Sintctico

Anlisis Semntico

Tabla Smbolos Gestin de Tablas

- Otros ejemplos: A ::= [b]


S I N T E S I S

Generacin cdigo intermedio Optimizacin de cdigo Generacin de cdigo

Otras Tablas

A ::= {b}

A ::= (a|b)(c|d)
Programa Objeto

- Veamos la misin de cada una de las fases de un compilador por medio de un ejemplo:

Elementos de Programacin

Tema III. Lenguajes de Programacin

Elementos de Programacin

Tema III. Lenguajes de Programacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

Supongamos que tenemos un lenguaje generado por la siguiente gramtica: G = {N, T, A, R} N = smbolos con < > T = smbolos sin < > A = <sentencia> R = (1) <sentencia> ::= <identificador> <asignacin><expresin> (2) <asignacin> ::= (3) <expresin> ::= <expresin> <ms> <expresin>

Primera (1) <sentencia> ::= identificador asignacin <expresin> (2) <expresin> ::= <expresin> ms <expresin> (3) <expresin> ::= <expresin> por <expresin> (4) <expresin> ::= nmero (5) <expresin> ::= identificador Segunda (1) <asignacin> ::= (2) <ms> ::= +

(4) <expresin> ::= <expresin> <por> <expresin> (5) <expresin> ::= <nmero> (6) <expresin> ::= <identificador> (7) <ms> ::= + (8) <por> ::= * (9) <nmero> ::= <dgito> {<dgito>} (10) <dgito> ::= 0 | 1 | 2 | ...| 9 (11) <letra> ::= a | b | c | ...| z (12) <identificador> ::= <letra> {<letra> | <dgito>} nuevo viejo + razon * 23 Las reglas de esta gramtica se pueden dividir en 2 partes, obteniendo 2 gramticas complementarias: los smbolos terminales de la primera son los smbolos no terminales de la segunda. Nuestro compilador deber analizar esa frase (leerla y "entenderla") y generar el cdigo mquina u objeto correspondiente (sntesis). En la fase de anlisis se distinguen normalmente 3 subfases: (7) <identificador> ::= <letra> {<letra> | <dgito>} Supongamos ahora que en nuestro fichero fuente (programa escrito en nuestro lenguaje ejemplo) est escrita la siguiente frase: (3) <por> ::= * (4) <nmero> ::= <dgito> {<dgito>} (5) <dgito> ::= 0 | 1 | 2 | ...| 9 (6) <letra> ::= a | b | c | ...| z

Elementos de Programacin

Tema III. Lenguajes de Programacin

Elementos de Programacin

Tema III. Lenguajes de Programacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

a) Anlisis Lexicogrfico. - Utiliza la segunda gramtica para leer el programa y generar una secuencia de smbolos denominados "tokens" que ser la entrada de la siguiente subfase. - Adems:

<sentencia>

identificador (id1)

asignacin

<expresin>

<expresin>

ms

<expresin>

- Elimina comentarios. - Elimina espacios en blanco, separadores, tabuladores, ... - Avisa de los errores lexicogrficos que detecte. - En nuestro ejemplo:
nuevo
identificador (id3) nmero (23) identificador (id2) <expresin> por <expresin>

viejo

razon

23

c) Anlisis Semntico. - Comprueba que una frase sintcticamente correcta lo es tambin semnticamente. - Ejemplo: asignacin de variables de distintos tipos.

(id1)

(asignacin) (id2)

(ms)

(id3) (por) (nmero)

b) Anlisis Sintctico. - Analiza la estructura de la frase (ya formada por "tokens") y comprueba, mediante la primera gramtica, si pertenece al lenguaje. - En nuestro ejemplo:

En la fase de sntesis tambin se distinguen normalmente 3 subfases: a) Generacin de cdigo intermedio. - Cdigo independiente de la mquina para la que se hace el compilador. - Debe de ser fcil de producir a partir del anlisis y fcil de traducir al cdigo definitivo.

Elementos de Programacin

Tema III. Lenguajes de Programacin

10

Elementos de Programacin

Tema III. Lenguajes de Programacin

11

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

- En nuestro ejemplo: temp1 23 temp2 id3 * temp1 temp3 id2 + temp2 id1 temp3 b) Optimizacin de cdigo. - Un cdigo ms compacto y eficiente. - En nuestro caso: temp1 id3 * 23 id1 id2 + temp1 c) Generacin de cdigo. - Pasa del cdigo intermedio (posiblemente optimizado) al cdigo mquina final. - En nuestro caso (pasndolo a ensamblador, cercano al lenguaje mquina): MOV id3, R1 MUL 23, R1 MOV id2, R2 ADD R1, R2 MOV R1, id1

III.3.- INTRODUCCIN AL PSEUDOLENGUAJE. L. P. <----------------> Pseudolenguaje rigidez sintaxis Elementos bsicos. - Desplazar 1 bola azul a la derecha. Teclear el primer nmero. Teclear el nmero 3. Escribir 0 sobre la hoja 3. - Objetos; caractersticas: - Nombre. - Tipo. - Valor: - Variables. - Constantes. Pseudolenguaje. - Ventaja clara frente a lenguajes de programacin: - Flexibilidad en su sintaxis. - Caractersticas: Una sintaxis fija de palabras clave que proporcionan las acciones primitivas, construcciones estructuradas, declaraciones de datos y caractersticas de modularidad. Una sintaxis "libre" de un lenguaje natural que describe las caractersticas del proceso.

Elementos de Programacin

Tema III. Lenguajes de Programacin

12

Elementos de Programacin

Tema III. Lenguajes de Programacin

13

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

- El pseudolenguaje que se utilizar a lo largo del curso es el siguiente: - La estructura de un algoritmo ser: Algoritmo nombre declaraciones Inicio acciones Fin - Las palabras reservadas o clave se escribirn en maysculas o subrayadas. - Las acciones se podrn expresar con diferentes niveles de refinamiento. En todo caso el resultado final deber estar expresado en funcin de las acciones primitivas que componen el pseudolenguaje, las cuales se describen a continuacin y se explicarn a lo largo del curso. - Dentro de la "libertad" y flexibilidad que tiene un pseudolenguaje, se deber seguir un estilo de presentacin de los algoritmos que siga las pautas marcadas en el anexo dedicado al estilo en programacin. Esto nos conducir a expresar los mismos de una forma clara y legible. - Los tipos estndar se denotan de la siguiente forma: Tipo BOOLEANO Tipo CARCTER Tipo NATURAL Tipo ENTERO Tipo REAL
Elementos de Programacin

En la zona de declaraciones de un algoritmo se realiza: - Definicin de tipos. Bajo el epgrafe Tipos - Declaracin de constantes. Bajo el epgrafe Constantes - Declaracin de variables. Bajo el epgrafe Variables - Declaracin de subalgoritmos. - Para definir tipos de datos: nombre del tipo, el signo de igualdad y la especificacin del mismo. Los tipos definidos por el programador podrn ser: - El tipo enumerado: mediante enumeracin de valores posibles entre parntesis. Ejemplo: (a,b,e,h,i). - El tipo subrango: mediante el rango de valores posibles entre corchetes. Ejemplo: [3..12]. - El tipo array: poniendo explcitamente el tipo ndice y el tipo base, adems de las palabras reservadas ARRAY y DE. Ejemplo: ARRAY [1..10] DE N. - El tipo registro: declarando todos los campos que lo componen entre las palabras reservadas REGISTRO y FINREGISTRO. Ejemplo: REGISTRO x:N y:R FINREGISTRO - El tipo puntero: expresando el tipo de dato al que apunta tras las palabras reservadas PUNTERO A. Ejemplo: PUNTERO A Z.

(B) (C) (N) (Z) (R)


Tema III. Lenguajes de Programacin 14

Elementos de Programacin

Tema III. Lenguajes de Programacin

15

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

- Para declarar una constante: nombre de la constante, el signo y el valor constante que toma. Nuestro pseudolenguaje dispondr de la constante predefinida INTRO que representa a la tecla retorno de carro leida de teclado. - Para declarar una variable: nombre de la variable seguido por el nombre (o especificacin) del tipo, utilizando como separador los dos puntos. Ejemplo: x: Z. La variable no toma ningn valor concreto al ser declarada. Se dice que toma un valor "indefinido" - Los subalgoritmos se usan para especificar el comportamiento exacto de aquellas acciones no primitivas que hayamos usado en nuestro algoritmo (principal). - Un subalgoritmo se declara usando un formato similar al de un algoritmo principal. La nica diferencia estriba en que, junto al nombre del subalgoritmo se aade la especificacin de los parmetros que intervienen en el mismo. - Los procedimientos tendrn una cabecera en la que se indicarn el nombre del mismo y sus parmetros formales, que pueden ser de entrada (?), de salida (?) o de entrada/salida (?). Ejemplo: PROC p(?arg1:Z; ?arg2:N; ?arg3:N). - Las funciones tendrn una cabecera en la que se indicarn el nombre de la misma, los parmetros formales y el tipo del valor que devuelve. El valor siempre se devolver en una variable predefinida llamada Resultado. Ejemplo: FUNC f(?arg1:Z) :N

En la zona de acciones: - Disponemos de tres operaciones de Entrada/Salida: leer(v), almacena en la variable v el valor leido por teclado (se pueden poner varias variables separadas por comas); escribir(v), muestra por pantalla el valor del objeto v (se pueden poner varios separados por comas) y saltar_linea que hace que la siguiente salida por pantalla se realice en la siguiente lnea. - Las asignaciones se denotan con "". Ejemplo: x 3. Sirven para darle valores a las variables. - Para usar un subalgoritmo basta con indicar su nombre y los parmetros que usa. - Estructuras de seleccin: SI condicin ENTONCES acciones SINOSI condicin ENTONCES acciones SINO acciones FINSI CASO expresin SEA valores1: acciones valores2: acciones ...... ...... valoresn: acciones [ OTRO CASO: acciones ] FINCASO

Elementos de Programacin

Tema III. Lenguajes de Programacin

16

Elementos de Programacin

Tema III. Lenguajes de Programacin

17

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

- Estructuras de Iteracin: PARA vble valor1 HASTA valor2 (PASO p) HACER acciones FINPARA MIENTRAS condicin HACER acciones FINMIENTRAS REPETIR acciones HASTA QUE condicin

Segundo nivel de refinamiento (definitivo):


(* Algoritmo que realiza la suma de los n primeros nmeros naturales, para un n mayor que cero leido por teclado *) Algoritmo SumaNaturales (* Leer un nmero mayor que cero *) FUNC LeerNum():N Inicio REPETIR leer(RESULTADO) HASTA QUE (RESULTADO > 0) Fin (* Generar nmeros y suma acumulativa *) PROC SumaAcumulativa(?inicial,final:N; ?suma:N) Variables contador:N (* numero natural generado *) Inicio suma 0 contador inicial MIENTRAS (contador = final) HACER suma suma + contador contador contador + 1 FINMIENTRAS Fin Variables num:N suma:N

Ejemplo: Sumar los n (n > 0) primeros nmeros naturales, sin contar el cero, para un n leido por teclado. Primer nivel de refinamiento:
Algoritmo SumaNaturales Inicio

Leer un nmero mayor que cero Generar y sumar acumulativamente todos los nmeros naturales comprendidos entre el uno y el nmero leido. Escribir el resultado
Fin

(* numero de elementos (n) a sumar*) (* suma acumulada de los nmeros generados *)

Inicio escribir("Introduzca el nmero n:") num LeerNum() SumaAcumulativa(1,num, suma) escribir("La suma resultante es:", suma) saltar_linea Fin

Elementos de Programacin

Tema III. Lenguajes de Programacin

18

Elementos de Programacin

Tema III. Lenguajes de Programacin

19

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

Diagramas de flujo. - Herramienta grfica para la descripcin de algoritmos. - Smbolos usados en un diagrama de flujo:

- Ejemplo: Diagrama de flujo para el ejemplo anterior.


Inicio

escribir

leer(num)

Para seguir el flujo del algoritmo.


num > 0 SI NO

Indica el comienzo y la terminacin del algoritmo. El smbolo de comienzo tiene una flecha de salida y el de terminacin una de entrada.
NO

suma 0 contador 1

contador <= num

SI

Para operaciones de Entrada y de Salida. Tienen una flecha de entrada y una de salida.

suma suma+contador contador contador+1

escribir(suma)

Para cualquier primitiva que pueda realizar el procesador. Tienen una flecha de entrada y otra de salida.

Fin

Para las bifurcaciones. Tienen una flecha de entrada y 2 de salida (o varias en el caso de la decisin multiple).

Elementos de Programacin

Tema III. Lenguajes de Programacin

20

Elementos de Programacin

Tema III. Lenguajes de Programacin

21

E.T.S. de Ingeniera Informtica (Ing. Informtica)

Dpto de Lenguajes y C. de la Computacin

Elementos de Programacin

Tema III. Lenguajes de Programacin

22