Programação de SistemasIvan L. M. Ricarte Sumário Sumário
3 Compiladores 38
3.1 Gramáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.1.1 Terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.1.2 Definição formal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.1.3 Classificação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.1.4 Expressões regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.1.5 Gramáticas livres de contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.2 Análise léxica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.2.1 Autômatos finitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.2.2 Construção do autômato finito não-determinístico . . . . . . . . . . . . . . . . . . . . 493.2.3 Conversão para autômato finito determinístico . . . . . . . . . . . . . . . . . . . . . . 523.2.4 Minimização de estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.3 Analisadores léxicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553.3.1 Geradores de analisadores léxicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563.3.2 Especificação das sentenças regulares . . . . . . . . . . . . . . . . . . . . . . . . . . 563.3.3 Integração com código C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.3.4 Geração da aplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.4 Análise sintática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.4.1 Reconhecimento de sentenças . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.4.2 Derivações canônicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.4.3 Árvores gramaticais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.5 Analisadores sintáticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.5.1 Analisador sintático preditivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.5.2 Analisador de deslocamento e redução . . . . . . . . . . . . . . . . . . . . . . . . . . 703.5.3 Geradores de analisadores sintáticos . . . . . . . . . . . . . . . . . . . . . . . . . . . 773.6 Geração de código e otimização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.6.1 Análise semântica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.6.2 Geração de código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.6.3 Otimização de código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.7 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4 Carregadores e ligadores 92
4.1 Montadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924.1.1 Programas
assembly
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924.1.2 Montagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984.1.3 Formato do módulo objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.2 Montagem e carregamentocombinados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014.2.1 Montadores em dois passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014.2.2 Montagem e carregamento
assemble and go
. . . . . . . . . . . . . . . . . . . . . . . 1054.3 Carregamento absoluto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064.4 Relocação e Ligação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074.4.1 Estruturas de dados adicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084.5 Carregamento e ligação combinados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1104.5.1 Algoritmos do carregador de ligação direta . . . . . . . . . . . . . . . . . . . . . . . 1114.5.2 Exemplo de aplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1144.6 Ligadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1154.6.1 Bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174.7 Carregamento e Ligação Dinâmicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194.8 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121c
1999–2003 DCA/FEEC/UNICAMP ii
Leave a Comment