UPE Caruaru Sistemas de Informao Disciplina Compiladores Prof

  • Slides: 37
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 1) 10/19/2021 Comp - Prof. Paulemir Campos 1

Roteiro da Aula n Compiladores n Análise do Programa Fonte n Referências 10/19/2021 Comp

Roteiro da Aula n Compiladores n Análise do Programa Fonte n Referências 10/19/2021 Comp - Prof. Paulemir Campos 2

Compiladores 10/19/2021 Comp - Prof. Paulemir Campos 3

Compiladores 10/19/2021 Comp - Prof. Paulemir Campos 3

Introdução n Um compilador é um programa que: n n 10/19/2021 lê um programa

Introdução n Um compilador é um programa que: n n 10/19/2021 lê um programa escrito numa linguagem, a linguagem fonte; e, o traduz num programa equivalente numa outra linguagem, a linguagem alvo (geralmente assembly ou linguagem de máquina). Comp - Prof. Paulemir Campos 4

Introdução n Como uma importante parte deste processo de tradução, o compilador relata ao

Introdução n Como uma importante parte deste processo de tradução, o compilador relata ao usuário a presença de erros no programa fonte. 10/19/2021 Comp - Prof. Paulemir Campos 5

Introdução Diagrama de um compilador 10/19/2021 Comp - Prof. Paulemir Campos 6

Introdução Diagrama de um compilador 10/19/2021 Comp - Prof. Paulemir Campos 6

Introdução n n Há milhares de linguagens fontes; Desde linguagens de programação tradicionais, como,

Introdução n n Há milhares de linguagens fontes; Desde linguagens de programação tradicionais, como, Fortran e Pascal, até linguagens específicas que surgem virtualmente em toda área de aplicação de computador. 10/19/2021 Comp - Prof. Paulemir Campos 7

Introdução n Linguagem alvo pode ser: n n 10/19/2021 uma outra linguagem de programação;

Introdução n Linguagem alvo pode ser: n n 10/19/2021 uma outra linguagem de programação; ou, a linguagem de máquina de qualquer computador, desde um microprocessador até um supercomputador. Comp - Prof. Paulemir Campos 8

Introdução n n As tarefas básicas que qualquer compilador deve desempenhar são essencialmente a

Introdução n n As tarefas básicas que qualquer compilador deve desempenhar são essencialmente a mesma; Assim, pode-se construir compiladores para uma larga variedade de linguagens fontes e de máquinas alvo usando as mesmas técnicas básicas. 10/19/2021 Comp - Prof. Paulemir Campos 9

Introdução n O conhecimento sobre como organizar e escrever compiladores tem crescido consideravelmente desde

Introdução n O conhecimento sobre como organizar e escrever compiladores tem crescido consideravelmente desde o surgimento do primeiro compilador no início dos anos 50 do século passado. 10/19/2021 Comp - Prof. Paulemir Campos 10

Introdução n n É difícil dar uma data exata de quando foi criado o

Introdução n n É difícil dar uma data exata de quando foi criado o primeiro compilador; Isto porque inicialmente uma grande quantidade de experimentos e implementações foram concluídas independentemente por muitos grupos. 10/19/2021 Comp - Prof. Paulemir Campos 11

Introdução n n Muitos dos primeiros compiladores tratavam da tradução de fórmulas aritméticas para

Introdução n n Muitos dos primeiros compiladores tratavam da tradução de fórmulas aritméticas para código de máquina. Durante toda a década de 50 do século XX, compiladores foram notoriamente considerados programas difíceis de serem escritos. 10/19/2021 Comp - Prof. Paulemir Campos 12

Introdução n n Por exemplo, o primeiro compilador Fortran levou 18 anos para ser

Introdução n n Por exemplo, o primeiro compilador Fortran levou 18 anos para ser implementado (Backus et al. , 1957). Contudo, tem sido descobertas técnicas sistemáticas para manipular muitas das importantes tarefas que ocorrem durante uma compilação. 10/19/2021 Comp - Prof. Paulemir Campos 13

Introdução n n Além disso, boas linguagens de implementação, ambientes de programação e ferramentas

Introdução n n Além disso, boas linguagens de implementação, ambientes de programação e ferramentas de computador também foram desenvolvidas. Assim, atualmente um compilador pode ser implementado num semestre. 10/19/2021 Comp - Prof. Paulemir Campos 14

O Modelo Análise-Síntese de Compilação n O processo de compilação é constituído de duas

