Você está na página 1de 15

PONTIFCIA UNIVERSIDADE CATLICA DE MINAS GERAIS Curso de Graduao em Engenharia da Computao

Bernardo Pinto Monteiro Neto Clevison Prado Batista Izr Bruno Miranda Rafael Santiago Maral Roberto Linces Gomes William Douglas da Silva Faria

LINGUAGENS DE PROGRAMAO E COMPILADORES

Belo Horizonte 2012

Bernardo Pinto Monteiro Neto Clevison Prado Batista Izr Bruno Miranda Rafael Santiago Maral Roberto Linces Gomes William Douglas da Silva Faria

459142 454446 454464 454487 454489 454496

LINGUAGENS DE PROGRAMAO E COMPILADORES

Trabalho apresentado para disciplina de Introduo Engenharia de Computao, dissertando a respeito das linguagens de programao e compiladores, suas funcionalidades e aplicabilidade. Orientador: Paulo Amaral

Belo Horizonte 2012

SUMRIO
1. 2. INTRODUO ........................................................................................................................................................ 4 LINGUAGENS DE PROGRAMAO ................................................................................................................. 4 2.1 Primeira gerao .......................................................................................................................................... 5 Assembly ............................................................................................................................................... 5

2.1.1 2.2

Segunda gerao ......................................................................................................................................... 6 FORTRAN .............................................................................................................................................. 6

2.2.1 2.3

Terceira gerao ........................................................................................................................................... 7 ALGOL .................................................................................................................................................... 7 Lisp .......................................................................................................................................................... 7 C/C++ ...................................................................................................................................................... 7

2.3.1 2.3.2 2.3.3 2.4

Quarta gerao ............................................................................................................................................. 8 PL/SQL.................................................................................................................................................... 8 SQL .......................................................................................................................................................... 9 Embarcadero Delphi ........................................................................................................................... 9

2.4.1 2.4.2 2.4.3 2.5

Quinta gerao ............................................................................................................................................ 10 Prolog ................................................................................................................................................... 10 Java ....................................................................................................................................................... 11 C# ........................................................................................................................................................... 11

2.5.1 2.5.2 2.5.3 3.

COMPILADORES ................................................................................................................................................. 12 3.1 Classificao dos compiladores ............................................................................................................ 13 Compilador cruzado ......................................................................................................................... 13 Tradutor filtro ...................................................................................................................................... 13 Montador .............................................................................................................................................. 13 Desmontador ...................................................................................................................................... 13 Descompilador ................................................................................................................................... 13

3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.2

Processo de compilao .......................................................................................................................... 13 Anlise lxica ...................................................................................................................................... 13 Anlise sinttica................................................................................................................................. 13 Analise semantica ............................................................................................................................. 13

3.2.1 3.2.2 3.2.3 3.3 3.4 4. 5.

Tipos de compilao ................................................................................................................................. 14 Interpretao pura ...................................................................................................................................... 14

CONCLUSO ........................................................................................................................................................ 15 REFERNCIA........................................................................................................................................................ 15

1.

INTRODUO

Neste trabalho, apresentaremos um tutorial histrico sobre linguagens de programao e compiladores, ressaltando os assuntos mais proeminentes dentro de cada categoria. Mostraremos as caractersticas das linguagens de programao e compiladores, explanando sobre suas funcionalidades e diferenas das geraes de linguagens de computadores.

2.

LINGUAGENS DE PROGRAMAO

Uma linguagem de programao uma linguagem criada para instruir um computador a realizar suas tarefas. Um programa completo, escrito em uma linguagem de programao, freqentemente denominado cdigo. Deste modo, codificar um algoritmo significa converter suas declaraes em um comando ou instruo especfico de uma certa linguagem de programao. O tipo mais primitivo de linguagem de programao a linguagem que o computador entende diretamente, isto , as instrues que podem ser diretamente executadas pelo hardware, isto , pela UCP. a linguagem de mquina, que foi utilizada pela primeira gerao de programadores. Uma instruo de mquina um conjunto de bits, dividido em subconjuntos ou campos, com funes determinadas: um subconjunto (um campo de instruo) estabelece o cdigo de operao e o outro define a localizao dos dados. Um programa de linguagem de mquina , em consequncia, uma longa sequncia de algarismos binrios, alguns dos quais representam instrues e outros, os dados a serem manipulados pelas instrues. Exemplo de programa em linguagem de mquina, na sua forma binria pura e uma representao mais compacta e mais simples, em linguagem hexadecimal.

