You are on page 1of 59

tpicos

itens

01. Compiladores 02. Tradutores 03. Linguagens de Programao 04. Histrico das Linguagens 05. Classificao de Linguagens 06. Processo de traduo de um cdigo 07. Funcionamento de um compilador

08. Construo de compiladores 09. Ferramentas para construo 10. Outras ferramentas parecidas com compiladores 11. Custo / Benefcio do uso de compiladores

01

conceito de compilador

compilador

qual o conceito que voc tem? o que fazem os compiladores? que caractersticas tm? para que servem? brainstorm

compilador

02

de um modo geral

tradutor

o que

pode ser pessoa, mquina, programa, etc... efetua converso entre duas linguagens

conceitos texto linguagem fonte objeto

: : : :

elemento trabalhado universo conhecido entrada do tradutor sada do tradutor

02

tradutor

de um modo geral

elementos envolvidos
LF T F TRADUTOR LO T O

conceitos fonte objeto

texto TF TO

linguagem LF LO

LF: Linguagem Fonte. o conjunto de todas as possveis entradas para o tradutor. a linguagem que o tradutor conhece e sobre a qual ele vai trabalhar.

02

tradutor

de um modo geral

elementos envolvidos
LF T F TRADUTOR LO T O

conceitos fonte objeto

texto TF TO

linguagem LF LO

TF: Texto Fonte. Pertence a linguagem fonte. Entrada para o tradutor. o texto que deve ser convertido.

02

tradutor

de um modo geral

elementos envolvidos
LF T F TRADUTOR LO T O

conceitos fonte objeto

texto TF TO

linguagem LF LO

LO: Linguagem Objeto. Conjunto de todas as possveis sadas do tradutor. a linguagem sobre a qual vo ser gerados os resultados do trabalho de traduo.

02

tradutor

de um modo geral

elementos envolvidos
LF T F TRADUTOR LO T O

conceitos fonte objeto

texto TF TO

linguagem LF LO

TO: Texto Objeto. Pertence a Linguagem Objeto. Sada do tradutor. o texto gerado pelo tradutor como converso do texto fonte fornecido.

02

de um modo geral

tradutor

caractersticas

deve gerar um texto correspondente mantendo equivalncia de significados e mantendo apenas as informaes relevantes

02

para o estudo de compiladores

tradutor

Tradutores de um modo geral


subconjunto para o estudo de

compiladores

A traduo que nos interessa


(subconjunto)

feita por programas de computador feita de forma automtica entre linguagens de programao

02

para o estudo de compiladores

tradutor

Com a limitao 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

Tradutores de um modo geral


subconjunto para o estudo de

compiladores

02

para o estudo de compiladores

tradutor
Linguage m de mquina

Montadores
Linguage m de baixo nvel MONTADOR

Linguagem de entrada LP de baixo nvel Linguagem de sada LP de mquina

02

para o estudo de compiladores

tradutor
(?) Propicia execuo futura

Compiladores
Linguage m de alto nvel COMPILADOR

A linguagem objeto do compilador pode ser de alto ou de baixo nvel. A linguagem fonte deve ser de alto nvel. O cdigo gerado pela compilao ser executado posteriormente (e provavelmente inmeras vezes). Neste outro momento sero fornecidos os dados e sadas particulares a cada execuo.

02

para o estudo de compiladores

tradutor
(?) Propicia execuo futura

Compiladores
Linguage m de alto nvel COMPILADOR

Por esta classificao tambm so considerados como compiladores: filtros e preprocessadores. Filtro: quando o tradutor efetua converso entre duas linguagens de alto nvel muito semelhantes Preprocessador: preparao de um texto para que seja submetido posteriormente a um outro compilador.

02

para o estudo de compiladores

tradutor
Dados de entrada

Interpretadores
(?) Propicia execuo Cdigo Executvel futura
Gerado Dados de sada

No compilador

No interpretador Nos interpretadores no existe texto objeto. A traduo e a execuo do cdigo feita ao mesmo tempo. No existe tempo de compilao e tempo de execuo.

Dados de entrada

Linguagem alto nvel


Texto fonte

Interpretador

Dados de sada

02

para o estudo de compiladores

tradutor
Linguage m de alto nvel

Decompiladores
Linguage m de baixo nvel DECOMPILADOR