O Modelo Análise-Síntese de Compilação n O processo de compilação é constituído de duas etapas: n n 10/19/2021 Análise – quebra o programa fonte em peças constituintes e cria uma representação intermediária; Síntese – constrói o programa alvo desejado a partir da representação intermediária. Comp - Prof. Paulemir Campos 15

O Modelo Análise-Síntese de Compilação n n A etapa de síntese requer técnicas mais

O Modelo Análise-Síntese de Compilação n n A etapa de síntese requer técnicas mais especializadas; A análise do programa fonte será tratada informalmente no próximo tópico. 10/19/2021 Comp - Prof. Paulemir Campos 16

O Modelo Análise-Síntese de Compilação n n Durante a análise, as operações presentes no

O Modelo Análise-Síntese de Compilação n n Durante a análise, as operações presentes no programa fonte são determinadas e registradas numa estrutura hierárquica chamada árvore. Conseqüentemente, esse tipo especial de árvore é chamada de árvore sintática. 10/19/2021 Comp - Prof. Paulemir Campos 17

O Modelo Análise-Síntese de Compilação n Numa árvore sintática: n n 10/19/2021 Cada nó

O Modelo Análise-Síntese de Compilação n Numa árvore sintática: n n 10/19/2021 Cada nó representa uma operação; e, cada nó folha representa um argumento da operação. Comp - Prof. Paulemir Campos 18

O Modelo Análise-Síntese de Compilação n Árvore sintática para a declaração de atribuição: posicao

O Modelo Análise-Síntese de Compilação n Árvore sintática para a declaração de atribuição: posicao : = inicial + taxa * 60 10/19/2021 Comp - Prof. Paulemir Campos 19

O Modelo Análise-Síntese de Compilação n n Muitas ferramentas de computador que manipulam programas

O Modelo Análise-Síntese de Compilação n n Muitas ferramentas de computador que manipulam programas fonte primeiro efetuam algum tipo de análise. Alguns exemplos de ferramentas que tratam do programa fonte: n 10/19/2021 Editores de Estrutura – Recebe uma seqüência de comandos para construir um programa fonte. Comp - Prof. Paulemir Campos 20

O Modelo Análise-Síntese de Compilação n Alguns exemplos de ferramentas que tratam do programa

O Modelo Análise-Síntese de Compilação n Alguns exemplos de ferramentas que tratam do programa fonte (Cont. ): n 10/19/2021 Organizador de Impressão – Analisa um programa e o imprime de uma forma que sua estrutura torna-se claramente visível. Ex. : Comentários podem aparecer com um tipo de fonte e declarações com indentação proporcional ao seu aninhamento. Comp - Prof. Paulemir Campos 21

O Modelo Análise-Síntese de Compilação n Alguns exemplos de ferramentas que tratam do programa

O Modelo Análise-Síntese de Compilação n Alguns exemplos de ferramentas que tratam do programa fonte (Cont. ): n 10/19/2021 Verificador Estático – Lê um programa, analisa-o e tentar descobrir potenciais bugs sem executar o programa. Ex. : Pode detectar partes do programa que nunca serão executadas, ou que uma variável pode ser usada antes de inicializada. Comp - Prof. Paulemir Campos 22

O Modelo Análise-Síntese de Compilação n Alguns exemplos de ferramentas que tratam do programa

O Modelo Análise-Síntese de Compilação n Alguns exemplos de ferramentas que tratam do programa fonte (Cont. ): n 10/19/2021 Avaliador de Expressões – Executa as operações indicadas no programa fonte. Ex. : Pode construir uma árvore sintática de uma atribuição e avaliar o resultado “caminhando pela árvore”. Comp - Prof. Paulemir Campos 23

Análise do Programa Fonte 10/19/2021 Comp - Prof. Paulemir Campos 24

Análise do Programa Fonte 10/19/2021 Comp - Prof. Paulemir Campos 24

Introdução n Em compilação, a análise consiste de três fases: n 10/19/2021 Análise Linear

Introdução n Em compilação, a análise consiste de três fases: n 10/19/2021 Análise Linear – Onde a cadeia de caracteres que forma o programa fonte é lida da esquerda para a direita e agrupada em símbolos (tokens), que são seqüências de caracteres dando a idéia de coleção; Comp - Prof. Paulemir Campos 25

Introdução n Em compilação, a análise consiste de três fases (Cont. ): n n

