UPE Caruaru Sistemas de Informao Disciplina Compiladores Prof

  • Slides: 36
Download presentation
UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof. : Paulemir G. Campos

UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof. : Paulemir G. Campos Conceitos Básicos de Compilação (Parte 2) 12/30/2021 Comp - Prof. Paulemir Campos 1

Roteiro da Aula n As Fases de um Compilador n Referências 12/30/2021 Comp -

Roteiro da Aula n As Fases de um Compilador n Referências 12/30/2021 Comp - Prof. Paulemir Campos 2

As Fases de um Compilador 12/30/2021 Comp - Prof. Paulemir Campos 3

As Fases de um Compilador 12/30/2021 Comp - Prof. Paulemir Campos 3

Introdução n n Conceitualmente, um compilador opera em fases; Cada uma dessas fases transforma

Introdução n n Conceitualmente, um compilador opera em fases; Cada uma dessas fases transforma o programa fonte de uma representação para outra. 12/30/2021 Comp - Prof. Paulemir Campos 4

As Fases de Análise Registra os identificadores e respectivas informações Trata os erros encontrados

As Fases de Análise Registra os identificadores e respectivas informações Trata os erros encontrados em cada fase do compilador As Fases de Síntese Fases de um Compilador 12/30/2021 Comp - Prof. Paulemir Campos 5

Gerenciamento da Tabela de Símbolos n Uma função essencial de um compilador é registrar:

Gerenciamento da Tabela de Símbolos n Uma função essencial de um compilador é registrar: n n os identificadores usados no programa fonte; e, a coleção de informações dos atributos de cada identificador, como tipo, escopo, e no caso de nomes de procedimentos, dados como número e tipos de argumentos e forma de passagem de parâmetros. 12/30/2021 Comp - Prof. Paulemir Campos 6

Gerenciamento da Tabela de Símbolos n n Uma tabela de símbolos é uma estrutura

Gerenciamento da Tabela de Símbolos n n Uma tabela de símbolos é uma estrutura de dados contendo um registro para cada identificador com campos para os respectivos atributos. Essa estrutura de dados permite que seja encontrado o registro de cada identificador rapidamente, bem como, atualizar seus dados. 12/30/2021 Comp - Prof. Paulemir Campos 7

Gerenciamento da Tabela de Símbolos n n Quando um identificador é detectado no programa

Gerenciamento da Tabela de Símbolos n n Quando um identificador é detectado no programa fonte pelo analisador léxico, o identificador é incluído na tabela de símbolos. Por enquanto, apenas o nome do identificador é registrado na tabela de símbolos. 12/30/2021 Comp - Prof. Paulemir Campos 8

Gerenciamento da Tabela de Símbolos n Exemplo: Um declaração em Pascal como var posicao,

Gerenciamento da Tabela de Símbolos n Exemplo: Um declaração em Pascal como var posicao, inicial, taxa: real; o tipo “real” não é reconhecido pelo analisador léxico. Tabela de Símbolos 12/30/2021 1 posicao . . . 2 inicial . . . 3 taxa . . . 4 . . . Comp - Prof. Paulemir Campos 9

Gerenciamento da Tabela de Símbolos n As fases seguintes se encarregarão de incluir as

Gerenciamento da Tabela de Símbolos n As fases seguintes se encarregarão de incluir as outras informações sobre os identificadores na tabela de símbolos. 12/30/2021 Comp - Prof. Paulemir Campos 10

Manipulador de Erros n n Cada fase de compilação pode conter erros. Porém, após

Manipulador de Erros n n Cada fase de compilação pode conter erros. Porém, após detectar um erro, a respectiva fase deve tratá-lo de alguma forma, de modo que a compilação prossiga, permitindo que mais erros no programa fonte possam ser encontrados. 12/30/2021 Comp - Prof. Paulemir Campos 11

Manipulador de Erros n n Um compilador que pára quando encontra o primeiro erro

Manipulador de Erros n n Um compilador que pára quando encontra o primeiro erro nem é útil e nem pode ser assim. As fases de análise sintática e semântica geralmente manipulam uma grande parcela dos erros detectados pelo compilador. 12/30/2021 Comp - Prof. Paulemir Campos 12

Manipulador de Erros n n A fase de análise léxica pode detectar erros quando

