Você está na página 1de 13

Desenvolvimento do Compilador da

Linguagem Basico
Fbio Alexandrini
fabalex@ifc-riodosul.edu.br
UNIDAVI/IFC-RIODOSUL

Tiago Boechel
tboechel@gmail.com
IFC-RIO DO SUL

Felipe Augusto Schiquetti1


felipe_schiquetti@hotmail.com
IFC-RIO DO SUL

Luis Ricardo Rosa


rosah_rh@hotmail.com
IFC-RIO DO SUL

Rodrigo Becker Probst


rodrigo_beka@hotmail.com
IFC-RIO DO SUL

Resumo:Compiladores uma disciplina fundamental dos cursos superiores da rea de computao, no


presente artigo apresenta um breve discurso com seus principais tpicos relacionados a elementos de
matemtica discreta, conceitos de linguagens, linguagens regulares, linguagens livres de contexto,
linguagens sensveis ao contexto e linguagens recursivas. Est matria se apresenta com nfase na
formao cientifica do aluno, sendo uma matria rida e complexa. O objetivo do presente artigo
expressar de forma mais fundamentada os conceitos da disciplina com um teor mais abrangente, para que
principalmente o estudante sinta-se mais familiarizado com a disciplina e descubra a sua importncia
para conseguir aperfeioar seus algoritmos e compreender os limites da mquina. Aps um estudo focado
na matria corrente organizo-se atravs do software GALS um analisador lxico e sinttico, tendo como
base a linguagem de programao BASIC, mas com algumas modificaes impostas para o
aperfeioamento dos analisadores.

Palavras Chave: Linguagem Basico - LinguagemProgramao - Compiladores - Cincia da


Computa - Tec.Informao
1. INTRODUO
Um Compilador pode ser denotado como um programa que recebe como entrada um
programa fonte e o traduz para um programa equivalente em outra linguagem (LOUDEN,
2004). um programa que traduz um programa escrito em linguagem de alto nvel para um
programa equivalente em cdigo de mquina para o processador. O compilador no produz o
cdigo de mquina e sim um programa em linguagem simblica semanticamente equivalente
ao programa em linguagem de alto nvel, traduzido ento em linguagem de mquina.
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.
Esse mtodo tem a vantagem de uma execuo de programa muito rpida, assim que o
processo de traduo concludo. A linguagem que um compilador traduz chamada de
linguagem-fonte. O processo de compilao desenvolve-se em diversas etapas que sero
melhor compreendidas no decorrer deste artigo.

2. ALFABETOS
Um alfabeto um conjunto finito no vazio cujos elementos so chamados de smbolos.
Dessa maneira, os conceitos de smbolo e alfabeto so introduzidos de forma interdependente:
um alfabeto um conjunto de smbolos, e um smbolo um elemento qualquer de um
alfabeto.
At certo ponto, pode-se arbitrar os smbolos que nos interessam, e incluir apenas esses
smbolos no alfabeto. Para cada aplicao especfica, o usurio deve escolher o alfabeto que
pretende utilizar.
Uma cadeia de smbolos em um alfabeto pode ser definida como uma funo;

V = {a, b, c,.,z }
V = {0, 1}
V = {a, e, i, o, u}

3. ALGORITMOS
Um algoritmo uma a sequncia finita de instrues, e define instrues como uma
operao claramente descrita e que possa ser executada em tempo finito.
Um algoritmo nada mais do que uma receita que mostra passo a passo os
procedimentos necessrios para a resoluo de uma tarefa. Em termos mais tcnicos, um
algoritmo uma sequncia lgica, finita e definida de instrues que devem ser seguidas para
resolver um problema ou executar uma tarefa.
Embora voc no perceba, utiliza algoritmos de forma intuitiva e automtica
diariamente quando executa tarefas comuns. Como estas atividades so simples e dispensam
ficar pensando nas instrues necessrias para faz-las, o algoritmo presente nelas acaba
passando despercebido, como exemplo a receita de um bolo (Figura 1);
Figura 1: Algoritmo (receita de bolo)

