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:

  1. Análise Léxica (Scanner): Ler o arquivo fonte e agrupar caracteres em tokens (palavras reservadas, identificadores, símbolos).
  2. Análise Sintática (Parser): Verificar se a sequência de tokens obedece à gramática da linguagem (árvore sintática).
  3. Análise Semântica: Verificar regras de contexto (tipagem, escopo de variáveis, declarações prévias).
  4. 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.

Back to top