Você está na página 1de 36

Como funcionam os Compiladores e os Interpretadores

Trabalho realizado por:


Joana Marques n17665 Ricardo Fernandes n18248 Ricardo Seromenho n17648

Revisto por Antnio L. Bajuelos, Maro 2003

I.

Execuo de Programas

Programa em Linguagem de Mquina

Uma linguagem de programao um conjunto de ferramentas, regras de sintaxe e smbolos ou cdigos que nos permitem escrever programas de computador. A primeira e mais primitiva linguagem de computador a prpria linguagem mquina (0s e 1s). Um programa era difcil, longo e principalmente caro de o construir.

Era tambm difcil de ser entendido por outros programadores.


Essa complexidade levou necessidade de desenvolver novas tcnicas e ferramentas.

I.

Execuo de Programas

Linguagem de Montagem

A resoluo do problema passou pela criao de uma linguagem em que os cdigos numricos foram substitudos por mnemnicos. O nome dessa linguagem ASSEMBLY LANGUAGE.

Ento ser necessrio um outro programa que leia o programa escrito nessa linguagem alternativa e o traduza para a linguagem nativa do computador!!!
O processo de traduo da linguagem de montagem para a linguagem de mquina realizada por um programa chamado ASSEMBLER.

I.

Execuo de Programas

Linguagem Assembler
;****************************************************** ;*** INTERFACE ROUTINES *** ;****************************************************** ; Read_Char PROC ;read char from input buffer ; ;Entry: CL = port number ; ;Exit: AL = char (z set if none) ; push cx ;preserve registers push bx ; cmp cl,0 ;only port 0 allowed jz rc_1 ; _Int_Error 03301h ;invalid port number ; rc_1: mov al,Rx_InPtr sub al,Rx_OutPtr ;inptr - outptr = num. chars jz rc_zex ;if zero exit

I.

Execuo de Programas

Linguagem de Programao

Foram desenvolvidas diversas linguagens de programao:


FORTRAN (1957) ALGOL (1958) COBOL (1959) PASCAL (1963) BASIC (1965) ADA (1968) DoD (1969) C (1982) e mais tarde o C++ (1986) Etc.

Estas novas linguagens foram afastando cada vez mais o programador do nvel de mquina.

I.
Traduo

Execuo de Programas

Os programas em linguagem de alto nvel tambm precisam de ser traduzidos para linguagem de mquina.

Traduo
Cdigo Fonte Cdigo Objecto

I.
Montagem

Execuo de Programas

O processo de montagem traduz um programa escrito numa LP num programa equivalente em linguagem maquina.

Processo de Montagem
Cdigo Fonte

Traduo
Linguagem de Mquina

Mas com o qu ???

Com Compiladores ou Interpretadores

II . Compiladores
O que um compilador

Um compilador tem a finalidade de converter uma linguagem Linguagem Fonte de fcil escrita e leitura para os programadores, numa linguagem Linguagem alvo ou objecto que possa ser executada pelas mquinas.
O cdigo executvel gerado pelo compilador dependente do sistema operacional e da linguagem de mquina para o qual o cdigo fonte foi traduzido. A enorme variedade de compiladores existentes bem vinda, visto que existem milhares de linguagens fonte, e as linguagens alvo so tambm muito variadas.

II . Compiladores
O que um compilador

Os compiladores so por vezes classificados como uni-passo, multi-passo, optimizador, ou corrector de erros, dependendo da forma como foram construdos ou da funcionalidade para que so pretendidos.
Comearam a aparecer no incio da dcada de 50. Muito do trabalho inicial dos compiladores resumia-se a traduo de frmulas aritmticas para cdigo mquina.

II . Compiladores
O que um compilador

O primeiro compilador de FORTRAN, por exemplo, demorou 18 trabalhosos meses para implementar.

Boas linguagens de implementao, ambientes de programao, e ferramentas de software tm tambm vindo a ser desenvolvidas. Com estes avanos, um bom compilador pode ser implementado at por alunos!!! num projecto de um semestre de um curso de desenho de compiladores.

II . Compiladores
O que um compilador

Ilustrao do funcionamento de um compilador:

II . Compiladores
Modelo Anlise- sntese da compilao

Podemos dividir o processo de compilao em duas fases:


Anlise : parte o programa fonte em peas constituintes e cria uma representao intermdia do programa fonte. Sntese : Constri o desejado programa alvo (cdigo de mquina) a partir da representao intermdia.

A parte da sntese a que requer tcnicas mais especializadas.

II . Compiladores
Modelo Anlise- sntese da compilao

Anlise

Anlise Lxica

Anlise Sintctica

Anlise Semntica

II . Compiladores
Modelo Anlise- sntese da compilao

Sntese

Gerao do Cdigo

Optimizao do Cdigo

II . Compiladores
Contexto de um compilador

Muitos outros programas podem ser necessrios para criar um programa alvo executvel.

Biblioteca, Ficheiros dos Objectos Relocalizados

II . Compiladores
Primos de um compilador

Pr-processadores: produzem o input para os compiladores; Montadores: Alguns compiladores produzem cdigo Assembler que passado para um montador para posterior processamento. Alguns compiladores produzem o trabalho dos montadores;

II . Compiladores
Primos de um compilador

Montagens bi-passo:

I Passo - todos os identificadores que denotam localizaes de armazenamento, so encontrados e armazenados numa tabela de smbolos II Passo - traduz cada cdigo de operao para sequncias de bits representando essa operao na linguagem mquina

Carregadores e editores de unio (Linker):