Linguagem de entrada LP de baixo nvel Linguagem de sada LP de alto nvel

03

O que so

linguagem de programao

Linguagem a ser utilizada como meio de comunicao entre homem e mquina.

Para que servem

Estabelecer uma linguagem a meio caminho entre a linguagem utilizada pelo homem e linguagem utilizada pela mquina. Capacitar o usurio a ajudar a mquina a resolver problemas de seu interesse.

03

A primeira traduo:

linguagem de programao

Do problema para a linguagem de programao Feita pelo homem, Chamada de programao

As outras tradues:

Da linguagem de programao para a soluo a ser executada Feita pela mquina, Uma delas a compilao

04
1940 1950 1960 1970 1980 1990

2000

2010

histrico de compiladores

estgio pr-lingual (1940)

Programas feitos em linguagem de mquina. Primeiras idias: Construo de mecanismos para facilitar o entendimento pelo homem destes programas. Conceito de compilador no existia ainda. As mquinas eram programadas pelo cdigo dos programas, mas tambm por botes, interruptores e plugues.

1944: Konrad Zuze, engenheiro alemo, projetou na Sua o Plankalkl (LP com declarao de variveis, valores estruturados, passagem de parmetros em procedimentos, etc). No foi implementada. Fim dos anos 40: Herman Goldstine lana os fluxogramas (forma de alto nvel para representar programas). Sugesto de John Von Newmann, Adele Goldstine e Arthur Banks.

Fim dos anos 40, aparecem implementaes do Short Code / Short Order Code (linguagem interpretada e muito simples).

04
1940 1950 1960 1970 1980 1990

2000

2010

histrico de compiladores

reinado do baixo nvel (1950)

Computadores passam a ser programados em Assembly. Aplicaes envolviam clculo numrico e muito esforo era feito para converter frmulas numricas em instrues Assembly. Para melhorar esta tarefa surgem as primeiras linguagens de alto nvel: os Autocodes. Possuam 26 identificadores (de A a Z) que permitiam a converso simples de frmulas.

O primeiro compilador real AUTOCODE (mquina existente, implementado e em uso) em 1952 por Donald Knuth. Primeiros compiladores. No existe data exata, nem o nome do inventor, nem local. Vrios grupos trabalharam, experimentaram e implementaram muitas linguagens ao mesmo tempo. Primeiro grande projeto de linguagem de programao: FORTRAN (IBM Mathematical FORmula TRANslation System) em 1954 por John Backus. Envolveu equipe de 18 homens ano.

04
1940 1950 1960 1970 1980 1990 2000 2010

histrico de compiladores

explodem as linguagens (1960)

surgimento de uma srie de linguagens de programao, como por exemplo as mais significativas: COBOL, Lisp, Algol 60, BASIC, PL/1. Novas idias para a poca: Dados estruturados (COBOL, PL/1), Recurso (Lisp Algol60), Interao com o usurio (BASIC) e Big is beautiful (COBOL e PL/1) Programas srios ainda feitos em assembly

04
1940 1950 1960 1970 1980 1990 2000 2010

histrico de compiladores

menor dependncia da mquina (1970)

Palavra de ordem: portabilidade. Surgimento da programao estruturada. Aparecimento de Linguagens estruturadas como: Pascal, Algol 68 (finalizada em 1975) e C. Avanos da tecnologia de compiladores. Linguagem Assembly ainda muito usada para operaes crticas de tempo de resposta.

04
1940 1950 1960 1970 1980 1990 2000 2010

histrico de compiladores

reduzindo complexidades (1980)

Reduo na complexidade da programao e do gerenciamento da programao, obstculo para a construo e o funcionamento dos sistemas. Linguagens clssicas 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 programao: Smalltalk (programao orientada a objeto) e Miranda (programao funcional). Grande parte do cdigo da sonda Giotto que explorou o cometa Halley em 14 de maro de 1986 foi feito em assembly.

04
1940 1950 1960 1970 1980 1990 2000 2010

histrico de compiladores

paralelismo e distribuio (1990)

Incluso sistemtica destes conceitos em uma linguagem: occam, extenses de paralelismo em C++ e novas linguagens: Hermes, Linda, Orca, SR, Ada 9X. Introduo do hardware RISC (com operaes no intuitivas) pode finalmente decretar o fim do uso da linguagem assembly.

