universidade catolica´ de pelotas - chebre · pdf file analise´ lexica´...

Click here to load reader

Post on 27-Jan-2019

231 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Universidade Catolica de Pelotas

Introducao aos Compiladores

Andre Rauber Du Boisdubois@ucpel.tche.br

1

MOTIVACAO

Entender os algor tmos e estruturas usados para seimplementar linguagens de programacao

Conhecimento pode ser usado para resolver varios tipos deproblemas: editores de texto, conversores de arquivos, etc.

Uso do conhecimento adquirido em varias disciplinas do cursode Ciencia da Computacao: Algor tmos e Estruturas deDados, Linguagens Formais, Arquitetura de Hardware, etc.

MOTIVACAO 2

MOTIVACAO

Conhecimento Util: como escolher uma linguagem adequadapara resolver um problema espec fico, comparar eficiencia delinguagens, gerenciamento de memoria

Provavelmente uma das disciplinas mais interessantes docurso de Ciencia da Computacao

MOTIVACAO 3

CURSO DE COMPILADORES

1. Compiladores

2. Fases de um Compilador

Analise Lexica

Analise Sintatica

Analise Semantica

Geracao de Codigo Intermediario

Otimizacao de Codigo Intermediario

Geracao de Codigo Alvo

3. Traducao Dirigida Por Sintaxe

4. Sistemas de Tempo de Execucao

5. Gerencia de Memoria

6. CONSICO (Congresso Simulado de Compiladores)

CURSO DE COMPILADORES 4

INTRODUCAO

Linguagens de Programacao

Compiladores

Fases de um Compilador

Analise Lexica

Analise Sintatica

Analise Semantica

Geracao de Codigo Intermediario

Otimizacao de Codigo Intermediario

Geracao de Codigo Alvo

INTRODUCAO 5

LINGUAGENS

Linguagem de programacao: Meio de comunicacao entre oprogramador e o computador

Fornece ligacao entre o pensamento humano e a precisaorequerida pela maquina

O desenvolvimento de um programa e mais facil se alinguagem estiver mais prox ma do problema a ser resolvido(Linguagem de Alto N vel)

LINGUAGENS 6

LINGUAGENS (CONT.)

Computadores entendem apenas sua propria linguagem demaquina (Linguagem de Baixo N vel). Zeros e Uns.

Programas hoje em dia sao geralmente escritos emLinguagens de Alto N vel

Programas escritos em linguagens de alto n vel devem sertraduzidos para linguagem de maquina atraves decompiladores/interpretadores

LINGUAGENS (CONT.) 7

EVOLUCAO DAS LINGUAGENS DE PROGRAMACAO

1. Linguagem de Maquina

Computadores eram programados em linguagem de maquina,usando operacoes de maquina primitivas, formadas por umcodigo de operacao e dois enderecos de registradores oumemoria

Inicialmente usando zeros e uns: 00010000 0000011100000101

Problemas: dif cil de ler, escrever, modificar, fortemente sujeitaa erros

EVOLUCAO DAS LINGUAGENS DE PROGRAMACAO 8

2. Linguagem de Montagem

Oferece uma notacao simbolica, sao usados nomes ao invesde codigo binario (b = a + 2 )

MOV a, R1

ADD #2, R1

MOV R1, b

Linguagem Assembly

Montador / assembler: transforma o programa em Assemblypara linguagem de maquina

Uma instrucao em assembly equivale a uma instrucao emlinguagem de maquina

EVOLUCAO DAS LINGUAGENS DE PROGRAMACAO 9

2. Linguagem de Alto Nvel

Maior n vel de abstracao:

let s = (a+b+c)/2

in sqrt (s*(s-a)*(s-b)*(s-c) )

Ao inves de:

LOAD R1 a; ADD R1 b; ADD R1 c; DIV R1 #2;

LOAD R2 R1; LOAD R3 R1; SUB R3 a;

MULT R2 R3; LOAD R3 R1; SUB R3 b;

MULT R2 R3; LOAD R3 R1; SUB R3 c;

MULT R2 R3; LOAD R0 R2; CALL sqrt;

EVOLUCAO DAS LINGUAGENS DE PROGRAMACAO 10

TRADUTORES DE LINGUAGEM

Montadores (Assemblers)

Macro-Assemblers

Compiladores

Interpretadores

TRADUTORES DE LINGUAGEM 11

COMPILADORES

COMPILADOR: programa que le um programa escrito em umalinguagem fonte e o traduz para um programa equivalente numa

outra linguagem (linguagem alvo)

FONTEPROGRAMA PROGRAMA

ALVO

MENSAGENS DE ERRO

COMPILADOR

COMPILADORES 12

Fases de Um Compilador

FONTEPROGRAMA PROGRAMA

ALVO

MENSAGENS DE ERRO

Anlise Sntese

Analise: reconhece o programa e divide em suas partesconstituintes criando uma representacao intermediaria domesmo

S ntese: Constroi o programa alvo desejado, a partir darepresentacao intermediaria

Tambem conhecidas como Front-end e Back-end docompilador

COMPILADORES 13