FIGURA 1: PROGRAMA EM LINGUAGEM BINRIA

Para criar um programa em linguagem de mquina, o programador deve conhecer todas as instrues disponveis para aquela mquina e seus respectivos cdigos de operao e formatos, assim como os registradores da UCP disponveis e os endereos das clulas de memria onde sero armazenados as instrues e os dados. Um

programa real, em linguagem de mquina, pode conter milhares de instrues, o que uma tarefa extremamente tediosa e difcil, pelos detalhes que precisam ser observados pelo programador. , portanto, caro de realizar pelo custo da mo-de-obra envolvida. Para tentar minimizar esta ineficincia (dificuldade de entendimento do significado dos nmeros, todos semelhantes), foi desenvolvida, ainda para a primeira gerao de computadores, uma linguagem que representasse as instrues por smbolos e no por nmeros. Esta linguagem simblica foi denominada Linguagem de Montagem (Assembly Language). 2.1 Primeira gerao

2.1.1 Assembly A primeira evoluo para tornar os programas mais representativos da inteno do programador e, portanto, mais inteligveis ao prprio, foi com o emprego de smbolos alfanumricos em vez de nmeros. O ser humano est mais acostumado com o significado de uma ao ser expresso de forma mais direta e de acordo com os smbolos que ele aprendeu a usar. Para um programador que precise usar uma instruo de adio, mais simples entend-la se estiver expressa como ADD (palavra inglesa cujo significado soma) do que pela linguagem binria. Desenvolveu-se, ento, uma linguagem de smbolos (e no de nmeros) alfabticos, denominada linguagem de montagem (em ingls chama-se Assembly). A. Rtulo (ou label) indica um endereo significativo no programa, como, por exemplo, o endereo de incio do programa, o endereo de desvio em um loop e outros. B. Operao contm o mnemnico predefinido adequadamente para simbolizar a correspondente operao. Conforme j mencionado, ADD, SUB, LDA e STR simbolizam melhor a operao desejada do que 3,4,1 e 2. C. Operando(s) onde so inseridos os smbolos representativos dos endereos de memria ou dos registradores utilizados pela instruo para armazenar os respectivos dados referidos pela instruo. D. Comentrios um campo opcional, ignorado durante o processamento do programa. Serve apenas para auxiliar o entendimento do programa, de modo idntico ao que se faz em programas escritos em linguagem de mais alto nvel. Programas de montagem (Assembly) no so diretamente executveis porque o hardware no entende smbolos, mas sim cdigos de operao binrios, etc. Desta forma, h necessidade de se desenvolver um programa com o propsito de converter as instrues Assembly em correspondentes instrues de mquina, e os endereos simblicos em endereos fsicos de memria. Este programa denomina-se montador (Assembler) e especfico da UCP em que ele ser executado. Isto fica claro quando se sabe que o montador cria instrues de mquina, as quais, bvio, so especficas de uma mquina, de um processador (UCP).

Um passo mais significativo no sentido de criar uma linguagem de comunicao com o computador, mais simples e com menos instrues do que a linguagem de montagem, foi o desenvolvimento de linguagens que refletissem mais os procedimentos utilizados na soluo de um problema, sem preocupao com o tipo de UCP ou de memria onde o programa ser executado. Tais linguagens, por serem estruturadas de acordo com a compreenso e a inteno do programador, so usualmente denominadas linguagens de alto, nvel afastado da mquina. 2.2 Segunda gerao

