Title: Instituto Tecnol
1Instituto Tecnológico de CuliacánMaestria en
Ciencias ComputacionalesLenguajes de
Programación
- María Lucía Barrón Estrada, PhD
- mlbe2000_at_hotmail.com
- mbarron_at_fit.edu
2Programa del curso
- Capítulo 1. Introducción.
- Capítulo 2. Evolución de los Lenguajes de
Programación. - Capítulo 3. Sintaxis y semántica.
- Capítulo 4. Nombres, Uniones, chequeo de tipos y
alcances. - Capítulo 5. Tipos de Datos.
- Capítulo 6. Expresiones y Estatutos de
asignación. - Capítulo 7. Estructuras de control a nivel de
estatutos. - Capítulo 8. Subprogramas.
- Capítulo 9.Tipos de Datos abstractos y
encapsulamiento. - Capítulo 10.Programación orientada a objetos.
- Capítulo 11. Programación Funcional.
3Programa del Curso
- Capítulo 1. Introducción
- 1.1. Razones para estudiar LP
- 1.2. Dominios de la programación
- 1.3. Criterios para evaluación de los LP
- 1.4. Métodos de implementación de LP
- Capítulo 2. Evolución de los Lenguajes de
programación - 2.1. Los primeros lenguajes
- 2.2. Fortran
- 2.3. LISP
- 2.4. ALGOL
- 2.5. COBOL
- 2.6. BASIC
- 2.7. SIMULA
- 2.8. Prolog
- 2.9. Ada
- 2.10. C
- 2.11. Java
- 2.12. Otros
4- Capítulo 3. Sintaxis y semántica
- 3.1. Problemas describiendo la sintaxis de los
lenguajes - 3.2. Métodos formales para describir la
sinatxis - 3.3. Semántica dinamica
-
-
- Capítulo 4. Nombres, Uniones, Chequeo de Tipos y
Alcances. - 4.1. Introducción
- 4.2. Nombres
- 4.3. Variables
- 4.4. Uniones
- 4.5. Chequeo de tipos
- 46. Alcances
-
5- Capítulo 5. Tipos de Datos
- 5.1. Primitivo
- 5.2. Definidos por el usuario
- 5.3. Arreglos
- 5.4. Registros
- 5.5. Referencias (apuntadores)
-
- Capítulo 6. Expresiones y Estatutos de asignación
- 6.6. Expresiones aritmeticas
- 6.7. Sobrecarga de operadores
- 6.8. Conversiones de tipos
- 6.9. Expresiones booleanas y relacionales
- 6.10. Evaluación Short-Circuit
- 6.11. Asignaciones
6- Capítulo 7. Estructuras de control a nivel de
estatutos - 7.1. Estatutos de Selección
- 7.2. Estatutos de iteración
- 7.3. Saltos
-
- Capítulo 8. Subprogramas
- 8.1. Introducción
- 8.2. Medios ambientes de referencia
- 8.3. Métodos para pase de parámetros
- 8.4. Sobrecarga de subprogramas
- 8.5. Subprogramas genericos
-
7- Capítulo 9.Tipos de Datos abstractos y
encapsulamiento - 9.1. Concepto de Abstracción
- 9.2. Abstracción de datos
- 9.3. Abstracción de tipos de datos (ADT)
- 9.4. ADT parametrizados
- 9.5. Encapsulamiento
-
- Capítulo 10. Programación orientada a objetos
- 10.1. Elementos básicos de la OOP
- 10.2. Modula-3
- 10.3. C
- 10.4. Java
- 10.5. C
- 10.6. MOOL
- 10.7. Implementación
-
- Capítulo 11. Programación Funcional
- 11.1. Introducción y fundamentos
- 11.2. LISP
8Bibliografia
- Concepts of Programming Languages
- Robert W. Sebesta
- Addison Wesley
-
- Types in Programming Languages
- Benjamin Pierce
- The MIT Press, Cambridge, Massachusetts, 2002.
-
- Foundations of Object-Oriented Languages Types
and Semantics. - Kim Bruce
- MIT-Press 2002.
-
- A Theory of Objects.
- Martin Abadi and Luca Cardelli.
- Monographs in Computer Science, Springer-Verlag
New York, 1996.
9- ML Primer
- Ryan Stansifer
-
- MOOL an OOL with modules and generics
- María Lucía Barrón Estrada
- The JavaTM Programming Language.
- Ken Arnold and James Gosling.
- Addison Wesley. 1998.
-
- Standard ECMA-334. C Language Specification
Online http//www.ecma.ch December 2001.
10Capitulo 1. Introducción
- Razones para estudiar LP
- Dominios de la programación
- Criterios para evaluación de los LP
- Métodos de implementación de LP
11Razones para estudiar LP
- Incrementa la capacidad de expresar ideas.
- Ayuda a seleccionar el lenguaje mas apropiado
para cierta aplicación. - Incrementa la habilidad de aprender nuevos
lenguajes. - Mejora el entendimiento de el significado de la
implementación. - Avance general de la Computación
12Dominios de la programación
- Cuales son las áreas de aplicación de las
computadoras? - Aplicaciones científicas.
- Aplicaciones de negocios
- Inteligencia artificial
- Programación de sistemas (software del sistema)
- Lenguajes para libretos (scripting)
- Aplicaciones especiales
13Criterios para evaluar LP
- Cuales son los conceptos que deben ser evaluados
para determinar el impacto de los lenguajes en el
proceso de desarrollo de software? - Facilidad de leer programas
- Facilidad de escribir programas
- Confiabilidad
- Costos
14Facilidad de leer los programas(Readability)
- Simplicidad del lenguaje
- Ortogonalidad
- Estatutos de Control
- Estructuras y tipos de datos
- Sintaxis
15Facilidad de escribir programas(Writability)
- Simplicidad y ortogonalidad
- Soporte para la abstracción
- Expresividad
16Confiabilidad(Reliability)
- Chequeo de tipos
- Manejo de excepciones
- Control de alias
- Legibilidad y escritura
17Costos
- Capacitación de programadores (simplicidad y
otogonalidad) - Costo de escribir programas en el lenguaje
(escritura y area de aplicación del lenguaje) - Costo de compilación.
- Costo de ejecución de programas (incrementar
velocidad de ejecución y/o decrementar tamaño) - Costo de implementación (precio de compiladores)
- Costo de confiabilidad
- Costo de mantenimiento (legibilidad)
18Criterios para evaluación de los LP
19Métodos de implementación de LP
- Compilación
- Interpretación
- Sistemas híbridos
20Compilación
21Interpretación Pura
Programa Fuente
Datos de entrada
Interprete
Resultados
22Sistemas Híbridos
Programa Fuente
Datos de entrada
Interprete
Generador de Código Intermedio
Analizador Lexico
Analizador Sintáctico
Resultados
23Capítulo 2. Evolución de los Lenguajes de
programación
- 2.1. Los primeros lenguajes
- 2.2. Fortran
- 2.3. LISP
- 2.4. ALGOL
- 2.5. COBOL
- 2.6. BASIC
- 2.7. SIMULA
- 2.8. Prolog
- 2.9. Ada
- 2.10. C
- 2.11. Java
- 2.12. Otros
24Evolución de los Lenguajes de Programación
- Abstracción
- Conceptualización sin referirse a instancias
específicas. El acto de determinar las
propiedades fundamentales sin asociarlas a
detalles específicos. - Notación
- Representación formal de elementos.
- Es importante la notación?
- Multiplicación con números Romanos
- Exponentes
252.1. Los primeros lenguajes
- Que es un Lenguaje de Programación?
- Notación para describir algoritmos y estructuras
de datos además del significado de las frases. - Implementación
- Influencias en la evolución de los Lenguajes de
Programación - Evolución del hardware y los sistemas operativos
- Nuevas aplicaciones en diferentes ámbitos
- Métodos de programación paradigmas y
metodologías - Métodos de implementación - eficiencia
- Estudios teóricos demostraciones matemáticas
- Estandarización - portabilidad
-
262.1. Los primeros lenguajes
- Konrad Zuse Científico alemán
- Constructor de computadoras 1936-1945
- 1943 Propuesta para su disertación doctoral el
desarrollo de un lenguaje de programación llamado
Plankalkül (program calculus) - 1945 manuscrito describiendo el lenguaje,
publicado en 1972. - Características del lenguaje
- Manejo de estructuras de datos
- Datos numéricos
- Arreglos
- Registros
- Recursión
- expresiones parecidas a aserciones de Eiffel
Ejemplo A5 A4 1 A 1 gt A v 4
5 s 1.n 1.n
27Fortran
- Noviembre 1954 John Backus (IBM) presenta el
primer reporte The IBM Mathematical FORmula
TRANslation System Fortran - Tan eficiente como el código ensamblador
- Tan fácil de programar como los pseudocódigos
- Elimina errores y depuración (poco chequeo de
sintaxis) - Enero 1955 inicia la implementación del primer
LAN con compilador para la IBM 704 - Caracteristicas del medio ambiente para la
definición de Fortran - Computadoras lentas, poca memoria, poco
confiables - Aplicaciones científicas
- No métodos eficientes de programación
- Mas costoso el uso de la computadora que los
programadores
28Fortran I.
- Compilador en abril 1957 (18 años-trabajador)
- Input/Output
- Nombres de variables hasta de 6 caracteres
- I,J,K,L,M y N implicitamente enteras otras
reales - Subrutinas definidas por el usuario
- Estatuto If aritmético
- If (expresión aritmetica) N1, N2, N3
- Estatuto Do
- Do N1 variable first_value, last_value
- Restricción en el tamaño de programas (300-400
lineas)
29- Fortran II
- Compilación independiente de subrutinas
- Fortran IV
- Declaración explícita de tipos de datos
- Estatuto If lógico
- Subrutinas como parámetros
- Fortran 77
- Manejo de cadenas de caracteres
- Estatutos para ciclos lógicos
- Parte Else en el estatuto If
- Fortran 90
- Funciones para arreglos
- Almacenamiento dinámico
- Registros (derived types)
- Apuntadores (referencias)
- Estatuto Case
- Recursión
- Módulos
- Identificadores y palabras clave inician con
mayúscula
30 Ejemplo
Program Example ! Fortran 95 example
program Implicit none Integer
Int_List(99) Integer List_Len, Counter, Sum,
Average, Result Result 0 Sum 0 Read ,
List_len If ((List_Len gt 0) .AND. (List_Len
lt100)) Then Do Counter1 List_Len Read
,Int_List(Counter) Sum Sum
Int_List(Counter) End Do Average Sum /
List_len Do Counter1, List_Len If
(Int_List(Counter) gt Average) Then
Result Result 1 End If End Do
Print , Number of Values gt average is ,
Result Else Print , Error list length
value is not legal End If End Program Example
312.3. LISP (LISt Processor)
- John McCarthy propone una lista de requerimientos
para un LP en 1958 en el Information Research
Department de IBM - LISP es un lenguaje funcional donde todas las
operaciones se describen aplicando funciones a
los argumentos - Contiene solamente átomos (símbolos,
identificadores, literales) y listas (delimitadas
por parentesis) - Interpretado con el ciclo lee-evalua-imprime
32ATOMS LISTS a ( )
john (a) 34 (a john 34
c3po) c3po ((john 34) a ((c3po)))
gt( 2 13 45) 60
gt(cons 1 nil) (1) gt(cons 1 (cons 2 nil)) (1
2)
gt(length '(1 2 3)) 3
(DEFUN equal_lists (list1 list2) (COND
((ATOM list1) (EQ list1 list2)) ((ATOM
list2) NIL) ((equal_lists (CAR list1) (CAR
lsit2)) (equal_lists (CDR lsit1) (CDR
list2))) (T NIL) ) )
gt(setq words (cons 'this (rest words))) (THIS
LIST OF WORDS) gt(setf (first words) 'the) THE
gtwords (THE LIST OF WORDS) gt(setf (third words)
'is) IS gtwords (THE LIST IS WORDS)
332.4. ALGOL (ALGOrithmic Language)
- Diseñado por un grupo de investigadores
especificamente para aplicaciones científicas en
1958 - Características
- Estructuras de datos
- Estructura de bloque para alcances de variables
- Pase de parámetros (por valor, por nombre)
- Recursión
- Palabras reservadas
- Arreglos dinámicos y
- Tipos de datos definidos por el usuario
34Ejemplos
// the main program (this is a comment) BEGIN
FILE F (KINDREMOTE) EBCDIC ARRAY E 011
REPLACE E BY "HELLO WORLD!" WHILE TRUE
DO BEGIN WRITE (F, , E) END
END.
// the main program (this is a comment) begin
integer N Read Int(N) begin
real array Data1N real sum, avg
integer i sum0 for i1 step 1 until
N do begin real val
Read Real(val) Dataiif vallt0
then -val else val end for i1
step 1 until N do sumsum Datai
avgsum/N Print Real(avg) end
end
352.5. COBOL (Common Business Oriented Language )
- Propuesta de Grace Hopper en UNIVAC (1955)
- programas matemáticos deben ser escritos en
notación matemática, programas para procesar
datos deben ser escritos en instrucciones en
Inglés - Características propuestas para el diseño (1959)
- El lenguaje debe ser fácil de usar
- Usar Inglés tanto como sea posible
- El diseño no debe ser restringido por problemas
de implementación - Características del lenguaje
- Definición de macros
- Identificadores largos usando guion de piso
- Separación de la definición de datos y proceso
- No hay funciones en la PROCEDURE DIVISION
- No parámetros
36Ejemplos
000100 IDENTIFICATION DIVISION. 000200
PROGRAM-ID. HELLOWORLD. 000300 DATE-WRITTEN.
02/05/96 2104. 000400 AUTHOR BRIAN COLLINS
000500 ENVIRONMENT DIVISION. 000600
CONFIGURATION SECTION. 000700 SOURCE-COMPUTER.
RM-COBOL. 000800 OBJECT-COMPUTER. RM-COBOL.
000900 001000 DATA DIVISION. 001100 FILE
SECTION. 001200 100000 PROCEDURE DIVISION.
100100 100200 MAIN-LOGIC SECTION. 100300
BEGIN. 100400 DISPLAY " " LINE 1 POSITION 1
ERASE EOS. 100500 DISPLAY "HELLO, WORLD." LINE
15 POSITION 10. 100600 STOP RUN. 100700
MAIN-LOGIC-EXIT. 100800 EXIT.
372.6. BASIC (Beginner's All Purpose Symbolic
Instruction Code)
- Desarrollado por John Kemeny and Thomas Kurtz en
Dartmouth College en 1964 - Características propuestas para el diseño
- Fácil de aprender y usar por estudiantes de areas
no cientificas - Debe ser amigable
- Proveer resultados rápidos para las tareas
- Acceso de dos tipos libre y privado
- El tiempo del usuario es mas importante que el
tiempo de la computadora
38Ejemplos
REM BASIC Example program DIM intlist(99)
result 0 sum 0 INPUT listlen IF
listlen gt 0 AND listlen lt 100 THEN FOR
counter 1 to listlen INPUT
intlist(counter) sum sum
intlist(counter) NEXT counter average
sum/listlen FOR counter 1 to listlen
IF intlist(counter) gt average
THEN result result 1 NEXT counter
PRINT The number of values that are gt average is
result ELSE PRINT ERROR - input
list length is not legal END IF END
392.7. SIMULA
- Diseñado entre 1962-1964 por Ole-Johan Dahl y
Kristen Nygaard en el Norwegian Computing Center - Diseñado inicialmente para la simulación
- Simula-67 es una versión de propósito general que
incluía registros - Primer lenguaje con clases (abstracción de datos)
y herencia con subtipos - Basado en ALGOL (estructura de bloque y estatutos
de control)
40Ejemplos
Begin while 1 1 do begin
outtext ("Hello World!") outimage
end End
class Lab begin text Nam, Street,
Town, County, Code procedure ReadLabel
begin Nam - InLine
Street - InLine
Town - InLine County
- InLine Code - InLine
endofReadLabel procedure
WriteLabel begin OutLine(Nam)
OutLine(Street) OutLine(Town)
OutLine(County) OutLine(Code)
endofWriteLabel end--of--Lab
begin integer Int1 comment The first
SIMULA program written for this book
Int13 OutInt(Int1,4) OutImage end
412.8. Prolog (PROgramming LOGic)
- Creado en 1970 por Alain Colmeraurer, Robert
Kowalski, Phillipe Roussel y otros. - Lenguaje declarativo basado en la lógica de
predicados - Posee una máquina de inferencia que le permite
concluír si es posible deducir o no la meta
propuesta - Se usan clausulas HORN para especificar las
reglas - goalclause(Variables) - clause1 (V1), ,
clauseN(VN) - Los hechos se representan usando la primer parte
de la regla. - goalclause(valores).
42grandfather(X, Z) - (mother(X, Y) father(X,Y)),
father(Y,Z).
mother(maria, ana). father(juan,
ana). father(tom, juan). parent (X,Y) -
mother(X, Y). parent(X, Y) - father(X,
Y). grandfather(X, Z) - parent (X, Y),
father(Y,Z).
grandfather(tom, ana)?
432.9. Ada
- Diseñado por un comité en 1977 convocado por el
DoD de USA - Características
- Paquetes (módulos)
- Manejo de excepciones
- Genéricos
- Concurrencia
- Ada 95
- Orientado a objetos
- Rediseño de librerías
- Mejores mecanismos para datos compartidos
44with Text_To use Text_To procedure hello
is begin put("Hello World") end
hello
452.10. C
- Es una extensión del lenguaje C diseñada por
Bjarne Stroustrup en los Bell Labs en Mayo 1980 - Elementos agregados para crear C
- Chequeo de tipo de parámetros en funciones y
conversiones - Clases, clases derivadas
- Acceso público y privado para los elementos de
las clases - Constructores y destructores
- Friends
- Sobrecarga de operadores
- Metodos virtuales con despacho dinámico
- Herencia multiple
- Manejo de excepciones
462.11. Java
- Diseñado en 1995 por James Gosling
- Características
- Mas pequeño, Mas simple y Mas confiable que C
- Todo dentro de la clase
- No hay funciones solo metodos
- Herencia simple (de implementación)
- Recolección de basura implícita
- Etc.
47Ejemplos
class HelloWorldApp public static void
main(String args) System.out.println("
Hello World!") //Display the string.
import java.applet.Applet import
java.awt.Graphics public class HelloWorld
extends Applet public void paint(Graphics
g) g.drawString("Hello world!", 50,
25)
482.12. Otros Lenguajes
- Lenguajes Script -PERL, awk, JavaScript
- Lenguajes OO -C, Self, Smalltalk
- Lenguajes Markup HTML, XML
49Capítulo 3. Sintaxis y Semántica
- 3.1. Problemas describiendo la sintaxis de los
lenguajes - 3.2. Métodos formales para describir la sintaxis
- 3.3. Semántica dinámica
-
50- Descripción de un lenguaje de programación.
- Quienes deben entender la descripción de un
lenguaje? - Implementadores
- Usuarios (Programadores)
- Lenguaje de programación Sintaxis Semántica
51- El filósofo americano Charles William Morris
(1901-1979) en su libro Signs, Language, and
Behavior da estas definiciones - Pragma- Origen, uso y efecto de los signos.
- Semántica- El significado de los signos en todas
sus formas de significado. - Sintaxis- Combinación de signos sin considerar su
significado específico o sus relaciones del
comportamiento en el cual estan presentes.
52- Sintaxis La sintaxis de un lenguaje de
programación es la forma de sus expresiones,
estatutos y programas. La estructura de un
lenguaje. - Semántica Es el significado de esas
expresiones, estatutos y programas. - Pragmatica Es el origen, uso, contexto del
lenguaje
53Ejemplos
- Estatuto while en Java
- while (ltbool_exprgt) ltstatementgt
- Símbolos para la Conjunción
- AND vs vs ,
- Número vs numeral
54Estructura
- El acomodo de los elementos de una entidad y sus
relaciones con otros elementos. - Tipos de estructuras
- Estructura lineal- como los eslabones de una
cadena - Estructura Jerárquica- Cajas adentro de otras
cajas - Estructura de árbol- Arboles genealógicos
- Estructura gramatical-
55Contextos
- La estructura tiene significado.
- Ejemplo
-
- El pollo esta listo para comer.
- Quien va a comer??
563.1. Problemas describiendo la sintaxis de los
lenguajes
- Lenguaje Conjunto de cadenas de caracteres
formadas con un alfabeto. - Oraciones o estatutos Son las cadenas de un
lenguaje. - Las reglas de sintaxis - especifican cuales
cadenas de caracteres formadas con el alfabeto
son parte del lenguaje.
57- Lenguaje objeto es el lenguaje que se estudia
- Metalenguaje- es el lenguaje usado para comunicar
- Alfabeto- símbolos atómicos
- Cadenas- lista o secuencia de símbolos
58Jerarquia de Chomsky
- 0 Sin restricción Máquinas de Turing,
Sistemas Post - 1 Contexto sensitivo No usadas en LP
- 2 Contexto libre BNF, autómatas push-down
- Regulares expresiones regulares,
autómatas - finitos
59- Sin restricción - Se usan para describir algunas
partes de la semántica (gramáticas atributibas) - Contexto sensitivo No usadas en LP
- Contexto libre- Se usan para describir la
sintaxis de los LP - Regulares- se usan para describir los tokens de
un LP
60- Dado un alfabeto Aa,b,c,d
- Una cadena es una lista (ordenada) de símbolos
del alfabeto - La lista puede no contener símbolos (cadena
vacia) y se representa con - Operaciones con cadenas
- Concatenación
- Alternación
- Cierre
61Expresiones Regulares
- Cadena vacia Ø
- Atomo cualquier símbolo tal que a ? A es una
expresión regular - Alternación- Si r1 y r2 son expresiones
regulares, entonces r1r2 es también una
expresión regular - Concatenación- Si r1 y r2 son expresiones
regulares, entonces r1.r2 es también una
expresión regular - Cierre- Si r1 es una expresión regular, entonces
r1 es también una expresión regular
62Significado de las ER
- DØ
- Da1 a1
-
- Dan an
- D(r1 r2) Dr1 U Dr2
- D(r1.r2) x.y x ? Dr1, y ? Dr2
- donde x.y es la concatenación de x y y
- Dr U (Dr)i
- i
Donde Si se define recursivamente S0 Si1
x.y x ? S, y ? Si
63Ejemplos de ER
- D(a.b) x.y x ? Da, y ? Db
- x.y x ? a, y ? b
- a.b ab
- D(a (a.b)) Da U D(a.b)
- a U ab
- a, ab
64Ejemplos de ER
- D(a (b.c)) U (Da U D(a (b.c)))i
- i
- U a, bc U D(a
(b.c)) 2 U - , a, bc U
a,aa,abc,bc,bca,bcbc U - , a,aa,bc, abc,bca,bcbc
U
65Otras operaciones en ER
- Opcional-
- r? (r Ø)
- Una o mas-
- r (r . r)
- Cualquiera-
- (abyz)
- Conjunto- (asume que el alfabeto esta ordenado)
- a-z (abyz)
- Complemento- (asume que el alfabeto esta
ordenado) - c-x (abyz)
66Problemas con ER
- Las expresiones regulares no pueden ser usadas
para describir completamente un lenguaje de
programación (no son suficientemente expresivas).
- No es posible expresar la correcta anidación de
paréntesis en expresiones.
67Descripción de Lenguajes
- Reconocedores.
- L es el lenguaje
- S es el alfabeto
- R dispositivo reconocedor- diseñado para
reconocer si una entrada dada es o no parte del
lenguaje L. - Generadores.
- Dispositivo usado para generar frases de un
lenguaje. - Uso limitado como descriptor de lenguaje.
683.2. Métodos formales para describir la sinatxis
- CFG - Gramáticas de Contexto Libre definidas por
Chomsky (1950s) - BNF Backus-Naur Form usada para describir la
sintaxis de de ALGOL (1960) - EBNF BNF Extendida mejora la legibilidad y
facilidad de escribir
69Gramáticas de Contexto Libre
- Una gramática es un tuple de 4 elementos
ltT,N,S,Pgt - T es el conjunto de símbolos terminales
- N es el conjunto de símbolos no terminales
- S es un simbolo no terminal e inicial de la
gramática - P es un conjunto de producciones de la gramática
70BNF
- BNF- Colección de clausulas donde la parte
izquierda es una categoria sintáctica y la parte
derecha se forma con categorias sintacticas y
tokens. - LHS RHS
-
71BNF Extendida
- Extensiones a BNF (EBNF)
- Selección
- Repetición
- Opcional
72- Regla recursiva una regla es recursiva si la
LHS aparece en la RHS - ltident_listgt identifier
- identifier ,
ltident_listgt - Recursión por la izquierda
- ltexprgt ltexprgt lttermgt
- lttermgt
- Recursión por la derecha
- ltfactorgt ltexprgt ltfactorgt
- ltexprgt
73Arbol de Parser
- Es una estructura formada por los elementos que
contiene una frase (expresión, declaración,
estatuto, etc.) - Cada producción usada en la derivación de un
string aparece como un subarbol en el diagrama. - El símbolo no terminal de la izquierda de la
producción, aparece como la raíz del árbol y los
símbolos a la derecha de la producción aparecen
como hijos de ese nodo raíz.
74Arbol de Parser
- S --gt if C then S
- if C then S else S
75Arbol de Parser
- Gramática ambigua Una gramática es ambigua
cuando es posible representar una frase con más
de un árbol de parser.
76S --gt if C then S if C then S else S
S
if (a0) then if (b0) then x b else xa
if
C
then
S
else
S
S
if
C
then
S
if
C
then
S
if
C
then
S
else
S
77Ejercicio
- Usando la gramática siguiente, escribe el árbol
de parser de la expresión ABAC - ltassigngt ltidgt ltexprgt
- ltidgt A B C
- ltexprgt ltexprgt ltexprgt
- ltexprgt ltexprgt
- (ltexprgt )
- ltidgt
78Ejercicio
- Definir una gramática de contexto libre para un
lenguaje de expresiones aritméticas con - Operaciones de asignación, suma y resta
- Variables cualquier letra del alfabeto.
- Literales - enteras
79Limitaciones de BNF
- No es posible expresar que el identificador de un
inicio de bloque sea el mismo que el usado en el
cierre del mismo bloque. - Número de parámetros en la llamada a un
procedimiento. - Dificil de expresar las reglas de compatibilidad
de tipos en expresiones. - Todas las variables deben ser declaradas antes de
usarse.
80Limitaciones de BNF
- ltblockgt ltblock identifiergt
- begin ltstatementgt ltstatementgt
- end ltblock identifiergt
- ltcallgt ltidentifiergt (ltexpresióngt)
El identificador del bloque, debe ser el mismo
usado al inicio
El número de parámetros en la llamada, debe
coincidir con la declaración
81Gramática Atributiba
- Una GA es una gramática de contexto libre
aumentada con atributos (sintetizados y
heredados) en un árbol de parser particular,
donde los valores de los atributos asociados se
determinan en base a los nodos del arbol.
82Gramática Atributiba
- Atributos- similares a variables, mantienen un
valor del atributo - Funciones para cálculo de atributos- llamadas
funciones semánticas, especifican como se
calculan los valores de los atributos - Funciones predicados- se asocian con las reglas
gramaticales
83Tipos de Atributos
- Atributos sintetizados- Se usan para pasar
información hacia los nodos de arriba del árbol
de parser. - Atributos heredados- pasan información a los
nodos descendientes en la jerarquia. - Atributos intrinsecos- son atributos sintetizados
cuyos valores se determinan fuera del árbol de
parser.
84Ejemplo
Regla sintáctica ltproc_defgt procedure
ltproc_namegt1
ltproc_bodygt end ltproc_namegt2 Regla semántica
ltproc_namegt1.string ltproc_namegt2.string
853.3. Semántica Dinámica
- Operacional- describe el significado de las
construcciones del lenguaje en términos de los
efectos sobre una una máquina abstracta. - Axiomática- basada en la logica formal, es un
sistema para probar propiedades a cerca de las
relaciones entre los estados de entrada y salida
de los programas. - Denotacional- describe los programas como
entidades matemáticas usando funciones recursivas.
86Descripción de la Semántica
- Estandarización de los lenguajes
- Referencia para usuarios
- Prueba que los programas son correctos
- Referencia para los implementadores
- Implementación automática
- Mejor entendimiento para el diseño de lenguajes
87Semántica Axiomática
- Basada en la lógica matemática.
- Fue definida en conjunción con el desarrollo de
un método para probar que los programas son
correctos. - Es la demostración de que un programa se ejecuta
de acuerdo a sus especificaciones. - La demostración anexa a cada estatuto una
expresión lógica que especifica algunas
restricciones en las variables.
88Semántica Axiomática
- Aserción- Tambien llamada predicado, es una
fórmula de la lógica para caracterizar un estado. - Precondición- es una aserción que precede a un
estatuto donde se especifican algunas
restricciones. - Postcondición- es una aserción que sigue a un
estatuto y contiene nuevas restricciones en las
variables de la precondición y otras.
89Hoare Triple
- La ejecución de S en un lenguaje de programación
puede describirse por el estado que se obtiene
despues de ejecutar un segmento de un programa. - P S Q
- Hoare Triple. Un triple es valido si la ejecución
del segmento de programa S inicia con un estado
que satisface P y termina en un estado que
satisface Q.
90Axioma de la Asignación
- QVT V T Q
- 2 2 x2 x 2
- y1 2 x 2 x y1
- y17 x2 y17
- 221 x2 xx1
91Problema??
92Cálculo de la precondición mas debil.
- La precondición mas debil Qxe es aquella que
es de mayor utilidad para la asignación VT y la
postcondición Q. - La precondición mas debil se expresa WP(VT, Q)
- P a b/2 1 a lt 10
- b/2 1 lt 10 a b/2 1 a lt 10
P Qxe P alt10 xe P b/2-1lt10
93Otras Reglas
Loop invariant. Es una aserción que es válida
antes y despues de la terminación del while.
- Condicional
- B P S1 Q B P S2 Q
- P if B then S1 else S2 Q
- Composición
- P S1 Q Q S2 R
- P S1 S2 R
- While.
- B I S1 I
- I while B do S end B I
94Capítulo 4. Nombres, Uniones, Chequeo de Tipos y
Alcances.
- 4.1. Introducción
- 4.2. Nombres
- 4.3. Variables
- 4.4. Uniones
- 4.5. Chequeo de tipos
- 4.6. Alcances
954.1. Introducción
Modelo de Arquitectura von Neumman y Lenguajes
Imperativos
- Variables representan celdas de memoria
- Tipos de datos
- Compatibilidad
- Alcance
- Tiempo de vida
964.2. Nombres
- Un nombre es una cadena de caracteres que se usa
para identificar alguna entidad en un programa. - Comunmente conocidos como identificadores.
- Variables
- Subprogramas
- Etiquetas
- Parámetros formales
- Módulos
- Tipos de datos
97- Los nombres en lenguajes de programación refieren
a dos objetos diferentes - Localidad
- Valor
- L-value refiere a la localidad de memoria donde
se almacena X - R_value refiere al valor de X
- X X 1 Fortran
- X X 1 Pascal
- X !X 1 ML
X X 1 L_value R_value
98Expresiones L_value
R_value x x2 3x2 A2i2
Funciones L_value en ML val x ref 1 (
declara variable ) val y ref 2 (
declara variable ) fun f(n) if (n mod 2) then
x else y f(3) 4 ( y 4 )
L_value x a2i aij r.f r.ai4
99Tópicos en el Diseño de Lenguajes
- Son los identificadores sensitivos a mayúsculas y
minúsculas? Esta decisión afecta - Legibilidad de programas
- Facilidad de escribir
- Como afecta la longitud de los nombres?
- Una sola letra
- Seis caracteres (Fortran)
- Sin límite (Java y Ada)
100- Las palabras especiales son reservadas o palabras
clave? - Una palabra clave es una palabra de un lenguaje
de programación que tiene un significado especial
en cierto contexto. - Una palabra reservada es una palabra especial de
un lenguaje que NO puede ser usada como nombre. - Un identificador predefinido es quel que tiene un
significado especial en el lenguaje pero que
puede ser redefinido por el usuario.
101Ejemplos
- Fortran usa palabras clave
- Real Apple // Real es el tipo en la
declaración de variable - Real 3.4 // Real es una variable de la
expresión - Integer Real // declara una variable de
tipo entera - Real Integer // declara una variable de
tipo real - Java y otros usan palabras reservadas.
- class class // error de compilación!
1024.3. Variables
- Una variable en un programa es una abstracción de
una o mas celdas de memoria. - Atributos
- Nombre
- Dirección
- Valor
- Tipo
- Tiempo de vida
- Alcance
103- Nombre. Cadena usada para identificar a un
elemento de un programa. - Dirección. Dirección de memoria donde se almacena
su valor. - l_value
- Mismo identificador en distintos bloques o
subprogramas - Alias
- Valor. Contenido actual de la celda(s) de
memoria. - Tipo. Determina el rango de valores y el conjunto
de operaciones definidas para ese tipo. - Tiempo de vida. Tiempo que una variable esta
ligada a una celda de memoria especifica. - Alcance. Es el rango de código en el cual la
variable esta visible.
1044.4. Uniones
- Una unión es una asociación entre
- Un atributo y una entidad o
- Una operación y un símbolo
- Tiempo de unión. Es el tiempo en el que se
efectua la asociación. - La unión puede ser estática o dinámica.
105Clases de Uniones
- Unión estática. Una unión es estática cuando
ocurre antes del tiempo de ejecución y permanece
sin cambios durante la ejecución del programa. - Unión dinámica. Son las uniones que ocurren en
tiempo de ejecución o pueden cambiar en tiempo de
ejecución del programa.
106Uniones de Variables y Tipo
- La unión de una variable a su tipo define una
unión estática con una declaración - Declaración explícita, asocia tipos a variables
por medio de declaraciones. - Declaración implícita, asocia tipos a variables
usando convenciones definidas en el lenguaje.
107Uniones de Variables y Tipo
- La unión dinámica de tipo sucede cuando se asigna
un valor a un identificador, el tipo de la
expresion en la derecha, determina el tipo de la
variable a la izquierda. - Ventaja, provee mucha flexibilidad en la
programación - Desventajas detección de errores en tiempo de
ejecución, costo de chequeo de tipos en tiempo de
ejecución, lenguajes interpretados. - Ejemplo en JavaScript
- list 3.5, 1.8 // el tipo de list es
arreglo - list 47 // el tipo de list
cambia a escalar
108Inferencia de Tipos
- El tipo de una expresión puede determinarse sin
que el programador especifique los tipos de las
variables. - fun circumf (r) 3.14159 r r
- fun times10 (n) 10 n
- fun square (n) n n
-
109Tarea
- Leer sección 5.4.3 del libro.
110Ambientes Referenciales
- Un medio ambiente es una colección de uniones
disponiblles para ser usadas en las operaciones
referenciales. - Tipos de ambientes
- Local
- Foraneo
- Global
- Predefinido
111Tipos de ambientes
- Local- contiene parametros formales, variables
locales y subprogramas definidos internamente. - Foraneo- contiene las asociaciones que pueden
usarse dentro del subprograma pero que no se
crean cuando el subprograma se activa. - Global- contiene las asociaciones creadas al
inicio de la ejecucion del programa principal. - Predefinido- contiene asociaciones definidas
directamente en el lenguaje.
112Uniones de Almacenamiento y Tiempo de Vida
- Asignación de memoria (Allocation). La celda de
memoria que se une a una variable, se toma de un
espacio de memoria disponible. - Desasignación de memoria (Deallocation). Proceso
que regresa al espacio de memoria disponible la
celda que fue liberada de la union a una
variable. - Tiempo de vida. Es el tiempo que una variable
esta ligada a una celda de memoria especifica.
113Categorias
- Variables Estáticas. Se unen antes de iniciar la
ejecución del programa y permanecen unidas
durante toda la ejecución. - Variables Dinámicas de Stack. Son aquellas que
crean su unión al almacenamiento cuando su
declaración es elaborada., lo que ocurre en
tiempo de ejecución. - Variables Explícitas Dinámicas en Heap. Son
asignadas y desasignadas explicitamente usando
apuntadores (referencias). La unión con el tipo
es estática, pero la unión con la celda de
memoria es dinámica. - Variables Implícitas Dinámicas en Heap. Estas
variables se unen al almacenamiento cuando
reciben un valor en una asignación.
114Tiempos de Union
- Las uniones se pueden definir en diferentes
tiempos - Definición del lenguaje
- Implementación del lenguaje
- Compilación de programas
- Carga de programas
- Ligado de programas
- Ejecución de programas
115Ejemplos de Uniones
- Definición del lenguaje. La estructura de un
lenguaje, el significado de los simbolos ,
etc. - Implementación del lenguaje. La representación
interna de ciertos elementos depende del hardware
disponible. - Compilación de programas. Uniones escogidas por
el programador (nombres de variables, tipos,
etc.) Uniones escogidas por el traductor
(asignación de localidades de memoria, etc.) - Carga de programas. Asociación de localidades de
memoria real. - Ligado de programas. Llamadas a funciones o
procedimientos que residen en librerias. - Ejecución de programas. Almacenamiento de un
valor en una variable, creacion de variables
locales.
116x x 10
- Conjunto de tipos posibles para la variable x?
- Tipo de la variable x?
- Serie de posibles valores para x?
- Valor de la variable x?
- Representación de la literal 10?
- Propiedades del operador ?
- Union de x con una localidad de memoria?
1174.5 Tipos
- Primitivos, básicos, simples, no estructurados,
son aquellos que contienen un solo valor en un
momento especifico del tiempo enteros, reales,
booleanos, etc. - Estructurados, compuestos, son aquellos que
pueden contener mas de un valor en un momento
especifico del tiempo arreglos, registros, tipos
de funciónes, clases, definidos por el usuario.
118Chequeo de Tipos
- Chequeo de tipos proceso para verificar que
operandos y los operadores son de tipos
compatibles. - Chequeo de tipos puede ser
- En tiempo de compilación (estático).
- En tiempo de ejecución (dinámico).
- Tipos compatibles son aquellos tipos que son
legales para los operadores o que pueden ser
implicitamente convertidos (coerción) en tipos
legales.
119- Lenguajes fuertemente tipeados son aquellos en
donde no ocurren malinterpretaciones de bits en
tiempo de ejecución y todo el chequeo de tipos se
hace en tiempo de compilación. - Inferencia de tipos proceso para determinar los
tipos de los identificadores sin declaraciones de
tipo en los programas.
120Los Tipos son Distintos
String
Boolean
Float
Integer
Character
Otros tipos de datos
121Interpretación
- Inseguridad de tipos se da cuando los datos
pueden ser mal interpretados. - La misma representación interna de bits puede
significar diferentes cosas. Por ejemplo los 32
bits siguientes - 0x9207BFF0 1001 0010 0000 0111 1011 1111 1111
0000 - -1844985872 en complemento a 2s
- 2449981424 entero sin signo
- -4.283507E-28 IEEE 754 punto flotante
- Add fp, -16, o1 código ensamblador de
SPARC - Azul transparente alpha RGB (color en
Java)
122Sistemas de Tipos
- Un sistema de tipos en un lenguaje fuertemente
tipeado garantiza que las propiedades de los
datos que el programador crea podran ser
verificadas para asegurar que no habra datos mal
interpretados en tiempo de ejecución.
123Lenguajes que NO son Fuertemente Tipeados
- Perl- usa nombres en tres formas escalares
inician con , arreglos inician con _at_, tablas
hash inician con - APL- escalares, vector, 2D arreglos
- LISP- atomos, listas
- Costo los errores de tipo no son detectados en
compilación, el chequeo de tipos se hace en
tiempo de ejecución
124Equivalencia de Tipos
- Equivalencia por Nombre tipos con el mismo
nombre son iguales. Facil de implementar, pero
muy restrictiva. - Ejemplo en Ada
- type IndexType is 1..100
- count Integer
- index IndexType
count e index no son compatibles
125Equivalencia por Nombre
- type
- T record a int bchar end
- var
- x,y array1..2 of record a int bchar end
- z array1..2 of T
- u,v array1..2 of record a int bchar end
- type
- T record a int bchar end
- Anon1 array1..2 of record a int bchar
end - Anon2 array1..2 of T
- var
- x,y Anon1
- z Anon2
- u,v Anon1
126Equivalencia por Nombre
-- equivalencia por nombre no provee
abstracción declare type Pt is record First,
Second Float end record type Cx is record
First, Second Float end record P Pt C
Cx begin P C -- ilegal no son del mismo
tipo! -- mismo efecto se puede lograr
con P.First C.First P.Second
C.Second end
127Equivalencia de Tipos
- Equivalencia por Estructura tipos con la misma
estructura son iguales. Dificil de implementar,
pero mas flexible. - Registros con la misma estructura pero nombres
diferentes? - Definiciones recursivas?
- struct tree
- int n struct tree left, struct tree right
- class Tree
- int n Tree left, Tree right
- datatype tree empty node of int tree tree
128Equivalencia por Estructura
- type T1 is record
- X Integer
- N access T1
- end record
- type T2 is record
- X Integer
- N access T2
- end record
type T4 is record X Integer N access T2 end
record type T5 is record N access T5 X
Integer end record
type T6 is record Y Integer N access T6 end
record
129Características del Sistema de Tipos de ADA
- Fuertemente tipeado, equivalencia por nombre, no
coerción implícita, sobrecarga. - Subtipos. Verificación en TC vs TE
- Tipos derivados.
- Registros etiquetados.
- Genéricos. Polimorfismo universal paramétrico
- Paquetes. Abtracciones de tipos
130Sistema de Tipos de ADA
type celsius is new Float -- tipo derivado
de Float farenheit is new Float --
estos tipos son incompatibles Ada maneja
compatibilidad por nombre subtype Small_type is
Integer range 0..99 --compatible con
Integer C, D array (1..10) of Integer --
definición de dos arreglos anónimos de tipos
incompatibles type List10 is array (1..10) of
Integer C, D List10 -- arreglos con tipos
compatibles
131Ada
- declare
- subtype Wide_Type is Integer range 1..100
- subtype Narrow_Type is Integer range 10..20
- subtype Farout_Type is Integer range
150..300 - Wide Wide_Type
- Narrow Narrow_Type
- Farout Farout_Type
- begin
- Narrow Farout
- Wide Narrow
- Narrow Wide
- end
Chequeo en tiempo de ejecución si no satisfacen
las restricciones la excepción CONSTRAINT_ERROR es
ejecutada
132Inseguridad de Tipos en Pascal
- Subrangos
- Registros variantes
- Subprocedimientos como argumentos
133Pascal
- var
- wide 1..100
- narrow 10..20
- farout 150..1000
- begin
- narrow farout
- wide narrow
- narrow wide
- end
type option (a,b) vrt record case
tagoption of a (f1real) b (f2
integer) end var x vrt begin x.tag
a x.f1 12.65 x.tag b if x.f2
32 then ( ... ) end
1344.6. Alcances
- El alcance de una declaración es la porción de
programa en la cual el identificador introducido
en la declaración esta visible. Una variables es
visible en un estatuto si puede ser refererida en
ese estatuto. - Tipos de alcances
- Estático el alcance de la variable se puede
determinar en tiempo de compilación - Dinámico se basa en la secuencia de llamadas de
los subprogramas, y no en su relación espacial.
135Alcance Estático
- Se basa en la búsqueda de la declaración de la
variable en el bloque actual o en el que lo
contiene y asi sucesivamente hasta encontrar la
variable.
136Alcance Estático
- procedure Big is
- x Integer
- procedure Sub1 is
- begin
- x
- end
- procedure Sub2 is
- x Real
- begin
- x
- Sub1
- end
- begin
- Sub1
- Sub2
- end
137Alcance Dinámico
- El alcance de una variable se determina en
tiempo de ejecución y puede variar de acuerdo a
la secuencia de llamadas de los subprogramas.
138Alcance Dinámico
procedure Big is X Integer procedure Sub1
is begin x end procedure Sub2
is X Real begin x
Sub1 end begin Sub1 Sub2 end
139Capítulo 5. Tipos de Datos
- 5.1. Primitivos
- 5.2. Definidos por el usuario
- 5.3. Arreglos
- 5.4. Registros
- 5.5. Referencias (apuntadores)
-
140Tipos de Datos
- Un tipo de dato define una colección de datos
objeto y un conjunto de operaciones definidas
para esos objetos. - Los tipos de datos definidos por el usuario
mejoran legibilidad de los programas a traves de
el uso de nombres significativos para los tipos.
141Tipos de Datos
- Un descriptor es una colección de atributos de
una variable. - Los tipos de datos abstractos (ADT) separan el
uso de un tipo de su representación y sus
operaciones sobre los valores de ese tipo.
142- Un objeto inmutable es aquel que no puede ser
cambiado por una operación. - Sumar 1 a un entero, no cambia al entero, el
resultado es otro entero. - Un objeto mutable es aquel que tiene un estado
que puede ser modificado por ciertas operaciones
sin cambiar la identidad del objeto. - Actualizar un elemento de un arreglo.
1435.1. Primitivos
- Los datos primitivos son aquellos que no son
definidos en función de otros tipos. - La mayoria de los lenguajes de programación
proveen una serie de datos primitivos. - Los datos primitivos son la base para la creación
de tipos estructurados.
144Tipos Numericos
- Entero.
- Signo (Con signo, sin signo)
- Representaciones (Signo magnitud, Complemento a
2) - Rango de valores (número de bytes usados)
- Punto flotante.
- Precisión (simple, doble)
- Representación ( Formato Estandar 754 de la IEEE)
- Decimales.
- Almacenados en BCD
- Boolean.
- Caracter.
- Código (ASCII, ISO 8859-1, Unicode)
- String??
145Tipos Primitivos
146Strings
- Tipo especial de arreglo de caracteres o Tipo
primitivo?? - Longitud estática o dinámica?
- Estática -Objetos inmutables (Java, C, C y
.NET) - Dinámica
- Variable limitada a cierto número de caracteres
- Variable sin limite máximo.
- Implementación
Descriptor en T. Compilación
Descriptor en T. Ejecución
1475.2. Definidos por el usuario
- Cardinales. El rango de valores puede ser
fácilmente asociado con un conjunto de enteros. - Enumeración. Tipo en el cual todos los posibles
valores (constantes enumeradas) se proveen en la
definición. - Subrango. Secuencia contigua de un tipo cardinal.
148Enumeración
- Puede una constante aparecer en mas de una
enumeración? Como se checa una ocurrencia de esta
en un programa? - Los elementos de una enumeración se convierten
(implicitamente) a un valor entero? - Se pueden convertir otros tipos a un tipo
enumeración? - Como afecta esto al sistema de tipos?
149Ejemplos de Enumeración
- Fortran
- Integer lun, mar
- Data lun, mar/0, 1/
- // C
- enum dias lun, mar, mie, jue, vie, sab, dom //
default 0,1,2.. - dias diaActual mie
// se convierte a int en expresiones - diaActual 1 // ilegal se debe hacer un cast
(dias) a la literal 1 - // C enumeraciones son como C pero las
literales NO se convierten a int - enum diasLun, Mar, Mie, Jue,Vie, Sab, Dom
150Ejemplos de Enumeración
// Java public class City public final int
MIAMI 0 public final int ORLANDO 1
- No es seguro (tipos)
- Dificil de actualizar
- No se pueden imprimir
- Los valores int no son informativos
- Los clientes requieren recompilacion
public class City private final String
name private City(String name) this.name
name public String toString() return
name public static final City MIAMI new
City(Miami) public static final City
ORLANDO new City(Orlando) public static
final City MELBOURNE new City(Melbourne)
//Java 1.5 public enum City Miami, Orlando,
Melbourne
151Enumeración
- Ventajas
- Mejoran legibilidad
- Facilitan le escritura y lectura de programas
- Seguridad?
- Ada, C - las operaciones aritmeticas no son
legales y valores fuera de los rangos no pueden
swer asignados - C no provee seguridad
- C - requieren cast
- Java seguras, son implementadas usando el
patron definido por Bloch donde cada constante es
creada como un objeto de la clase y no puede ser
cambiada. - Desventajas???
152Subrango
- Requieren chequeo dinámico en asignaciones.
- -- Ada
- type Days is (Lun, Mar, Mie, Jue, Vie, Sab, Dom)
- subtype Weekdays is Days range Lun..Vie
- subtype index is Integer range 1..100
- Day1 Days
- Day2 Weekdays
- Day2 Day1 -- chequeo dinámico
- ( Pascal )
- type index 1..100
1535.3. Arreglos
- Un arreglo es una agregación homogenea de
elementos en la cual cada elemento es
identificado por su posición, relativa al primer
elemento. - Nombre
- Indice(s) (índice inferior implícito o
explícito) - int datos // Java inicia en 0
- datos array-3..3 of integer // Pascal
inicia e -3 - Tipo (de los elementos, de los índices)
154Preguntas sobre Arreglos
- Cuales tipos son legales para los indices?
- Se deben checar los valores de las expresiones
que definen los subindices? - En que tiempo se efectua la union de el rango de
los subindices? - Cuando se almacena un arreglo?
- Que tipo de arreglos se requieren rectangulares,
jagged o ambos? - En que momento se inicializan los elementos de un
arreglo? - Se permite procesar rebanadas de un arreglo?
155Arreglos
- Arreglo estático- es aquel donde el rango de los
subindices es estaticamente unido y su
almacenamiento es en memoria estática. - Arreglo dinámico en stack con tamaño fijo- el
rango de los subindices es estaticamente unido
pero su almacenamiento se da en tiempo de
ejecución cu