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)

Apresentações semelhantes


Apresentação em tema: "Aula prática – geração de código (.NET)"— 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 Árvore sintática abstrata
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 decorada AST gerada

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 Estratégia de alocação
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 Assembler Disassembler Criação dos templates
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 program exemplo;
function fatorialIterativo(n:Integer):Integer; var retorno:Integer; begin retorno := 1; while(n <> 0) do retorno := retorno * n; n := n - 1; end; fatorialIterativo := retorno; printInt(fatorialIterativo(5)); end.

13 Exemplo - ilasm.exe Compilar o código plplus Prompt do framework .net
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)"

Apresentações semelhantes


Anúncios Google