tópicostópicos itens 01. compiladores 02. tradutores 03. linguagens de programação 04....

60

Upload: clara-borja-santos

Post on 07-Apr-2016

215 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo
Page 2: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tópicostópicositensitens

01. Compiladores 02. Tradutores 03. Linguagens de

Programação04. Histórico das

Linguagens05. Classificação de

Linguagens06. Processo de tradução

de um código07. Funcionamento de um

compilador

08. Construção de compiladores

09. Ferramentas para construção

10. Outras ferramentas parecidas com compiladores

11. Custo / Benefício do uso de compiladores

Page 3: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

compiladorcompiladorconceito de compiladorconceito de compilador

qual o conceito que você tem? o que fazem os compiladores? que características têm? para que servem? brainstorm

compiladorcompilador

01

Page 4: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorde um modo geralde um modo geral

o que é pode ser pessoa, máquina, programa, etc... efetua conversão entre duas linguagens

conceitos texto : elemento trabalhado linguagem : universo conhecido fonte : entrada do tradutor objeto : saída do tradutor

02

Page 5: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorde um modo geralde um modo geralelementos envolvidos

02

TRADUTORLF LO

TO

TF

conceitos texto linguagemfonte TF LFobjeto TO LOLF: Linguagem Fonte. É o conjunto de todas as possíveis entradas para o tradutor. É a linguagem que o tradutor conhece esobre a qual ele vai trabalhar.

Page 6: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorde um modo geralde um modo geralelementos envolvidos

02

TRADUTORLF LO

TO

TF

conceitos texto linguagemfonte TF LFobjeto TO LOTF: Texto Fonte. Pertence a linguagem fonte. Entrada para o tradutor.É o texto que deve ser convertido.

Page 7: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorde um modo geralde um modo geralelementos envolvidos

02

TRADUTORLF LO

TO

TF

conceitos texto linguagemfonte TF LFobjeto TO LOLO: Linguagem Objeto. Conjunto de todas as possíveis saídas do tradutor.É a linguagem sobre a qual vão ser gerados os resultados do trabalho de tradução.

Page 8: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorde um modo geralde um modo geralelementos envolvidos

02

TRADUTORLF LO

TO

TF

conceitos texto linguagemfonte TF LFobjeto TO LOTO: Texto Objeto. Pertence a Linguagem Objeto.Saída do tradutor. É o texto gerado pelo tradutor como conversão do texto fonte fornecido.

Page 9: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorde um modo geralde um modo geral

características deve gerar um texto correspondente mantendo equivalência de significados

e mantendo apenas as informações relevantes

02

Page 10: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorpara o estudo de compiladorespara o estudo de compiladores

A tradução que nos interessa (subconjunto) feita por programas de computador feita de forma automática entre linguagens de programação

02

Tradutores de um modo geral

subconjunto para o estudo de compiladores

Page 11: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorpara o estudo de compiladorespara o estudo de compiladores

Com a limitação feita no universo dos tradutores temos diversos tradutores que variam de acordo com: os tipos das linguagens envolvidas e a natureza do trabalho realizado.

Principais tradutores do subconjunto: Montadores Compiladores Interpretadores Decompiladores Demontadores

02

Tradutores de um modo geral

subconjuntopara o estudo de compiladores

Page 12: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorpara o estudo de compiladorespara o estudo de compiladores MontadoresMontadores

Linguagem de entrada é LP de baixo nível Linguagem de saída é LP de máquina

02

MONTADORLinguage

m de baixo nível

Linguagem de

máquina

Page 13: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorpara o estudo de compiladorespara o estudo de compiladores CompiladoresCompiladores

A linguagem objeto do compilador pode ser de alto ou de baixo nível. A linguagem fonte deve ser de alto nível.

O código gerado pela compilação será executado posteriormente (e provavelmente inúmeras vezes). Neste outro momento serão fornecidos os dados e saídas particulares a cada execução.

02

COMPILADORLinguagem de alto

nível

(?) Propicia

execução futura

Page 14: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorpara o estudo de compiladorespara o estudo de compiladores CompiladoresCompiladores

Por esta classificação também são considerados como compiladores: filtros e preprocessadores.