2.2.1 FORTRAN FORTRAN 1957 : FORmula TRANslation primeira linguagem de alto nvel. Desenvolvida para realizao de clculos numricos. Foi a primeira linguagem de programao imperativa. O primeiro compilador de FORTRAN foi desenvolvido para o IBM 704 em 1954- 57 por uma equipe da IBM chefiada por John W.Backus. O compilador era otimizado, pois os autores acreditavam que ningum iria usar essa linguagem se a sua prestao no fosse comparvel com a da linguagem assembly. A. Fortran II : uma linguagem de programao criada aps sua original Fortran em 1958. Esta originou outras linguagens como BASIC. B. Fortran IV: A linguagem Fortran foi largamente adaptada por cientistas para a escrita de programas numericamente intensivos, o que encorajou os produtos de compiladores a escrever compiladores que gerassem cdigo mais rpido. C. Fortran 77: A linguagem foi modernizada a partir de 1970 e um novo padro lanado em 1977, FORTRAN 77, introduzia algumas pequenas alteraes na estrutura dos comandos, como o uso dos blocos IF...THEN...ELSE. D. Fortran 8x: Na mesma poca que o FORTRAN 77 surgiu, j existiam outras linguagens de programao como o C, Pascal, Ada e Modula, que haviam introduzido novos conceitos em programao ou fundamentado outros como a tipagem explicita de variveis e a definio de novos tipos de dados, o que permitia ao programador definir estruturas de dados mais adequadas para resolver problemas, alocao dinmica de dados, subprogramas recursivos, controle de exceo (uma das principais caractersticas da linguagem Ada), e estabelecimento de mdulos. O Fortran 8x incorporava todos os conceitos acima citados (exceto a tipagem explicita e o controle de exceo). E. Fortran 90: Trouxe uma novidade para o mundo das linguagens de programao: mecanismos para manipulao de arranjos, que no so oferecidos por nenhuma outra linguagem. F. Fortran 95: Acrescentou pequenas alteraes ao FORTRAN 90, motivada pela necessidade de aproximar o padro linguagem High Performance Fortran ou HPF a qual voltada para o uso de computadores com arquiteturas avanadas. A linguagem HPF uma espcie de extenso do FORTRAN 90 e, atualmente,

muitos fabricantes oferecem compiladores HPF baseados na linguagem Fortran 90. G. Fortran 2003: O Fortran 2003 ir incorporar um conjunto de novos comandos que permitiro, entre outras coisas, o controle de excees e programao orientada a objetos.

2.3

Terceira gerao

2.3.1 ALGOL O ALGOL uma famlia de linguagens de programao de alto nvel principalmente para aplicaes cientficas. As duas caractersticas principais do Algol so: a clareza e a elegncia da sua estrutura baseada nos blocos e o estilo de sua definio, que usa uma linguagem metalingstica para definir de forma concisa e relativamente completa a sua sintaxe. A linguagem continuou sendo desenvolvida e enriquecida com novas construes e novos comandos que aumentaram seu potencial. Existem outras verses do Algol, como, por exemplo, o Algol 68, o Algol W voltado para mquinas IBM e o Algol 6000/7000 da Burroughs. 2.3.2 Lisp Lisp uma famlia de linguagens de programao concebida por John McCarthy em 1958. Num clebre artigo, ele mostra que possvel usar exclusivamente funes matemticas como estruturas de dados elementares (o que possvel a partir do momento em que h um mecanismo formal para manipular funes: o Clculo Lambda de Alonzo Church). Ela uma linguagem formal matemtica. Durante os anos de 1970 e 1980, Lisp se tornou a principal linguagem da comunidade de inteligncia artificial, tendo sido pioneiro em aplicaes como administrao automtica de armazenamento, linguagens interpretadas e programao funcional. Tanto os dados como o programa so representados como listas, o que permite que a linguagem manipule o cdigo fonte como qualquer outro tipo de dados. A linguagem LISP interpretada, onde o usurio digita expresses em uma linguagem formal definida e recebe de volta a avaliao de sua expresso. Deste ponto de vista podemos pensar no LISP como uma calculadora, que ao invs de avaliar expresses aritmticas avalia expresses simblicas, chamadas de expresses. Cada programa em LISP, , portanto, uma expresso. As expresses so de tamanho indefinido e tem uma estrutura de rvore binria. A estrutura de utilizao da memria disponvel na forma de listas, pois livra o programador da necessidade de alocar espaos diferentes para o programa e para os dados, fazendo com que os dados e os programas sejam homogneos, caracterstica nica da linguagem LISP. 2.3.3 C/C++

