Análise Semântica e Representação Intermédia

Slides:



Advertisements
Apresentações semelhantes
Paradigmas de Programação
Advertisements

Parte 1: Organização de Computadores
Software Básico Silvio Fernandes Universidade Federal Rural do Semiárido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula 05:
Arquitetura de Computadores
Arquitetura e organização de computadores
Arquitetura e organização de computadores.
Seminários de Compiladores
Introdução da Disciplina
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Sistemas Embarcados Microcontroladores PIC
MIPS MULTICICLO Fluxo de Dados e Controle
Algoritmos e Programação Linguagens de Programação Teoria Aula 5 (05/05) Universidade Federal do Vale do São.
Daniel M. Aquino, Marcelo C. Perez, Thais A. B. Fernandes
Aula 10 06/10/10 (Turma 1 e 2) Profa. Sarita
Sistemas Digitais Microprocessados
Escola Secundária c/ 3º CEB da Batalha
Avaliação do desempenho
Processadores – Aula 3 Professor: André Luis Meneses Silva
Professor Fernando Luís
Processadores – Aula 3 Professor: André Luis Meneses Silva
Análise Semântica e Representação Intermédia
Prof. João Paulo de Toledo Gomes
Representação de Instruções
Conversão de um NFA para um DFA com um exemplo
Do alto-nível ao assembly
Compiladores, Aula Nº 5 João M. P. Cardoso
Aula 3©Universidade do Algarve 1 Do alto-nível ao assembly Compiladores, Aula Nº 3 João M. P. Cardoso.
Compiladores, Aula Nº 7 João M. P. Cardoso
Classes de Arquiteturas Tipos de operação Codificação das operações
Arquitetura Cleópatra Bloco de Controle (Instruções e Microinstruções)
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 02: Introdução.
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Compiladores, Aula Nº 10 João M. P. Cardoso
Organização de um computador
Arquitetura de computadores
Arquitetura de computadores
Aula 3 Vetores e Listas. Arrays (vetores) Array – sequência de elementos do mesmo tipo. Tamanho do Array – seu número de elementos (número fixo) Consequência:
Organização e Arquitetura de Computadores
Organização e Arquitetura de Computadores
Agenda Modos de Endereçamento.
Pet computação UFPE Aula de apoio aos feras: Arquitetura de Computadores.
LINGUAGEM DE PROGRAMAÇÃO I
Geração de Código Intermediário
1 Alocação Dinâmica Quando se declara arrays o tamanho deve ser fixo e definido primeiramente –Alocação estática Pode-se alocar dinamicamente o espaço.
Processadores de Linguagens
Arquiteturas RISC x CISC
Aula 1 – Profª Danielle Costa
Estruturas de Controlo Repetitivas
Back-End Compilação aula-11-back-end.pdf.
Produto Interno entre Arrays
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Arquitetura Cleópatra Bloco de Controle.
Componentes de um Sistema de Computação
Algoritmos e Programação I
Aula 4©João M. P. Cardoso 1 Anatomia de um Compilador Compiladores, Aula Nº 4 João M. P. Cardoso.
Geração de Código Fase final do compilador
Linguagem técnica de programação I Java
Algoritmos e Programação MC102
Software Básico Apresentação da Disciplina Mitsuo Takaki
O que devem fazer os Microprocessadores ?
Aula 6 1 Análise Lexical Compiladores, Aula Nº 6 João M. P. Cardoso.
Análise Semântica e Representação Intermédia
Disciplina: Sistema Operacional Professor: Luciano Ricardi Scorsin.
Instruções Condicionais e de Acesso a Memória Universidade Federal de Uberlândia Faculdade de Computação Prof. Dr. rer. nat. Daniel D. Abdala GSI013 –
A linguagem de Máquina – Instruções Básicas
LÓGICA DE PROGRAMAÇÃO Curso: Técnico em Informática Professor: Ronaldo Disciplina: Lógica de Programação.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
 Processamento de dados: requer a execução de uma série de passos, o programa (software)  Cada passo é uma instrução, ou ordem de comando, dada ao.
 Evolução constante das linguagens de programação de alto nível (LAN) desde o Fortran (primeira LAN)  Surgimento de novos paradigmas como a OO, Orientação.
Transcrição da apresentação:

Análise Semântica e Representação Intermédia Compiladores, Aula Nº 23 João M. P. Cardoso Aula 23

Conversão para a IR de nível baixo Converte fluxo de controlo estruturado em fluxo de controlo baseado em saltos (não estruturado) Saltos condicionais e incondicionais Converte modelo de memória estruturado em modelo de memória planar Endereçamento planar para variáveis Endereçamento planar para Arrays Continua independente da linguagem máquina, mas: Movimento para muito próximo da máquina; para um modelo standard da máquina (espaço de endereçamento planar, saltos) Aula 23

Representação do Programa Control Flow Graph (CFG): grafo de fluxo de controlo Nós do CFG são nós de instruções stl, sta, cbr, ldl, lda, ldp são nós de instruções +, <, ... são nós de expressões Laços no CFG representam o fluxo de controlo Forks em instruções de salto condicional Representam dois ou mais caminhos possíveis Merges quando o controlo pode alcançar um ponto por caminhos múltiplos Um nó de entrada (entry) e um nó de saída (exit) Aula 23

Exemplo: CFG while (i < N) v[i] = v[i]+x; cbr < ldl i ldp N sta entry while (i < N) v[i] = v[i]+x; cbr < Laços entre Instruções e expressões ldl i ldp N Laços de fluxo de controlo sta exit + ldp v ldl i lda ldp x ldp v ldl i Aula 23