Filtro: quando o tradutor efetua conversão entre duas linguagens de alto nível muito semelhantes

Preprocessador: preparação de um texto para que seja submetido posteriormente a um outro compilador.

02

COMPILADORLinguagem de alto

nível

(?) Propicia

execução futura

Page 15: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorpara o estudo de compiladorespara o estudo de compiladores InterpretadoresInterpretadores

No compilador

No interpretador Nos interpretadores não

existe texto objeto. A tradução e a execução

do código é feita ao mesmo tempo. Não existe tempo de compilação e tempo de execução.

02

(?) Propicia execução

futuraCódigo ExecutávelGerado

Dados de entrada

Dados de saída

Linguagem alto nível

Texto fonte Interpretador

Dados de entrada

Dados de saída

Page 16: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

tradutortradutorpara o estudo de compiladorespara o estudo de compiladores DecompiladoresDecompiladores

Linguagem de entrada é LP de baixo nível Linguagem de saída é LP de alto nível

02

DECOMPILADORLinguage

m de baixo nível

Linguagem de alto

nível

Page 17: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

linguagem linguagem de programaçãode programaçãoO que são

Linguagem a ser utilizada como meio de comunicação entre homem e máquina.

Para que servem Estabelecer uma linguagem a meio caminho

entre a linguagem utilizada pelo homem e linguagem utilizada pela máquina.

Capacitar o usuário a ajudar a máquina a resolver problemas de seu interesse.

03

Page 18: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

linguagem linguagem de programaçãode programaçãoA primeira tradução:

Do problema para a linguagem de programação

Feita pelo homem, Chamada de programação

As outras traduções: Da linguagem de programação para a

solução a ser executada Feita pela máquina, Uma delas é a compilação

03

Page 19: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

histórico de histórico de compiladorescompiladores

estágio pré-lingual (1940)

Programas feitos em linguagem de máquina.

Primeiras idéias: Construção de mecanismos para facilitar o entendimento pelo homem destes programas. Conceito de compilador não existia ainda.

As máquinas eram programadas pelo código dos programas, mas também por botões, interruptores e plugues.

1944: Konrad Zuze, engenheiro alemão, projetou na Suíça o Plankalkül (LP com declaração de variáveis, valores estrutu-rados, passagem de parâmetros em procedimentos, etc). Não foi implementada.

Fim dos anos 40: Herman Goldstine lança os fluxogramas (forma de alto nível para re-presentar programas). Sugestão de John Von Newmann, Adele Goldstine e Arthur Banks.

Fim dos anos 40, aparecem implementações do Short Code / Short Order Code (linguagem interpretada e muito simples).

04

1940 1950 1960 1970 1980 1990 2000 2010 1950 1960 1970 1980 1990 2000 2010

Page 20: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

histórico de histórico de compiladorescompiladores

reinado do baixo nível (1950)

Computadores passam a ser programados em Assembly.

Aplicações envolviam cálculo numérico e muito esforço era feito para converter fórmulas numéricas em instruções Assembly.

Para melhorar esta tarefa surgem as primeiras linguagens de alto nível: os Autocodes. Possuíam 26 identificadores (de A a Z) que permitiam a conversão simples de fórmulas.

O primeiro compilador real AUTOCODE (máquina existen-te, implementado e em uso) em 1952 por Donald Knuth.

Primeiros compiladores. Não existe data exata, nem o nome do inventor, nem local.

Vários grupos trabalharam, experimentaram e implemen-taram muitas linguagens ao mesmo tempo.

Primeiro grande projeto de linguagem de programação: FORTRAN (“IBM Mathematical FORmula TRANslation System”) em 1954 por John Backus. Envolveu equipe de 18 homens ano.

04

19401940 1950 1960 1970 1980 1990 2000 2010 1960 1970 1980 1990 2000 2010

Page 21: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

histórico de histórico de compiladorescompiladores

explodem as linguagens (1960)

surgimento de uma série de linguagens de programação, como por exemplo as mais significativas: COBOL, Lisp, Algol 60, BASIC, PL/1.

Novas idéias para a época: Dados estruturados (COBOL, PL/1), Recursão (Lisp Algol60), Interação com o usuário (BASIC) e “Big is beautiful” (COBOL e PL/1)

