Sunteți pe pagina 1din 5

1

COMPILADORES.
Nomes dos integrantes do grupo: Anderson W. C. Pacheco, Camila D.C. Maral,
Daniel R. D. C e Viviane N. Alves.
UNIPAC Lafaiete Fundao Presidente Antnio Carlos, Prof. Orientador Emerson R. A. Tavares
Resumo - Este artigo apresenta uma viso do que um
compilador e as variveis utilizadas no processo de
compilao de forma a entender como so utilizados as
gramticas e linguagens durante este processo. Fizemos uso de
uma metodologia baseada em analogias entre os conceitos de
compiladores e o seu uso visando tornar a ferramenta mais
atuante o processo de aprendizagem.

A bibliografia complementar utilizada inclui os livros de


Introduo aos fundamentos da Computao (Newton Jos
Vieira [ISBN: 85-221-0508-1]), compiladores ALFRED V.
AHO, Ravi Sethi, Jeffrey D. Ullman, Compiladores,
Princpios, Tcnicas e Ferramentas. (Editora LTC, p IX) e
LOUDEN, Kenneth C. Compiladores Princpios e Prticas.
So Paulo, Cengage Learning, 2004

Palavras Chave Compiladores - Linguagem Bsico


Linguagem Programao - Engenharia da Computao Cincia da Computao - Tec.Informao.

Apesar da diversidade e da qualidade das obras acima


referidas, a bibliografia bsica (texto) usamos neste artigo
referencias de artigos cientficos para o enriquecimento do
mesmo.

I. SIGLAS
Token - em computao um conjunto de caracteres (de
um alfabeto, por exemplo) com um significado
coletivo.
Parcing em computao e lingustica: anlise de
sinttica ou

o
processo
de
analisar
uma sequncia de expresso matemtica.
String sequncia de caracteres.

II. INTRODUO
A computao est constantemente presente em nosso dia-adia, e com os avanos e melhorias surgiram inmeras
linguagens de programao, cada linguagem exige o seu
tradutor/compilador. A partir da criao dos compiladores o
ato de programar se tornou uma tarefa mais simples.
Este processo de traduo chamado compilao, que traduz a
notao textual que fcil de ser entendida por pessoas para
instrues em linguagens de mquinas.

III. OBJETIVOS

V. COMPILADORES
A. Compiladores
Um compilador um programa de computador (ou um grupo
de programas) que, a partir de um cdigo fonte escrito em
uma linguagem compilada, cria um programa semanticamente
equivalente, porm escrito em outra linguagem, cdigo objeto.
Ele chamado compilador por razes histricas; nos primeiros
anos da programao automtica, existiam programas que
percorriam bibliotecas de sub-rotinas e as reunia juntas, ou
compilava, as subrotinas necessrias para executar uma
determinada tarefa. [2]
Um compilador tambm pode ser chamado de tradutor que
recebe um dado de entrada em uma linguagem de programao
denominada linguagem fonte e produz aps seu processamento
um programa escrito em uma linguagem de baixo nvel como o
Assembley ou at mesmo linguagem de mquina que
denominada linguagem alvo.
Uma importante parte deste processo a anlise e deteco de
erros no programa fonte como sintaxe e outros gerando
relatrios ao usurio. Com isso o funcionamento bsico de um
compilador pode ser sintetizado no esquema abaixo.

O objetivo deste artigo descrever o funcionamento de um


compilador demostrando seus princpios bsicos e fases de
compilao em um mbito terico e generalizado.
Demonstrando inclusive modelos conceituais de compiladores
focando nas anlises e snteses.
IV. BIBLIOGRAFIA

Fig. 1. Um Compilador. [1]

Para realizar as anlises, o compilador deve ter cincia de


quais so os tokens apropriados da linguagem, assim como
suas palavras chaves e regras para o desenvolvimento de
identificadores. As tcnicas de aperfeioar o cdigo que so
usadas em compiladores devem, alm de manter a definio do
programa original, ser capaz de capturar a maior parte das
possibilidades de avano do cdigo dentro de limites
plausveis de esforos gastos para tal fim.

Autmatos so constitudos por um alfabeto, conjunto


de estados finitos, funo de transio, estado inicial
e estados finais. Dessa forma um autmato pode ser
encarado como um reconhecedor de linguagens
regulares.