FASES DO COMPILADOR

programa fonte

Lxico Analisador

Analisador Sinttico

Analisador Semntico

Gerador de CdigoIntermedirio

programa alvo

Otimizadorde Cdigo

Geradorde Cdigo

Anlise (FrontEnd)Sntese (BackEnd)

Tabela de Simbolos

FASES DO COMPILADOR 14

ANALISE

Operacoes sao reconhecidas e registradas numa estruturachamada de Arvore Sintatica

Cada no representa uma operacao e seus filhos representamos argumentos da operacao

Exemplo: montante := deposito inicial +taxa de juros * 60

60deposito_inicial

montante

:=+

*

taxa_de_juros

ANALISE 15

ANALISE

Varios tipos de software realizam algum tipo de analise:

Editores de Programas

Pretty Printers

Interpretadores

ANALISE 16

TIPOS DE ANALISE

Analise Lexica: programa e lido (escaneado) e agrupado emtokens i.e., sequencias de caracteres com um significadocoletivo

Analise Sintatica: tokens sao agrupados hierarquicamente emuma arvore sintatica (baseda na gramatica da linguagem)

Analise Semantica: o programa e verificado para garantir queos componentes de um programa se combinam de formasignificativa

TIPOS DE ANALISE 17

ANALISE LEXICA

Fazer a leitura do programa fonte, e traduz -lo para umasequencia de smbolos lexicos, tambem chamados de tokens.Exemplo:

montante = deposito_inicial +taxa_de_juros * 60

Tokens:

1. O identificador montante

2. O s mbolo de atribuicao :=

3. O identificador deposito inicial

4. O sinal de adicao +

5. O identificador taxa de juros

6. O sinal de multiplicacao *

ANALISE LEXICA 18

7. O n umero 60

Os espacos e linhas sao ignorados

ANALISE LEXICA 19

ANALISE SINTATICA

Verifica se o programa foi escrito respeitando as regrasgramaticais da linguagem

Agrupa tokens do programa fonte em frases gramaticais, quesao usadas pelo compilador para gerar a sa da

A gramatica e geralmente definida usando regras recursivas

Exemplo: Regras Recursivas para Expressoes:

1. Qualquer identificador e uma expressao

2. Qualquer numero e uma expressao

3. Se expressao1 e expressao2 sao expressoes, entao tambem osao

expressao1 + expressao2expressao1 * expressao2

ANALISE SINTATICA 20

Exemplo: Enunciado de uma linguagem de programacao

Se identificador1 e um identificador e expressao2 e umaexpressao, entao

identificador1 := expressao2

e um enunciado

Gramatica livre de contexto

ANALISE SINTATICA 21

Arvore Gramatical Exemplo: montante := deposito inicial +taxa de juros * 60

enunciado deatribuico

:=

identificador

montante

expresso

expresso

identificador

deposito_inicial

expresso

expresso expresso

identificador nmero

60taxa_de_juros

+

*

ANALISE SINTATICA 22

ANALISE SEMANTICA

Verifica erros semanticos e de tipos

Exemplo: detecta que um n umero real esta sendo usado paraindexar um vetor

Normalmente, valores em uma linguagem sao classificadospor tipos

Operacoes possuem regras de tipo, definindo os tipos dosoperandos e resultado

Uma operacao usando um tipo errado gera um erro de tipo

ANALISE SEMANTICA 23

EXEMPLO DE REGRAS DE TIPO

Operador +

Se os dois operandos sao do tipo Int o resultado deve ser dotipo Int

Operador While E do C

E deve possuir tipo Bool

EXEMPLO DE REGRAS DE TIPO 24

ANALISE SEMANTICA (CONT.)

A semantica da linguagem pode permitir algumas coercoes detipo

Exemplo: montante := deposito inicial +taxa de juros * 60

60deposito_inicial

montante

:=+

*

taxa_de_juros

ANALISE SEMANTICA (CONT.) 25

ANALISE SEMANTICA (CONT.)

Exemplo: montante := deposito inicial +taxa de juros * 60

deposito_inicial

montante

:=+

*

taxa_de_juros intToReal 60

ANALISE SEMANTICA (CONT.) 26

TABELA DE S IMBOLOS

A Tabela de Smbolos e uma estrutura de dados que contemum registro para cada identificador, com campos contendoseus atributos

Atributos: tipo, memoria reservada, se e um procedimento,n umero e tipo dos argumentos, tipo de retorno etc.

A tabela permite encontrar rapidamente cada registro,armazenar e recuperar dados do mesmo

A tabela e preenchida e usada por todas as fases

var montante, deposito_inicial: real;

Os identificadores sao inseridos na tabela durante aanalise lexica,mas o tipo nao e conhecido no momento emque e inserido

TABELA DE S IMBOLOS 27

FASE DE ANALISE (FRONT-END)

:=

id1

id2id3 60

+*

id1 := id2 + id3 * 60

Analisador Lxico

montante := deposito_inicial + taxa_de_juros + 60

:=

id1

id2id3

+*

60

intToReal

Analisador Semntico

Analisador Sinttico

Back End

cdigo d