C uma linguagem imperativa e procedural, para implementao de sistemas. Seus pontos de design foram para ele ser compilado, fornecendo acesso de baixo nvel memria e baixos requerimentos do hardware. Tambm foi desenvolvido para ser uma linguagem de alto nvel, para maior reaproveitamento do cdigo. C foi til para muitas aplicaes que foram codificadas originalmente em Assembly. Essa propriedade no foi acidental; a linguagem C foi criada com o objetivo principal em mente: facilitar a criao de programas extensos com menos erros, recorrendo ao paradigma da programao procedural, mas sobrecarregando menos o autor do compilador, cujo trabalho complica-se ao ter de realizar as caractersticas complexas da linguagem. A linguagem C possui as seguintes caractersticas: A. Uma linguagem extremamente simples, com funcionalidades no-essenciais, tais como funes matemticas ou manuseamento de ficheiros (arquivos), fornecida por um conjunto de bibliotecas de rotinas padronizada. B. A focalizao no paradigma de programao procedural. C. Um sistema de tipos simples que evita vrias operaes que no fazem sentido. D. Uso de uma linguagem de pr-processamento, o pr-processador de C, para tarefas tais como a definio de macros e a incluso de mltiplos ficheiros de cdigo fonte. E. Ponteiros do maior flexibilidade linguagem. F. Acesso de baixo-nvel, atravs de incluses de cdigo Assembly no meio do programa C. G. Parmetros que so sempre passados por valor para as funes e nunca por referncia ( possvel simular a passagem por referncia com o uso de ponteiros). H. Definio do alcance lexical de variveis. I. Estruturas de variveis, (structs), que permitem que dados relacionados sejam combinados e manipulados como um todo. A linguagem de programao C++ foi originalmente derivada do C para suportar programao orientada a objetos. medida que as linguagens C e C++ foram evoluindo independentemente, a diviso entre as duas veio a aumentar. Hoje, as principais diferenas entre as duas linguagens so: A. Inline - em C++, funes em linha encontram-se no espao global enquanto que em C encontram-se no espao local. Por outras palavras, isso significa que, em C++, qualquer definio de qualquer funo em linha (sem ser a respeito da sobrecarga de funes de C++) tem de estar em conformidade com a "regra de uma definio" da linguagem C++. Mas em C, a mesma funo em linha pode ser definida de maneira diferente em diferentes arquivos (ou ficheiros). B. A palavra-chave bool, igual usada em C++. Padres anteriores de C no definiam um tipo booleano e vrios (e incompatveis) mtodos foram usados para simular um tipo booleano.

2.4

Quarta gerao

2.4.1 PL/SQL

PL/SQL uma linguagem de programao baseada em opes monogrficas de edio. Ela composta por trs camadas, definio, edio, e concluso. Permite que a manipulao de dados seja includa em unidades de programas. Blocos de PL/SQL so passados e processados por uma PL/SQL Engine que pode estar dentro de uma ferramenta Oracle ou do Server. A PL/SQL Engine filtra os comandos SQL e manda individualmente o comando SQL para o SQL Statement Executor no Oracle Server, que processa o PL/SQL com os dados retornados do Server. a linguagem bsica para criar programas complexos e poderosos, no s no banco de dados, mas tambm em diversas ferramentas Oracle. Os comandos principais so CIN e COUT. A unidade bsica em PL/SQL um bloco. Todos os programas em PL/SQL so compostos por blocos, que podem estar localizados uns dentro dos outros. Geralmente, cada
bloco efetua uma ao lgica no programa.