B. Gramticas e Linguagens
O conceito de gramtica ser usado inicialmente como
ferramenta para descrever uma linguagem e
posteriormente como base para a construo dos
analisadores lxico sinttico. Uma gramatica consiste
em um conjunto de regras que definem como derivar
determinada String de uma linguagem. As regras de
produo envolvem smbolos da linguagem e
variveis que representam um conjunto de Strings.

Figura 2: Modelo autmato. [1]

C. O processo de compilao

S
A
B
C

ABC
aA | a
bB | bb
cC |

Um alfabeto um conjunto de elementos finitos e no


vazios sendo assim um alfabeto um conjunto de
smbolos e um smbolo um elemento qualquer de
uma linguagem.

Os compiladores geralmente so divididos em analise e


sntese. Onde a analise consiste em uma serie partes que
formam uma representao intermediaria j a sntese constri
o programa alvo a partir da anlise.
Aps a compilao necessrio uma seriem de programas para
tornar-se um programa alvo executvel.

S = {1,2,3, ... , X}
S = {A, B, C}
Um algoritmo nada mais do que uma receita que
mostra o passo a passo os procedimentos necessrios
para uma determinada tarefa. De forma mais objetiva
um algoritmo uma sequencia logica para se realizar
uma tarefa no se aplica apenas computao, mas
sim qualquer planejamento que seja feito para se
chegar a um determinado objetivo.
Trocar uma lmpada:
1 Comprar uma nova lmpada.
2 Pegar uma escada.
3 Posicionar a escada.
4 Substituir a lmpada pela nova.
5 Descer da escada.
Pode-se definir uma linguagem como sendo um
conjunto de elementos (smbolos) e um conjunto de
mtodos (regras) para combinar estes elementos,
sendo usados e entendidos por uma determinada
comunidade. Sendo assim uma linguagem formal
aquela que pode ser representada de forma finita e
precisa de acordo com sistemas de sustentao
matemtica.

Figura 3: Compilao padro. [1]

A compilao de um programa tipicamente envolve o


seguinte:
Anlise lxica: chamado "smbolos lxicos" (lexical
tokens), ou somente "smbolos" (tokens) responsvel por:
1. Ler o texto fonte, caracter a caracter;
2. Identificar os elementos lxicos da linguagem:
identificadores, palavras reservadas, constantes e
operadores;
3. Ignorar comentrios, brancos e tabs;
4. Processar includes (se for o caso) e Anlise Sinttica.

Tabela 1: Anlise Lxica


MONTANTE := DEPOSITO_INICIAL + TAXA_DE_JURUS * 60
PROCESSO
Identificador
Processo
Smbolo
Nmero
montante
2
:=
1
deposito_inicial
4
+
3
taxa_de_jurus
6
*
5
60
7

Anlise Sinttica: responsvel por identificar na sequncia de


elementos lxicos as construes da linguagem.
Exemplo: para a sequncia em Pascal, if a > b then a:=a-b
else b:=b-a. A anlise sinttica deve idenfic-la como um
comando condicional, para a qual a condio a > b e ao
qual esto associados os comandos a := a-b e b := b-a.

Um Assembler traduz de uma linguagem de montagem para o


cdigo de mquina correspondente.
Uma instruo de mquina para cada instruo em Assembly
language.
Um compilador traduz de uma linguagem de alto nvel para
uma linguagem de baixo nvel.
Vrias instrues de mquina para cada linha de comando da
linguagem de alto-nvel.
F. Outros tipos de tradutores
Tradutores entre linguagens de alto nvel.
Disassembler
De(s)compilador
A anlise lxica e a anlise sinttica tem papis parecidos, j
que as duas tratam de sequncias de smbolos. A separao
das duas em dois nveis de descrio e tratamento simplifica
no s a descrio da linguagem como tambm a
implementao do compilador.

G. Anlise e sntese
Figura 4: Modelo analise sinttica [3]

Anlise Semntica: tem por objetivo verificar se as


