19.04.2013 Views

Apostila antiga - The Cyan Programming Language

Apostila antiga - The Cyan Programming Language

Apostila antiga - The Cyan Programming Language

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Contents<br />

1 Introdução 3<br />

1.1 Compiladores e Ligadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

1.2 Sistema de Tempo de Execução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.3 Interpretadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

1.4 Aplicações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

1.5 As Fases de Um Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2 A Análise Sintática 13<br />

2.1 Gramáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.2 Ambigüidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.3 Associatividade e Precedência de Operadores . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.4 Modificando uma Gramática para Análise . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

2.5 Análise Sintática Descendente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

2.6 Análise Sintática Descendente Recursiva . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

3 Análise Sintática Descendente Não Recursiva 24<br />

3.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

3.2 A Construção da Tabela M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

3.3 Gramáticas LL(1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

4 Geração de Código 33<br />

4.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

4.2 Uma Linguagem Assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

4.3 Geração de Código para S2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

4.4 Geração de Código para Vetores e Comando case/switch . . . . . . . . . . . . . . . . 41<br />

5 Otimização de Código 44<br />

5.1 Blocos Básicos e Grafos de Fluxo de Execução . . . . . . . . . . . . . . . . . . . . . . 44<br />

5.2 Otimizações em Pequena Escala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

5.3 Otimizações Básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

5.4 Otimizações de Laços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />

5.5 Otimizações com Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

5.6 Otimizações de Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

5.7 Dificuldades com Otimização de Código . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

A A Linguagem S2 74<br />

A.1 Comentários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

A.2 Tipos e Literais Básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

1

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!