4. GRAMTICAS
Chomsky definiu quatro tipos de gramticas, 0, 1, 2 e 3, que formam uma hierarquia:
cada gramtica de um tipo tambm dos tipos menores.
Nossa definio no exatamente a mesma usada por Chomsky, mas praticamente
equivalente.
As regras de uma gramtica tipo 0 so regras da forma a b, com a e b quaisquer.
Gramticas tipo 1 so as gramticas com regras da forma a b, em que se exige | a | | b |;
entretanto permitida uma regra que viola esta restrio: uma gramtica tipo 1 pode ter a
regra S e, se S no aparece do lado direito de nenhuma regra.
Gramticas tipo 2 so as gramticas com regras da forma A b, onde A um smbolo
no terminal, e b uma sequncia qualquer de V*, possivelmente vazia.
Gramticas tipo 3 s podem ter regras dos trs tipos descritos a seguir:
A aB, onde A e B so no terminais, e a um terminal;
A a onde A um no terminal, e a um terminal;
A e, onde A um no terminal.

Se uma linguagem tem uma gramtica tipo 0, ela uma linguagem tipo 0; se tem uma
gramtica tipo 1, ela uma linguagem tipo 1, ou uma linguagem sensvel ao contexto, se tem
uma gramtica tipo 2, ela uma linguagem tipo 2, ou uma linguagem livre de contexto; se
tem uma gramtica tipo 3, ela uma linguagem tipo 3, ou uma linguagem regular.
As gramticas tipo 3 so chamadas regulares pela simplicidade da estrutura de suas
linguagens, garantida pelos rgidos formatos de suas regras.
As gramticas tipo 2 so chamadas de livres de contexto porque uma regra A b
indica que o no terminal A, independentemente do contexto em que estiver inserido, pode
ser substitudo por b.
Finalmente, as gramticas tipo 1 so chamadas de sensveis ao contexto.
Figura 2: Hierarquia de Chomsky

5. AUTMATOS
Autmato finito determinstico;

Um Autmato Finito Determinstico, sobre um alfabeto um sistema, onde um conjunto


de estados finito, no vazio um alfabeto de entrada finito e a funo de transio o estado
inicial e o conjunto de estados finais.
O nome determinstico faz referncia ao fato de que uma funo que determina
precisamente o prximo estado a ser assumido, em resumo so reconhecedores de linguagens
regulares definidos atravs de quntuplas de forma a seguir:

um conjunto finito no vazio de estados do autmato;


um conjunto de smbolos, denominado alfabeto de entrada do autmato;
a funo de transio de estados do autmato e seu papel o de indicar as transies
possveis em cada configurao do autmato. Esta funo fornece para cada par "estado e
smbolo de entrada" um novo estado para onde o autmato dever mover-se.
denominado estado inicial do autmato finito. o estado para o qual o reconhecedor
deve ser levado antes de iniciar suas atividades.
um subconjunto do conjunto Q dos estados do autmato, e contm todos os estados de
aceitao ou estados finais do autmato finito. Estes estados so aqueles em que o autmato
deve terminar o reconhecimento das cadeias de entrada que pertencem linguagem que o
autmato define. Nenhuma outra cadeia deve ser capaz de levar o autmato a qualquer destes
estados.
Por exemplo:
M = ({A, B}, {0, 1}, f, A, {B}) f = (A, 0) A
(A, 1) B
(B, 1) B
(B, 0) A

Para este autmato finito, reconhecem-se os seguintes elementos:


Estados do autmato: A e B
Smbolos do alfabeto de entrada: 0 e 1
Estado final: B
Estado inicial: A
Linguagem reconhecida: cadeias de dgitos binrios terminadas obrigatoriamente por um
dgito 1.

6. AUTOMATOS FINITOS NO DETERMINISTICOS


