Professional Documents
Culture Documents
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
: : : :
02
tradutor
de um modo geral
elementos envolvidos
LF T F TRADUTOR LO T O
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
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
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
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
tradutor
compiladores
(subconjunto)
feita por programas de computador feita de forma automtica entre linguagens de programao
02
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.
compiladores
02
tradutor
Linguage m de mquina
Montadores
Linguage m de baixo nvel MONTADOR
02
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
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
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
Interpretador
Dados de sada
02
tradutor
Linguage m de alto nvel
Decompiladores
Linguage m de baixo nvel DECOMPILADOR
03
O que so
linguagem de programao
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
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
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
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
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
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
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
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
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
classificaes
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
05
classificaes
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 Mquina (ML) Linguagem de Montagem (AL), Exemplo: Assembly, Autocode, Bytecode
05
p/dependncia de mquina
classificaes
Linguagem de Mquina
06
viso geral
processo de traduo
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
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
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
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
MONTADOR
Texto em ling mquina relocvel
LOAD/LINK-EDITOR
Texto em ling mquina absoluta
06
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
LOAD/LINK-EDITOR
Texto em ling mquina absoluta
06
processo de traduo
Texto fonte bruto
PREPROCESSADOR 1
Texto fonte preparado 1
01 01 01 01
01 * 00 00 01 *
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
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
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:
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:
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
funcionamento compilador
Objetivo principal:
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
funcionamento compilador
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
funcionamento compilador
Objetivo principal:
07
rotinas de erro
Objetivo principal:
funcionamento compilador
07
compilao
funcionamento compilador
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
modelo Vanguarda-Retaguarda
07
modelos x partes
funcionamento compilador
07
modelos x partes
funcionamento compilador