04
1940 1950 1960 1970 1980 1990 2000 2010

histrico de compiladores

componentes e web (2000)

Novas verses das linguagens comerciais prevem cada vez mais incluso de conceitos de orientao a objeto. Desenvolvimento em n camadas. Suporte e integrao ao ambiente web. Aplicaes podem estar tratando um grande volume de transaes. Necessidade de otimizaes de recursos.

04

1940

1950

1960

Primeiros compiladores Programas difceis de se construir. Sem tcnicas, conceitos, documentao, mquina, etc. Programas autnomos. Sem estrutura uniforme. Operao especifica e manual. Transformaes sucessivas em formas intermedirias melhoradas para se chegar ao executvel.

histrico de compiladores

1970

1980

1990

2000

2010

Compiladores atuais Linguagens poderosas. Ambientes de programao sofisticados. Ferramentas automticas. Integrados com outros elementos do sistema. Operao simplificada e relativamente padro.

04

1940

1950

1960

Primeiros compiladores Programas difceis de se construir. Sem tcnicas, conceitos, documentao, mquina, etc. O que se verificou Programas autnomos. Sem estrutura uniforme. nmero reduzido de componentes bsicos a Operao especifica e manual. Transformaes serem utilizados sucessivas em formas intermedirias melhoradas para funes padronizadas. se chegar ao executvel.
O que provocou as mudanas: Acmulo de experincias. Observao dos resultados. Desenvolvimento de teorias e tcnicas Compiladores atuais relacionadas a compiladores. Linguagens poderosas. Desejo/necessidade/vontade dos usurios. Ambientes de programao sofisticados. Ferramentas automticas. Integrados com outros elementos do sistema. Operao simplificada e relativamente padro.

histrico de compiladores

1970

1980

1990

2000

2010

05

classificao das linguagens

classificaes

Por Por Por Por

paradigma paradigma geral gerao dependncia de mquina

05

por paradigma

classificaes

Conceito de paradigma
Conjunto de mtodos coerentes que foram usados no tratamento de um domnio especfico de problemas. Pelos quatro maiores paradigmas
Linguagem Linguagem Linguagem Linguagem

imperativa orientada a objeto de programao funcional de programao em lgica

05

por paradigma geral

classificaes

Outra classificao pela forma de pensar

Operacionais ou No declarativas
Onde voc determina COMO resolver o problema

Declarativas
Onde voc determina O QUE quer resolver

05

por gerao

classificaes

Primeira Gerao Segunda Gerao Terceira Gerao Quarta Gerao Quinta Gerao Sexta Gerao

linguagens de mquina linguagens Assembly linguagens procedurais linguagens de Aplicao tcnicas de IA, linguagens de inferncia redes Neurais

05

p/dependncia de mquina

classificaes

Linguagem de baixo nvel (LLL)


Linguagem de Mquina (ML) Linguagem de Montagem (AL), Exemplo: Assembly, Autocode, Bytecode

Linguagem de Alto Nvel (HLL)


ou linguagem orientada a Usuario (UOL) Exemplo: FORTRAN, Algols, Pascal, C, Ada

Linguagem de Altssimo Nivel (VHLL)

Exemplo: SETL, Prolog, Miranda

Ling. orientada a problemas especficos (POL)

05

p/dependncia de mquina

classificaes

Linguagem orientada a Problemas Especficos Linguagem de Altssimo Nvel

Linguagem de Alto Nvel

Linguagem de Mquina

06

viso geral

processo de traduo

Texto fonte bruto

exemplo:

PREPROCESSADOR 1
Texto fonte preparado 1

PREPROCESSADOR 2
Texto fonte preparado 2

COMPILADOR
Texto em linguagem de montagem

MONTADOR
Texto em ling mquina relocvel

LOAD/LINK-EDITOR
Texto em ling mquina absoluta

06

preprocessadores

processo de traduo
Texto fonte bruto

Produzem dados de entrada para os compiladores Realizam:


PREPROCESSADOR 1
Texto fonte preparado 1

processamento de macros incluso de arquivos (header files) preprocessadores racionais (flow-of-control, data structures) extenses de linguagem (Equel)

PREPROCESSADOR 2
Texto fonte preparado 2

COMPILADOR
Texto em linguagem de montagem