Carregar consiste em tomar o restabelecimento do cdigo mquina, alterando os endereos restabelecidos e colocando as instrues alteradas e dados na memria nas localizaes convenientes. O editor de unio permite-nos fazer um nico programa dos vrios ficheiros de cdigo de mquina relocalizvel;

II . Compiladores
Primos de um compilador

Bibliotecas:

O desenvolvimento de um programa certamente utilizar diversas operaes que so comuns a muitos outros programas. Um programa de alto nvel possivelmente conter diversas chamadas de biblioteca. Essas funes no devem ser confundidas com as instrues da linguagem na realidade, so pequenos programas externos que so chamados atravs de instrues especiais chamado biblioteca.

II . Compiladores
Anlise do programa fonte

Na compilao a anlise consiste em 3 partes:


Anlise Lxica ou Linear:

Em que a cadeia de caracteres que forma a estrutura do programa fonte lido da esquerda para a direita e agrupado em tokens que so sequncias de caracteres tendo o sentido colectivo.
A sua funo bsica o reconhecimento e a classificao das estruturas elementares ou classes sintcticas das linguagens.

II . Compiladores
Anlise do programa fonte

Anlise sintctica ou hierrquica:

Na qual caracteres ou tokens so agrupados hierarquicamente em coleces aninhadas com sentido colectivo. Verifica se a estrutura geral do texto ou programa fonte est correcta.

II . Compiladores
Anlise do programa fonte

Anlise semntica:

Na qual so executadas certas paragens para assegurar que os componentes de um programa so juntamente ajustados em sentido absoluto. Verifica se o programa fonte tem erros semnticos e rene a informao dos tipos para a fase de gerador de cdigo subsequente. Uma componente importante da anlise semntica a verificao do tipo.

II . Compiladores
Fases de um compilador

II . Compiladores
Fases de um compilador

Gerenciador da tabela de smbolos:


Uma funo essencial de um compilador registar os identificadores usados no programa fonte e coleccionar informao sobre vrios atributos de cada identificador. Uma tabela de smbolos uma estrutura de dados contendo o registo de cada identificador, com campos para os atributos do identificador.

II . Compiladores
Fases de um compilador

Tabela de cdigos:
uma estrutura criada pela anlise semntica de um compilador, que mantm registadas as linhas cdigo intermedirio geradas por algum tempo. Em geral as linhas de cdigo geradas permanecem nesta tabela enquanto no esto totalmente preenchidas.

II . Compiladores
Fases de um compilador

Deteco de erros e aviso do erro:


Cada fase pode encontrar erros. Porm, depois de descobrir um erro, a fase tem de ocupa-se de alguma maneira com aquele erro, para que a compilao possa prosseguir.

As fases de anlise sintctica e semntica normalmente tratam de uma grande fraco dos erros detectveis pelo compilador.

II . Compiladores
Fases de um compilador

Gerao de cdigo intermdio:


Depois da anlise sintctica e semntica, alguns compiladores geram uma explcita representao intermdia do programa fonte. Podemos pensar nesta representao intermdia como um programa para uma mquina abstracta

II . Compiladores
Fases de um compilador

Optimizao do cdigo:
Esta fase tenta melhorar o cdigo intermdio, de forma a que resulte num cdigo de mquina mais rpido a executar.

Gerao do cdigo:
A fase final do compilador a gerao de cdigo alvo, consistindo normalmente no restabelecimento no cdigo mquina. Neste ponto, aps o programa fonte ter sido analisado e aprovado, segundo a sua sintaxe, e livre de erros semnticos, o compilador tem condies de escrever um programa equivalente na linguagem alvo.

II . Compiladores
Factores condicionantes da organizao fsica dos compiladores

Dividir o processo de compilao em diversas fases "lgicas" permite um melhor entendimento do processo como um todo e leva a uma implementao mais estruturada. A eficincia e os recursos disponveis na mquina hospedeira do compilador influenciam de maneira decisiva um item importantssimo na implementao de um compilador: o nmero de passos de compilao, para poder optimizar o tempo de compilao.

II . Compiladores
Os compiladores e os autmatos

Os compiladores tm como base os autmatos.


Dentro da rea de Teoria das Linguagens Formais, encontram-se os conceitos de gramtica e autmatos, que do base para a maioria das tcnicas utilizadas hoje para se implementar compiladores. Daqui vm os principais conceitos utilizados pelos compiladores modernos. Um lxico deve reconhecer tokens, no produzi-los. A descrio de tokens de maneira a que estes possam ser reconhecidos feita atravs de aceitadores finitos (autmato finito).

III . Interpretadores
Como funcionam os interpretadores

O funcionamento dos interpretadores muito parecido ao dos compiladores.


O interpretador traduz o cdigo linha a linha. O cdigo fonte no totalmente traduzido antes de ser executado. No existem fases distintas nem se produz cdigo intermedirio. Passa o tempo todo a ler e a traduzir cdigo.

III . Interpretadores
Os Exemplos de interpretadores

Internet; Excel, Word Basic, Access, ... ; SmallTalk; AutoLisp; Lisp.

IV . Comparao
Vantagens
Execuo mais rpida

Desvantagens
Vrias etapas de traduo Programao final maior, necessitando mais memria para a sua execuo Processo de correco de erros e depurao mais demorado Execuo do programa mais lenta Estruturas de dados demasiado simples Necessrio fornecer o programa fonte ao utilizador

Compiladores

Permite estruturas de programao mais completas Permite a optimizao do cdigo fonte Depurao do programa mais simples

Interpretadores

Consome menos memria Resultado imediato do programa ou rotina desenvolvida

V . Exemplos de Linguagens
Compiladas e Interpretadas

Java;

Basic .

Fim Da Apresentao

Você também pode gostar