Exemplo: CFG if (x < y) { a = 0; } else { a = 1; } entry cbr < ldl x ldl y stl a 0 stl a 1 exit Aula 23

Modelo de Memória da Máquina Alvo Uma memória planar Composta por palavras Endereçável ao byte Nós modelam instruções Load e Store ld addr,offset – resultado é o conteúdo de memória no local: addr+offset st addr, offset, valor – escreve valor no local: addr+offset Substituir nós: lda e ldl por nós ld Substituir nós: sta e stl por nós st locais (alguns parâmetros) Stack Heap Arrays Código Aula 23

Exemplo: ld address offset x*x+y*y + * * ldl ldl ldl ldl MEM[address+offset] No caso de offset=4 relativo ao sp (MEM[$sp+offset]): x*x+y*y ld 4 sp + + * * * * ldl ldl ldl ldl ld 4 ld 4 ld 8 ld 8 sp sp sp sp Descritor local para y (8) Descritor local para x (4) Aula 23

Parâmetros Muitas máquinas têm convenções nas chamadas Primeiro parâmetro no registo 5, segundo parâmetro no registo 6, ... ver $a0, $a1, … do MIPS As convenções variam com a máquina Vamos assumir que cada parâmetro é uma palavra Vamos endereçar os parâmetros pelo número ldp <número do parâmetro> Aula 23

Acesso a elementos de um Array Assumir que a variável aponta para o primeiro elemento do array Elementos do array em posições contíguas Qual é o endereço: v[5]? v é um array de inteiros: assumir inteiros de 4 bytes (endereço em v) + (5*4) Determinar endereço Base do Array + (index * element size) Aula 23

Exemplo: v[5]+x + lda ldp 5 ldp Conversão de nós lda para nós ld Determinar endereço Base + (index * element size) ld do endereço Offset de ld é 0 + + ld 0 ldp 1 lda ldp + 5 ldp 2 ldp * Descritor de parâmetro de x (1) 5 4 Descritor de parâmetro v (2) Aula 23

Variáveis Locais Assumir que são alocadas na pilha de chamadas Endereçamento realizado usando offsets a partir do apontador da pilha Relembrar: pilha cresce para baixo e por isso os offsets são positivos Símbolo especial sp contém apontador para a pilha Aula 23

Acções na invocação de funções (relembrar) Invocadora Definir parâmetros de acordo com a convenção de invocações Definir endereço de retorno utilizando a convenção de invocações Saltar para a função invocada Invocada Alocar stack frame = deslocar para baixo o apontador da pilha (sp) computar Definir o valor de retorno de acordo com a convenção de invocações Libertar stack frame = deslocar para cima o apontador da pilha (sp) Retornar para a função invocadora Aula 23

Gestão da Pilha (relembrar) Determinar tamanho da stack frame Alocar quando se entra na função Libertar imediatamente antes do retorno da função Guarda todas as variáveis locais Mais espaço para parâmetros (quando estes ultrapassam em número o número de registos convencionados como argumentos de funções) Assume que todas as variáveis locais e os parâmetros têm o comprimento de uma palavra Determinar offsets das variáveis locais e dos parâmetros Computar offsets das variáveis locais e dos parâmetros Guardados nas tabelas de símbolos de locais e de parâmetros Continua a usar nós ldp para aceder aos parâmetros Aula 23

Eliminação de nós ldl Uso de offsets na tabela de símbolos locais e sp Substituir nós ldl por nós ld Exemplo de offsets para locais e parâmetros Outras TS (variáveis globais, por exemplo) TS de parâmetros N Descritor do parâmetro N (2) v Descritor do parâmetro v (1) Descritor da função add TS de variáveis locais x Descritor do parâmetro x (0) i descritor da variável local i (0) Código para a função add Aula 23

Exemplo: v[i]+x + lda ldp ldl ldp + ld 0 ldp 0 + Descritor de parâmetro para x (0) ldp 1 * Descritor de parâmetro para v (1) 4 ld 0 Descritor de local para i (0) sp Aula 23

Nós Enter e Exit para a função add void add(int x, int[] v, int N) { int i; ... } Qual o espaço na pilha para a função add? 4 bytes (espaço para i) Assumindo palavras de 4 bytes Assumindo parâmetros da função em registos usados para passar argumentos Nós enter e exit são anotados com o valor do espaço na pilha necessário para a função .... exit 4 Aula 23

Exemplo enter 4 st 0 sp cbr st 0 < + ld 0 + ldp 2 ld 0 ldp 0 sp cbr st 0 < + ld 0 + ldp 2 ld 0 ldp 0 sp ldp 1 * + 4 st 0 sp ld 0 + 1 ld 0 * ldp 1 sp 4 ld 0 exit 4 sp Aula 23

Sumário da IR de nível baixo Acessos a arrays traduzidos para nós ld ou st Endereço é o endereço base do array (apontador) + (index * element size) Acessos locais traduzidos para nós ld ou st Endereço em sp, offset é o offset local Acesso a parâmetros traduzidos para: Instruções lpd – especificar número de parâmetro Nós Enter e Exit de uma função identificam tamanho da pilha utilizado Aula 23

Sumário Tradução de árvores sintácticas para IR de nível alto Preserva o fluxo de controlo estruturado Representação eficiente para análise de nível alto e optimizações Tradução de IR de nível alto para IR de nível baixo Espaço de endereçamento planar Remoção da estrutura do fluxo de controlo, substituição por saltos condicionais Movimento em direcção à máquina alvo Aula 23