Aula prtica gerao de cdigo NET Teoria e

  • Slides: 16
Download presentation
Aula prática – geração de código (. NET) Teoria e Implementação de Linguagens Computacionais

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

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

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

Introdução (1/3) gerada Análise AST Léxica. AST decorada Tokens e lexemas Análise Sintática Árvore

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

Introdução (2/3) �Fase essencial do back-end de um compilador que objetiva preencher o gap

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

Introdução (3/3) �Difícil de generalizar (dependente da arquitetura) ◦ Variedade de máquinas-destino �Conjunto de

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

Principais problemas �Seleção de código ◦ Uso de templates �Estratégia de alocação ◦ Variável

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)

Templates �Traduzir as diversas frases do código fonte ◦ execute[v : = e] �evaluate

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

Máquina virtual. NET (1/2) �Common Language Runtime (CLR) ◦ Implementação da Microsoft® da CLI

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

Máquina virtual. NET (2/2)

Máquina virtual. NET (2/2)

Ferramentas �Especificação ◦ Criação dos templates �Assembler ◦ ILAsm. exe �Intermediate Language Assembler �Microsoft®.

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

EXEMPLO

EXEMPLO

Exemplo - plplus 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

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

Exemplo - ilasm. exe �Compilar o código plplus ◦ O código intermediário (exemplo. il)

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. il

Exemplo - ildasm. exe �Ir até a pasta Bin do Framework. net: ◦ C:

Exemplo - ildasm. exe �Ir até a pasta Bin do Framework. net: ◦ C: Program FilesMicrosoft Visual Studio. . . �Rodar o Ildasm. exe ◦ Criar um atalho �Abrir o executável que se deseja “disassemblar”

Dúvidas

Dúvidas

Referências MEIJER, Erik. GOUGH, John. Technical Overview of the Common Language Runtime: http: //research.

Referências MEIJER, Erik. GOUGH, John. Technical Overview of the Common Language Runtime: http: //research. microsoft. com/~emeijer/Papers/CLR. pdf � Common Language Runtime Overview: � http: //msdn. microsoft. com/en-us/library/ddk 909 ch(VS. 71). aspx � Common Language Specification: http: //msdn. microsoft. com/en-us/library/12 a 7 a 7 h 3. aspx � MSIL Assembler (Ilasm. exe): http: //msdn. microsoft. com/en-us/library/496 e 4 ekx(VS. 80). aspx � MSIL Disassembler (Ildasm. exe): http: //msdn. microsoft. com/en-us/library/f 7 dy 01 k 1(VS. 80). aspx � Ildasm. exe Tutorial: http: //msdn. microsoft. com/en-us/library/aa 309387(VS. 71). aspx � Teoria e implementação de linguagens computacionais: www. cin. ufpe. br/~if 688 � WATT, David A. BROWN, Deryck F. Programming language processors in Java: compilers and interpreters. Pretince Hall, 2000. ISBN 0130257869.