You are on page 1of 12

E.T.S. de Ingeniería Informática (Ing.

Informática)

Dpto de Lenguajes y C. de la Computación

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

Programación Imperativa

Programación Declarativa Funcional Lógica

ELEMENTOS DE PROGRAMACIÓN
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 PROGRAMACIÓN

Prolog

1975 Fortran 77

Scheme

III.1. Introducción. III.2. Reconocimiento de lenguajes. III.2.1. Gramáticas. III.2.2. Traductores, compiladores e intérpretes. III.3. Introducción al pseudolenguaje.

C Modula 2 1980 ADA

Smalltalk 1985 C++ Eiffel Haskell

1990 Delphi Fortran 9x

Programacion Orientada a Objetos
Java

Bibliografía:, [JOYA03], [CAST93].

1995

2000

Elementos de Programación

Tema III. Lenguajes de Programación

1

).Gramáticas.Asociada a cada L.2. Sintaxis de un lenguaje. T. A.S.Ejemplo: G = {N. III. T. Tema III. (). existe una gramática que establece la forma en la que se pueden generar las frases pertenecientes a dicho lenguaje. Informática) Dpto de Lenguajes y C.S. de Ingeniería Informática (Ing..T. Informática) Dpto de Lenguajes y C. de la Computación E. se puede escribir como se puede escribir como La regla A ::= ac | ad | bc | bd se puede escribir como Si existe la posibilidad de confusión entre los símbolos de N y T. (. {}. A.T. los primeros se ponen entre < >.. R} . 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. *. 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 gramática sería: a + (a + a) * a E 1 4 E+E 3 a+E 1 2 a+E*E a + (E) * E a + (a + E) * E a + (a + a) * a a + (E + E) * E a + (a + a) * E 4 4 4 Derivación (Izquierda): 1-4-2-3-1-4-4-4 ¿Existen otras posibles derivaciones para llegar a esa frase? Otros símbolos utilizados en notación BNF para simplificar las reglas son: ε . Cuando estos símbolos puedan confundirse con símbolos terminales del lenguaje que se está definiendo. los símbolos terminales aparecerán entre comillas. Toda gramática vendrá definida por la siguiente cuaterna: G = {N.1. |.2. Notación BNF .RECONOCIMIENTO DE LENGUAJES. P. Las más utilizadas son la notación BNF y los diagramas sintácticos de CONWAY.Entre las muchas formas de expresar la gramática de un lenguaje. Lenguajes de Programación 2 Elementos de Programación . de Ingeniería Informática (Ing. . R} N=E T = +. []. Lenguajes de Programación 3 ( "::=" se lee como: "se define como") Elementos de Programación Tema III.E. de la Computación III.

3) Idem para L = {an / 3 divida a n} 4) Idem para L = {an bm / m > n} Para unir los símbolos anteriores. de la Computación E.T. Para símbolos no terminales. .c. Informática) Dpto de Lenguajes y C.T. Elementos de Programación Tema III.. <letra>.9 A = <identificador> R = (1) (2) (3) .A. encuentra la G en notación BNF que lo genera.E...T.| 9 Para símbolos terminales. Lenguajes de Programación 5 . <digito> T = a. y a continuación el gráfico.Otra forma de describir las reglas sintácticas de un lenguaje..S.2.b. b A=P R = (1) P ::= ab | aPb | ε 2) Dado el lenguaje L = {0m 1/ m >= 0}. Lenguajes de Programación 4 Elementos de Programación Tema III. Ejemplo: G = {N..T.Ejercicios: 1) ¿Qué lenguaje genera la gramática siguiente? G = {N..Fácil comprensión debido a su representación gráfica.1. de Ingeniería Informática (Ing..... de la Computación Diagramas sintácticos de CONWAY.| z <digito> ::= 0 | 1 | . <identificador> ::= <letra> {<letra> | <digito>} <letra> ::= a | b | . Una regla sintáctica estará compuesta por una cabecera con el nombre del elemento que define..R} N= P T = a.R} N = <identificador>. Informática) Dpto de Lenguajes y C.0.. de Ingeniería Informática (Ing.A.S.z. .

. Informática) Dpto de Lenguajes y C.T.E.S.. Lenguajes de Programación 6 Elementos de Programación Tema III.Ejemplo: el anterior del identificador. de Ingeniería Informática (Ing. Esquema de un compilador.Traductores. de la Computación . de Ingeniería Informática (Ing.S.2.Otros ejemplos: A ::= [b] S I N T E S I S Generación código intermedio Optimización de código Generación de código Otras Tablas A ::= {b} A ::= (a|b)(c|d) Programa Objeto . compiladores e intérpretes.T. Identificador III. Informática) Dpto de Lenguajes y C.2. Lenguajes de Programación 7 .Veamos la misión de cada una de las fases de un compilador por medio de un ejemplo: Elementos de Programación Tema III. Programa Fuente Letra A N A L I S I S Análisis Lexicográfico Rutinas Errores Dígito Análisis Sintáctico Análisis Semántico Tabla Símbolos Gestión de Tablas . de la Computación E.

En la fase de análisis se distinguen normalmente 3 subfases: (7) <identificador> ::= <letra> {<letra> | <dígito>} Supongamos ahora que en nuestro fichero fuente (programa escrito en nuestro lenguaje ejemplo) está escrita la siguiente frase: (3) <por> ::= * (4) <número> ::= <dígito> {<dígito>} (5) <dígito> ::= 0 | 1 | 2 | .T.S. R} N = símbolos con < > T = símbolos sin < > A = <sentencia> R = (1) <sentencia> ::= <identificador> <asignación><expresión> (2) <asignación> ::= ← (3) <expresión> ::= <expresión> <más> <expresión> Primera (1) <sentencia> ::= identificador asignación <expresión> (2) <expresión> ::= <expresión> más <expresión> (3) <expresión> ::= <expresión> por <expresión> (4) <expresión> ::= número (5) <expresión> ::= identificador Segunda (1) <asignación> ::= ← (2) <más> ::= + (4) <expresión> ::= <expresión> <por> <expresión> (5) <expresión> ::= <número> (6) <expresión> ::= <identificador> (7) <más> ::= + (8) <por> ::= * (9) <número> ::= <dígito> {<dígito>} (10) <dígito> ::= 0 | 1 | 2 | . Lenguajes de Programación 8 Elementos de Programación Tema III. T. A.S...E. obteniendo 2 gramáticas complementarias: los símbolos terminales de la primera son los símbolos no terminales de la segunda..T.| z Elementos de Programación Tema III..| 9 (11) <letra> ::= a | b | c | ... de Ingeniería Informática (Ing. de la Computación E. Lenguajes de Programación 9 . Informática) Dpto de Lenguajes y C.. de Ingeniería Informática (Ing.| z (12) <identificador> ::= <letra> {<letra> | <dígito>} nuevo ← viejo + razon * 23 Las reglas de esta gramática se pueden dividir en 2 partes.. de la Computación Supongamos que tenemos un lenguaje generado por la siguiente gramática: G = {N. Informática) Dpto de Lenguajes y C.| 9 (6) <letra> ::= a | b | c | . Nuestro compilador deberá analizar esa frase (leerla y "entenderla") y generar el código máquina u objeto correspondiente (síntesis).

mediante la primera gramática. Elementos de Programación Tema III. .Analiza la estructura de la frase (ya formada por "tokens") y comprueba. Informática) Dpto de Lenguajes y C.Ejemplo: asignación de variables de distintos tipos.. Informática) Dpto de Lenguajes y C. .Además: <sentencia> identificador (id1) asignación <expresión> <expresión> más <expresión> .T. .En nuestro ejemplo: En la fase de síntesis también se distinguen normalmente 3 subfases: a) Generación de código intermedio.S. de Ingeniería Informática (Ing.Elimina comentarios.Utiliza la segunda gramática para leer el programa y generar una secuencia de símbolos denominados "tokens" que será la entrada de la siguiente subfase. . . si pertenece al lenguaje.Código independiente de la máquina para la que se hace el compilador. Lenguajes de Programación 11 . (id1) (asignación) (id2) (más) (id3) (por) (número) b) Análisis Sintáctico..Debe de ser fácil de producir a partir del análisis y fácil de traducir al código definitivo. de la Computación a) Análisis Lexicográfico. .Comprueba que una frase sintácticamente correcta lo es también semánticamente. .Elimina espacios en blanco. Lenguajes de Programación 10 Elementos de Programación Tema III. . . .S. tabuladores. de Ingeniería Informática (Ing. .T.En nuestro ejemplo: nuevo identificador (id3) número (23) identificador (id2) <expresión> por <expresión> ← viejo + razon * 23 c) Análisis Semántico. .E.Avisa de los errores lexicográficos que detecte. de la Computación E. separadores.

