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
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. LIVROS RELACIONADOS Estruturas de Dados e Algoritmos em Java Estruturas de Dados e Algoritmos em C