Passa-se agora ao estudo dos autmatos no determinsticos. Em oposio ao que
acontece com os determinsticos, a funo de transio de um autmato no determinstico
no precisa determinar exatamente qual deve ser o prximo estado. Em vez disso, a funo de
transio fornece uma lista de estados para os quais a transio poderia ser feita. Essa lista
pode ser vazia, ou ter um nmero qualquer positivo de elementos.
Essa possibilidade de escolha entre vrios caminhos a serem seguidos nos leva a modificar a
definio de aceitao. Um autmato determinstico, aceita se "o ltimo estado atingido
final".
Mas um no determinstico aceita se "existe uma sequncia de escolhas tal que o ltimo
estado atingido final". Pode-se alternativamente imaginar que o autmato no determinstico
"escolhe", "adivinha", o caminho certo para a aceitao, uma vez que a existncia de escolhas
erradas, que no levam a um estado final, irrelevante.

7. ANLISES
Anlise lxica o processo de analisar a entrada de linhas de caracteres e produzir uma
sequencia de smbolos chamados "smbolos lxicos" (tokens), que podem ser manipulados
mais facilmente por um leitor de sada.
Anlise sinttica, assim como as outras referentes lngua, um exerccio muito
prximo da matemtica, pois envolve um raciocnio lgico do tipo: se voc encontrar tal
elemento, ento admita que esse elemento seja um objeto. Promover esse tipo de raciocnio
no estudo das sentenas desenvolver uma anlise formal, porque as categorias sintticas so
formas que no dependem do contedo que expressam. Resumidamente este o processo de
analisar uma sequencia de entrada para determinar sua estrutura gramatical.
Anlise semntica a terceira fase da compilao onde se verifica os erros semnticos,
(por exemplo, uma multiplicao entre tipos de dados diferentes) no programa-fonte e coleta
as informaes necessrias para a prxima fase da compilao.

8. RVORES
So estruturas de dados extremamente teis em muitas aplicaes. Uma rvore
formada por um conjunto finito T de elementos denominados vrtices ou ns de tal modo que
se T = 0 a rvore vazia, caso contrrio tem-se um n especial chamado raiz da rvore (r), e
cujos elementos restantes so particionados em m>=1 conjuntos distintos no vazios, as
subrvores de r, sendo cada um destes conjuntos por sua vez uma rvore. A seguir pode-se
verificar uma arvore de nove ns, sendo (A) a raiz;
Figura 3: Arvore de nove ns sendo (A) raiz

Uma rvore estritamente binria uma rvore binria em que cada n tem 0 ou 2 filhos.
Uma rvore binria cheia uma rvore em que se um n tem alguma sub-rvore vazia ento
ele est no ltimo nvel. Uma rvore completa aquela em se n um n com algumas de
subrvores vazias, ento n se localiza no penltimo ou no ltimo nvel. Portanto, toda rvore
cheia completa e estritamente binria;

Figura 4: rvore estritamente binria, binria completa e binria cheia

As rvores binrias so estruturas importantes toda vez que uma deciso binria deve ser
tomada em algum ponto de um algoritmo. Ao Supor que precisa-se descobrir nmeros
duplicados em uma lista no ordenada de nmeros. Uma maneira comparar cada novo
nmero com todos os nmeros j lidos. Isto aumenta em muito a complexidade do algoritmo.
Outra possibilidade manter uma lista ordenada dos nmeros e a cada nmero lido fazer uma
busca na lista. Outra soluo usar uma rvore binria para manter os nmeros. O primeiro
nmero lido colocado na raiz da rvore. Cada novo nmero lido comparado com o
elemento raiz, caso seja igual uma duplicata e volta-se a ler outro nmero, pode-se verificar
melhor no exemplo:

Supondo-se que os nmeros 7-8-2-5-8-3-5-10-4 foram os dados de entrada fornecidos


pelo usurio, sua rvore binria seria construda da seguinte forma;

Figura 5: Arvore binria com dados fornecidos pelo usurio.

10. GALS
O GALS uma ferramenta freeware de gerao de analisadores lxicos e sintticos,
dai o seu nome (GALS), seu uso feito atravs de sua interface grfica, com base em
definies regulares e uma gramtica.
Gera os analisadores para trs linguagens ; Java, C++ ou Delphi. Tem a opo de gerar
o analisador lxico, o analisador sinttico ou ambos (GESSER, 2003, p.39).
O download do software GALS pode ser feito no site http://gals.sourceforge.net/ onde
tambm se encontra tutoriais e fruns de como utiliza-lo.
Foi criado por Carlos Eduardo Gesser em seu Trabalho de concluso de curso (TCC)
de cincia da computao na universidade federal de santa catarina, sob orientao do
professor Dr. Olinto Jos Varela Furtado.

