A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Aula prática – geração de código (.NET) Teoria e Implementação de Linguagens Computacionais (Compiladores) - IF688 – 2008.1 Allan Jefferson – ajss at cin.ufpe.br.

Apresentações semelhantes


Apresentação em tema: "Aula prática – geração de código (.NET) Teoria e Implementação de Linguagens Computacionais (Compiladores) - IF688 – 2008.1 Allan Jefferson – ajss at cin.ufpe.br."— Transcrição da apresentação:

1 Aula prática – geração de código (.NET) Teoria e Implementação de Linguagens Computacionais (Compiladores) - IF688 – Allan Jefferson – ajss at cin.ufpe.br André Schaffer – arsl at cin.ufpe.br

2 Roteiro Introdução Principais problemas Templates Máquina virtual.NET Ferramentas Exemplo

3 Introdução (1/3) abstração implementação Código fonte Tokens e lexemas Árvore sintática abstrata Código Máquina AST decorada Análise Léxica Análise Sintática Análise Semântica Geração de Código AST geradaAST decorada

4 Introdução (2/3) Fase essencial do back-end de um compilador que objetiva preencher o gap semântico entre a linguagem fonte e a máquina de destino Chamada de fase de síntese

5 Introdução (3/3) Difícil de generalizar (dependente da arquitetura) Variedade de máquinas-destino Conjunto de registradores (tipo e quantidade) Conjunto de instruções Modo de endereçamento Sistema operacional (nativos) Dificilmente aproveitada para mais de uma plataforma Máquina real ou virtual

6 Principais problemas Seleção de código Uso de templates Estratégia de alocação Variável global = armazenamento estático Variável local = pilha Alocação de registradores Avaliar expressões (resultados imediatos)

7 Templates Traduzir as diversas frases do código fonte execute[v := e] evaluate e assign v Estrutura inerentemente recursiva Tem como entrada uma estrutura de objetos (AST decorada) Padrão Visitor

8 Máquina virtual.NET (1/2) Common Language Runtime (CLR) Implementação da Microsoft® da CLI (Common Language Infrastructure) Define um ambiente de execução Roda um tipo de bytecode CIL – Common Intermediate Language Também conhecido por MSIL – Microsoft Intermediate Language Especificação em: www/~ajss/Compiladores/Especificacao.NET_CIL.pdf

9 Máquina virtual.NET (2/2)

10 Ferramentas Especificação Criação dos templates Assembler ILAsm.exe Intermediate Language Assembler Microsoft®.NET Framework Tradução para código da plataforma Disassembler ILDAsm.exe CIL a partir do código da plataforma

11 EXEMPLO

12 Exemplo - plplus 1. program exemplo; 2. function fatorialIterativo(n:Integer):Integer; 3. var retorno:Integer; 4. begin 5. retorno := 1; 6. while(n <> 0) do 7. begin 8. retorno := retorno * n; 9. n := n - 1; 10. end; 11. fatorialIterativo := retorno; 12. end; 13. begin 14. printInt(fatorialIterativo(5)); 15. end.

13 Exemplo - ilasm.exe Compilar o código plplus O código intermediário (exemplo.il) Prompt do framework.net cd diretório de exemplo.il Rodar: ilasm /output:exemplo.exe exemplo.il

14 Exemplo - ildasm.exe Ir até a pasta Bin do Framework.net: C:\Program Files\Microsoft Visual Studio... Rodar o Ildasm.exe Criar um atalho Abrir o executável que se deseja disassemblar

15 Dúvidas

16 Referências MEIJER, Erik. GOUGH, John. Technical Overview of the Common Language Runtime: Common Language Runtime Overview: Common Language Specification: MSIL Assembler (Ilasm.exe): MSIL Disassembler (Ildasm.exe): Ildasm.exe Tutorial: Teoria e implementação de linguagens computacionais: WATT, David A. BROWN, Deryck F. Programming language processors in Java: compilers and interpreters. Pretince Hall, ISBN


Carregar ppt "Aula prática – geração de código (.NET) Teoria e Implementação de Linguagens Computacionais (Compiladores) - IF688 – 2008.1 Allan Jefferson – ajss at cin.ufpe.br."

Apresentações semelhantes


Anúncios Google