Compiladores. Geração de Código Intermediário



Documentos relacionados
UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE

Síntese. Compiladores. Geração de código intermediário. Linguagens Intermediárias. Modelo Clássico. Linguagens Intermediárias. Código intermediário

Geração de código intermediário. Novembro 2006

Organização de Computadores 1

TÉCNICAS DE PROGRAMAÇÃO

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

Estrutura de Dados Básica

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 1, 2 e 3) Clodis Boscarioli

Faculdade de Computação

Nome:...N o...turma:... Data: / / ESTUDO DOS GASES E TERMODINÂMICA

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Linguagens de Programação Aula 10

Conjunto de instruções e modos de. aula 4. Profa. Débora Matos

ESTRUTURA DE DADOS PILHA

UNIDADE 6 - PROGRAMAÇÃO MODULAR

Potenciação no Conjunto dos Números Inteiros - Z

Aula 14: Instruções e Seus Tipos

Programação científica C++

Instalações Máquinas Equipamentos Pessoal de produção

AJUDA - FORMULÁRIO DE PROPOSTA ON-LINE - AVG

Circuitos Seqüenciais

Recursividade. Aula 9

Truques e Dicas. = 7 30 Para multiplicar fracções basta multiplicar os numeradores e os denominadores: 2 30 = 12 5

Tarefa Orientada 18 Procedimentos armazenados

Engenharia de Software II

Paralelismo a Nível de Instrução

LISTA 10. = ax + b onde f é uma função decrescente. Podemos afirmar que o valor exato de g(a) é igual a: a) 1 b) 2 c) 3 d) 4

MODELAGEM E SIMULAÇÃO

GBD PROF. ANDREZA S. AREÃO

CRIAÇÃO DE MAPAS TEMÁTICOS COM ALOV MAP

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

Comandos de repetição while

Arquitetura do conjunto de instruções (ISA); características de instruções de máquina; tipos de operandos

ALGORITMOS E FLUXOGRAMAS

AULA 16 - Sistema de Arquivos

Estrutura de Dados Básica

Resolução de Problemas

Estruturas de Repetição

Filas: conceitos e implementações

Arquitetura de processadores: RISC e CISC

Orientação a Objetos. Conceitos Iniciais Introdução a Linguagem Java. Gil Eduardo de Andrade

Invenções Implementadas por Computador (IIC) Patentes

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Introdução a Computação

Programação Funcional. Aula 5. Funções Recursivas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Introdução às Máquinas CNC s. É proibido reproduzir total ou parcialmente esta publicação sem prévia autorização do

INTRODUÇÃO À LINGUAGEM C++

Linguagem de Montagem 2. Operações e Operandos

COMO ENSINEI MATEMÁTICA

Usando um Simulador da Máquina de Turing Claudio Kirner 2010

Serviço de Clientes. Gestix Enterprise. Gestix.com

Introdução à Arquitetura de Computadores

Capítulo 5: Aplicações da Derivada

OS COMPUTADORES E A RESOLUÇÃO DE PROBLEMAS

Programação Orientada a Objetos C++

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Linguagem de Programação I

2. O gerador de código estende DepthFirstAdapter implementando a interpretação que gerará código Jasmin a partir de Smallpascal.

Conceitos básicos da linguagem C

CENTRO DE CIÊNCIAS TECNOLÓGICAS CCT CURSO DE TECNOLOGIA EM SISTEMAS DE INFORMAÇÃO

Computador E/S, Memória, Barramento do sistema e CPU Onde a CPU Registradores, ULA, Interconexão interna da CPU e Unidade de controle.

Compiladores. ICC1 e ICC2 Arquivos, ponteiros, alocação dinamica, modularização, recursividade, matrizes LM MOV, MUL, DIV, CMP,...

Computação II Orientação a Objetos

Universidade da Beira Interior Cursos: Engenharia Informática, Ensino da Informática, Matemática Aplicada e Matemática /Informática

Representação de Algoritmos - Linguagens de Programação

Especificação Operacional.

INSTITUTO TECNOLÓGICO

Introdução sobre Scilab

Computação Quântica. Rafael T. Possignolo

Arquitetura de Computadores. Linguagem de Máquina

Java. Marcio de Carvalho Victorino

Orientação a Objetos

ALGORITMOS MEMÓRIA, VARIÁVEIS E CONSTANTES, OPERADORES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Análise semântica. Análise Semântica. Estrutura de um compilador. Anotação da árvore sintática. Tipos de comunicação de atributos?

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

ALTO DESEMPENHO UTILIZANDO FRAMEWORK HIBERNATE E PADRÃO JAVA PERSISTENCE API

Programação: Estruturas de seleção

Testando e Comparando Valores

Classes Abstratas e Interfaces

Convertendo Algoritmos para a Linguagem C

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

1. Os métodos Não-Paramétricos podem ser aplicados a uma ampla diversidade de situações, porque não exigem populações distribuídas normalmente.

A Classificação da Pesquisa

Resumo da última aula. Compiladores. Tipos. Regras semânticas. Expressões de tipos. Análise Semântica e checagem de tipos.

03/04/2016 AULAS 11 E 12 SETOR A

Unidade: Unidade Lógica e Aritmética e Registradores. Unidade I:

Exercícios resolvidos sobre Função de probabilidade e densidade de probabilidade

CRONÔMETRO MICROPROCESSADO

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

Linguagem de Programação C

Java Como Programar, 8/E

Como enviar e receber correio eletrónico utilizando o Gmail

Transcrição:

Compiladores Geração de Código Intermediário Cristiano Lehrer, M.S.