11. DESENVOLVIMENTO DO RECONHECEDOR LXICO/SINTTICO


Teve-se algum tempo para decidir como de criar a prpria linguagem, e decidiu-se
que, como aprendizes de cientistas da computao, deve-se criar algo bsico mas que tivesse
uma possvel utilidade prtica no futuro, portanto, optao-se por criar uma linguagem que
ajuda nos primeiros passos para crianas aprenderem a lgica da programao.
Volta-se para os primrdios, em aulas de Algoritmos, e decidiu-se que precisaria ter
criao de variveis, o uso do se (IF) e do enquanto (WHILE) que so, em nossa opinio o
bsico. Da o nome da nossa linguagem.. BASICO.
Aps o estudo realizado constru-se um ANALISADOR LXICO E SINTTICO
BASICO - IF/WHILE atravs da ferramenta de desenvolvimento GALS (Figura 6), o
analisador Lxico e Sinttico das palavras reservadas IF e WHILE, tendo como base a
linguagem BASIC, mas com algumas modificaes que aperfeioam e simplificam o
entendimento da verificao dos analisadores.
Figura 6: Cdigo escrito na IDE Gals

Os primeiros passos para a criao de uma estrutura lxica estudam os tokens que sero
reconhecidos pelo analisador.
Antes de especificar de fato os tokens, preciso verificar que a especificao lxica
dividida em duas partes: Definies Regulares e Definio dos tokens, eles so definidos na
segunda parte.
Nas definies regulares so definidas expresses auxiliares, para serem utilizadas em
sua definio. No programa, uso-se vrios tipos de definies regulares, como operadores
relacionais, operadores lgicos, identificadores e nmeros, transformando todos em tokens
incluindo as palavras reservadas que em especiais so o IF e WHILE, e as palavras
necessrias para um bom entendimento do funcionamento desses algoritmos. OBS: no cdigo,
no considerou-se a nomeao das linhas como acontece com o BASIC original, portanto, no
exemplo aparecer como sendo um nmero.
Com os tokens prontos, verifico-se as excees exigidas pela IDE de programao,
podendo verificar o funcionamento da Analise Lxica do cdigo escrevendo o cdigo de teste
(Figura 7):
A=2
IF (A < 3) GOTO 30 ELSE GOTO 50
A=5
WHILE (A<3) GOTO 30
Figura 7: Programa rodando a anlise Lxica

A especificao sinttica feita de produes para uma gramtica de expresso IF da seguinte


forma:

<SE> ::= if "("<OP_REL>")" <INIC>


| if "("<OP_REL>")" <GOTO>
| if "("<OP_REL>")" <INIC> <SENAO>
| if "("<OP_REL>")" <INIC> <GOTO>
| if "("<OP_REL> <OP_LOG>")" <INIC>
| if "("<OP_REL> <OP_LOG>")" <INIC> <SENAO>
| if "("<OP_REL> <OP_LOG>")" <INIC> <GOTO>;

Pode ser utilizado na gramtica qualquer token j declarado como smbolo terminal. Os
smbolos no terminais precisam ser previamente declarados em sua rea especfica, como o
ELSE. Veja o exemplo a seguir(Figura 8):

A=2
IF (A < 3) GOTO 30 ELSE GOTO 50
A=5
WHILE (A<3) GOTO 30
Figura 8: Programa rodando a anlise Sinttica
12. BASICO

Tendo como base os analisadores retirados do GALS, foi possvel a criao de um compilador
utilizando a linguagem JAVA, que consegue interpretar a linguagem que est sendo escrita e
analisa lexica, sinttica e semanticamente. Resultando em um cdigo compilado com sucesso
(Figuras 9,10, 11) ou um cdigo com erro. Alm disso, este compilador permite que o cdigo
escrito seja salvo para us-lo posteriormente.

Figura 9: Compilador BASICO executando anlise lxica com sucesso

