Apostila antiga - The Cyan Programming Language
Apostila antiga - The Cyan Programming Language
Apostila antiga - The Cyan Programming Language
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