Introdução n Em compilação, a análise consiste de três fases (Cont. ): n n 10/19/2021 Análise Hierárquica – Onde caracteres ou símbolos (tokens) são agrupados hierarquicamente em coleções aninhadas; Análise Semântica – Onde certas verificações são efetuadas para assegurar que os componentes do programa estão aptos para continuar a compilação. Comp - Prof. Paulemir Campos 26

Análise Léxica n Em compilação, análise linear é chamada de análise léxica ou scanning.

Análise Léxica n Em compilação, análise linear é chamada de análise léxica ou scanning. n 10/19/2021 Ex. : Na análise léxica, os caracteres na declaração de atribuição posicao : = inicial + taxa * 60 podem ser agrupados nos tokens a seguir. Obs. : Os espaço em branco separando os caracteres dos tokens podem normalmente serem eliminados durante o scanning. Comp - Prof. Paulemir Campos 27

Análise Léxica n 10/19/2021 Ex. : 1. O 2. O 3. O 4. O

Análise Léxica n 10/19/2021 Ex. : 1. O 2. O 3. O 4. O 5. O 6. O 7. O posicao : = inicial + taxa * 60 identificador posicao. símbolo de atribuição : =. identificador inicial. sinal de adição +. identificador taxa. sinal de multiplicação *. número 60. Comp - Prof. Paulemir Campos 28

Análise Sintática ou Parsing n n n Análise Hierárquica é chamada de Parsing ou

Análise Sintática ou Parsing n n n Análise Hierárquica é chamada de Parsing ou Análise Sintática. Esta fase envolve o agrupamento dos tokens do programa fonte em frases gramaticais usadas pelo compilador para sintetizar a saída. Normalmente, as frases gramaticais são representadas por árvores sintáticas. 10/19/2021 Comp - Prof. Paulemir Campos 29

Análise Sintática ou Parsing Árvore sintática de posicao : = inicial + taxa *

Análise Sintática ou Parsing Árvore sintática de posicao : = inicial + taxa * 60 10/19/2021 Comp - Prof. Paulemir Campos 30

Análise Sintática ou Parsing n A estrutura hierárquica de um programa é geralmente expressa

Análise Sintática ou Parsing n A estrutura hierárquica de um programa é geralmente expressa por regras recursivas. Ex. : 1. Todo <identificador> é uma <expressão> 2. Todo <número> é uma <expressão> 3. Se <expressão 1> e <expressão 2> são expressões então <expressão 1> + <expressão 2> <expressão 1> * <expressão 2> ( <expressão 1> ) também são. 10/19/2021 Comp - Prof. Paulemir Campos 31

Análise Sintática ou Parsing n n n Note que as regras (1) e (2)

Análise Sintática ou Parsing n n n Note que as regras (1) e (2) são regras básicas (não recursivas); Já a regra (3) define expressões em termos de operadores aplicados a outras expressões. Assim, pela regra (1) inicial e taxa são expressões; 10/19/2021 Comp - Prof. Paulemir Campos 32

Análise Sintática ou Parsing n n Pela regra (2) 60 é uma expressão; E

Análise Sintática ou Parsing n n Pela regra (2) 60 é uma expressão; E pela regra (3) pode-se inferir primeiro que taxa * 60 é uma expressão e em seguida que inicial + taxa * 60 é uma expressão. 10/19/2021 Comp - Prof. Paulemir Campos 33

Análise Semântica n n A fase de análise semântica verifica o programa fonte em

Análise Semântica n n A fase de análise semântica verifica o programa fonte em busca de erros semânticos e anexa informações de tipo para a fase de geração de código. Usa a estrutura hierárquica determinada pela análise sintática e identifica os operadores e operandos de expressões e declarações. 10/19/2021 Comp - Prof. Paulemir Campos 34

Análise Semântica n n Um importante componente da análise semântica é a verificação de

Análise Semântica n n Um importante componente da análise semântica é a verificação de tipos. Assim, o compilador verifica se cada operador tem operandos permitidos pela especificação da linguagem fonte. 10/19/2021 Comp - Prof. Paulemir Campos 35

Análise Semântica Inserção de conversão de tipo na fase de análise semântica. 10/19/2021 Comp

Análise Semântica Inserção de conversão de tipo na fase de análise semântica. 10/19/2021 Comp - Prof. Paulemir Campos 36

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ções 1. 1 e 1. 2). 10/19/2021 Comp - Prof. Paulemir Campos 37