You are on page 1of 5

Diferena entre um compilador e um interpretador O compilador recebe como entrada um programa em uma linguagem fonte e o traduz para um programa

em outra linguagem equivalente (linguagem objeto). J o interpretador, em vez de produzir um programa objeto como resultado, executa diretamente as operaoes especificadas no programa fonte sobre as entradas fornecidas pelo usurio. Diferena entre fase e passo de um compilador: Um passo de compilador corresponde quantas vezes o cdigo fonte lido como um todo. Estudamos o compilador de dois passos (front-end e back-end). Um passo composto por uma ou mais fases. As fases que estudamos so: Anlise Lxica, Anlise Sinttica, Anlise semntica, Verificao de Tipos, Traduo, Gerao de cdigo intermedirio, Gerao de cdigo. Analisador Lxico: L o fluxo de caracteres que compe o programa fonte e os agrupa em sequncias significativas, chamadas lexemas. Para cada lexema, o analisador lxico produz como sada um token no formato <nome-token, valor-atributo> Analisador Sinttico: utiliza os primeiros componentes dos tokens produzidos pelo analisador lxico para criar uma representao intermediria do tipo rvore, que mostra a estrutura gramatical da sequncia de tokens. Analisador Semntico: utiliza a rvore de derivao e as informaes na tabela de smbolos para verificar a consistncia semntica do programa fonte com a definio da linguagem. Uma parte importante da anlise semntica a verificao de tipo, em que o compilador verifica se cada operador possui operandos compatveis. Tabela de Smbolos: so estruturas de dados usadas pelos compiladores para conter informaes sobre as construes do programa fonte. As informaes so coletadas pelas fases de anlise de um compilador e usadas pelas fases de sntese para gerar o cdigo objeto. Gerador de Cdigo Intermedirio: Aps a anlise sinttica e semntica do programa fonte, ocorre a gerao de uma representao intermediria (facilmente produzida e traduzida) de baixo nvel ou do tipo linguagem de mquina, que possvel imaginar como um programa para uma mquina abstrata. Gerador de Cdigo: recebe como entrada uma representao intermediria do programa fonte e o mapeia em uma linguagem objeto. Se a linguagem objeto for cdigo de mquina de alguma arquitetura, devem-se selecionar os registradores ou localizaes de memria para cada uma das variveis usadas pelo programa. Anlise (Front-End): Dependente da linguagem fonte. Subdivide o programa fonte em partes constituintes e impe uma estrutura gramatical sobre elas. Usa essa estrutura para criar uma representao intermediria do programa fonte. Coleta informaes sobre o programa fonte e as armazena em uma estrutura de dados chamada

tabela de smbolos, que passada adiante junto com a representao intermediria para a parte de sntese. Sntese (back-end): Dependente da linguagem objeto. Constri o programa objeto desejado a partir da representao intermediria e das informaes na tabela de smbolos.

Mtodos de Anlise Sinttica


Mtodos top-down

1. Recursivo : tentativa e erro [ir e voltar caro]. No tem o uso de lookaheads. 2. Parser preditivo: No tem como errar. S olha uma alternativa se for correta, atravs do first.
Mtodos bottom-up Operaes que pode ser realizadas pelo analisador sinttico shift-reduce ( uma forma de anlise ascendente) so: shift, reduce, accept, error

1.SLR: no tem lookahead (pega o prximo). Utiliza conjunto de itens cannicos de uma
gramtica LL.

2. LR: mais poderoso mas as tabelas so grandes 3. LALR: tabelas com tamanho igual ao SLR mas tem lokahead. Utiliza os itens cannicos de
uma gramtica que LR. Tabela menor pois h a juno de estados, o que pode acarretar problemas de reduce-reduce (A juno dos lookaheads pode se tornar o conjunto follow inteiro. Lembrando que os lookaheads sempre so um subconjunto do follow do no-terminal da regra de derivao em questo)

Motivos para se usar linguagem intermediria:

1. Desenvolver um front-end comum at a linguagem intermediria e depois implementar o backend para diferentes arquiteturas 2. Compiladores otimizantes trabalham sobre a linguagem intermediria, que mais facilmente otimizvel. Alocao de Memria Esttica x Alocao de Memria Dinmica

Esttica: se ela puder ser feita pelo compilador examinando apenas o texto do programa, e no o que o programa faz quando executado. Desvantages: Temos que saber o tamanho do objeto a ser alocado e restringe recursividade.

Dinmica: se ela s puder ser decidida enquanto o programa est executando. Muitos compiladores utilizam alguma combinao das duas estratgias a seguir para a alocao dinmica de memria: 1. Memria de pilha: Nomes locais a um procedimento tm espao alocado em uma pilha. 2. Memria heap: Os dados que podem sobreviver chamada do procedimento que os criou usualmente so alocados em um heap de memria reutilizvel. Desvantagens: Acesso a globais caro no caso de pilhas; No caso de display, preciso atualiza-lo na entrada e restaur-lo na sada. Atributos Herdados X Sintetizados Compilao usa sintetizados. TS funciona como herdados Herdados: O valor do seu n definido em termos dos seus pais e/ou irmaos e/ou si mesmo. Sintetizados: O valor do seu n definido em termos dos seus filhos e/ou de si mesmo.

Quando possvel colocar um objeto na pilha em vez de colocar no heap? Para isso, ele deve poder ser eliminado ao trmino da funo (resposta meio incompleta de uma prova antiga) Quais so os melhores tipos de organizao da TS (considerando a pesquisa)? Em funo do tempo: Floresta boa pois comea-se buscando apenas na rvore do nvel corrente. Se no encontrar, passa para as rvores dos outros nveis. Hash tambm bom, desde que tenha uma funo hash bem escolhida. Em funo do espao: A melhor abordagem a linear, pois todos os campos da mesma contm informao sobre os smbolos (no requer espao adicional)

Traduo dirigida pela sintaxe So as especificaes de mais alto nvel para as tradues. Elas escondem detalhes da implementao e liberam os usurios da especificao explcita da ordem de traduo. Esquemas de traduo Indicam a ordem na qual as regras semnticas devem ser avaliadas, portanto permitem que sejam mostrados detalhes de implementao.

Qudruplas e SSA Necessita gerncia de temporrios

Triplas -

Triplas Indiretas -

Sabemos a rea dos tmps e seus tipos Fcil otimizao Polui tabela de smbolos

Necessita pesquisa no cdigo Difcil -

Necessita pesquisa no cdigo fcil -

Anlise Descendente (descida recursiva LL) e ascendente (LR): Gramticas descendentes so mais difceis de projetar, ja que deve-se eliminar recurso a esquerda e fatorar a esquerda. Sobre hierarquias: Descendente >>descida recursiva LL: Utiliza um procedimento para cada no terminal. Terminais do lado direito so casados com a entrada no momento apropriados e no terminais direita resultam em chamadas de seus procedimentos. Retrocesso quando a produo errada foi escolhida. Ascendente >> anlise shift-reduce: escolhe, com base no lookahead e no conteudo da pilha, se a proxima entrada transferida para a pilha (shift) ou se haver reduo em alguns simbolos da pilha (reduce). A reduo transfere o corpo de uma produo para o topo da pilha e a substitui pela cabea da produo. O contedo da pilha sempre um prefixo vivel.

You might also like