um mdulo opcional Podem existir vrios encadeados at se chegar ao compilador

MONTADOR
Texto em ling mquina relocvel

LOAD/LINK-EDITOR
Texto em ling mquina absoluta

06

compiladores

processo de traduo
Texto fonte bruto

o ltimo compilador do processo de traduo os proprocessadores tambm so compiladores produzem textos em linguagem de montagem

PREPROCESSADOR 1
Texto fonte preparado 1

PREPROCESSADOR 2
Texto fonte preparado 2

COMPILADOR
Texto em linguagem de montagem

MONTADOR
Texto em ling mquina relocvel

LOAD/LINK-EDITOR
Texto em ling mquina absoluta

06

montadores (assemblers)

processo de traduo
Texto fonte bruto

Embutido na maior parte dos compiladores comerciais, embora no seja parte da compilao. Trabalha sobre linguagem assembly Implementao mais comum atravs dos montadores de duas passagens

PREPROCESSADOR 1
Texto fonte preparado 1

PREPROCESSADOR 2
Texto fonte preparado 2

COMPILADOR
Texto em linguagem de montagem

passo: leitura do cdigo fonte primeiro passo procura todos os identificadores e monta tabela de smbolos separada do compilador segundo passo monta linguagem de mquina relocvel.

MONTADOR
Texto em ling mquina relocvel

LOAD/LINK-EDITOR
Texto em ling mquina absoluta

06

loader/linkeditores

processo de traduo
Texto fonte bruto

Resolve referncias de dados e instrues entre os vrios mdulos que devem compor o cdigo executvel. Monta um cdigo absoluto de vrios mdulos em linguagem de maquina relocvel (vrias compilaes ou bibliotecas prontas)

PREPROCESSADOR 1
Texto fonte preparado 1

PREPROCESSADOR 2
Texto fonte preparado 2

COMPILADOR
Texto em linguagem de montagem

MONTADOR
Texto em ling mquina relocvel

LOAD/LINK-EDITOR
Texto em ling mquina absoluta

06

exemplo de traduo (1/3)

processo de traduo
Texto fonte bruto

Suponha a expresso x = 2y + 7 (texto fonte) Precisa ser preparada Depois compilada transformada em linguagem assembly de uma mquina hipottica

PREPROCESSADOR 1
Texto fonte preparado 1

PREPROCESSADOR 2
Texto fonte preparado 2

COMPILADOR
Texto em linguagem de montagem

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

MONTADOR
Texto em ling mquina relocvel

LOAD/LINK-EDITOR
Texto em ling mquina absoluta

06

exemplo de traduo (2/3)

processo de traduo
Texto fonte bruto

formato da instruo

cdigo da operao, registrador, operador (endereco ou absoluto), forma de endereamento cdigo das operaes: load 0001, store 0100, mul 0010, add 0011 00: na instruo 01: endereamento direto 10: endereamento indireto

PREPROCESSADOR 1
Texto fonte preparado 1

cdigos de operao

PREPROCESSADOR 2
Texto fonte preparado 2

formas de endereamento

COMPILADOR
Texto em linguagem de montagem

MONTADOR
Texto em ling mquina relocvel

endereo ocupa quatro bytes

LOAD/LINK-EDITOR
Texto em ling mquina absoluta

06

exemplo de traduo (3/3)

processo de traduo
Texto fonte bruto

Transformao em cdigo de mquina relocvel


PREPROCESSADOR 1
Texto fonte preparado 1

0001 0010 0011 0100

01 01 01 01

00000000 00000010 00000111 00000100

01 * 00 00 01 *

PREPROCESSADOR 2
Texto fonte preparado 2

transformao em cdigo de mquina absoluto


COMPILADOR
Texto em linguagem de montagem

endereo de carga 00001001 refazer endereos relocaveis

MONTADOR
Texto em ling mquina relocvel

LOAD/LINK-EDITOR
Texto em ling mquina absoluta

07

modelo anlise-sntese
Texto Fonte

funcionamento compilador

Compilador

Texto Objeto

07

modelo anlise-sntese

funcionamento compilador

O que o modelo

Enxerga todo o trabalho do compilador dividido em dois grandes blocos: a anlise e a sntese.

Bloco de anlise

