Table Of ContentCONCEITOS DE
LINGUAGENS DE
PROGRAMAÇÃO
NONA EDIÇÃO
R O B E R T W. S E B E S TA
ROBERT W. SEBESTA
Tradução técnica:
Eduardo Kessler Piveta
Doutor em Ciência da Computação – UFRGS
Professor Adjunto da Universidade Federal de Santa Maria – UFSM
Versão impressa
desta obra: 2011
2011
Obra originalmente publicada sob o título
Concepts of Programming Languages, 9th Edition
ISBN 9780136073475
Authorized translation from the English language edition, entitled CONCEPTS OF PROGRAMMING
LANGUAGES, 9th Edition, by ROBERT SEBESTA, published by Pearson Education,Inc., publishing as
Addison-Wesley, Copyright © 2010. All rights reserved. No part of this book may be reproduced or trans-
mitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any
information storage retrieval system, without permission from Pearson Education,Inc.
Portuguese language edition published by Bookman Companhia Editora Ltda, a Division of Artmed Editora
SA, Copyright © 2010
Tradução autorizada a partir do original em língua inglesa da obra intitulada CONCEPTS OF PROGRAM-
MING LANGUAGES, 9ª Edição, autoria de ROBERT SEBESTA, publicado por Pearson Education, Inc.,
sob o selo Addison-Wesley, Copyright © 2010. Todos os direitos reservados. Este livro não poderá ser re-
produzido nem em parte nem na íntegra, nem ter partes ou sua íntegra armazenado em qualquer meio, seja
mecânico ou eletrônico, inclusive fotoreprografação, sem permissão da Pearson Education,Inc.
A edição em língua portuguesa desta obra é publicada por Bookman Companhia Editora Ltda, uma divisão da
Artmed Editora SA, Copyright © 2010
Capa: Rogério Grilho, arte sobre capa original
Leitura fi nal: Mirella Nascimento
Editora Sênior: Denise Weber Nowaczyk
Editora responsável por esta obra: Elisa Viali
Projeto e editoração: Techbooks
Reservados todos os direitos de publicação, em língua portuguesa, à
ARTMED® EDITORA S. A.
(BOOKMAN® COMPANHIA EDITORA é uma divisão da ARTMED® EDITORA S.A.)
Av. Jerônimo de Ornelas, 670 - Santana
90040-340 Porto Alegre RS
Fone (51) 3027-7000 Fax (51) 3027-7070
É proibida a duplicação ou reprodução deste volume, no todo ou em parte, sob quaisquer
formas ou por quaisquer meios (eletrônico, mecânico, gravação, fotocópia, distribuição na Web
e outros), sem permissão expressa da Editora.
SÃO PAULO
Av. Embaixador Macedo Soares, 10.735 - Pavilhão 5 - Cond. Espace Center
Vila Anastácio 05095-035 São Paulo SP
Fone (11) 3665-1100 Fax (11) 3667-1333
SAC 0800 703-3444
IMPRESSO NO BRASIL
PRINTED IN BRAZIL
O AUTOR
Robert Sebesta é Professor Associado Emérito no Departamento de Ciência
da Computação da Universidade do Colorado – Colorado Springs. Tem
bacharelado em Matemática Aplicada pela Universidade de Colorado em
Boulder e mestrado e doutorado (PhD) em Ciência da Computação pela
Universidade Estadual da Pensilvânia. Ele ensina ciência da computação há
mais de 38 anos. Seus interesses profissionais são o projeto e a avaliação de
linguagens de programação, projeto de compiladores e métodos e ferramentas
de testes de software.
S443c Sebesta, Robert W.
Conceitos de linguagens de programação [recurso eletrônico] /
Robert W. Sebesta; tradução técnica: Eduardo Kessler Piveta. –
9. ed. – Dados eletrônicos. – Porto Alegre : Bookman, 2011.
Editado também como livro impresso em 2011.
ISBN 978-85-7780-862-5
1. Ciência da computação. 2. Linguagens de programação de
computador. I. Título.
CDU 004.43
Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052
Prefácio
MUDANÇAS PARA A NONA EDIÇÃO
Os objetivos, a estrutura geral e a abordagem desta nona edição de Conceitos
de Linguagens de Programação permanecem as mesmas das oito anteriores. Os
objetivos principais são introduzir as construções mais importantes das lin-
guagens de programação contemporâneas e fornecer ao leitor as ferramen-
tas necessárias para a avaliação crítica de linguagens existentes e futuras. Um
objetivo adicional é preparar o leitor para o estudo de projeto de compilado-
res, apresentando um método formal de descrição de sintaxe e introduzindo
abordagens para as análises sintática e léxica.
Para manter a atualidade do conteúdo, algumas das discussões acerca
de linguagens de programação mais antigas foram substituídas por material
de linguagens mais recentes na nona edição. Por exemplo, no Capítulo 6,
foram adicionadas discussões acerca dos tipos tabela em Lua, das tuplas e
das compreensões de lista de Python, e das fatias em Ruby. Algum material
mais antigo foi removido do Capítulo 7, diminuindo-o em duas páginas. A
seção sobre o modelo de objetos de JavaScript foi removida do Capítulo
11. Em alguns casos, o material foi movido. Por exemplo, três seções do
Capítulo 5 foram para o Capítulo 6, cujo tópico trata de tipos de dados.
Em algumas seções, o material foi expandido. No Capítulo 4, por exemplo,
o código do analisador léxico foi expandido para um programa completo,
e uma saída real dele foi incluída. A seção sobre escopo no Capítulo 5 foi
expandida com subseções sobre escopo global e ordem de declaração. A
discussão dos tipos de dados abstratos no Capítulo 11 foi revisada e au-
mentada. No Capítulo 15, uma seção sobre recursão em cauda em Scheme
foi adicionada. No Capítulo 3, a introdução à semântica foi revisada e as
subseções foram reordenadas. Além disso, pequenas mudanças foram feitas
em diversas seções do livro, principalmente para melhorar a clareza. Por
fim, mais de 50 problemas e exercícios de programação, além de mais de
cem questões de revisão, foram adicionados à obra.
A VISÃO
Este livro descreve os conceitos fundamentais de linguagens de programação
ao discutir as questões de projeto de diversas construções de linguagens, exa-
minando as escolhas para essas construções em algumas das linguagens mais
comuns e comparando criticamente alternativas de projeto.
vi Prefácio
Qualquer estudo sério sobre linguagens de programação requer um exa-
me de alguns tópicos relacionados, dentre os quais estão os métodos de des-
crição de sintaxe e de semântica, tratados no Capítulo 3. Além disso, técnicas
de implementação para várias construções de linguagem devem ser conside-
radas: as análises léxica e sintática são discutidas no Capítulo 4, e a implemen-
tação da ligação de subprogramas é assunto do Capítulo 10. A implementação
de outras construções de linguagem é discutida em outras partes do livro.
Os parágrafos a seguir descrevem o conteúdo da nona edição.
DESCRIÇÃO DOS CAPÍTULOS
O Capítulo 1 começa com uma discussão sobre por que estudar linguagens
de programação. Ele então discute os critérios usados para avaliar linguagens
e construções de linguagem. A influência primária no projeto de linguagens,
alguns compromissos comuns de projeto e as abordagens básicas para a imple-
mentação também são examinadas.
O Capítulo 2 descreve a evolução da maioria das linguagens impor-
tantes discutidas neste livro. Apesar de nenhuma delas ser descrita comple-
tamente, as origens, os propósitos e as contribuições de cada uma são discu-
tidos. Essa visão histórica é valiosa, porque fornece o conhecimento neces-
sário para entender as bases teóricas e práticas do projeto contemporâneo de
linguagens. Também motiva o estudo adicional do projeto e da avaliação de
linguagens. E, já que nenhum dos capítulos restantes depende do Capítulo 2,
ele pode ser lido independentemente.
O Capítulo 3 mostra o modelo formal primário para descrever a sintaxe
de linguagens de programação – BNF. Esse é seguido por uma apresentação
das gramáticas de atributos, que descrevem tanto a sintaxe quanto a semântica
estática de linguagens. A difícil tarefa da descrição semântica é então explora-
da, incluindo breves introduções para os três métodos mais comuns: semânti-
ca operacional, denotacional e axiomática.
O Capítulo 4 introduz as análises léxica e sintática. Esse capítulo é volta-
do para as faculdades que não mais requerem um curso de projeto de compila-
dores em seu currículo. Como o Capítulo 2, pode ser lido independentemente
do restante do livro.
Os Capítulos 5 a 14 descrevem em detalhes as questões de projeto para
as construções primárias das linguagens imperativas. Em cada um dos casos,
as escolhas de projeto para diversas linguagens de exemplo são apresentadas
e avaliadas. Especificamente, o Capítulo 5 cobre as muitas características das
variáveis, o Capítulo 6 mostra os tipos de dados, e o Capítulo 7 explica as ex-
pressões e as sentenças de atribuição. O Capítulo 8 descreve as sentenças de
controle, e os Capítulos 9 e 10 discutem os subprogramas e suas implementa-
ções. O Capítulo 11 examina os recursos de abstração de dados.
O Capítulo 12 fornece uma discussão aprofundada dos recursos de lin-
guagem que suportam a programação orientada a objetos (herança e vincu-
lação dinâmica de métodos), o Capítulo 13 discute as unidades de programa
Prefácio vii
concorrentes, e o Capítulo 14 fala sobre o tratamento de exceções, com uma
breve discussão sobre o tratamento de eventos.
Os dois últimos capítulos (15 e 16) descrevem dois dos paradigmas de
programação mais importantes: a programação funcional e a programação ló-
gica. O Capítulo 15 apresenta uma introdução à linguagem Scheme, incluindo
descrições de algumas de suas funções primitivas, formas especiais e formas
funcionais, além de alguns exemplos de funções simples escritas em Scheme.
Introduções breves a ML e a Haskell são dadas para ilustrar alguns tipos dife-
rentes de linguagens funcionais. O Capítulo 16 introduz a programação lógica
e a linguagem Prolog.
PARA O INSTRUTOR
No curso inicial de linguagens de programação na Universidade do Colorado,
em Colorado Springs, o livro é usado da seguinte forma: cobrimos os
Capítulos 1 e 3 em detalhes, e – apesar de os estudantes acharem interessante
e de leitura benéfica – o Capítulo 2 recebe pouco tempo de aula devido à
falta de conteúdo altamente técnico. Como nenhum material nos capítulos
subsequentes depende do Capítulo 2, ele pode ser ignorado completamente.
E, já que requeremos um curso de projeto de compiladores, o Capítulo 4 não
é tratado.
Os Capítulos 5 a 9 devem ser relativamente fáceis para estudantes com
extensa experiência em programação em C++, Java ou C#. Os Capítulos 10 a
14 são mais desafiadores e requerem aulas mais detalhadas.
Os Capítulos 15 e 16 são inteiramente novos para a maioria dos estu-
dantes principiantes. Idealmente, processadores de linguagem para Scheme
e Prolog devem estar disponíveis para que os estudantes possam aprender o
material nesses capítulos. É incluído material suficiente para permitir que os
estudantes lidem com alguns programas simples.
Cursos de graduação provavelmente não serão capazes de cobrir todo
o conteúdo dos últimos dois capítulos. Cursos de pós-graduação, entretanto,
devem conseguir discutir completamente o material pulando partes dos pri-
meiros capítulos acerca de linguagens imperativas.
MATERIAIS SUPLEMENTARES
Os seguintes suplementos estão disponíveis para os leitores deste livro em
www.bookman.com.br.
• Um conjunto de slides (em português) com notas de aulas. Slides em
Power Point estão disponíveis para cada um dos capítulos do livro.
• Slides em Power Point contendo todas as figuras do livro (em português).
Para acessar os recursos, procure pelo livro no site www.bookman.com.br e
clique em Conteúdo Online.
viii Prefácio
Soluções para muitos dos conjuntos de problemas (em inglês) estão dis-
poníveis para instrutores qualificados na nossa Área do Professor. Para aces-
sar os materiais procure pelo livro em www.bookman.com.br e clique em
Material para professores. Faça o seu cadastro de professor no site, caso
ainda não tenha, para receber uma senha de acesso ao material.
Disponibilidade de processador de linguagem
Processadores e informações acerca de algumas das linguagens de programa-
ção discutidas neste livro podem ser encontrados nestes sites:
C, C++, Fortran e Ada gcc.gnu.org
C# microsoft.com
Java java.sun.com
Haskell haskell.org
Lua www.lua.org
Scheme www.plt-scheme.org/software/drscheme
Perl www.perl.com
Python www.python.org
Ruby www.ruby-lang.org
JavaScript está inclusa em praticamente todos os navegadores; PHP está in-
cluso em praticamente todos os servidores Web.
Todas essas informações também estão incluídas no site do livro, em
www.aw-bc.com/sebesta.
AGRADECIMENTOS
As sugestões de revisores magníficos contribuíram muito para a forma atual
deste livro. Em ordem alfabética de sobrenomes, são eles:
I-ping Chu Universidade DePaul
Amer Diwan Universidade do Colorado
Stephen Edwards Virginia Tech
Nigel Gwee Southern University – Baton Rouge
K. N. King Universidade Estadual da Geórgia
Donald Kraft Universidade Estadual da Louisiana
Simon H. Lin Universidade Estadual da Califórnia – Northridge
Mark Llewellyn Universidade da Flórida Central
Bruce R. Maxim Universidade de Michigan – Dearborn
Gloria Melara U niversidade Estadual da Califórnia – Northridge
Frank J. Mitropoulos Nova Universidade de Southeastern
Euripides Montagne Universidade da Flórida Central
Bob Neufeld Universidade Estadual de Wichita
Amar Raheja Universidade Politécnica do Estado da Califórnia –
Pomona
Hossein Saiedian Universidade de Kansas
Neelam Soundarajan Universidade Estadual de Ohio