2.4.2 SQL A linguagem um grande padro de banco de dados. Isto decorre da sua simplicidade e facilidade de uso. Ela se diferencia de outras linguagens de consulta a banco de dados no sentido em que uma consulta SQL especifica a forma do resultado e no o caminho para chegar a ele. Ela uma linguagem declarativa em oposio a outras linguagens procedurais. O SQL foi revisto em 1992 e a esta verso foi dado o nome de SQL-92. Foi revisto novamente em 1999 e 2003 para se tornar SQL:1999 (SQL3) e SQL:2003, respectivamente. O SQL: 1999 usa expresses regulares de emparelhamento, queries recursivas e gatilhos (triggers). Tambm foi feitas uma adio controversa de tipos noescalados e algumas caractersticas de orientao a objeto. O SQL: 2003 introduz caractersticas relacionadas ao XML, seqncias padronizadas e colunas com valores de auto-generalizao (inclusive colunas-identidade). Embora padronizado pela ANSI e ISO, possui muitas variaes e extenses produzidos pelos diferentes fabricantes de sistemas gerenciadores de bases de dados. Tipicamente a linguagem pode ser migrada de plataforma para plataforma sem mudanas estruturais principais. Outra aproximao permitir para cdigo de idioma procedural ser embutido e interagir com o banco de dados. Por exemplo, o Oracle e outros incluem Java na base de dados, enquanto o PostgreSQL permite que funes sejam escritas em Perl, Tcl, ou C, entre outras linguagens. 2.4.3 Embarcadero Delphi Embarcadero Delphi, anteriormente conhecido como CodeGear Delphi, Inprise Delphi e Borland Delphi, tambm conhecido como Delphi, um compilador, uma IDE e uma linguagem de programao, produzido antigamente pela Borland Software Corporation e atualmente produzido pela Embarcadero. O Delphi, originalmente

direcionado para a plataforma Windows, chegou a ser usado para desenvolvimento de aplicaes nativas para Linux e Mac OS, atravs do Kylix (o Kylix um IDE para as linguagens C++ e Object Pascal), e para o framework Microsoft. NET em suas verses mais recentes. O desenvolvimento do Kylix foi descontinuado. Atualmente h um projeto chamado Lazarus que possui uma interface muito semelhante ao Delphi e a caracterstica de ser multiplataforma, ou seja, roda em Linux, Windows, OS/2, Mac OS tradicional, Mac OS X, ARM, BSD, BeOS, DOS, CORO e mais. O Delphi muito utilizado no desenvolvimento de aplicaes desktop, aplicaes multicamadas e cliente/servidor, compatvel com os bancos de dados mais conhecidos do mercado. O Delphi pode ser utilizado para diversos tipos de desenvolvimento de projeto, abrangendo desde Servios a Aplicaes Web e CTI. O nome Delphi inspirado na cidade de Delfos, o nico local na Grcia antiga em que era possvel consultar o Orculo de Delfos. O nome deve-se ao fato de que os desenvolvedores do compilador buscavam uma ferramenta capaz de acessar o banco de dados Oracle - da o trocadilho: "a nica maneira de acessar o orculo usando Delphi". Pronuncia-se "dl-fi". 2.5 Quinta gerao

2.5.1 Prolog Prolog uma linguagem de programao que se enquadra no paradigma de Programao em Lgica Matemtica. uma linguagem de uso geral que especialmente associada com a inteligncia artificial e lingstica computacional. Consiste numa linguagem puramente lgica, que pode ser chamada de Prolog puro, e numa linguagem concreta, a qual acrescenta o Prolog puro com componentes extra-lgicos. Muito do desenvolvimento moderno do Prolog veio dos projetos de computadores da quinta gerao (FGCS), que desenvolveu uma variante do Prolog chamada Kernel Language para seu primeiro sistema operacional. Apesar do longo tempo de desenvolvimento, Prolog ainda no uma linguagem portvel, j que cada implementao usa rotinas completamente diferentes e incompatveis entre si. Por exemplo, um programa trivial que faz um loop de ler uma linha da console e escreve a mesma linha, terminando quando for entrada uma linha vazia, impossvel de ser escrito de forma que qualquer interpretador consiga rodar. O Prolog uma linguagem declarativa, significando que em vez de o programa estipular a maneira de chegar soluo, passo a passo, (como nas linguagens procedimentais ou imperativas), limita-se a fornecer uma descrio do problema que se pretende computar. Usa uma coleo base de dados de fatos e de relaes lgicas (regras) que exprimem o domnio relacional do problema a resolver. Um programa pode rodar num modo interativo, a partir de consultas (queries) formuladas pelo usurio, usando a base de dados (os 'fatos') e as regras relacionais (essencialmente implicaes lgicas: se.. ento), e o mecanismo de unificao para produzir (por uma cadeia de dedues lgicas) a soluo.

