Anda di halaman 1dari 12

Trabalho de Compiladores

Prof. Renata Sousa

Sistemas de Informao

Henning Summer 5 Perodo

COMPILADORES

ndice
1. Resumo..................................................................................................... 2. ntroduo............................................................................................... 3. O que e um compildor..................................................................... .. 4. Processos de Compilo................................................................... 5. Estrutur de um Compildor............................................................ 6. O que e um Lingugem..................................................................... 7. Mo dulos de um Compildor.............................................................. a. Analisador Sinttico........................................................................... b. Analisador Semntico........................................................................ c. Organizador de Programas em Tempo de Execuo......................... d. Gerador de Cdigo............................................................................ 8. Concluso................................................................................................ 9. Refere ncis..............................................................................................

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer

COMPILADORES

Resumo
Este trabalho tem por objetivo mostrar as principais caractersticas, funcionamentos e os mdulos de um compilador. Compiladores so programas de computadores que a partir de um cdigo fonte de uma determinada linguagem cria um programa semanticamente equivalente, porm escrito em outra linguagem chamada de linguagem objeto. O termo Compilador principalmente utilizado para programas que traduzem o cdigo fonte de uma linguagem de alto nvel para uma de linguagem baixo nvel (Assembly ou cdigo de maquina). Os esforos para produo de compiladores teve inicio na dcada de 50 nos Estados Unidos. Grace Hopper analista de sistemas da Marinha americana foi a primeira desenvolvedora de um compilador. Ela criou a linguagem de programao Flow Matic que logo daria origem a COBOL (Common Bussiness Oriented Language). Grace tambm foi responsvel por definir o termo Bug quando tentava achar um problema em seu computador e verificou que no passava de um inseto morto dentro do computador. Um compilador basicamente realiza duas aes que a anlise e a sntese sendo subdividas em outras aes realizadas pelo compilador durante seu processo de compilao. A anlise responsvel por entender o cdigo e representa-lo de uma forma intermediria, (como um novo cdigo). A sntese utiliza essa representao intermediaria para criar o cdigo objeto. Dessa forma, a anlise a parte mais fundamental do processo de compilao.

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer

COMPILADORES

ntroduo
Existem diversos tipos de compiladores no mercado, seja de grandes empresas ou os simplesmente criados por estudantes para aperfeioar seus conhecimentos a cerca deste assunto. Um processador apenas realiza clculos e no consegue interpretar exatamente o que passado para ele em forma de linguagem de alto nvel. Quando em uma determinada linguagem como C se diz ao computador para ele imprimir a mensagem Ol mundo ele ir realizar uma intepretao para que essa mensagem seja transforma em linguagem de mquina, ou seja, de baixo nvel para assim ele poder cumprir essa ordem. Para isso o compilador ter que transformar o comando "println" da linguagem C para um comando em linguagem de mquina, e receber o termo Ol mundo codifica-lo em linguagem de baixo nvel e assim possibilitar que o processador possa realizar seus clculos e por fim mostrar a mensagem na tela. A princpio algo muito simples, que ocorre por baixo da tela preta do Shell do compilador, porm algo complexo que requer bastante conhecimento. Atualmente os compiladores tem realizado mais que interpretar linguagens e mostrar um resultado na tela. Eles realizam correo de erros, endentam linhas de cdigos, sugerem comandos verificando se a linguagem de alto nvel realmente est sendo passada corretamente para no haver o famoso erro de compilao comum maioria dos programadores. A construo de um compilador demanda tempo e conhecimento e dependendo da sua complexidade uma boa prtica de abstrao e organizao de rvores e cdigos intermedirios. O que ser mostrado como funciona um compilador e suas principais caractersticas e processos realizados durante a compilao de um cdigo fonte para um cdigo objeto, alm das anlises envolvidas e seus mdulos.

O que e um Compildor?
Como foi dito acima um compilador uma programa que a partir de um cdigo fonte constri um novo cdigo em outra linguagem capaz de ser interpretado pelo processador e assim realizar o que foi proposto na descrio da linguagem de alto nvel: o cdigo fonte. Maquinas no intendem comandos como imprima, some, multiplique basicamente. Elas analisam 0 e 1 e a partir de notaes convencionais realizam clculos que levam a execuo de tarefas como somar nmeros, imprimir caracteres entre tantas outras possveis em computador atualmente. Apesar de muitos acharem

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer

COMPILADORES

complicada a utilizao de uma IDE de desenvolvimento e suas linguagens, no imaginam a complexidade que seria realizar essa programao diretamente com a mquina sem ter um compilador intermediando a conversa. Para isso existem os compiladores para nos ajudar nesse dialogo abstrato com a mquina podendo tirar o mximo de proveito das possveis e provveis aes que ela pode realizar. Antigamente era difcil realizar algumas aes que hoje so to simples como apertar um boto devido a limitao de memoria e processamento. Mas os constantes estudos levaram cada vez mais a melhoria dos compiladores e das diversas linguagens de programao. O compilador depende muito da linguagem em que ele esta baseado. Exemplo so as excees para cada linguagem de programao. Como um compilador tem um papel de pegar a linguagem fonte e transforma-la em uma linguagem ASSEMBLY ele tem que verificar se realmente a linguagem que esta sendo usada adequada para aquele compilador, caso contrrio ser encontrado vrios erros de compilao. Para isso necessrio o domnio da linguagem que est sendo utilizada. Existe a diferena tambm de onde esta sendo escrita essa linguagem. Muitas vezes, ela escrita em editores de texto que por sua vez iro passar por um processo de compilao o que poder gerar erros por conta da cadeia de caracteres utilizada arquivo do editor. Dai vem a necessidade de um editor de programa, ou mais conhecida IDE de desenvolvimento que ir gerar um arquivo enxuto descomplicando a vida do compilador. Veja um exemplo dos arquivos gerados por um editor de texto e um editor de programas.

O primeiro mostra um arquivo enxuto do editor de programa. O segundo mostra uma arquivo bem maior criado em um editor de texto bem conhecido. Com esse arquivo o compilador tem o papel de criar um arquivo executvel que ir realmente mostrar o comando escrito em linguagem fonte funcionando. Esse executvel chamado de cdigo objeto que quando bem compilado poder ser executado de forma positiva mostrando exatamente o que foi solicitado na linguagem.

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer

COMPILADORES

Processos de um Compildor
Os processos realizados pelo compilador esto de certa forma ligados ao tipo de linguagem que ele utiliza. Em Java, por exemplo, temos o Javac (Compilador Java) e a JVM (Maquina Virtual Java) que so responsveis pela compilao e interpretao dos cdigos gerados. Ao lado a figura mostra como se dar uma compilao em C. Temos o editor que realiza a escrita do cdigo a ser compilado. Aps isso temos o arquivo pronto com seus cabealhos, comentrios e etc. Logo vem o Preprocessador que realiza as primeiras diretivas como analisar no caso em C as linhas de cabealho #define, #include que esto atreladas a linguagem C e suas bibliotecas gerando um cdigo intermedirio. Depois dessa ao o Compilador compila o cdigo prprocessado para uma linguagem Assembler que em seguida transformado em cdigo de mquina, ou seja, o Cdigo Objeto. Por ultimo temos o Linker que recebe os ficheiros produzidos nas etapas anteriores realizando as ligaes com as bibliotecas da linguagem e suas funes, criando um arquivo .exe (a aplicao). Os programas fonte so ficheiros de texto em ASCII no nosso caso aqui em C. Cada ficheiro tem uma extenso especifica, veja a tabela para a linguagem C.
Extenso .c .i .s .o .a Interpretao Cdigo C Cdigo C Pr-Processado Cdigo em Assembly Ficheiro objeto (Compilado) Biblioteca (ficheiros objetos) Ao de Compilao Pr-processamento e compilao pelo gcc Compilao pelo gcc Compilao pelo as ou gas Enviar para o Linker ld Enviar para o Linker ld

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer

COMPILADORES