Programas “sérios” ainda feitos em assembly

04

19401940 1950 1950 1960 1970 1980 1990 2000 2010 1970 1980 1990 2000 2010

Page 22: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

histórico de histórico de compiladorescompiladores

menor dependência da máquina (1970)

Palavra de ordem: portabilidade.

Surgimento da programação estruturada. Aparecimento de Linguagens estruturadas como: Pascal, Algol

68 (finalizada em 1975) e C.

Avanços da tecnologia de compiladores.

Linguagem Assembly ainda é muito usada para operações críticas de tempo de resposta.

04

19401940 1950 1960 1950 1960 1970 1980 1990 2000 2010 1980 1990 2000 2010

Page 23: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

histórico de histórico de compiladorescompiladores

reduzindo complexidades (1980)

Redução na complexidade da programação e do gerenciamento da programação, obstáculo para a construção e o funcionamento dos sistemas. Linguagens clássicas como Ada e Modula-2 passam a ser acompanhadas de sistemas gerenciadores como Make e APSE (Ada Programming Suport Environment).

Novas maneiras de se pensar em programação: Smalltalk (programação orientada a objeto) e Miranda (programação funcional).

Grande parte do código da sonda Giotto que explorou o cometa Halley em 14 de março de 1986 foi feito em assembly.

04

19401940 1950 1960 1970 1950 1960 1970 1980 1990 2000 2010 1990 2000 2010

Page 24: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

histórico de histórico de compiladorescompiladores

paralelismo e distribuição (1990)

Inclusão sistemática destes conceitos em uma linguagem: occam, extensões de paralelismo em C++ e novas linguagens: Hermes, Linda, Orca, SR, Ada 9X.

Introdução do hardware RISC (com operações não intuitivas) pode finalmente decretar o fim do uso da linguagem assembly.

04

19401940 1950 1960 1970 1980 1950 1960 1970 1980 1990 2000 2010 2000 2010

Page 25: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

histórico de histórico de compiladorescompiladores

componentes e web (2000)

Novas versões das linguagens comerciais prevêem cada vez mais inclusão de conceitos de orientação a objeto.

Desenvolvimento em “n” camadas.

Suporte e integração ao ambiente web. Aplicações podem estar tratando um grande volume de transações. Necessidade de otimizações de recursos.

04

19401940 1950 1960 1970 1980 1990 1950 1960 1970 1980 1990 2000 2010 2010

Page 26: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

histórico de histórico de compiladorescompiladores

Xxx (2010)

xxx

04

19401940 1950 1960 1970 1980 1990 20001950 1960 1970 1980 1990 2000 2010

Page 27: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

histórico de histórico de compiladorescompiladores

Primeiros compiladores Programas difíceis de se construir. Sem técnicas,

conceitos, documentação, máquina, etc. Programas autônomos. Sem estrutura uniforme. Operação especifica e manual. Transformações

sucessivas em formas intermediárias melhoradas para se chegar ao executável.

Compiladores atuais Linguagens poderosas. Ambientes de programação sofisticados. Ferramentas automáticas. Integrados com outros elementos do sistema. Operação simplificada e relativamente padrão.

04

1940

1950

1960

1970

1980

1990

2000

2010

Page 28: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

histórico de histórico de compiladorescompiladores

Primeiros compiladores Programas difíceis de se construir. Sem técnicas,

conceitos, documentação, máquina, etc. Programas autônomos. Sem estrutura uniforme. Operação especifica e manual. Transformações

sucessivas em formas intermediárias melhoradas para se chegar ao executável.

Compiladores atuais Linguagens poderosas. Ambientes de programação sofisticados. Ferramentas automáticas. Integrados com outros elementos do sistema. Operação simplificada e relativamente padrão.

04

O que se verificou • número reduzido de componentes básicos a

serem utilizados• funções padronizadas.

O que provocou as mudanças:• Acúmulo de experiências.• Observação dos resultados.• Desenvolvimento de teorias e técnicas

relacionadas a compiladores.• Desejo/necessidade/vontade dos usuários.

1940

1950

1960

1970

1980

1990

2000

2010

Page 29: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