O Prolog baseado num subconjunto do clculo de predicados de primeira ordem, o que definido por clusulas de Horn. A execuo de um programa em Prolog efetivamente a prova de um teorema por resoluo de primeira ordem. Alguns conceitos fundamentais so unificao, recurso, e backtracking. 2.5.2 Java Java uma linguagem de programao orientada a objeto desenvolvida na dcada de 90 por uma equipe de programadores chefiada por James Gosling, na empresa Sun Microsystems. Diferentemente das linguagens convencionais, que so compiladas para cdigo nativo, a linguagem Java compilada para um bytecode que executado por uma mquina virtual. A linguagem de programao Java a linguagem convencional da Plataforma Java, mas no sua nica linguagem. A linguagem Java foi projetada tendo em vista os seguintes objetivos: A. B. C. D. Orientao a objetos - Baseado no modelo de Simula67 Portabilidade - Independncia de plataforma - "escreva uma vez, execute em qualquer lugar" ("write once, run anywhere") Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a cooperao com protocolos TCP/IP, como HTTP e FTP Segurana - Pode executar programas via rede com restries de execuo

Alm disso, podem-se destacar outras vantagens apresentadas pela linguagem: A. B. C. D. E. F. G. Sintaxe similar a C/C++ Facilidades de Internacionalizao - Suporta nativamente caracteres Unicode Simplicidade na especificao, tanto da linguagem como do "ambiente" de execuo (JVM) distribuda com um vasto conjunto de bibliotecas (ou APIs) Possui facilidades para criao de programas distribudos e multitarefa (mltiplas linhas de execuo num mesmo programa) Desalocao de memria automtica por processo de coletor de lixo Carga Dinmica de Cdigo - Programas em Java so formados por uma coleo de classes armazenadas independentemente e que podem ser carregadas no momento de utilizao

2.5.3 C# uma linguagem de programao orientada a objetos, fortemente tipada, desenvolvida pela Microsoft como parte da plataforma .NET. A sua sintaxe orientada a objetos foi baseada no C++ mas inclui muitas influncias de outras linguagens de programao, como Object Pascal e Java. A linguagem suporta ponteiros atravs da palavra reservada unsafe (cdigo noseguro), que obrigatrio. Seu uso no aconselhvel, e blocos de cdigos que o usam geralmente requisitam permisses mais altas de segurana para poderem ser executados. As operaes aritmticas so verificadas contra transbordamento de dados. C# tambm

suporta as operaes aritmticas bsicas como adio, subtraco, multiplicao e diviso. Esses smbolos so chamados operadores, e "operam" os valores das variveis. Um coletor de lixo tambm suportado, um processo usado para a manuteno de memria. Com este recurso, possvel recuperar a zona de memria que um programa j no utiliza. Quando isto no ocorre pode acontecer a chamada perda de memria, um erro comum que pode levar ao trmino no desejado do programa em execuo por esgotamento da memria livre. Em C# no existe herana mltipla, ou seja, cada classe s pode herdar apenas uma outra classe e no mais do que uma, no entanto possvel simular herana mltipla utilizando interfaces. Assim, atravs da herana reduzimos cdigo atravs da sua reutilizao. Os gabaritos no so suportados, mas a linguagem possui um suporte abrangente a generics. Nela podem se usar tipos genricos para a maximizao da reutilizao de cdigo, segurana de tipo, e desempenho. A utilizao mais freqente para a criao de classes. Pode criar as suas prprias interfaces genricas, mtodos, classes, eventos e delegates. As classes genricas podem ser utilizadas para permitir acesso aos mtodos usando tipos de dados especficos. Informaes sobre os tipos usados em um tipo de dados genrico podem ser obtidas em tempo de execuo por meio de reflexo. 3. COMPILADORES