Estrutur de um Compildor
Para realizar a compilao necessria a realizao diversas fases durante o processo. Como j foi dito basicamente o compilador realizar duas aes a Anlise, e a Sntese. Elas se subdividem numa estrutura que ser apresentada abaixo. Na primeira fase temos o Analisador Lxico (scanner) que responsvel por ler o cdigo fonte caractere a caractere agrupando-os em smbolos chamados de Tokens. Esses smbolos seriam basicamente as palavras reservadas da linguagem: do, while, begin, variveis, operadores lgicos, parnteses e demais sinais. Aps essa anlise passado para o Analisador Sinttico (parser) a sequncia de smbolos encontrados que so geralmente representados por valores inteiros. Essa sequncia transformada em uma expresso sinttica, um exemplo x + y que so transformados posteriormente em comandos. Em seguida o Analisador Semntico verifica as estruturas sintticas fornecidas e se mesmo estando sintaticamente corretas so admitidas pela linguagem em que esta sendo utilizada. Isso quer dizer que ele verifica se x um inteiro e y tambm, pois apesar da expresso ser correta possa ser que as variveis sejam de tipos diferentes gerando erro no cdigo objeto. O Gerador de Cdigo Intermedirio esta no intermdio entre as duas linguagens a fonte (Alto Nvel) e a objeto (Baixo Nvel). Ele tem a funo de utilizar as estruturas produzidas pelo Analisador Sinttico e o Analisador Semntico para criar uma sequncia de instrues simples. Isso tudo feito atravs da criao de rvores

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer

COMPILADORES

Sintticas pelo Analisador Sinttico e o Semntico. Essas rvores separam cada caractere omitindo os espaos e comentrios, criando uma estrutura otimizada com cada smbolo alocado de forma que o analisador possa realizar a comparao com sua tabela especfica. Nesse momento temos a Otimizao de Cdigo que no depende da mquina opcional, mas esta sendo amplamente utilizado na maioria dos compiladores atuais. Ele tem a funo de melhorar o cdigo intermedirio para produzir um condigo objeto mais eficiente e que ocupe menos espao. Ele tem a funo de realizar uma nova sada de cdigo intermedirio. O Gerador de Cdigo tem a funo de gerar o cdigo final, (objeto). Ele que ir definir a alocao de espao na memoria, como acessar esses dados, quais registradores sero utilizados pelo processador entre outras funes. Eles esto totalmente ligados forma como o processador ir realizar o clculo dos processamentos, e de que forma ser novamente chamadas as bibliotecas do programa gerado (aplicao). Veja a imagem que mostra como est integrada a anlise (Frontend) e a sntese (Back-end) do compilador.

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer

COMPILADORES

O que e um Lingugem
Uma linguagem um mtodo pelo qual se realiza a comunicao de instrues um computador. Trate-se de um conjunto de regras sintticas e semnticas que definem comandos a serem executados pelo computador (Programa/Aplicao). Ela permite ao programador especificar exatamente o que ele gostaria que a mquina realizasse de uma forma abstrata numa linguagem no nvel de compreenso humana. Essas linguagens podem expressar algoritmos entre outras funes. Para tanto existe um conjunto de palavras chamadas de (lexemas) que se classificam em (tokens). Esses tokens nada mais so do que smbolos atribudos determinada linguagem sobre suas palavras reservadas entre operadores lgicos, parnteses e etc. Esses cdigos logo so traduzidos para uma linguagem de maquina que possa ser executada pelo processador. A linguagem tem a funo de permitir ao programador expressar suas intenes de forma mais fcil e produtiva diferente do que seria se comunicar diretamente com a mquina. Dessa forma as linguagens cada vez mais tentam chegar ao nvel de entendimento humano adotando (sintaxes) que possam permitir a programadores e engenheiros de software produzir programas mais rpidos e organizados. Existem diversos padres de linguagem cada uma ligada a um determinado paradigma de programao. Exemplo:

Programao Estruturada Sequncia, Deciso e Repetio. Programao Modular Dividida em mdulos e ligada atravs de uma interface. Programao Orientada a Objetos Abstrao do mundo real em objetos. Programao Linear Utiliza-se do conceito de algoritmos e funes objetivas

Esses exemplos de linguagem tratam da forma como comunicado determinado comando a maquina em uma linguagem de alto nvel. As linguagens de alto nvel so aquelas que pessoas podem entender sua sintaxe, j que elas a programam. Porm a mquina no consegue entender uma instruo do tipo X+X visto que ela consegue apenas realizar clculos utilizando 0 e 1. Para tanto necessrio a intepretao e compilao dessa linguagem para um nvel em que a maquina consiga realizar sua execuo, Assembler ou de maquina.

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer

COMPILADORES

Modulos de um Compildor
Um compilador se se subdivide em vrios mdulos. Entre eles esto: Analisador Sinttico Analisador Semntico, Organizador de programas em execuo (Otimizador de Cdigo) Gerador de cdigo.

Cada mdulo representa uma ao a ser realiza no processo de compilao. De forma bsica podemos apresentar essas aes para cada mdulo de maneira simples j que so complexas suas aes do ponto de vista da maquina. Analisador Sinttico Mais conhecido com (parsing) em que d significado s sequncias dos tokens criadas pelo Analisador Lxico. Ele realiza uma espcie de analise gramatical. Ele separa as expresses atravs de rvores sintticas que analisando cada termo e vai gerando a ordem como, por exemplo: multiplicao tem prioridade na sobre outras operaes.

Analisador Semntico Responsvel por verificar especificamente os tipos declarados. Ele analisa os operadores e os compara com sua tabela para ver se algum smbolo fornecido esta em desacordo com a gramatica da linguagem. Dessa forma ele pode fornecer os erros encontrados no permitindo que esses passem para o cdigo objeto. Dessa forma ele mostrar um erro de multiplicao de tipo diferentes, real e inteiro.

Organizador de programas em execuo O Otimizador de cdigo tem a funo de melhorar o cdigo intermedirio possibilitando um cdigo objeto mais eficiente. Ele tem a funo elaborar um cdigo apropriado para um hardware ou sistema operacional em que possa utilizar de todas suas funcionalidades para aumentar a velocidade de execuo entre outras funes. amplamente utilizado nos compiladores atuais. Na sua analise ele verifica se uma operao de calculo entre um nmero real e inteiro pode ser realizada de forma mais rpida eliminando partes de cdigos que iro apenas aumentar o processamento. Isso feito na analise das arvores durante a compilao do cdigo fonte.

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer

COMPILADORES

10

Gerador de cdigo Consiste na gerao do cdigo alvo (objeto) ou o de montagem (assembler). Nesse momento ele realiza toda alocao de memoria, ligao de bibliotecas do cdigo fonte, preparao dos registradores do processador. Tratasse do arquivo .exe (Programa/Aplicao) que otimizado para a arquitetura definida pelo prprio compilador.

Concluso
A partir da pesquisa realizada foi possvel verificar a importncia do entendimento de um compilador para um programador ou para aqueles que desejam viajar pelo mundo do desenvolvimento. Sua importncia imprescindvel j que se percebe que a partir do seu entendimento e estudo possvel entender como a relao entre a Inteligncia artificial, criaes de maquinas virtuais, camadas de softwares so possveis. E tambm possvel entender porque existem tantos compiladores no mercado e a necessidade da sua constante melhoria por parte dos desenvolvedores. A necessidade de aproximar cada vez mais as linguagens de programao para uma interpretao de fcil entendimento e desenvolvimento depende diretamente do estudo constante de compiladores e de como as maquinas podem entender como tentamos nos comunicar com ela. O foco seria agora em uma forma de fazer a maquina interpreta no apenas comandos de blocos de texto, mas tambm atravs de um mtodo que esta cada vez mais sendo utilizado de reconhecimento de voz. Isso depender muito de uma gramatica altamente inteligente com recursos de inteligncia artificial avanados, mas no algo impossvel tendo em vista os grandes avanos nessa rea nos ltimos anos.

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer

COMPILADORES

11

Referencis
Processo de Compilao
http://adrielcafe.com/artigos/18-processo-de-compilacao http://www.estig.ipbeja.pt/~rmcp/estig/2002/1s/lp1/teorica/Processo%20de%20Compilacao.pdf

Estruturas de um compilador
http://www.inf.ufes.br/~tavares/labcomp2000/intro2.html http://www.dsc.ufcg.edu.br/~peter/cursos/cc/material/p1-introducao-2p.pdf

Compiladores Princpios, Tcnicas e Ferramentas (Compilers, Principles, Techniques and Tools) 1986 Alfred V. AHO Ravi Sethi Jeffrey D. Ullman. Linguagem de Programao
http://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o http://pt.wikipedia.org/wiki/Compilador#Hist.C3.B3ria

Prof.: Renata Maria

Sistemas de Informao

Aluno: Henning Summer