classificaçõesclassificaçõesclassificação das linguagensclassificação das linguagens

Por paradigma Por paradigma geral Por geração Por dependência de máquina

05

Page 30: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

classificaçõesclassificaçõespor paradigmapor paradigma

Conceito de paradigmaConjunto de métodos coerentes que foram usados no tratamento de um domínio específico de problemas.

Pelos quatro maiores paradigmas Linguagem imperativa Linguagem orientada a objeto Linguagem de programação funcional Linguagem de programação em lógica

05

Page 31: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

classificaçõesclassificaçõespor paradigma geralpor paradigma geral

Outra classificação pela forma de pensar

Operacionais ou Não declarativas Onde você determina COMO resolver o

problema Declarativas

Onde você determina O QUE quer resolver

05

Page 32: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

classificaçõesclassificaçõespor geraçãopor geração

Primeira Geração linguagens de máquina Segunda Geração linguagens Assembly Terceira Geração linguagens procedurais Quarta Geração linguagens de

Aplicação Quinta Geração técnicas de IA,

linguagens de inferência

Sexta Geração redes Neurais

05

Page 33: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

classificaçõesclassificaçõesp/dependência de máquinap/dependência de máquina

Linguagem de baixo nível (LLL) Linguagem de Máquina (ML) Linguagem de Montagem (AL),

Exemplo: Assembly, Autocode, Bytecode

Linguagem de Alto Nível (HLL) ou linguagem orientada a Usuario (UOL) Exemplo: FORTRAN, Algols, Pascal, C, Ada

Linguagem de Altíssimo Nivel (VHLL) Exemplo: SETL, Prolog, Miranda

Ling. orientada a problemas específicos (POL)

05

Page 34: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

classificaçõesclassificaçõesp/dependência de máquinap/dependência de máquina05

Linguagem orientada a Problemas EspecíficosLinguagem de Altíssimo Nível

Linguagem de Alto Nível

Linguagem de Máquina

Page 35: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

processo de traduçãoprocesso de traduçãovisão geralvisão geral06

Texto em ling máquina “absoluta” LOAD/LINK-EDITOR

Texto em ling máquina relocávelMONTADOR

Texto em linguagem de montagem COMPILADOR

Texto fonte preparado 2PREPROCESSADOR 2

Texto fonte preparado 1PREPROCESSADOR 1

Texto fonte bruto

exemplo:

Page 36: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

processo de traduçãoprocesso de traduçãopreprocessadorespreprocessadores

Produzem dados de entrada para os compiladores

Realizam: processamento de macros inclusão de arquivos (header files) preprocessadores racionais

(flow-of-control, data structures) extensões de linguagem (Equel)

É um módulo opcional Podem existir vários

encadeados até se chegar ao compilador

06

Texto em ling máquina “absoluta”

LOAD/LINK-EDITOR

Texto em ling máquina relocável

MONTADOR

Texto em linguagem de montagem

COMPILADOR

Texto fonte preparado 2

PREPROCESSADOR 2

Texto fonte preparado 1

PREPROCESSADOR 1

Texto fonte bruto

Page 37: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

processo de traduçãoprocesso de traduçãocompiladorescompiladores

o último compiladordo processo de tradução

os proprocessadorestambém são compiladores

produzem textos emlinguagem de montagem

06

Texto em ling máquina “absoluta”

LOAD/LINK-EDITOR

Texto em ling máquina relocável

MONTADOR

Texto em linguagem de montagem

COMPILADOR

Texto fonte preparado 2

PREPROCESSADOR 2

Texto fonte preparado 1

PREPROCESSADOR 1

Texto fonte bruto

Page 38: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

processo de traduçãoprocesso de traduçãomontadores (assemblers)montadores (assemblers) Embutido na maior parte dos

compiladores comerciais, embora não seja parte da compilação.

Trabalha sobre linguagem assembly

Implementação mais comum através dos montadores de duas passagens

passo: leitura do código fonte primeiro passo procura todos os

identificadores e monta tabela de símbolos separada do compilador

segundo passo monta linguagem de máquina relocável.

06

Texto em ling máquina “absoluta”

LOAD/LINK-EDITOR

Texto em ling máquina relocável

MONTADOR