Atividades do Compilador Arquivo de origem Arquivo de destino Análise Otimização Geração de Código Intermediário Geração de Código Final Síntese Gramátias Estruturas Internas Compilador

Introdução A geração de ódigo intermediário é a transformação da árvore de derivação em um segmento de ódigo. Esse ódigo pode, eventualmente, ser o ódigo ojeto final, mas, na maioria das vezes, onstitui-se num ódigo intermediário. A grande diferença entre o ódigo intermediário e o ódigo ojeto final é que o intermediário não espeifia detalhes da máquina alvo, tais omo quais registradores serão usados, quais endereços de memória serão refereniados, entre outros detalhes físios da máquina alvo.

Vantagens e Desvantagens Vantagens da geração de ódigo intermediário: Possiilita a otimização do ódigo intermediário, de modo a oterse o ódigo ojeto final mais efiiente. Simplifia a implementação do ompilador, resolvendo, gradativamente, as difiuldades da passagem de ódigo fonte para ojeto (alto nível para aixo nível), já que o ódigo fonte pode ser visto omo um texto ondensado que explode em inúmeras instruções elementares de aixo nível. Possiilita a tradução do ódigo intermediário para diversas máquinas. Desvantagens da geração de ódigo intermediário: O ompilador requer um passo a mais, pois a tradução direta do ódigo fonte para ojeto leva a uma ompilação mais rápida.

Linguagens Intermediárias Os vários tipos de ódigo intermediário fazem parte de uma das seguintes ategorias: Representações gráfias: Árvore e grafo de sintaxe. Notação pós-fixada ou pré-fixada. Código de três endereços: Quádruplas e triplas.

Árvore e Grafo de Sintaxe (1/4) Uma árvore de sintaxe é uma forma ondensada de árvore de derivação na qual somente os operandos da linguagem apareem omo folhas: Os operandos onstituem nós interiores da árvore. Outra simplifiação da árvore de sintaxe é que adeias de produções simples (por exemplo, A B, B C) são eliminadas. Um grafo de sintaxe, além de inluir as simplifiações da árvore de sintaxe, faz a fatoração das suexpressões omuns, eliminando-as.

Árvore e Grafo de Sintaxe (2/4) G = ({S, A, B, C}, {a,,, +, *, =}, P, S) P = { < S > < C > = < A > < A > < A > + < B > < B > < B > < B > * < C > < C > < C > a } < S > < C > = < A > Árvore de derivação a = * + * a < A > + < B > < B > < B > * < C > < B > * < C > < C > < C >

Árvore e Grafo de Sintaxe (3/4) Árvore de derivação a = * + * < S > Árvore de sintaxe a = * + * = < C > = < A > a + a < A > + < B > * * < B > < B > * < C > < B > * < C > < C > < C >

Árvore e Grafo de Sintaxe (4/4) Árvore de sintaxe a = * + * Grafo de sintaxe a = * + * = = a + a + * * *

Notações Pós-fixada e Pré-fixada (1/4) Se E 1 e E 2 são expressões pós-fixadas e q é um operador inário, então, E 1 E 2 q é a representação pós-fixada para a expressão E 1 q E 2. Se E 1 e E 2 são expressões pré-fixadas e q é um operador inário, então, q E 1 E 2 é a representação pré-fixada para a expressão E 1 q E 2. Notações pós e pré-fixadas podem ser generalizadas para operadores n-ários.

Notações Pós-fixada e Pré-fixada (2/4) Notação Infixada Pós-fixada Pré-fixada (a + ) * a+* *+a a * ( + ) a+* *a+ a + * a*+ +a* (a + ) * Pós ordem Pré ordem * * 5 * 1 + + 3 4 + 2 5 a a 1 2 a 3 4

Notações Pós-fixada e Pré-fixada (3/4) Para a avaliação de expressões pós-fixadas, pode-se utilizar uma pilha e um proesso que age do seguinte modo: Lê a expressão da esquerda para a direita, empilhando ada operando até enontrar um operador. Enontrando um operador n-ário, aplia o operador aos n operandos do topo da pilha. Proessamento semelhante pode ser apliado para a avaliação de expressões pré-fixadas: Nesse aso, a expressão é lida da direita para a esquerda.

Notações Pós-fixada e Pré-fixada (4/4) Exeução de expressões pós-fixadas a+* +* +* * * a a x x y Exeução de expressões pré-fixadas *+a *+a *+a *+ * a x y

Código de Três Endereços (1/4) No ódigo intermediário de três endereços, ada instrução faz referênia, no máximo, a três variáveis (endereços de memória). As instruções dessa linguagem são as seguintes: A := B op C A := op B A := B goto L if A oprel B goto L Onde A, B e C representam endereços de variáveis. op representa operador (inário ou unário). oprel representa operador relaional. L representa o rótulo de uma instrução intermediária.

Código de Três Endereços (2/4) Exemplo A := X + Y * Z T1 := Y * Z T2 := X + T1 A := T2 onde T1 e T2 são variáveis temporárias. Um ódigo de três endereços pode ser implementado através de quádruplas ou triplas.

Código de Três Endereços (3/4) As quádruplas são onstituídas de quatro ampos: Um operador, dois operandos e um resultado. Exemplo A := B * (-C + D) oper arg1 arg2 result (0) -u C T1 (1) + T1 D T2 (2) * B T2 T3 (3) := T3 A

Código de Três Endereços (4/4) As triplas são formadas por: Um operador e dois operandos. Essa representação utiliza ponteiros para a própria estrutura, evitando a nomeação explíita de temporários. Exemplo A := B * (-C + D) oper arg1 arg2 (0) -u C (1) + (0) D (2) * B (1) (3) := A (2)