Antigamente a principal linguagem para criao dos softwares era assembly. O custo para se reutilizar os softwares em outras maquinas era muito alto, conseqentemente no era vivel criar as linguagens de alto nvel, alm disso,a curta memria dos computadores dificultarem a implementao do compiladores. Um compilador um software que tem uma funo de tradutor. O compilador recebe um cdigo em uma linguagem que ele seja capaz de entende-la ,ele a interpreta e , atravs desta interpretao ele cria um outro software com o mesmo contedo do cdigo recebido, porm ,em outra linguagem. O primeiro compilador foi escrito por Grace Hopper em 1952. O compilador foi feito para ler a linguagem A-0.

FIGURA 2: GRACE HOPPER

3.1

Classificao dos compiladores

3.1.1 Compilador cruzado O compilador recebe esse nome quando o programa compilado pode ser executado em outro computador que possui um processador, ou um Sistema Operacional diferente daquele em que o compilador executado. 3.1.2 Tradutor filtro O programa faz traduo entre linguagens de alto-nvel. 3.1.3 Montador O programa faz uma traduo entre uma linguagem de montagem e um cdigo de mquina. 3.1.4 Desmontador O programa faz uma traduo entre um cdigo de mquina e uma linguagem de montagem. 3.1.5 Descompilador O programa traduz uma linguagem de baixo nvel para uma linguagem de alto nvel.

3.2

Processo de compilao O processo de compilao composto por duas fazes: Anlise e Sntese.

A funo da anlise interpretar o cdigo fonte e escreve-la em uma estrutura intermediria. A sntese utiliza a estrutura intermediria para montar o cdigo objeto final.

3.2.1 Anlise lxica a primeira fase do compilador. Um dos papeis desta fase a eliminao dos espaos em branco, dos comentrios e as marcas de formatao de texto. Alm de assumir o papel de detetive, ou seja, procura pela identificao e separao smbolos lxicos. 3.2.2 Anlise sinttica Esta fase responsvel pela verificao dos smbolos lxicos, ela procura saber se a cadeia vlida ou no para se tornar uma estrutura. 3.2.3 Analise semantica Esta fase responsvel por arrumar mtodos pelos quais ocorra a avaliao, ou a execuo das estruturas construdas pelo analisador sinttico.

3.3

Tipos de compilao

A otimizao, que melhora os programas tornando-os menores ou mais rpidos, ou ambos, muitas vezes, uma parte opcional da compilao. De fato, alguns compiladores so incapazes de fazer qualquer otimizao significativa. Esse tipo de compilador seria usado em situaes em que a velocidade de execuo do programa traduzido bem menos importante do que a velocidade de compilao. Um exemplo dessa situao um laboratrio de computao para programadores principiantes. Na maioria das situaes comerciais e industriais, a velocidade de execuo mais importante do que a velocidade de compilao, de modo que a otimizao rotineiramente desejvel. Uma vez que muitos tipos de otimizao no podem ser feitos em linguagem de mquina, a maioria das otimizaes feita no cdigo intermedirio. O gerador de cdigo converte a verso do cdigo intermedirio otimizado do programa para um programa em linguagem de mquina equivalente. A tabela de smbolos serve como um banco de dados para o processo de compilao. Seu principal contedo so informaes sobre tipos e atributos de cada nome definido pelo usurio no programa. Essas informaes so colocadas na tabela de smbolos pelos analisadores lxico e sinttico e usadas pelo analisador semntico e pelo gerador de cdigo. Conforme afirmou-se acima, no obstante a linguagem de mquina gerada por um compilador possa ser executada diretamente no hardware, quase sempre ela deve ser executada juntamente com algum outro cdigo. A maioria dos programas de usurio tambm exige programas do sistema operacional. Entre os mais comuns, esto aqueles para entrada (input) e sada (output) de dados. O compilador cria chamadas a programas do sistema necessrios quando o programa de usurio necessita deles. Antes que os programas em linguagem de mquina produzidos pelo compilador possam ser executados, os programas necessrios do sistema operacional devem ser encontrados e vinculados ao usurio. A operao de vinculao conecta o programa de usurio aos de sistema, colocando os endereos dos pontos de entrada dos programas de sistema nas chamadas a eles no de usurio. O cdigo de usurio e o de sistemas juntos, s vezes, so chamados de mdulo de carga ou imagem de executvel. O processo de coletar programas de sistema e vincul-los aos programas de usurio chamado de vinculao e carregamento ou, s vezes, apenas de vinculao. Ele realizado por um programa de sistema chamado linkeditor. Alm dos programas de sistemas, os programas de usurio muitas vezes devem ser vinculados a programas de usurio compilados anteriormente, que residem em bibliotecas. Assim, o linkeditor no somente vincula algum dado programa aos programas de sistema, mas tambm o vincula a outros programas de usurio. 3.4 Interpretao pura