Texto em linguagem de montagem

COMPILADOR

Texto fonte preparado 2

PREPROCESSADOR 2

Texto fonte preparado 1

PREPROCESSADOR 1

Texto fonte bruto

Page 39: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

processo de traduçãoprocesso de traduçãoloader/linkeditoresloader/linkeditores

Resolve referências de dados einstruções entre os vários módulos que devem compor o código executável.

Monta um código absoluto de vários módulos em linguagem de maquina relocável (várias compilações ou bibliotecas prontas)

06

Texto em ling máquina “absoluta”

LOAD/LINK-EDITOR

Texto em ling máquina relocável

MONTADOR

Texto em linguagem de montagem

COMPILADOR

Texto fonte preparado 2

PREPROCESSADOR 2

Texto fonte preparado 1

PREPROCESSADOR 1

Texto fonte bruto

Page 40: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

processo de traduçãoprocesso de traduçãoexemplo de tradução exemplo de tradução (1/3) Suponha a expressão

x = 2y + 7 (texto fonte) Precisa ser preparada Depois compilada É transformada em linguagem

assembly de uma máquina hipotética

mov y,R1, mul #2,R1, add #7,R1, mov R1,x

06

Texto em ling máquina “absoluta”

LOAD/LINK-EDITOR

Texto em ling máquina relocável

MONTADOR

Texto em linguagem de montagem

COMPILADOR

Texto fonte preparado 2

PREPROCESSADOR 2

Texto fonte preparado 1

PREPROCESSADOR 1

Texto fonte bruto

Page 41: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

processo de traduçãoprocesso de traduçãoexemplo de tradução exemplo de tradução (2/3) formato da instrução

código da operação, registrador, operador (endereco ou absoluto), forma de endereçamento

códigos de operação código das operações: load 0001,

store 0100, mul 0010, add 0011 formas de endereçamento

00: na instrução 01: endereçamento direto 10: endereçamento indireto

endereço ocupa quatro bytes

06

Texto em ling máquina “absoluta”

LOAD/LINK-EDITOR

Texto em ling máquina relocável

MONTADOR

Texto em linguagem de montagem

COMPILADOR

Texto fonte preparado 2

PREPROCESSADOR 2

Texto fonte preparado 1

PREPROCESSADOR 1

Texto fonte bruto

Page 42: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

processo de traduçãoprocesso de traduçãoexemplo de tradução exemplo de tradução (3/3) Transformação em código

de máquina relocável 0001 01 00000000 01 * 0010 01 00000010 00 0011 01 00000111 00 0100 01 00000100 01 *

transformação em código de máquina absoluto

endereço de carga 00001001 refazer endereços relocaveis

06

Texto em ling máquina “absoluta”

LOAD/LINK-EDITOR

Texto em ling máquina relocável

MONTADOR

Texto em linguagem de montagem

COMPILADOR

Texto fonte preparado 2

PREPROCESSADOR 2

Texto fonte preparado 1

PREPROCESSADOR 1

Texto fonte bruto

Page 43: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladormodelo análise-síntesemodelo análise-síntese

07

Compilador

Texto Fonte

Texto Objeto

Page 44: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladormodelo análise-síntesemodelo análise-síntese

O que é o modelo Enxerga todo o trabalho do compilador dividido em dois

grandes blocos: a análise e a síntese. Bloco de análise

Quebra o programa fonte em suas partes constituintes, Cria uma representação intermediária equivalente ao

programa fonte, As operações realizadas pelo programa fonte, e os

elementos utilizados são identificados, Grava estas informações numa estrutura hierárquica

(árvore sintática estendida) Bloco de síntese

Constrói o programa objeto a partir da representação intermediária

Requer técnicas mais especializadas

07

Page 45: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladorpartes do compiladorpartes do compilador

07

texto fonte

texto objeto

Page 46: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladoranalisador léxicoanalisador léxico

Objetivo principal: identificar átomos

Faz análise linear do texto fonte Varre todo o fonte da esquerda para a direita Agrupa caracteres em átomos (tokens) Checa com padrões determinados Classifica átomos identificados Identifica palavras reservadas da linguagem Utiliza construções não recursivas Monta registros iniciais na tabela de símbolos