..Ventaja clara frente a lenguajes de programación: . Teclear el número 3.En nuestro ejemplo: temp1 ← 23 temp2 ← id3 * temp1 temp3 ← id2 + temp2 id1 ← temp3 b) Optimización de código.Tipo. de Ingeniería Informática (Ing.Desplazar 1 bola azul a la derecha. construcciones estructuradas.Un código más compacto y eficiente. . L. .Nombre.Variables. declaraciones de datos y características de modularidad. de la Computación . Escribir 0 sobre la hoja 3. .Flexibilidad en su sintaxis.Objetos. . Lenguajes de Programación 13 . . R1 MOV id2.Características: Una sintaxis fija de palabras clave que proporcionan las acciones primitivas. . - Elementos de Programación Tema III.Valor: . R2 MOV R1.Constantes. Lenguajes de Programación 12 Elementos de Programación Tema III.3. Informática) Dpto de Lenguajes y C.S. P. R1 MUL 23.S. .En nuestro caso: temp1 ← id3 * 23 id1 ← id2 + temp1 c) Generación de código.T. . Pseudolenguaje. <----------------> Pseudolenguaje rigidez sintaxis Elementos básicos. de Ingeniería Informática (Ing. cercano al lenguaje máquina): MOV id3. Una sintaxis "libre" de un lenguaje natural que describe las características del proceso. . id1 III. Informática) Dpto de Lenguajes y C.En nuestro caso (pasándolo a ensamblador.T.Pasa del código intermedio (posiblemente optimizado) al código máquina final. características: .INTRODUCCIÓN AL PSEUDOLENGUAJE. de la Computación E.E. Teclear el primer número. R2 ADD R1. .

Informática) Dpto de Lenguajes y C. (B) (C) (N) (Z) (R) Tema III.Declaración de subalgoritmos.h..Declaración de variables. En todo caso el resultado final deberá estar expresado en función de las acciones primitivas que componen el pseudolenguaje. Lenguajes de Programación 15 .e.i). Informática) Dpto de Lenguajes y C.Las acciones se podrán expresar con diferentes niveles de refinamiento.La estructura de un algoritmo será: Algoritmo nombre declaraciones Inicio acciones Fin . de Ingeniería Informática (Ing.El tipo registro: declarando todos los campos que lo componen entre las palabras reservadas REGISTRO y FINREGISTRO. Bajo el epígrafe Tipos .Los tipos estándar se denotan de la siguiente forma: Tipo BOOLEANO Tipo CARÁCTER Tipo NATURAL Tipo ENTERO Tipo REAL Elementos de Programación En la zona de declaraciones de un algoritmo se realiza: .S.Las palabras reservadas o clave se escribirán en mayúsculas o subrayadas. .12].. . . Esto nos conducirá a expresar los mismos de una forma clara y legible. de la Computación . Los tipos definidos por el programador podrán ser: .El tipo enumerado: mediante enumeración de valores posibles entre paréntesis. . las cuales se describen a continuación y se explicarán a lo largo del curso. Ejemplo: ARRAY [1.E. Ejemplo: REGISTRO x:N y:R FINREGISTRO . .El pseudolenguaje que se utilizará a lo largo del curso es el siguiente: .Dentro de la "libertad" y flexibilidad que tiene un pseudolenguaje. Bajo el epígrafe Constantes . Ejemplo: (a. Bajo el epígrafe Variables . .S. se deberá seguir un estilo de presentación de los algoritmos que siga las pautas marcadas en el anexo dedicado al estilo en programación. Lenguajes de Programación 14 Elementos de Programación Tema III.El tipo puntero: expresando el tipo de dato al que apunta tras las palabras reservadas PUNTERO A.10] DE N. . Ejemplo: [3.El tipo subrango: mediante el rango de valores posibles entre corchetes. el signo de igualdad y la especificación del mismo.Definición de tipos.T.b. Ejemplo: PUNTERO A Z. además de las palabras reservadas ARRAY y DE. de Ingeniería Informática (Ing.El tipo array: poniendo explícitamente el tipo índice y el tipo base.T.Declaración de constantes. de la Computación E.Para definir tipos de datos: nombre del tipo.

. 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 línea.. La única diferencia estriba en que. almacena en la variable v el valor leido por teclado (se pueden poner varias variables separadas por comas). de la Computación E.. .Para usar un subalgoritmo basta con indicar su nombre y los parámetros que usa. .S. Se dice que toma un valor "indefinido" . de la Computación . Nuestro pseudolenguaje dispondrá de la constante predefinida INTRO que representa a la tecla retorno de carro leida de teclado.Los subalgoritmos se usan para especificar el comportamiento exacto de aquellas acciones no primitivas que hayamos usado en nuestro algoritmo (principal). que pueden ser “de entrada” (?).T.E.Las asignaciones se denotan con "←".. El valor siempre se devolverá en una variable predefinida llamada Resultado. ?arg2:N.Disponemos de tres operaciones de Entrada/Salida: leer(v). Informática) Dpto de Lenguajes y C. Sirven para darle valores a las variables. Lenguajes de Programación 17 .Un subalgoritmo se declara usando un formato similar al de un algoritmo principal. Ejemplo: x ← 3. escribir(v).Estructuras de selección: SI condición ENTONCES acciones SINOSI condición ENTONCES acciones SINO acciones FINSI CASO expresión SEA valores1: acciones valores2: acciones .Las funciones tendrán una cabecera en la que se indicarán el nombre de la misma. . ?arg3:N).. “de salida” (?) o de “entrada/salida” (?).Para declarar una constante: nombre de la constante. La variable no toma ningún valor concreto al ser declarada. .... utilizando como separador los dos puntos. de Ingeniería Informática (Ing. Informática) Dpto de Lenguajes y C. junto al nombre del subalgoritmo se añade la especificación de los parámetros que intervienen en el mismo. el signo ← y el valor constante que toma.T. .S. . los parámetros formales y el tipo del valor que devuelve. valoresn: acciones [ OTRO CASO: acciones ] FINCASO Elementos de Programación Tema III. . Ejemplo: PROC p(?arg1:Z. Ejemplo: x: Z.. Lenguajes de Programación 16 Elementos de Programación Tema III. Ejemplo: FUNC f(?arg1:Z) :N En la zona de acciones: . .. de Ingeniería Informática (Ing.Para declarar una variable: nombre de la variable seguido por el nombre (o especificación) del tipo.Los procedimientos tendrán una cabecera en la que se indicarán el nombre del mismo y sus parámetros formales.

final:N.E. Informática) Dpto de Lenguajes y C. Primer nivel de refinamiento: Algoritmo SumaNaturales Inicio • Leer un número mayor que cero • Generar y sumar acumulativamente todos los números naturales comprendidos entre el uno y el número leido. ?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 números naturales. Informática) Dpto de Lenguajes y C. suma) saltar_linea Fin Elementos de Programación Tema III. de Ingeniería Informática (Ing. para un n leido por teclado.num. de la Computación . de la Computación E. de Ingeniería Informática (Ing. • Escribir el resultado Fin (* numero de elementos (n) a sumar*) (* suma acumulada de los números generados *) Inicio escribir("Introduzca el número n:") num ← LeerNum() SumaAcumulativa(1.T.S.T. para un n mayor que cero leido por teclado *) Algoritmo SumaNaturales (* Leer un número mayor que cero *) FUNC LeerNum():N Inicio REPETIR leer(RESULTADO) HASTA QUE (RESULTADO > 0) Fin (* Generar números y suma acumulativa *) PROC SumaAcumulativa(?inicial. sin contar el cero. Lenguajes de Programación 19 .Estructuras de Iteración: PARA vble ← valor1 HASTA valor2 (PASO p) HACER acciones FINPARA MIENTRAS condición HACER acciones FINMIENTRAS REPETIR acciones HASTA QUE condición Segundo nivel de refinamiento (definitivo): (* Algoritmo que realiza la suma de los n primeros números naturales. Lenguajes de Programación 18 Elementos de Programación Tema III.S. suma) escribir("La suma resultante es:".

El símbolo de comienzo tiene una flecha de salida y el de terminación una de entrada.S. Informática) Dpto de Lenguajes y C. suma ← suma+contador contador ← contador+1 escribir(suma) Para cualquier primitiva que pueda realizar el procesador. de la Computación E.T. Tienen una flecha de entrada y 2 de salida (o varias en el caso de la decisión multiple). Lenguajes de Programación 21 . num > 0 SI NO Indica el comienzo y la terminación del algoritmo.T.S. Lenguajes de Programación 20 Elementos de Programación Tema III. . Tienen una flecha de entrada y una de salida. de Ingeniería Informática (Ing.E. Informática) Dpto de Lenguajes y C.Herramienta gráfica para la descripción de algoritmos.Ejemplo: Diagrama de flujo para el ejemplo anterior. NO suma ←0 contador ← 1 contador <= num SI Para operaciones de Entrada y de Salida. . Fin Para las bifurcaciones. Elementos de Programación Tema III.Símbolos usados en un diagrama de flujo: . Tienen una flecha de entrada y otra de salida. de Ingeniería Informática (Ing. de la Computación Diagramas de flujo. Inicio escribir leer(num) Para seguir el flujo del algoritmo.

Informática) Dpto de Lenguajes y C.T. de la Computación Elementos de Programación Tema III.S.E. de Ingeniería Informática (Ing. Lenguajes de Programación 22 .