Manipulador de Erros n n A fase de análise léxica pode detectar erros quando caracteres restantes na entrada não forma nenhum símbolo (token) da linguagem. Erros quando o símbolo (token) viola as regras sintáticas da linguagem são determinados na fase de análise sintática. 12/30/2021 Comp - Prof. Paulemir Campos 13

Manipulador de Erros n Já na fase de análise semântica o compilador tenta detectar

Manipulador de Erros n Já na fase de análise semântica o compilador tenta detectar construções sintaticamente corretas, porém, sem passar a idéia de uma operação. n Ex. : Uma tentativa de adição entre dois identificadores, sendo que um é nome de um array e outro nome de um procedimento. 12/30/2021 Comp - Prof. Paulemir Campos 14

As Fases de Análise n n Com o progresso da tradução, a representação interna

As Fases de Análise n n Com o progresso da tradução, a representação interna do programa fonte pelo compilador modifica-se. Por exemplo, será ilustrado as transformações sofridas pela declaração “posicao : = inicial + taxa * 60” ao longo do processo de compilação. 12/30/2021 Comp - Prof. Paulemir Campos 15

12/30/2021 Comp - Prof. Paulemir Campos 16

12/30/2021 Comp - Prof. Paulemir Campos 16

As Fases de Análise n O analisador léxico lê os caracteres do programa fonte

As Fases de Análise n O analisador léxico lê os caracteres do programa fonte e agrupa-os numa seqüência de símbolos (tokens), como identificadores, palavras reservadas (if, while, etc), caracteres de pontuação, operadores multi-caracteres como “: =“, etc. 12/30/2021 Comp - Prof. Paulemir Campos 17

As Fases de Análise n Certos símbolos serão referenciados por um “valor léxico”. n

As Fases de Análise n Certos símbolos serão referenciados por um “valor léxico”. n Ex. : Quando um identificador como taxa é encontrado, o analisador léxico além de gerar um rótulo ou símbolo, como id e código de identificação, também inclui o identificador “taxa” na tabela de símbolos, caso já não tenha sido inserido. 12/30/2021 Comp - Prof. Paulemir Campos 18

As Fases de Análise n Foram utilizados id 1, id 2 e id 3

As Fases de Análise n Foram utilizados id 1, id 2 e id 3 para posicao, inicial e taxa, respectivamente, para enfatizar que a representação interna de um identificador é diferente da seqüência de caracteres que formam o identificador. 12/30/2021 Comp - Prof. Paulemir Campos 19

As Fases de Análise Estrutura de dados típica de uma árvore de análise sintática

As Fases de Análise Estrutura de dados típica de uma árvore de análise sintática 12/30/2021 Comp - Prof. Paulemir Campos 20

Geração de Código Intermediário n n Após as análises sintática e semântica, alguns compiladores

Geração de Código Intermediário n n Após as análises sintática e semântica, alguns compiladores geram uma representação intermediária explícita do programa fonte. Pode-se imaginar da representação intermediária como um programa para uma máquina abstrata. 12/30/2021 Comp - Prof. Paulemir Campos 21

Geração de Código Intermediário n Essa representação intermediária pode ter duas propriedades importantes: n

Geração de Código Intermediário n Essa representação intermediária pode ter duas propriedades importantes: n n ser fácil de produzir; e, fácil de traduzir para o programa alvo. 12/30/2021 Comp - Prof. Paulemir Campos 22

Geração de Código Intermediário n n A representação intermediária pode ter uma variedade de

Geração de Código Intermediário n n A representação intermediária pode ter uma variedade de formas. Neste caso, optou-se por uma forma intermediária chamada “código de três endereços”, consistindo de uma seqüência de instruções, cada uma com no máximo três operandos. 12/30/2021 Comp - Prof. Paulemir Campos 23

Geração de Código Intermediário n Semelhante a linguagem assembly para uma máquina em que

Geração de Código Intermediário n Semelhante a linguagem assembly para uma máquina em que toda posição de memória pode atuar como um registrador. 12/30/2021 Comp - Prof. Paulemir Campos 24

Geração de Código Intermediário n Ex. : “Código de três endereços” para o código

Geração de Código Intermediário n Ex. : “Código de três endereços” para o código fonte posicao : = inicial + taxa * 60 temp 1 : = int. To. Real(60) temp 2 : = id 3 * temp 1 temp 3 : = id 2 + temp 2 id 1 : = temp 3 12/30/2021 Comp - Prof. Paulemir Campos 25