07

Page 47: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladoranalisador sintáticoanalisador sintático

Objetivo principal: verificar seqüência de átomos

Faz análise hierárquica do texto fonte Agrupa os átomos em frases gramáticas Trabalha sobre regras (Gramáticas) Pode conter regras recursivas Representa frases gramaticais em uma árvore Ex: balanceamento de parêntesis, ...

07

Page 48: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladoranalisador semânticoanalisador semântico

Objetivo principal: verificar coerência de significados

Pode alterar conteúdo da árvore sintática montada Tarefa importante é a checagem de tipo Efetua ou não conversões de tipo (depende da

definição da linguagem) Pode eliminar ineficiências na estrutura

07

Page 49: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladorgerador de código intermediáriogerador de código intermediário

Objetivo principal: fazer primeira tradução independente

Gera representação numa terceira linguagem Gera programa para execução em maquina

abstrata, fictícia Deve gerar código que seja fácil de produzir e ao

mesmo tempo fácil de traduzir Existem vários tipos de representação usados O código deve ser independente de máquina

07

Page 50: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladorotimizador de códigootimizador de código

Objetivo principal: otimizar código

Elimina redundâncias Reduz ineficiências Torna o código mais simples e mais rápido Diminui o numero de instruções Existe grande variedade de tipos de otimização Há classe de compiladores com ênfase nesta fase

07

Page 51: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladorgerador de código finalgerador de código final

Objetivo principal: gerar código final da compilação

Compõe-se de código de máquina relocável ou assembly

As instruções em código intermediário são traduzidas em de instruções de máquina

Aspecto critico: uso de registradores

07

Page 52: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladorgerenciador tab símbolosgerenciador tab símbolos

Objetivo principal: gerenciar a tabela de símbolos

Estrutura de dados global Módulo de código e a própria estrutura de dados Grava identificadores e símbolos que foram

encontrados no programa fonte Armazena informações sobre vários atributos

destes símbolos Exemplos de atributos: localização de memória, tipo

da variável, escopo da variável, numero e tipo dos parâmetros das rotinas, ...

É utilizada por todas as outras partes

07

Page 53: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladorrotinas de errorotinas de erro

Objetivo principal: controlar a ocorrência de erros

Tenta descrever a falha encontrada em uma das partes do compilador

Tenta recuperar o erro encontrado (tenta continuar a analise do programa)

Em cada parte do trabalho do compilador serão descritos os vários erros

Exemplo de erros léxicos, sintáticos, semânticos Pode ser uma rotina independente ou diluída

07

Page 54: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladorcompilaçãocompilação

exemplo da compilação completa de uma sentença

07

Page 55: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladorpartes do compiladorpartes do compilador

07

texto fonte

texto objeto

Page 56: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladormodelo front-end/back-endmodelo front-end/back-end

O que é o modelo trabalho dividido em dois blocos: front-end e back-end

Bloco de Front-end Partes/subpartes do compilador dependentes da linguagem

fonte É totalmente independente da maquina objeto analise léxica, análise sintática, análise semântica, geração

de código intermediário, parte da rotina de tratamento de erro e parte da tabela de símbolos.

Bloco de Back-end Partes/subpartes do compilador dependentes da maquina

objeto Não dependem da linguagem fonte otimização de código, geração de código final, parte da

rotina de tratamento de erro e parte da tabela de símbolos.

07

Page 57: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladormodelo front-end/back-endmodelo front-end/back-end

Utilidade do modelo Reaproveitamento do investimento em

desenvolvimento pelas empresas que produzem ambientes de desenvolvimento ou linguagens de programação

Front-end é refeito quando muda a linguagem fonte

Back-end é refeito quando muda a plataforma de máquina usada

Também conhecido com o nome de modelo Vanguarda-Retaguarda

07

Page 58: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladormodelos x partesmodelos x partes

07

Page 59: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo

funcionamento funcionamento compiladorcompiladormodelos x partesmodelos x partes

07

Page 60: tópicostópicos itens 01. Compiladores 02. Tradutores 03. Linguagens de Programação 04. Histórico das Linguagens 05. Classificação de Linguagens 06. Processo