construes identificadas pela anlise sinttica esto em
acordo com as regras semnticas da linguagem sendo
compilada e tem duas tarefas:
1. A Anlise de contexto e a Gerao de cdigo;
2. Verificao de erros em frases que esto sintaticamente
corretos.
Exemplos: uma varivel no declarada, uma multiplicao
entre tipos de dados diferentes e atribuio de um literal para
outro tipo, como um inteiro e uma string ou vice-versa.
Traduo: aps a leitura completa do cdigo, identificando
variveis e outros elementos e j conhecendo as literais do
cdigo, realizada a "traduo" do cdigo em linguagem de
mquina.
D. Tradutores e Compiladores
A compilao difere da traduo porque ela faz alteraes no
cdigo, de forma a torn-lo otimizado. Enquanto uma linha
sempre uma instruo na traduo, x linhas no cdigo tero y
linhas de comandos de mquina, de acordo com o compilador.
Tradutores recebem um texto expresso em uma linguagem
fonte e geram um texto semanticamente equivalente em uma
linguagem destino.
Java para x86
x86 assembler
E. Assembler x Compilador

O processo de sntese foi dividido em duas partes gerao de


cdigo intermedirio, otimizao de cdigo e gerao de
cdigo.
A gerao de cdigo intermedirio o primeiro
processo da fase de sntese de compilao, mas em
alguns compiladores esse processo no utilizado.
Este processo consiste em gerar um cdigo
intermedirio e explicito, nesta fase importante que o
cdigo seja fcil de produzir e fcil de traduzir no
programa alvo.
A principal diferena entre o cdigo intermedirio e o
cdigo objeto final que no so especificados
detalhes da mquina alvo, tal como quais
registradores sero usados, quais endereos de
memria sero referenciados e etc.
Na fase de otimizao do cdigo o compilador tenta
tornar o cdigo intermedirio mais eficiente possvel.
Nos diferentes tipos de compiladores o nmero de
otimizaes pode variar neste tipo de compilador uma
boa parte do tempo de compilao fica neste
processo. Entretanto, existe otimizaes simples que
podem melhorar significativamente o tempo de
execuo do programa alvo, sem prolongar tanto o
tempo de compilao.
Na gerao do cdigo, o processo de compilao todas
as anlises e otimizaes foram realizadas e
obtiveram sucesso. Este processo se inicia com a
entrada do cdigo intermedirio, e realiza a traduo
deste cdigo geralmente em Assembley ou at mesmo
em cdigo de mquina.

H. Fases de um compilador

Compiladores de Java:
Tabela 2: Compiladores Java

Nome
Eclipse

Jubile

Figura 5: Fases de um compilador. [1]

I. Gerenciamento da Tabela de Smbolos


Uma tabela de smbolos uma estrutura utilizada em
compiladores para armazenar informaes de identificadores,
tais como variveis e funes. utilizada em quase todas as
etapas do processo de compilao. Em cada fase pode ser
usada como base de comparao e at mesmo atualizada de
acordo com a sada de cada fase do processo.
Cada entrada na tabela de smbolos pode ser entendida como
um registro contendo campos com nome, tipo, classe,
tamanho, escopo, etc. que a qualificam.

JEdit

JDeveloper

J. Gerenciamento de erros e gerao de relatrios


O tratamento de erros est voltado a falhas devido a muitas
causas: erros no compilador, erros na elaborao do programa
a ser compilado, erros no ambiente (hardware, sistema
operacional), dados incorretos, etc. As tarefas relacionadas ao
tratamento de erros consistem em detectar cada erro, report-lo
ao usurio e possivelmente fazer algum reparo para que o
processamento possa continuar.
A anlise lxica e sinttica tratam uma grande variedade de
erros. Quando so encontrados careceres remanescentes que
no formam qualquer token pertencentes linguagem
geralmente estes so erros que devem ser tratados pelo
analisador lxico. Na anlise sinttica quando so encontrados
fluxos de tokens que violem as regras estruturais da linguagem
so tratados pelo analisador sinttico.

K. Exemplos de Compiladores

NetBeans

Descrio
Eclipse uma IDE de cdigo aberto
desenvolvido inicialmente pela IBM e
posteriormente doada para a comunidade
do software livre. Utilizada largamente,
tem grandes diferenciais como a
possibilidade de instalao de vrios
plug-ins. Uma verso em portugus
mantida no site oficial que conhecida
como Eclipse Europa.
JBuilder