Geração de Código Intermediário n Esta forma intermediária tem várias propriedades: n Cada instrução

Geração de Código Intermediário n Esta forma intermediária tem várias propriedades: n Cada instrução tem no máximo um operador na atribuição. Assim, o compilador quando gerar estas instruções deve decidir a ordem em que as operações serão feitas ou avaliadas; 12/30/2021 Comp - Prof. Paulemir Campos 26

Geração de Código Intermediário n Esta forma intermediária tem várias propriedades (Cont. ): n

Geração de Código Intermediário n Esta forma intermediária tem várias propriedades (Cont. ): n n O compilador deve gerar um identificador temporário para guardar o valor computado por cada instrução; E, algumas instruções tem menos que três operandos, como a primeira e última instruções. 12/30/2021 Comp - Prof. Paulemir Campos 27

Otimização do Código Intermediário n n Nesta fase tenta-se melhorar o código intermediário, almejando

Otimização do Código Intermediário n n Nesta fase tenta-se melhorar o código intermediário, almejando a obtenção de um código de máquina que execute mais rápido. Algumas otimizações são triviais. 12/30/2021 Comp - Prof. Paulemir Campos 28

Otimização do Código Intermediário n Por exemplo, um algoritmo gerou o código intermediário para

Otimização do Código Intermediário n Por exemplo, um algoritmo gerou o código intermediário para a atribuição “posicao : = inicial + taxa * 60”, usando uma instrução para cada operador na representação em árvore após a análise semântica, ainda que há um melhor caminho para efetuar este mesmo cálculo usando duas instruções. 12/30/2021 Comp - Prof. Paulemir Campos 29

Otimização do Código Intermediário n n Não há nada errado com este algoritmo simples,

Otimização do Código Intermediário n n Não há nada errado com este algoritmo simples, uma vez que o problema pode ser resolvido durante a fase de otimização de código. Assim, o compilador pode deduzir que a conversão de 60 de inteiro para real pode ser feita imediatamente em tempo de compilação. 12/30/2021 Comp - Prof. Paulemir Campos 30

Otimização do Código Intermediário n Além disso, temp 3 é usado apenas para transferir

Otimização do Código Intermediário n Além disso, temp 3 é usado apenas para transferir o seu conteúdo para id 1. Logo, obtém-se o código intermediário otimizado: temp 1 : = id 3 * 60. 0 id 1 : = id 2 + temp 1 12/30/2021 Comp - Prof. Paulemir Campos 31

Geração do Código Alvo n Esta é a fase final do compilador. n O

Geração do Código Alvo n Esta é a fase final do compilador. n O código alvo em geral consiste de: n n código de máquina realocável; ou, código assembly. 12/30/2021 Comp - Prof. Paulemir Campos 32

Geração do Código Alvo n n Posições de memória são selecionadas para cada variável

Geração do Código Alvo n n Posições de memória são selecionadas para cada variável usada pelo programa. Assim, instruções intermediárias são traduzidas numa seqüência de instruções de máquina equivalentes. 12/30/2021 Comp - Prof. Paulemir Campos 33

Geração do Código Alvo n n Um aspecto crucial é a atribuição de variáveis

Geração do Código Alvo n n Um aspecto crucial é a atribuição de variáveis para registradores. Por exemplo, usando os registradores 1 e 2, podemos obter: MOV R 2, id 3 MULT R 2, #60. 0 MOV R 1, id 2 12/30/2021 ADD R 1, R 2 MOV id 1, R 1 Comp - Prof. Paulemir Campos 34

Geração do Código Alvo n n n Os primeiro e segundo operandos de cada

Geração do Código Alvo n n n Os primeiro e segundo operandos de cada instrução especifica um destino e origem de dados, respectivamente. O símbolo ‘#’ indica que o número 60 pode ser tratado como uma constante. O resultado de cada operação é armazenado no primeiro operando. 12/30/2021 Comp - Prof. Paulemir Campos 35

Referências n Aho, A. V. ; Sethi, R. e Ullman, J. D. Compilers: Principles,

Referências n Aho, A. V. ; Sethi, R. e Ullman, J. D. Compilers: Principles, Techniques, and Tools. Addison Wesley Longman, 1985. (Capítulo 1, seção 1. 3). 12/30/2021 Comp - Prof. Paulemir Campos 36