Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.