uma
IDE
para
desenvolvimento de aplicaes mais
grficas, a partir de JFames. O JBuilder
foi desenvolvido pela Borland (a mesma
que produz o C++ Builder) utilizando
tecnologias da comunidade do Eclipse
Europa. O site CodeGear que faz a
distribuio dos softwares da Borland
mantm duas verses: uma Enterprise
(pago) e a verso trial (mais bsica,
porm gratuita). O problema maior do
JBuilder para quem no tem internet de
banda larga, pois os arquivos de
downloads chegam a exagerados 1,8 Gb.
JEdit

um
Ambiente
de
Desenvolvimento Integrado criado pela
Xinox Software com o ncleo
desenvolvido
por
Slava
Pestov.
Atualmente, distribudo sobre a licena
GPL 2.0 (software livre) tem uma
interface mais limpa e simples que outras
IDEs, bom para quem est comeando.
IDE desenvolvido pela Oracle. Cobre
todo processo de produo do software
em java, desde o desenvolvimento do
cdigo at a implantao do software.
Oferece uma tima estrutura de UML
com diagramao do cdigo.
O compilador que faz parte da prpria
gama de produtos da Sun Microsystems.
Com capacidade de programao em
vrios
ambientes
como
C++,
Desenvolvimento para sofwares de
celular (mobile), Ruby on Rails e vrios
outros. Netbeans uma ferramenta de
desenvolvimento Java poderosa, mas
todo este poder requer uma mquina no
muito modesta.

Compiladores de C e C++:
Tabela 3: Compiladores C e C++

Nome
DevC++

GCC

C++
Builder

Visual
C++

Descrio
Criado pela Bloodshed, o melhor para quem
iniciante tanto na linguagem quanto na
programao. Tem suporte a projeto e boa interface
com o usurio. A desvantagem a impossibilidade
de se criar projetos muito extensos. Apesar de
compilar a linguagem C, seu cdigo escrito em
um cdigo totalmente diferente - o Delphi!
Compilador utilizado pelo projeto GNU. padro
ANSI C e nativo do sistema Linux, facilitando
muito a vida de usurios Linux, pois no preciso
instalar compiladores de terceiros. Seu nico
problema a falta de uma interface, que prejudica
quem principiante na linguaguem.
O C++ Builder um dos melhores compiladores
que tem, com possibilidade de criao de projetos
extensos. A Borland mantm no site da Code Gear
duas verses: uma demo e outra paga. Ele segue o
padro ISO ou ANSI C, mas tambm tem muitas
bibliotecas no padro, fazendo muitas vezes com
que o programa perca a portabilidade e o cdigo
escrito no C++ Builder no rode em outros
compiladores, mesmo que a linguagem C seja a
mesma.
O visual C++ um compilador profissional da
Microsoft que compe o pacote Visual Studio,
com vrios recursos, como incremento de cdigo,
depurador de erros avanado e outras ferramentas
que aumentam a produtividade do programador. O
problema que por ser da Microsoft tem o preo
elevado e s compensar se voc for usar esta
linguagem para desenvolvimento profissional em
aplicaes Windows. Tem uma verso trial no site
oficial.

VI. REFERNCIAS
[1] ALFRED V. AHO, Ravi Sethi, Jeffrey D. Ullman,
Compiladores, Princpios, Tcnicas e Ferramentas. (Editora
LTC, p IX).
[5] LOUDEN, Kenneth C. Compiladores Princpios e Prticas.
So Paulo, Cengage Learning, 2004
[2] Wikipdia, a enciclopdia livre.
[3]https://commons.wikimedia.org/wiki/File:Parsingexample.png#/media/File:Parsing-example.png
[4]https://pt.scribd.com/doc/268129330/TeoriaComputacaoNo
vo
[5] IEEE Copyright Form.

VII. CONCLUSES
O objetivo principal do presente artigo a viso e
entendimanto de como so utilizados as gramticas e
linguagens no processo de compilaao.
Os resultados alcanados com a prtica dessa metodologia,
no s confirmam as suposies iniciais, como tambm
apontam para a melhoria do entendimento de compiladores,

gramtica e linguagens ao desempenho dos acadmicos.


Dentre os benefcios obtidos podemos destacar os seguintes:
Aprendizado mais abrangente, mais profundo e mais efetivo
tanto do contedo relativo disciplina de Linguagens Formais
e Compiladores quanto da disciplina de Construo de
Compiladores.

S-ar putea să vă placă și