Capítulo: Apresentação e Iniciação
Sobre a disciplina
Este capítulo detalha os tópicos apresentados na Aula 1 da disciplina de Compiladores. O objetivo é alinhar expectativas, compreender o funcionamento do curso e introduzir o papel fundamental dos compiladores na Ciência da Computação.
Objetivos da disciplina
O objetivo principal desta disciplina é desmistificar o funcionamento das linguagens de programação. Muitas vezes, tratamos o compilador como uma “caixa preta” que magicamente transforma nosso código em um executável. Ao final deste curso, você terá construído seu próprio compilador e entenderá exatamente o que acontece “sob o capô”.
Os objetivos específicos incluem: - Compreender o processo de tradução de código fonte de alto nível para linguagem de máquina. - Dominar as fases clássicas de compilação: Análise Léxica, Sintática, Semântica e Geração de Código. - Implementar um compilador completo para uma linguagem simplificada. - Entender trade-offs de design de linguagens e otimizações básicas.
Metodologia e avaliação
A disciplina intercala teoria e prática de forma intensa. A construção do compilador não é um “trabalho final”, mas sim um processo contínuo que acompanha o semestre.
Estrutura de avaliação
A nota (100 pontos) é distribuída de forma a valorizar tanto o conhecimento conceitual quanto a capacidade de implementação:
- Provas Teóricas (60%): Duas avaliações presenciais cobrindo os conceitos fundamentais.
- Projeto Prático (40%): Desenvolvimento incremental de um compilador.
Importante: O projeto prático é incremental. Cada etapa depende do sucesso da anterior (p.ex., o analisador sintático precisa dos tokens gerados pelo léxico). Deixar para a última hora é receita para o fracasso.
O Projeto de Compilador
Durante o curso, construiremos um compilador para uma linguagem didática. O projeto é dividido em entregas quinzenais, tipicamente seguindo este fluxo:
- Análise Léxica (Scanner): Ler o arquivo fonte e agrupar caracteres em tokens (palavras reservadas, identificadores, símbolos).
- Análise Sintática (Parser): Verificar se a sequência de tokens obedece à gramática da linguagem (árvore sintática).
- Análise Semântica: Verificar regras de contexto (tipagem, escopo de variáveis, declarações prévias).
- Geração de Código: Traduzir a árvore validada para uma representação intermediária ou código de máquina (assembly/bytecode).
Bibliografia e recursos
A literatura de compiladores é rica e clássica.
- Livro Texto Principal: “Compilers: Principles, Techniques, and Tools” (Aho, Lam, Sethi, Ullman), conhecido mundialmente como o Livro do Dragão. É a bíblia da área, cobrindo profundamente a teoria.
- Abordagem Prática: “Engineering a Compiler” (Cooper & Torczon). Foca mais em implementação eficiente e otimização, excelente para consulta durante o projeto.
Ferramentas
Utilizaremos ferramentas modernas de desenvolvimento (Git/GitLab) para submissão e versionamento do projeto. O conhecimento de estruturas de dados (árvores, tabelas hash, autômatos) é pré-requisito essencial.
Este capítulo serve como introdução e guia de sobrevivência para a disciplina. Prepare-se para codificar bastante e entender profundamente como os computadores interpretam suas ideias.