Quebra o programa fonte em suas partes constituintes, Cria uma representao intermediria equivalente ao programa fonte, As operaes realizadas pelo programa fonte, e os elementos utilizados so identificados, Grava estas informaes numa estrutura hierrquica (rvore sinttica estendida)
Constri o programa objeto a partir da representao intermediria Requer tcnicas mais especializadas

Bloco de sntese

07

partes do compilador
texto fonte

funcionamento compilador

texto objeto

07

analisador lxico Objetivo principal:

funcionamento compilador

identificar tomos

Faz anlise linear do texto fonte Varre todo o fonte da esquerda para a direita Agrupa caracteres em tomos (tokens) Checa com padres determinados Classifica tomos identificados Identifica palavras reservadas da linguagem Utiliza construes no recursivas Monta registros iniciais na tabela de smbolos

07

analisador sinttico

funcionamento compilador

Objetivo principal:

verificar seqncia de tomos


Faz anlise hierrquica do texto fonte Agrupa os tomos em frases gramticas Trabalha sobre regras (Gramticas) Pode conter regras recursivas Representa frases gramaticais em uma rvore Ex: balanceamento de parntesis, ...

07

analisador semntico

funcionamento compilador

Objetivo principal:

verificar coerncia de significados


Pode alterar contedo da rvore sinttica montada Tarefa importante a checagem de tipo Efetua ou no converses de tipo (depende da definio da linguagem) Pode eliminar ineficincias na estrutura

07

gerador de cdigo intermedirio

funcionamento compilador

Objetivo principal:

fazer primeira traduo independente


Gera representao numa terceira linguagem Gera programa para execuo em maquina abstrata, fictcia Deve gerar cdigo que seja fcil de produzir e ao mesmo tempo fcil de traduzir Existem vrios tipos de representao usados O cdigo deve ser independente de mquina

07

otimizador de cdigo

funcionamento compilador

Objetivo principal:

otimizar cdigo

Elimina redundncias Reduz ineficincias Torna o cdigo mais simples e mais rpido Diminui o numero de instrues Existe grande variedade de tipos de otimizao H classe de compiladores com nfase nesta fase

07

gerador de cdigo final Objetivo principal:

funcionamento compilador

gerar cdigo final da compilao

Compe-se de cdigo de mquina relocvel ou assembly As instrues em cdigo intermedirio so traduzidas em de instrues de mquina Aspecto critico: uso de registradores

07

gerenciador tab smbolos

funcionamento compilador

Objetivo principal:

gerenciar a tabela de smbolos


Estrutura de dados global Mdulo de cdigo e a prpria estrutura de dados Grava identificadores e smbolos que foram encontrados no programa fonte Armazena informaes sobre vrios atributos destes smbolos Exemplos de atributos: localizao de memria, tipo da varivel, escopo da varivel, numero e tipo dos parmetros das rotinas, ... utilizada por todas as outras partes

07

rotinas de erro
Objetivo principal:

funcionamento compilador

controlar a ocorrncia 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 sero descritos os vrios erros Exemplo de erros lxicos, sintticos, semnticos Pode ser uma rotina independente ou diluda

07

compilao

funcionamento compilador

exemplo da compilao completa de uma sentena

07

partes do compilador
texto fonte

funcionamento compilador

texto objeto

07 modelo front-end/back-end

funcionamento compilador

O que o modelo

trabalho dividido em dois blocos: front-end e back-end Partes/subpartes do compilador dependentes da linguagem fonte totalmente independente da maquina objeto analise lxica, anlise sinttica, anlise semntica, gerao de cdigo intermedirio, parte da rotina de tratamento de erro e parte da tabela de smbolos. Partes/subpartes do compilador dependentes da maquina objeto No dependem da linguagem fonte otimizao de cdigo, gerao de cdigo final, parte da rotina de tratamento de erro e parte da tabela de smbolos.

Bloco de Front-end

Bloco de Back-end

07 modelo front-end/back-end

funcionamento compilador

Utilidade do modelo

Reaproveitamento do investimento em desenvolvimento pelas empresas que produzem ambientes de desenvolvimento ou linguagens de programao Front-end refeito quando muda a linguagem fonte Back-end refeito quando muda a plataforma de mquina usada

Tambm conhecido com o nome de

modelo Vanguarda-Retaguarda

07

modelos x partes

funcionamento compilador

07

modelos x partes

funcionamento compilador

You might also like