Top Banner
Compiladores Técnicas e Ferramentas Ígor Bonadio
23

Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Jan 27, 2019

Download

Documents

dangthien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

CompiladoresTécnicas e Ferramentas

Ígor Bonadio

Page 2: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

O que são compiladores?

Compiladorprintf(“Hello”);0101001001010 0100100010001 1101001000110

Page 3: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Exemplos de compiladores

Linguagem Compilador Resultado

C++ G++ / CLang Assembly

Java JAVAC Bytecode

CoffeeScript coffee Javascript

Page 4: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Fases de um compilador

Lex Parser Análise Semântica

Representação Intermediária

Otimização Emissão de Código Assembler Linker

Page 5: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Análise léxica• Quebra o arquivo fonte em palavras ou tokens

int x = 1 + 2 * 3

Page 6: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Análise léxica• Quebra o arquivo fonte em palavras ou tokens

• Expressões regulares

• Lex, FlexToken Expressão

Regular Exemplos

ID [a-z][a-z0-9]* foo bar123

NUM [0-9]+ 42 9

IF if if

Page 7: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Análise sintática

• Analisa a estrutura do program

• Gramática livre de contextoE -> E + EE -> E * EE -> NUM

Page 8: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Análise sintática

• Analisa a estrutura do program

• Gramática livre de contextoE -> E + EE -> E * EE -> NUM

1 + 2 * 3

E +

E

E E*

E

1

2 3

Page 9: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Análise sintática

• Analisa a estrutura do program

• Gramática livre de contextoE -> E + EE -> E * EE -> NUM

1 + 2 * 3

E +

E

E E*

E

1

2 3

E *

E

E E+

E

1 2

3

Page 10: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Análise sintática

• Analisa a estrutura do program

• Gramática livre de contexto

E -> E + TE -> TT -> T * FT -> FF -> NUMF -> ( F )

1 + 2 * 3

E +

E

T

T * FT

F

1

F

2

3

Page 11: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Análise sintática

• Analisa a estrutura do program

• Gramática livre de contexto

• Yacc, Bison, Antlr

Gramáticas não-ambíguasLR(k)

LR(1)LALR(1)

SLR

LR(0)

LL(k)LL(1)

LL(0)

Page 12: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Parsers

• Compiladores comerciais normalmente utilizam um algoritmo recursivo descendente!

• GCC usava Bison… mas durante sua última refatoração o parser foi substituído por um recursivo descendente

Page 13: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Análise semântica

• Tabela de símbolos

• Verificação de tipos

int x = "blah"

int x = y

f(123)

obj.method(123)

Page 14: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Representação Intermediária• Facilita diversas tarefas como

• Otimização

• Geração de código

Representação Descrição Exemplos

cálculo lambda variável, definição de função e aplicação de função Lisp, ML

Quádruplas Corresponde à instruções de uma maquina de von Neumann C, Java

SSA (Static single-assignment)

Valores são atribuídos a uma variável apenas uma vez C, Java

Page 15: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Geração de código

• Código gerado

• Assembly

• Bytecode

• Até mesmo javascript!

Page 16: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Geração de código• LLVM • SSA (LLVM IR) • Implementa vários algoritmos de otimização • JIT • Gera código de máquina para várias plataformas

Linguagem Compilador / Intepretador

C/C++ Clang

Ruby Rubinius

Rust rustc

Julia juliac

Page 17: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Open-source

Projeto Linguagem URL

Make you a Haskell Haskell http://dev.stephendiehl.com/fun/

Rubinius Ruby http://book.rubinius.com

CoffeeScript CoffeeScript https://github.com/jashkenas/coffeescript

Page 18: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Livros• Compiler: Principles, Techniques & Tools

Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman

Page 19: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Livros• Modern Compiler Implementation in X

Andrew W. Appel

Page 20: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Livros• Compiling with Continuations

Andrew W. Appel

Page 21: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Livros• Programming Languages: Application and

Interpretation Shriram Krishnamurthi

Page 22: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Livros• Types and Programming Languages

Benjamin C. Pierce

Page 23: Compiladores - igorbonadio.com.brigorbonadio.com.br/presentations/compiladores/slides.pdf · Análise sintática • Analisa a estrutura do program • Gramática livre de contexto

Obrigado!