Aula prática – geração de código (.NET)

Slides:



Advertisements
Apresentações semelhantes
gerador de código intermediário
Advertisements

Introdução à Ciência da Computação Linguagens de Programação.
Curso: Banco de Dados I Análise de Sistemas PUC Campinas
Linguagem de Montagem Visão geral.
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Prof. Heloise Manica Paris Teixeira
Teoria dos Compiladores
JavaCC e JJTree Geração de compiladores implementados em Java
Linguagens de programação
Ferramentas Programação
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Linguagens Formais e Tradutores
Aula 4 Nomes, Vinculações, Tipos e Escopos
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Prof. Msc. Raul Paradeda Aula 2 Introdução
Introdução a Programação Orientada a Objetos
Conhecendo o Visual Studio.NET
Construção de Compiladores para MSIL usando Microsoft Phoenix
JAVA: Conceitos Iniciais
Sejam bem vindos! Arquitetura de Sistemas Operacionais.
PROGRAMAÇÃO I UNIDADE 1.
Análise léxica e sintática
Análise léxica e sintática
Aula prática - análise contextual
MANUEL M. SERRANO ARIMUYA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO
Curso de ISI (Implantação de Sistemas de Informação)
Teoria e Implementação de Linguagens Computacionais
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 27/03/2008 JaTS Java Transformation System.
O Processo de Compilação
Teoria e Implementação de Linguagens Computacionais – IF688
Detalhes sobre o curso
Semântica de Linguagens de Programação
Análises léxica e sintática
SableCC José Francisco Pereira Equipe de Monitores
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Análise léxica e sintática
XIV Jornada de Cursos .NET com C# Antônio Júnior Bruno Inojosa.
Organização e Arquitetura de Computadores
Geração de Código aula-12-geração-de-código.pdf.
Semântica de Ações Especificação Completa de Specimen, Actress, Projeto RAT, Considerações Finais.
Capítulo VIII Ambientes de Execução
Análises léxica e sintática
Analise Semântica aula-10-analise-semântica.pdf.
Analisador Léxico Prof. Alexandre Monteiro
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Projeto de Linguagens de Programação
Processadores de Linguagens
Módulo I Capítulo 1: Introdução ao curso
Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.
Back-End Compilação aula-11-back-end.pdf.
AST no ANTLR Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza
Algoritmos e Programação I
Aula de SableCC Teoria e Implementação de Linguagens Computacionais (Compiladores) - IF688 – Artur Ribeiro de Aquino – ara Allan Jefferson – ajss.
Semântica de Linguagens de Programação
Compiladores – IF688 Professor: André Santos
.NET Por: Pablo Diego vulgo “El Tigre”. O que é.NET? É uma plataforma de desenvolvimento. Com o.NET é possível de desenvolver vários tipos de aplicação.
Asp.Net By Microsoft for web Application. Uma simples abordagem sobre a plataforma.
Semântica de Ações Conceitos Básicos de Semântica de Ações, Especificações em Semântica de Ações, Primeiros Exemplos de Ações, WebAni.
SISTEMAS DE INFORMAÇÃO
Geração de Código Difícil de generalizar, devido à variedade de características das máquinas-destino: –Conjunto de registradores (se houver) –Pilha –Instruções.
 é uma iniciativa da Microsoft, que visa uma plataforma única para desenvolvimento e execução de sistemas e aplicações.  Todo e qualquer código gerado.
Influencias sobre o Projeto da Linguagem
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
LINGUAGEM DE PROGRAMAÇÃO I
Análise Contextual Mauro Araújo Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Equipe de Monitores.
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 José Francisco Pereira Jobson Ronan
Transcrição da apresentação:

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 André Schaffer – arsl at cin.ufpe.br

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

Á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

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 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 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)

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 (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)

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

Exemplo

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.

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

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”

Dúvidas

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/ddk909ch(VS.71).aspx Common Language Specification: http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx MSIL Assembler (Ilasm.exe): http://msdn.microsoft.com/en-us/library/496e4ekx(VS.80).aspx MSIL Disassembler (Ildasm.exe): http://msdn.microsoft.com/en-us/library/f7dy01k1(VS.80).aspx Ildasm.exe Tutorial: http://msdn.microsoft.com/en-us/library/aa309387(VS.71).aspx Teoria e implementação de linguagens computacionais: www.cin.ufpe.br/~if688 WATT, David A. BROWN, Deryck F. Programming language processors in Java: compilers and interpreters. Pretince Hall, 2000. ISBN 0130257869.