O compilador é uma ferramenta que converte, de uma forma eficiente, programas descritos por linguagens de alto nível em linguagem-máquina. O compilador é determinante no desempenho das aplicações, já que quase todo o código executado é compilado.
A geração de código-máquina é precedida de uma fase de análise do programa para garantir a correção do mesmo e construir uma estrutura que o represente. Num compilador, o processo de análise permite compreender muitas das limitações das linguagens de programação. Por outro lado, a geração de código permite compreender como os compiladores utilizam os processadores e a forma como a evolução dos processadores tem feito evoluir os compiladores.
O livro aborda os diversos passos do desenvolvimento de um compilador, incluindo:
· A análise determinista linear com autómatos finitos para linguagens regulares e autómatos de pilha para uma análise ascendente e descendente;
· A realização de verificações semânticas e a construção da árvore sintática do programa analisado;
· A linearização das instruções para a geração de código direto para máquinas de pilha;
· A seleção e o escalonamento das instruções, bem como a reserva de registos, para máquinas de registos uniformes;
· A otimização do código resultante, com base na análise do fluxo de controlo e de dados.
Todo o processo de desenvolvimento é exemplificado, em C e Java, para uma linguagem de exemplo simples, com recurso às ferramentas lex, yacc, antlr e burg.
Este livro é dirigido aos estudantes de nível universitário e profissional, produtores de software, programadores e utilizadores em geral que pretendam compreender de que forma o compilador converte programas descritos por linguagens de alto nível em código executável.
Este livro disponibiliza ainda a correspondência dos principais termos técnicos para o Português do Brasil.
Principais temas abordados:
-Parte I - Análise Determinista de Linguagens
· Análise lexical
· Gramáticas livres de contexto
· Análise sintática descendente
· Análise sintática ascendente por tabela
· Gramáticas atributivas
· Análise semântica
· Projeto de análise
-Parte II - Geração de Código
· Ambiente de execução de programas
· Representação de código intermédio
· Geração de código intermédio
· Geração de código final para máquinas de pilha
· Seleção e escalonamento de instruções
· Reserva de registos
· Análise de fluxo
Público-Alvo
Estudantes dos Ensinos Superior e Profissional, produtores de software, programadores e utilizadores em geral que pretendam compreender como o compilador converte programas descritos por linguagens de alto nível em código executável.
Pré-visualização
Autores
Pedro Reis Santos
Professor Auxiliar do Departamento de Engenharia Informática do Instituto Superior Técnico (IST), onde é docente desde 1990. Lecionou as disciplinas de Complementos de Compiladores, Algoritmos e Estruturas de Dados, Programação por Objetos e Ambientes de Desenvolvimento. É regente da disciplina de Compiladores (IST/Taguspark).
Thibault Langlois
Professor Auxiliar do Departamento de Informática da Faculdade de Ciências da Universidade de Lisboa (FCUL), onde é docente desde 2001. Lecionou e foi regente das disciplinas de Compiladores, Introdução à Programação (Java), Laboratórios de Programação (Java) e Programação I e II (em C). É regente das disciplinas de Linguagens Formais e Autómatos, Princípios de Programação (programação funcional, Haskell) e Desenvolvimento Centrado em Objetos (Java). Entre 1994 e 2001 foi docente do Departamento de Engenharia Eletrotécnica e Computadores do Instituto Superior Técnico, onde lecionou as disciplinas de Introdução à Programação, Algoritmos e Estruturas de Dados, Compiladores e Projeto de Compiladores.