Figura 10: Compilador BASICO executando anlise sinttica com sucesso


Figura 11: Compilador BASICO executando anlise semntica com sucesso

13. CONSIDERAES FINAIS


Com uma base to tcnica e cientifica a matria de compiladores tem de a se tornar
debilitante, mas que se estudada mais a fundo com um tom mais utilizvel e menos terico ela
se torna til na construo de algoritmos mais slidos e estveis.
No decorrer do trabalho verifico-se que com a teoria relativamente colocada em prtica fica
muito mais fcil absorver os assuntos tratados, prontamente com os cdigos fontes
aperfeioados.
Mas sem deixar de brindar a matrias anteriores que nos fizeram ter o conhecimento
para escrever o artigo. Seguindo a linha curricular as matrias de fundamentos de informtica
e matemtica, arquitetura de computadores, teoria da computao e linguagem formais e
autmatos tiveram um grande peso para este artigo ser consolidado.
A estrutura geral do compilador est diretamente ligada com seus analisadores, tabelas
e resultados, com determinao e pesquisa o cdigo sempre pode ser mais bem apreendido e
consequentemente melhorado

14. REFERNCIAS
APRENDIZAGEM em matemtica: registros de representao semitica . 7. ed. So Paulo:
Papirus, 2010. 160p. (Papirus educao) ISBN 8530807313.

CORTES, Pedro Luiz. Administrao de sistemas de informao. So Paulo, SP: Saraiva,


2008. 503 p. ISBN 9788502064508.

DIVERIO, Tiaraj Asmuz; MENEZES, Paulo Blauth. Teoria da computao: mquinas


universais e computabilidade . 2. ed. , 2 reimp. Porto Alegre: Instituto de Informatica da
UFRGS: Sagra Luzzatto, 2004. 205 p. (Livros didticos ( ; n. 5) ISBN 8524105933.
GALS-GERADOR DE ANALISADORES LXICOS E SINTTICOS Disponvel
em:https://projetos.inf.ufsc.br/arquivos_projetos/projeto_353/Gals.pdf
Acesso : em 10 abril.2014.

LIPSCHUTZ, Seymour; LIPSON, Marc. Matemtica Discreta. Porto Alegre, RS: Bookmann,
2013. xi, 471 p. (Coleo Schaum) ISBN 9788565837736.

LOUDEN, Kenneth C. Compiladores: princpios e prtica . 2. ed. So Paulo: Cengage


Learning, 2004. xiv, 569 p. ISBN 9788522104222.

MARTINS, Paulo Roberto (Org.). Algoritmos e estrutura de dados. So Paulo: Pearson


Education, 2009. 184p. (Anlise e Desenvolvimento de Sistemas ; 3) ISBN 9788576052449.

PATTERSON, David A; HENNESSY, John L. Organizao e projeto de computadores. 3. ed.


Rio de Janeiro: Elsevier, Campus, 2005. 484 p. ISBN 8535215212.

ROSA, Joo Lus Garcia. Linguagens formais e autmatos. Rio de Janeiro, RJ: LTC, 2010.
146 p. ISBN 9788521617518.

BEACH, R.; MUHLEMANN, A. P.; PRICE, D. H. R.; PATERSON, A. & SHARP, J. A. A


review of manufacturing Flexibility. European Journal of Operational Research, v. 122, 2000,
pp. 41-57.
OLIVEIRA, U. R. Gerenciamento de riscos operacionais na indstria por meio da seleo de
diferentes tipos de flexibilidade de manufatura. 2009. 246 f. Tese (Doutorado em Engenharia
Mecnica) Faculdade de Engenharia do Campus de Guaratinguet, Universidade Estadual
Paulista, Guaratinguet, 2009.
PADOVEZE, C. L. & BERTOLUCCI, R. G. Proposta de um Modelo para o Gerenciamento
do Risco Corporativo. In: Anais XXV Encontro Nacional de Engenharia de Produo, Porto
Alegre, 2005
TRIOLA, M. F. Introduo Estatstica. 9 Edio. Rio de Janeiro: LTC, 2005

Powered by TCPDF (www.tcpdf.org)

Você também pode gostar