Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Compiladores: Aula 1 - Apresentação por Pedro Vasconcelos (DCC/FCUP), Notas de aula de Compiladores

Aula 1 do curso compiladores (cc3001) apresenta objetivos, funcionamento básico e componentes de compiladores e interpretadores. O documento aborda análise lexical, sintática, geradores de analisadores, tabelas de símbolos, invocação de funções e registos de ativação, geração de código intermédio e máquina, trabalhos práticos e avaliação.

O que você vai aprender

  • Quais são as vantagens de usar um compilador em vez de um interpretador?
  • Qual é a importância de estudar compiladores?
  • Quais são os objetivos da aula 1 do curso Compiladores?
  • O que é um compilador e como funciona?
  • Quais são as fases de um compilador?

Tipologia: Notas de aula

2022

Compartilhado em 07/11/2022

Saloete
Saloete 🇧🇷

4.6

(153)

221 documentos

1 / 24

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Compiladores (CC3001) Aula 1: Apresentação
Pedro Vasconcelos
DCC/FCUP
2020
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18

Pré-visualização parcial do texto

Baixe Compiladores: Aula 1 - Apresentação por Pedro Vasconcelos (DCC/FCUP) e outras Notas de aula em PDF para Compiladores, somente na Docsity!

Compiladores (CC3001)  Aula 1: Apresentação

Pedro Vasconcelos

DCC/FCUP

2020

Esta aula

Objetivos e funcionamento

Compiladores e interpretadores

Extras

Funcionamento

Aulas teóricas I (^) Remotas por video-conferência (Zoom) I (^) Exposição de conceitos e exemplos

Aulas laboratoriais I (^) Presenciais nos laboratórios (sem registo de presenças) I (^) Resolução de exercícios I (^) Acompanhamento dos trabalhos I (^) GitHub Classroom para exercícios e trabalhos

Ferramentas

I (^) Recomendado sistema operativo GNU/Linux I (^) Windows: instale uma VM com Linux I (^) haskell-platform: GHC, alex, happy, bibliotecas padrão I (^) Pode também usar Java ou C (mas recomendo Haskell) I (^) O seu editor de texto/IDE predileto I (^) Git (linha de comando)

Bibliograa recomendada

  1. Modern Compiler construction in ML, Andrew W. Appel, Cambridge University Press (existem também variantes que usam C ou Java.)
  2. Introduction to Compiler Design, Torben Aegidus Mogensen, Springer.

O que é um compilador?

I (^) Tradutor de programas numa linguagem de programação para outra I (^) Usualmente: traduz uma linguagem de alto nível numa de baixo nível I (^) Principal técnica para implementação de linguagens

Fases de um compilador

Frontend Representação intermédia

Backend texto do programa ↓ Análise lexical ↓ sequência de tokens ↓ Análise sintática ↓ árvore sintática abstrata ↓ Análise semântica ↓ AST & tabela de símbolos

Geração de código ↓ código intermédio

Seleção de instruções ↓ código assembly simbólico ↓ Alocação de registos ↓ código assembly concreto ↓ Assembler & linker ↓ código executável

Decomposição em fases

I (^) As fases de frontend lidam com linguagem fonte I (^) As fases de backend lidam com a geração de código máquina I (^) A fase intermédia é independente da linguagem fonte e do código máquina I (^) Esta decomposição torna o compilador mais simples I (^) Permite re-utilização de componentes I (^) o backend do GCC é usado para compilar C, C++ ou Objective-C I (^) o backend LLVM é usado pelo Clang, Swift, Rustc e (opcionalmente) GHC I (^) Extras: optimizações em código intermédio e/ou no backend

Compiladores vs. interpretadores (cont.)

Vantagens da interpretação: I (^) Mais simples do que a compilação I (^) Mais fácil suportar diferentes arquiteturas de computadores I (^) Suporta desenvolvimento interativo (read-eval-print-loop)

Vantagens da compilação: I (^) Código compilado pode ser bastante mais eciente I (^) Executáveis podem ser distribuidos separamente do compilador

Algumas implementações combinam compiladores e interpretadores (e.g. GHC, OCaml).

Porquê estudar compiladores?

A maioria dos programadores não vai escrever o seu próprio compilador.

Porquê então estudar compiladores?

Porquê estudar compiladores? (cont.)

I (^) Compreender a ligação entre linguagens de alto e baixo nível I (^) A construção de um compilador combina várias competências: I (^) linguagens formais, autómatos, gramáticas I (^) estruturas de dados e algoritmos I (^) arquitetura de computadores I (^) semântica de programas, tipos, lógica I (^) Conceitos e técnicas são úteis em outras aplicações I (^) É possível que tenha de implementar um compilador ou interpretador para uma linguagem especíca de domínio

Como implementar compiladores?

I (^) São programas complexos, logo é preferível usar uma linguagem de alto-nível I (^) Linguagens funcionais fortemente tipadas são boas escolhas

Porquê self-hosting?

I (^) Prova da maturidade da linguagem e ferramentas (eat your own dog food) I (^) Facilita comunicação entre developers (uma só linguagem)

Diculdades do self-hosting

Problema: necessitamos de um compilador para compilar o compilador...