Está en la página 1de 652
principios y practica = Kenneth G. Louden nido 1 Introduccién 1 11 1.2 13 14 15 1.6 {Qué es un lenguaje de programacién? 2 Abstracciones en los lenguajes de programacién 4 Paradigmas de computacién 12 Definici6n de lenguaje 18 Tmduccién del lenguaje 20 Disefio del lenguaje 26 Fjercicios 27 Notas y referencias 29 2 Historia 31 21 22 23 24 25 2.6 2.7 Albores histéricos: el primer programador 32 Los afios 50: Los primeros lenguajes de programacién 33 Los aiios 60: Una explosisn de lenguajes de programacién 35 Los afios 70: Simplicidad, abstraccién, estudio 38 Los afios 80: Nuevas direcciones y la creciente importancia de la orientacién a objetos 39 Los afios 90: Consolidacién, Internet, bibliotecas y la redaccién de macros 41 El futuro 44 Ejercicios 45 Notas y referencias 47 vi CONTENIDO 3 Principios de disefio de los lenguajes 49 3.1 Historia y criterios de disefio 51 3.2. Eficiencia 52 3.3 Regularidad 54 3.4 Principios adicionales sobre disefio de los lenguajes 57 3.5 C++: Un estudio de caso de los disefios de los lenguajes 61 Bjercicios 65 Notas y referencias 68 4 Sintaxis 69 4.1 Estructura léxica de los lenguajes de programacién 70 4.2. Graméticas libres de contexto y BNF 74 4.3. Arboles de anilisis sintactico y arboles de sintaxis abstracta 80 4.4 Ambigiedad, asociatividad y precedencia 83 4.5. EBNF y diagramas sintécticos 87 4.6 Técnicas y herramientas de andlisis sintactico 91 4.7 Léxico comparado con la sintaxis y con la seméntica 102 Ejercicios 104 Notas y referencias 112 5 Semdntica bdsica 113 5.1 Atributos, ligaduras y funciones seménticas 114 5.2 Declaraciones, bloques y alcance 118 5.3. Latablade simbolos 127 Resolucisn y sobrecarga de nombres _139 5.5. Asignacién, tiempo de vida y el entorno 145 5.6 Variables y constantes 153 5.7 Alias, referencias pendientes y basura 159 Ejercicios 165 Notas y referencias 171 6 Tipos de datos 173 6.1 Tipos de datos e informacién de tipos 176 6.2 Tipos simples 180 CONTENIDO vii 63 64 65 6.6 67 6.8 6.9 Constructores de tipos 183 Nomenclatura de tipos en lenguajes de ejemplo 196 Equivalencia de tipos 199 Verificacién de tipos 205 Conversion de tipos 211 Verificacién de tipos polimérficos 214 Polimorfismo explicito 222 Fjercicios 228 Notas y referencias 235 7 Control I—Expresiones y enunciados 237 7A 72 73 WA 75 Expresiones 238 Enunciados y guardias condicionales 246 Ciclos y variaciones sobre WHILE 251 La controversia GOTO 255 Manejo de excepciones 257 Ejercicios 272 Notas y referencias 279 8 Control II—Procedimientos y ambientes 231 81 8.2 83 8.4 Definicién y activacién de los procedimientos 283 Seméntica de los procedimientos 285 Mecanismos de paso de parimetros 289 Ambientes, activacién y asignacién de los procedimientos 296 8.5 _Administracién de la memoria dinémica 309 8.6__Manejo de excepciones y de ambientes 313 Ejercicios 315 Notas y referencias 324 9 _Tipos de datos abstractos y médulos 325 91 ‘ficaci6n algebraica de los tipos de datos abstractos _328 9.2__Mecanismos de tipos de datos abstractos y médulos _ 332 93 94 Compilacién individual en C, espacios de nombres de C++ ypaquetes Java 335 Paquetes de Ada 343 viii CONTENIDO 9.5 Médulos en ML_348 9.6 Médulos en lenguajes anteriores 351 9.7 Problemas que se presentan con los mecanismos de tipos de datos abstractos 356 9.8 Las mateméticas de los tipos de datos abstractos 364 Ejercicios 367 Notas y referencias 372 10 Programacién orientada a objetos 373 10.1 10.2 10.3 10.4 10.5 Reutilizacién e independencia del software 374 Java: objetos, clases y métodos 377 Herencia 382 Ligadura dindmica 393 C++ 396 10.6 Smalltalk _407 10.7 10.8 Cuestiones de disefio en lenguajes orientados a objetos 412 Cuestiones de implementacién en lenguajes orientados a objetos 417 Ejercicios 422 Notas y referencias 429 11 Programacién funcional 431 LL 11.2 113 14 15 11.6 11.7 1L.8 Programas como funciones 433 Programacién funcional en un lenguaje imperativo 436 Scheme: Un dialecto de LISP 440 ML: Programaci6n funcional con tipificado estitico 453 Evaluacién retrasada 464 Haskell: Un lenguaje perezoso completamente Curry con sobrecarga 469 Las matematicas en la Programacién funcional I: Funciones recursivas 476 Las matemiiticas en la Programaci6n funcional Il: Caleulo lambda 479 Ejercicios 484 Notas y referencias 491 12 Programacién légica 493 12.1 Logica y programas légicos 495 12.2 12.3 Clausulas Hom 498 Resolucién y unificacién 501 CONTENIDO ix 12.4 El lenguaje Prolog 505 12.5 _Problemas que se presentan con la programacién Iégica 516 12.6 _Extensién de la programacién légica: programacién Iégica con restricciones y sistemas basados en ecuaciones _520 Ejercicios 523 Notas y referencias 529 13, Semdntica formal 531 13.1 Pequefio lenguaje de muestra 533 13.2 Seméntica operacional 536 13.3__Seméntica denotacional _546 13.4 Seméntica axiomitica 554 13.5 Pruebas para determinar la correctitud de un programa 560 Ejercicios 563 Notas y referencias 567 14 Programacién en paralelo 569 14.1. Introducci6n al procesamiento en paralelo 571 14.2 Procesamiento en paralelo y lenguajes de programacién 575 14.3 Hilos 582 14.4 Seméforos 590 14.5 Monitores 594 14.6 Paso de mensajes _599 14.7. Paralelismo en lenguajes no imperativos 606 Bjercicios 610 | Notas y referencias 616 Bibliografia 617 Indice alfabético 625 Eote libro es una introduccién al amplisimo campo de los lenguajes de programacién. Combina tuna presentacién general de los principios junto con considerables detalles acerca de los lengua- jes modernos incluyendo algunos de los mds recientes lerguajes funcionales y los orientados a ob- jetos. A diferencia de muchos textos introductorios, contiene abundante material sobre problemas de implementacién, las bases tedricas de los lenguajes de programacién y varios ejercicios. Todas estas caracteristicas hacen de este libro un puente ditil entre los cursos de compiladores y el estu- dio te6rico de los lenguajes de programacién. Esta, sin embargo, especificamente diseiiado para un curso general, aunque avanzado, de lenguajes de programacién y cubre la mayorfa de los requisi- tos de los lenguajes de programacién especificados en el 2001 ACM/IEEE-CS Joint Curriculum Task Force Report y el curso CS8 del 1978 ACM Curriculum. Mis objetivos para esta nueva edicién son poner material especifico del lenguaje acorde con los cambios ocurridos en la popularidad y uso de los lenguajes de programacién desde la publicacién de la primera edicin en 1993, expandir y mejorar la cobertura de ciertas dreas, asf como mejorar la presentacidn y la utilidad de ejemplos y ejercicios conservando al mismo tiempo, tanto como fue posible, el texto y la organizacién originales. ‘No se espera que los estudiantes conozcan algiin lenguaje en particular. Sin embargo, es ne- cesaria cierta experiencia con por lo menos un lenguaje, asf como cierto grado de “sofisticacién computacional” como el que se conseguirfa con un curso en estructuras de datos y con uno so- bre mateméticas discretas. Los principales lenguajes que se utilizan en esta edicién incluyen C, C++, Java, Ada, ML, Haskell, Scheme y Prolog; y algunos otros se analizan someramente. Panorama general y organizacién En la mayoria de los casos, cada uno de los capitulos es independiente de los demas, pero no se restringe artficialmente al material incluido en cada uno de ellos. Con el fin de llenar cualquier vacfo que se pudiera presentar tanto para el estudiante como para el profesor, en caso de que se haya pasado por alto un capftulo o una seccién en particular, se han previsto referencias cruza- das a todo lo largo del texto. El capitulo 1 investiga los conceptos que se estudiardn en capftulos posteriores ¢ introduce los diferentes paradigmas del lenguaje mediante ejemplos simples con los lenguajes tipicos. Los capitulos 2 y 3 aportan panoramas generales sobre la historia de los lenguajes de pro- ‘gramaciGn los prineipios de disefio de éstos, respectivamente. El capftulo 3 bien pudiera ser el culminante del libro, pero me he dado cuenta de que despierta interés en temas posteriores cuan- do se presenta en este orden. El capftulo 4 se ocupa con cierto detalle de la sintaxis, i los diagramas sintécticos. Una breve seccién se ocupa de defi Juyendo el uso de BNF, EBNF y jones recursivas (como BNF) co- xi

También podría gustarte