Na extremidade oposta dos mtodos de implementao, os programas podem ser interpretados por outro programa chamado interpretador, sem nenhuma converso. O programa interpretador age como uma simulao de software de uma mquina cujo ciclo buscar-executar lida com instrues de programa em linguagem de alto nvel em vez de instrues de mquina. Essa simulao de software, evidentemente, fornece uma mquina virtual para a linguagem. Essa tcnica, chamada de interpretao pura ou, simplesmente de interpretao, tem a vantagem de permitir uma fcil implementao de muitas operaes de depurao do cdigo fonte, porque todas as mensagens de erro em tempo de execuo podem referir-se a unidades do cdigo. Por exemplo, se for considerado que um ndice de array est fora da faixa, a mensagem de erro poder facilmente indicar a linha da fonte e o nome do array. Por outro lado, esse mtodo tem a sria desvantagem de que a execuo de 10 a 100 vezes mais lenta que em sistemas compilados. A principal causa dessa

lentido a decodificao das instrues de alto nvel, bem mais complexas do que as instrues em linguagem de mquina (no obstante possa haver um nmero menor de comandos do que de instrues de cdigo de mquina equivalente). Portanto, a decodificao de comandos, em vez da conexo entre o processador e a memria, o gargalo de um interpretador puro. Outra desvantagem da interpretao pura que ela frequentemente exige mais espao. Alm do programa-fonte, a tabela de smbolos deve estar presente na interpretao. Alm disso, o programa-fonte deve ser armazenado em uma forma projetada para permitir fcil acesso e modificao, em vez de um tamanho mnimo. A interpretao um processo difcil em programas escritos em uma linguagem complicada, porque o significado de cada expresso e instruo deve ser determinado diretamente do programa-fonte em tempo de execuo. Linguagens com estruturas mais simples prestam-se interpretao pura. Por exemplo, a APL e a LIST, s vezes so implementadas como sistemas interpretativos puros. A maioria dos comandos do sistema operacional, como por exemplo, o contedo dos scripts do shell do UNIX e dos arquivos .bat do DOS, so implementados com interpretadores puros. Linguagens mais complexas, como o FORTRAN e o C, raramente so implementadas com interpretadores puros. 4. CONCLUSO

Ao desenvolver deste trabalho chegamos a concluso de que de suma importncia a interao entre compiladores e linguagens de programao. Vale a pena ressaltar que a linguagem de programao dependente do compilador para sua traduo. Com o passar dos anos as linguagens de programao evoluram chegando bem prximas da linguagem humana,criando assim uma maior interao do homem com a maquina.

5.

REFERNCIA

http://pt.wikipedia.org/wiki/Compilador s, Ricardo Ferreira de Oliveira Talk 14h49min de 22 de dezembro de 2011 (UTC) http://www.poorwilliam.net/al-120907.html [1906 - Grace Murray Hopper, computer pioneer, COBOL developer, born in New York City] Livro compiladores Princpios,tcnicas e ferramentas.

Alfred V.Aho

Monica S.Lam

Ravi Sethi Jeffrey D.Ullman