Sie sind auf Seite 1von 21

Anima Algo - software de animao de algoritmos para

auxlio ao ensino e entendimento da programao 1


Frederico de Almeida Martins2

Resumo
O desenvolvimento de um software que permita acompanhar a execuo de um
algoritmo de forma visual com intuito de auxiliar no ensino e entendimento da
programao, parte da elaborao de uma linguagem que seja completa e de fcil
entendimento para a escrita desse algoritmo, passa pelos projetos do compilador dessa
linguagem e do executor do cdigo ou rvore sinttica gerada pelo compilador e
culmina na implementao propriamente dita. Este artigo descreve a implementao de
um prottipo que permite escrever, compilar e visualizar a rvore sinttica gerada a
partir do algoritmo escrito, visando dar suporte implementao do executor.

Palavras-Chave
Algoritmo; Animao; Linguagem de Programao; Compilador; Lex; Yacc.

Anima Algo - algorithm animation software to assist the


education and understanding of the programming
Frederico de Almeida Martins

Abstract
The development of a software that allows to follow the execution of an
algorithm in a visual way with the intention of assisting in the education and
understanding of the programming, starts with the elaboration of a language that is
complete and easy understanding for the writing of this algorithm, passes for the
projects of the compiler of this language and the executer of the code or syntactic tree
generated by the compiler and culminates in the implementation. This article discrible
the implementation of a prototype that allows write, compile and visualize the syntactic
tree generated from the algorithm wrote, with the purpose of giving support to the
implementation of the executer.

Keywords
Algorihtm; Animation; Programming Language; Compiler; Lex; Yacc.

1
2

Trabalho desenvolvido na Disciplina de Tpicos Especiais VII - Universidade de Uberaba.


Aluno do Curso de Bacharelado em Sistemas de Informao Universidade de Uberaba.

1. Introduo
De acordo com [VARANDA E HENRIQUES], a animao de um algoritmo
definida como sendo um tipo de visualizao dinmica das principais abstraes
expressas por esse algoritmo.
Segundo [REZENDE] e [MENDES], uma grande dificuldade encontrada pelos
estudantes - e conseqentemente pelos professores - a falta da capacidade de abstrao
do processo de execuo de um programa. So estudantes que, na sua maioria, nunca
tiveram contato com a matria e tm dificuldade em abstrair o problema para instrues
de uma linguagem de programao.
A animao de algoritmos vem dar uma contribuio nesse sentido medida que
torna visual o processo de execuo, facilitando o entendimento do que ocorre quando
uma dada instruo executada [VARANDA E HENRIQUES]. Alm disso, segundo
[VARANDA E HENRIQUES], pode-se transpor os limites do ensino da programao e
aplicar a animao de algoritmos em qualquer rea onde algoritmos so utilizados,
como por exemplo no ensino da matemtica.
Surge nesse ponto, um imenso leque de aplicaes para ferramentas de animao
de algoritmos, que vai desde o ensino mdio at o ensino superior, e tambm para os
autodidatas.
Prope-se assim, o desenvolvimento de um software que permita escrever,
compilar e executar de forma animada um determinado algoritmo escrito numa
linguagem de fcil entendimento.
O projeto para o desenvolvimento deste software foi dividido em duas fases. A
primeira fase compreende o desenvolvimento de um prottipo funcional que permite
escrever e compilar um algoritmo gerando uma estrutura de dados - rvore de sintaxe
decorada - que ser, na segunda fase, utilizada para execuo do algoritmo. Nesta
primeira fase, com base nos requisitos de software, sero feitas as definies sobre a
linguagem a ser utilizada na escrita dos algoritmos, a arquitetura do software, o modo de
funcionamento do compilador para a linguagem, a estrutura de dados da rvore de
sintaxe decorada e a interface com o usurio. A segunda fase ento, compreende o
desenvolvimento do mdulo que ir interagir com a rvore de sintaxe decorada gerada
na compilao, realizando o processo de execuo animada do algoritmo.
Ser tratada neste artigo, a primeira fase do projeto.

2. Requisitos
Como descrito em [VARANDA E HENRIQUES], o objetivo da animao de
algoritmos perceber o funcionamento de aplicaes cuja animao vai ocorrendo
progressivamente como resposta a aes do utilizador, tornando a interao mais
realista.
Em [MENDES], pode-se encontrar mais alguns requisitos importantes para uma
ferramenta que se propes ao auxlio do ensino e entendimento da programao. So
eles:
I) Ser Interativa, gerando feedback adequado para o aluno permitindo- lhe
interatuar, controlar e desempenhar um papel ativo no processo de aprendizagem.
II) Ser Configurvel, a fim de permitir a adio, remoo e alterao dos
exemplos, exerccios propostos e solues apresentadas, sem que tal acarrete quaisquer
alteraes no seu cdigo.
III) Permitir Representaes alternativas, de forma a possibilitar ao aluno
diferentes pontos de vista, estilos de raciocnio e solues para os mesmos problemas.
2

IV) Ser Animada, para melhor expressar as idias, transmitindo a dinmica


envolvida e a informao patente no problema com mais realismo, facilitando a
compreenso de conceitos, sem contudo gerar confuso visual.
V) Ser Simples, bvia e intuitiva, exigindo pouco tempo de aprendizagem, mas
persuasiva, sofisticada e atrativa.
VI) Ser Portvel, para que seja facilmente transportvel entre diversas
arquiteturas e sistemas operacionais.
VII) Ser Econmica, envolvendo baixos custos de aquisio, para alcanar um
elevado nmero de alunos.
Seguindo as idias expostas acima, pode-se definir os requisitos bsicos para o
software a ser desenvolvido.
Como o software proposto para ser utilizado no aprendizado da programao,
deve-se desenvolver uma linguagem que seja completa - possuir as funcionalidades
bsicas de qualquer linguagem de programao - e de simples entendimento - com
sintaxe intuitiva. A interface para a escrita do algoritmo deve ser amigvel contando
com recursos que permitam destacar com cores diferentes as palavras reservadas da
linguagem, os smbolos, os nmeros, os comentrios e os identificadores.
Antes da execuo do algoritmo, o mesmo deve ser analisado para verificar se os
cdigos correspondem s especificaes da linguagem, buscando possveis erros
lxicos, sintticos e semnticos. Os provveis erros devero ser mostrados indicando o
local onde ocorreram e o motivo pelo qual ocorreram para que se possa corrigi- los.
A execuo dever mostrar passo a passo quais, e como, as instrues escritas no
algoritmo esto sendo executadas. Por ser uma forma bem intuitiva de se entender um
processo, neste caso, o processo de execuo, deve-se utilizar um fluxograma, no qual
as instrues (representadas por retngulos, losangos, crculos e etc) mudam de cor
medida que esto sendo executadas. O comportamento da memria: variveis alocadas e
valores assumidos, tambm dever ser mostrado na execuo de forma animada, com
mudanas de cores e outros recursos para visualizao das declaraes, atribuies e
comparaes feitas pelas instrues.
O software deve ser flexvel a ponto de permitir outras formas de execuo
(como execuo simples no modo tipo prompt, por exemplo) e futuras alteraes (como
no caso da implementao de novas funes, alteraes na linguagem e transporte para
outras linguagens, por exemplo).

3. Arquitetura Proposta
No sistema ALMA, [VARANDA E HENRIQUES] propem uma arquitetura
baseada nos seguintes itens:
I) Criao de um front-end (interface da frente) para uma determinada
linguagem, a partir da respectiva gramtica (para diferentes linguagens, o front-end
dever ser gerado de novo de acordo com as suas gramticas). O front-end primeira
interface com o usurio. a interface que permite escrever e/ou editar os algoritmos,
bem como compilar o cdigo fonte escrito, garantindo que o mesmo est corretamente
escrito com base nas definies da linguagem.
II) Criao de um back-end (interface final) que, a partir da informao extrada
do resultado produzido pelo front-end, fornea a necessria interface para programao
da animao e realize a visualizao pretendida (independente da linguagem fonte). Este

back-end ser implementado com base no algoritmo de um Tree-Walker Evaluator3 , que


percorre a rvore de Sintaxe Decorada (ASD) 4 aplicando as operaes de visualizao,
filtragem e animao adequadas. O desenvolvimento do back-end envolve a criao das
seguintes interfaces:
A) Uma interface que permita programar a animao, ou seja, indicar os
subprogramas (dos quais se quer visualizar a seqncia de instrues) e as variveis
(das quais se quer visualizar o contedo); essa interface ter ainda de permitir a
definio do aspecto com que os objetos selecionados sero apresentados.
B) Uma interface para visualizar a seqncia de instrues e o contedo das
variveis, de acordo com os requisitos expressos no item anterior.
Com base nestes conceitos, define-se a arquitetura do software conforme mostra
a figura abaixo.

Figura 1 - Arquitetura Bsica

Sendo assim, pode-se visualizar dois mdulos principais do software:


I) Front-End:
Interface: Contm o Editor para a escrita do algoritmo na linguagem definida,
alm de outras funcionalidades secundrias como help, menu de comandos e etc.
Compilador: Encarrega-se de realizar a anlise lxica, a anlise sinttica, a
anlise semntica e montar a ASD com base no cdigo escrito no editor.
II) Back-End:
Executor: Percorre a ASD de forma a gerar a animao e permitir a interao
com o usurio.
Uma anlise mais detalhada da arquitetura proposta acima mostra a interao
entre os componentes conforme mostra a figura abaixo.

Pode ser traduzido simplesmente como Avaliador de rvore. Um algoritmo que possui as instrues
necessrias para avaliar cada n de uma rvore a medida em que a percorre segundo um percurso pdefinido.
4
Ver tpico 4.2.1. rvore de Sintaxe Decorada.

Figura 2 - Interao dos componentes

O editor fornece o cdigo fonte como entrada para o compilador. Este retorna
para a interface, atravs do editor, os erros que por ventura existirem neste cdigo fonte.
Ao terminar a compilao do cdigo sem erros, o compilador ter gerado a ASD, que
fica disponvel na me mria para que o executor realize a animao.
Como pode ser notado na Figura 2, o back-end necessita apenas da ASD como
entrada, no importando como a mesma foi gerada, nem em qual linguagem foi escrito o
algoritmo. Isso faz com que o executor seja independente do front-end e tambm
permite que o back-end seja escrito para utilizar a ASD para a gerao de cdigo objeto
e outras formas de execuo diferente da execuo animada.

4. Projeto do Software
O projeto do software envolve o detalhamento de cada um dos componentes da
arquitetura do sistema descrita no item anterior.
Inicialmente, porm, deve-se definir qual linguagem e IDE sero utilizadas no
desenvolvimento, pois algumas linguagens possuem limitaes que implicam no projeto
do compilador.
O Delp hi 5 foi escolhido como IDE para o desenvolvimento do software, devido
ao fato de possuir uma linguagem muito verstil, permitindo criao de tipos, uso de
ponteiros na memria, recursividade e disponibilizar vrios componentes (proprietrios
e de terceiros) para construo da interface, do compilador e do executor.
A nica limitao para o Delphi o fato de no gerar cdigo portvel.

4.1. Front-End
4.1.1. Linguagem
O projeto do front-end inicia-se com a definio da linguagem a ser utilizada na
escrita dos algoritmos.
Tem-se na linguagem Pascal, amplamente utilizada e consagrada, uma
linguagem completa e de fcil entendimento. Por esse motivo, o Pascal foi utilizado
como base para se definir a linguagem a ser utilizada no projeto. A BNF 5 do Pascal
Simplificado pode ser encontrada em [KOWALTOWSKI] e [NEPOMUCENO].

Bakus-Naur From (BNF) uma metalinguagem, uma linguagem utilizada para descrever outra
linguagem. Cada sentena desta metalinguagem chamada de regra de produo. [MAK]

Existem ainda alguns pontos que tambm devem ser considerados na definio
da linguagem.
Primeiramente, o objetivo do projeto no criar uma nova linguagem que
contemple a resoluo de qualquer problema, mas sim possibilitar o entendimento da
execuo utilizando animao. Tambm, deve-se considerar que a linguagem no
necessita prover todas as funcionalidades do Pascal. Desta forma, no ser
implementado o uso de procedimentos e funes e somente sero utilizados os tipos de
varivel inteiro e real. Estes recursos podero ser agregados ao projeto futuramente,
caso haja necessidade.
Em segundo lugar, a BNF deve ser construda de forma que facilite a
implementao da estrutura de dados que representa o programa 6 .
Outro ponto a ser considerado a sintaxe da linguagem, que deve ser simples e
permitir a estruturao do programa. Para facilitar ainda mais, a linguagem no deve
diferenciar letras maisculas de minsculas (no case sensitive).
Por ltimo, deve-se utilizar identificadores de palavras reservadas em portugus,
permitindo entendimento mais intuitivo do algoritmo pelos usurios.
Assim, tem-se, de forma simplificada, a definio da linguagem:
PROGRAMA NomeDoPrograma
VARIAVEIS
ListaDeVariveis COMO INTEIRO
ListaDeVariveis COMO REAL
INICIO
ListaDeComandos
FIM
Em ListaDeComandos podem ser encontrados comandos simples, comando
condicional e/ou comandos repetitivos.
Os comandos simples so:
Varivel := Expresso
LEIA (ListaDeVariveis )
MOSTRE (ListaDeVariveis)
O comando condicional :
SE Expresso ENTAO
ListaDeComandos
SENAO
ListaDeComandos
FIM SE
Onde no obrigatrio que haja a condio representada pelo SENAO.
Os comandos repetitivos so:
REPITA
ListaDeComandos
ATE QUE Expresso
6

Pode-se adequar a BNF durante a construo do compilador de forma que as regras de produo
permitam gerar a ASD corretamente.

ENQUANTO Expresso FACA


ListaDeComandos
FIM ENQUANTO
PARA Varivel DE Expresso1 ATE Expresso2 FACA
ListaDeComandos
FIM PARA
Onde o incremento da varivel no comando PARA pode ser positivo ou
negativo. Para o incremento positivo, utiliza-se a palavra ATE, caso contrrio, utilizase a palavra ATE-DECRESCENDO.
A especificao completa da BNF definida para a linguagem, pode ser
encontrada em anexo [Anexo B BNF da Linguagem].

4.1.2. rvore de Sintaxe Decorada


Antes de prosseguir com o projeto do software, necessrio tambm definir as
estruturas de dados que iro constituir a ASD. Esta definio bsica para que se possa
construir o compilador e o executor.
A rvore de Sintaxe Decorada (ASD) [VARANDA E HENRIQUES] ou rvore
Sinttica Anotada [PRICE] uma estrutura de dados que representa a rvore Sinttica7
de forma que possa ser implementada na memria.
A rvore Sinttica, por sua vez, a representao grfica da hierarquia das
instrues escritas em um algoritmo ou programa.
Na figura abaixo, v-se a rvore Sinttica e a ASD de forma simplificada para a
expresso X + 5 - Y.

rvore Gramatical [AHO].

Figura 3 rvore Sinttica (a) e ASD (b)

Na figura abaixo, apresentada a ASD para o comando


Se A=1 Entao
Mostre(a)
Fim Se.

Figura 4 - ASD para um comando SE

possvel verificar ento, que a ASD composta de registros (ou estruturas)


para descrever cada n da rvore. Os registros so compostos de campos representados,
nas figuras acima, pelos retngulos.
8

No caso de uma linguagem, deve-se diferenciar os comandos das expresses, j


que cada um deles necessita de registros com campos especficos para represent-los.
Sendo assim, so definidas as estruturas para as expresses e comandos da
linguagem do projeto conforme se segue.

4.1.2.1. Expresses
As expresses possuem os seguintes campos em sua estrutura:
Operador
Valor
NFilhoDaEsqueda
NFilhoDaDireita
Sendo que, h distines nos campos para os ns e para as folhas
(extremidades). Estas distines podem ser verificadas no anexo [Anexo B rvore de
Sintaxe Decorada].

4.1.2.2. Comandos
Os comandos possuem os seguintes campos em sua estrutura:
Comando
PrximoComando
ListaDeVariveis
Varivel
Expresso
PrimeiroComandoInterno
PrimeiroComandoSenao
Expresso1
ContadorDoPara
Expresso2
Sendo que, para cada comando, existem algumas distines nos campos. Estas
distines podem ser verificadas no anexo [Anexo B rvore de Sintaxe Decorada].

4.1.3. Interface
Algumas especificaes so necessrias para a interface. Ela deve conter
algumas funcionalidades bsicas comuns maioria dos softwares de edio. So elas:
I) Comandos para criar novo, abrir, fechar e salvar os arquivos escritos.
II) Comandos para organizar as janelas abertas dentro da aplicao (considera-se
que vrios arquivos podem ser abertos para edio ao mesmo tempo).
III) Ajuda ou Help com a sintaxe da linguagem como referncia.
No entanto, a parte central da interface o editor, que como j foi dito, onde o
algoritmo escrito.
O ponto crucial do editor a marcao das palavras reservadas, smbolos e
comentrios da linguagem na edio. Para isso, necessrio que seja implementado um
analisador lxico embutido no editor, que permita reconhecer cada palavra da entrada e
9

format- la (colorir, destacar em negrito, etc) de acordo com uma tabela de definies de
formatao pr-carregada na memria. Esse analisador lxico deve ser chamado toda
vez que um evento de teclado ou de mouse (copiar/colar/recortar) for interceptado, para
que a marcao possa ser percebida como em tempo real.
Foi comprovado de forma emprica, com a implementao de um editor
simplificado [Anexo A - Editor], que as especificaes para a marcao do cdigo so
extensivas e fogem do escopo do projeto. Como j existem componentes disponveis no
mercado que realizam esta tarefa [Anexo A - SynEdit], fica a critrio do desenvolvedor
implementar ou no a marcao do cdigo de forma original. Optou-se neste projeto por
utilizar o SynEdit na construo do editor para diminuir o tempo de implementao.

4.1.4. Compilador
O compilador por sua vez a parte central e mais crtica do projeto do software,
pois ele que permite gerar a ASD utilizada pelo executor, alm de verificar a corretude
do algoritmo escrito, retornando os erros para o usurio.
[AHO], [PRICE] e [MAK] descrevem os conceitos e tcnicas para projetar e
implementar compiladores. Estes trs autores indicam que a construo de um
compilador pode ser facilitada utilizando-se geradores de cdigo para compiladores.
Estes geradores de cdigo interpretam arquivos com as especificaes da linguagem e
geram o cdigo fonte correspondente ao analisador lxico e ao analisador sinttico do
compilador, reduzindo boa parte do trabalho braal de programao.
No entanto, a maior vantagem de se utilizar geradores de cdigo para
compiladores que eles facilitam a manuteno do compilador, pois permitem
facilmente alterar a linguagem.
Sendo assim, foi utilizado neste projeto o software Glyd [Anexo A - Glyd], que
um gerador de cdigo para compiladores compatvel com o Delphi (leia Pascal).
A escolha do Glyd se deve ao fato de possuir uma interface mais amigvel para
escrever e compilar os arquivos de especificao necessrios gerao do cdigo do
compilador. Na ve rdade, o Glyd funciona utilizando dois outros programas: o Lex e o
Yacc, [Anexo A - LexYacc] que podem ser adquiridos separadamente e gratuitamente
na Internet (assim como o Glyd). O Lex l um arquivo contendo as expresses regulares
que definem os identificadores e smbolos da linguagem, gerando o cdigo fonte do
analisador lxico. O Yacc l um outro arquivo contendo a gramtica da linguagem e as
aes semnticas (utilizadas na anlise semntica e na gerao da ASD ou cdigo
intermedirio) gerando o cdigo fonte do analisador sinttico. Para a construo do
compilador, utiliza-se o cdigo gerado pelo Lex e pelo Yacc incluindo-os no programa
principal e fazendo-se chamadas a eles de forma apropriada.

4.2. Back-End
O Back-End do software o executor. Conforme foi dito anteriormente, a partir
da ASD gerada no front-end, possvel escrever um Tree-Walker Evaluator (TWE)
capaz de fazer as animaes necessrias para a visualizao da execuo do algoritmo e
interagir com o usurio durante essa execuo. Da mesma forma, o TWE pode tambm
ser escrito para gerar um cdigo intermedirio como o MEPA [KOWALTOWSKI], por
exemplo. Em fim, a escolha de como ser a "interface da execuo" depende apenas da
aplicao e no do front-end.
Em se tratando de animao de algoritmos, o funcionamento do executor pode
ser definido em duas etapas: Carregar a ASD e Executar a ASD.
10

Carregar a ASD significa percorr- la montando o fluxograma que representa o


algoritmo escrito.
Executar a ASD significa voltar ao primeiro comando (raiz da rvore) e executar
passo a passo os comandos interagindo com o usurio.
Este artigo no contempla a implementao do executor animado. Entretanto, foi
implementado um TWE que permite pelo menos mostrar a ASD, que seria a primeira
etapa do executor. Ao carregar a ASD, os comandos so aninhados em uma rvore, e
no em um fluxograma, para simplificar o projeto.
O TWE implementado percorre cada n da rvore utilizando um procedimento
que contm as instrues necessrias para mostrar o comando da forma desejada. Este
procedimento chamado recursivamente at encontrar um n aterrado. Uma funo
auxiliar utilizada para percorrer as rvores binrias das expresses quando necessrio,
retornando uma cadeia de caracteres (string). Veja abaixo, de forma resumida, como o
procedimento para carregar a ASD e a funo para avaliar as expresses foram
implementados.
Tree-Walker Evaluator para Carregar a ASD
Procedimento ProcessaComando(Cmd)
inicio procedimento
se (Cmd.Comando NoAterrado) ento
se (Cmd.Comando = ATRIBUIO) ento
Mostre(Atribuir em )
Mostre(Comando.Variavel)
Mostre(o valor de )
Mostre(ProcessaExpressao(Comando.Expressao))
fim se
se (Cmd.Comando = SE) ento
Mostre(Se)
Mostre(ProcessaExpressao(Comando.Expressao))
Mostre(Ento)
ProcessaComando(Comando.PrimeiroComandoInterno )
se (Comando.PrimeiroComandoSenao NoAterrado)
Mostre(Senao)
ProcessaComando(Comando.PrimeiroComandoSenao)
Fim se
fim se
//Segue mesma lgica para os demais comandos.
ProcessaComando(Cmd.PrximoComando)
fim se
fim procedimento
Tree-Walker Evaluator para Avaliar Expresses
Funo ProcessaExpressao(Expresso) como String
inicio funo
se (Expresso.Operador = NUMERO) entao
RetornaComoString (Expresso.Valor)
senao se (Expresso.Operador = VARIAVEL) entao
RetornaComoString (Expresso.Valor)
senao se (Expresso.NDaDireita EstAterrado) entao
11

RetornaComoString (ProcessaExpressao (Expresso.NDaEsquerda))


seno se (Expresso.Operador = SOMA) entao
RetornaComoString (
ProcessaExpressao(Expresso.NDaEsquerda) + + +
ProcessaExpressao(Expresso.NDaDireita)
)
//Segue mesma lgica para os demais operadores.
fim se
fim funo

5. Prottipo
O prottipo se encontra em anexo [Anexo A - AnimaAlgo].

6. Concluso
Os objetivos iniciais foram atingidos satisfatoriamente, j que o prottipo est
estvel e permite trabalhar bem com algoritmos simples.
A implementao do compilador do prottipo foi bastante facilitada com o uso
do Glyd (Lex/Yacc). Com ele, possvel a adio de novas funciona lidades
linguagem de forma mais simples. Inclusive, a principal funcionalidade que deve ser
adicionada linguagem a utilizao de vetores e matrizes.
Outro ponto a ser destacado a facilidade que foi obtida com a estratgia de
trabalhar com a ASD. Claramente, se verifica que a ASD gerada pode ser utilizada de
vrias formas: para gerar cdigo intermedirio, para executar o programa, para mostrar
as instrues e para depurao (debuging). E mais ainda, pode-se percorr- la no sentido
do topo para baixo (top-down) ou de baixo para cima (botton-up).
O projeto deixa uma imensa base para a prxima fase, que a construo do
executor para a animao do algoritmo. Para isso, ainda necessrio definir como sero
os blocos representativos de cada instruo do algoritmo no fluxograma, definir como
ser a interface com o usurio, como deve ser mostrado o contedo das variveis e
como ser implementado a parte grfica (desenhos e animaes).

7. Referncias
[AHO] - AHO, Alfred V., et al.; Compiladores: Princpios, Tcnicas e Ferramentas. Rio
de Janeiro: Editora Guanabara Koogan S.A., 1995.
[KOWALTOWSKI] - KOWALTOWSKI, Tomasz; Implementao de Linguagens de
Programao. Rio de Janeiro: Editora Guanabara Dois, 1983.
[MAK] - MAK, Ronald; Writing Campilers adn Interpreters. Estados Unidos da
Amrica: Editora: Wiley Computer Publishing, 1996.
[MENDES] - MENDES, Antnio Jos Nunes; Software educativo para apoio
aprendizagem de programao. http://virtual.inesc.pt/virtual/CGME99/actas/c2/,
27/05/2003.
[NEPOMUCENO] - NEPOMUCENO, Rogrio Melo; BNF do Pascal Simplificado.
Disciplina de Compiladores, Universidade de Uberaba. Uberaba-MG, 2002.
12

[PRICE] - PRICE, Ana Maria Alencar, et al.; Implementao de Linguagens de


Programao. Editora Sagra-Luzzatto, 2000.
[REZENDE] - REZENDE, Pedro J. De; ASTRAL - Animation of data Structures and
Algorithms. http://www.dcc.unicamp.br/~rezende/ASTRAL/, 27/05/2003.
[VARANDA E HENRIQUES] - VARANDA, Maria Joo, HENRIQUES, Pedro
Rangel;
Animao
de
Algoritmos
Tornada
Sistemtica.
http://virtual.inesc.pt/virtual/CGME99/actas/c2/, 27/05/2003.

13

ANEXO A
Implementaes e Componentes utilizados no projeto

14

AnimaAlgo
http://www.nucleoti.com/Frederico/Compiladores/AnimaAlgo.zip

Editor
http://www.nucleoti.com/Frederico/Programas/Editor.zip

SynEdit
http://synedit.sourceforge.net/

Glyd
http://www.musikwissenschaft.uni- mainz.de/~ag/tply/Glyd_2_0.zip

LexYacc
http://www.musikwissenschaft.uni- mainz.de/~ag/tply/tply41a.zip

15

ANEXO B
Especificaes da BNF e ASD

16

BNF da Linguagem
<codigo_fonte> ::= programa <identificador> <bloco>
<bloco> ::= <definicao_das_variveis> inicio <lista_de_comandos> fim
<tipo> ::=
<identificador_de_tipo>
<identificador_de_tipo> ::= inteiro | real
<definicao_das_variveis> ::=
variaveis <declaracao_de_variveis> <mais_variveis>
|
<declaracao_de_variaveis> ::=
<lista_de_identificadores> como <tipo>
<mais_variaveis> ::=
<declaracao_de_variaveis> <mais_variaveis>
|
<lista_de_identificadores> ::= <identificador> <mais_identificadores>
<mais_identificadores> ::= , <identificador> <mais_identificadores> |
<lista_de_comandos> ::= <comando> <mais_comandos>
<mais_comandos> ::= <comando> <mais_comandos> |
<comando> ::=
<comando_simples>
| <comando_condicional>
| <comando_repetitivo>
<comando_simples> ::=
<atribuicao>
| leia (<variaveis_leia>)
| mostre (<variaveis_mostre>)
<atribuicao ::= <variavel> := <expressao>
<variaveis_leia> ::= <variavel> <mais_variaveis_leia>
<mais_variaveis_leia> ::= , <variaveis_leia> |
<variaveis_mostre> ::= <variavel> <mais_variaveis_mostre>
<mais_variaveis_mostre> ::= , <variaveis_mostre> |
<comando_condicional> ::=
17

se <expressao> entao <lista_de_comandos> <parte_senao> fim se


<parte_senao> ::= senao <lista_de_comandos> |
<coma ndo_repetitivo> ::=
enquanto <expressao> faca <lista_de_comandos> fim enquanto
| repita <lista_de_comandos> ate que <expressao>
| para <variavel> de <expressao_simples> <tipo_contador> <expressao> faca
<lista_de_comandos> fim para
<tipo_contador> ::= ate | ate-decrescendo
<expressao> ::=
<expressao_simples>
| <expressao_simples> <relacao> <expressao_simples>
<relacao> ::= <> | < | <= | >= | > | =
<expressao_simples> ::=
<expressao_simples> + <expressao_simples>
| <expressao_simples> - <expressao_simplesv
| <expressao_simples> * <expressao_simples>
| <expressao_simples> / <expressao_simples>
| <fator>
<fator> ::=
<variavel>
| <numero>
| (<expressao>)
<variavel> ::= <identificador>
<numero> ::= <numero_inteiro> | <numero_real>
<numero_inteiro> ::= <digito>+
<numero_real> ::= <digito>+(.<digito>+)?
<identificador> ::= <letra>(<letra>|<digito>|_<letra>|_<digito>)*
<digito> ::= [0-9]
<letra> ::= [a-zA- Z]

rvore de Sintaxe Decorada


Expresses
Campos:
Operador
Valor
NFilhoDaEsqueda
18

NFilhoDaDireita
Nos Ns
Operador: igual a "+", "- " , "*", "/", "=", "<", ">", "<>", ">=" ou "<="
Valor: invlido (no utilizado).
NFilhoDaEsqueda: aponta para o n da esquerda.
NFilhoDaDireita: aponta para o n da direita.
Nas Folhas (Extremidades)
Operador: igual a "VARIVEL" ou "NMERO"
Valor: o valor do nmero ou o endereo da varivel na tabela de smbolos.
NFilhoDaEsqueda: aterrado.
NFilhoDaDireita: aterrado.
Comandos
Campos:
Comando
PrximoComando
ListaDeVariveis
Varivel
Expresso
PrimeiroComandoInterno
PrimeiroComandoSenao
Expresso1
ContadorDoPara
Expresso2
Comando Atribuio (:=)
Comando: "ATRIBUIO".
PrximoComando: ponteiro para o prximo comando ou aterrado.
ListaDeVariveis: invlido.
Varivel: endereo da varivel na tabela de smbolo.
Expresso: ponteiro para a expresso cujo valor deve ser atribudo varivel.
PrimeiroComandoInterno : invlido.
PrimeiroComandoSenao: invlido.
Expresso1: invlido.
ContadorDoPara: invlido.
Expresso2: invlido.
Comando Leia
Comando: "LEIA".
PrximoComando: ponteiro para o prximo comando ou aterrado.
ListaDeVariveis: vetor com o endereo das variveis na tabela de smbolos.
Varivel: invlido.
Expresso: invlido.
PrimeiroComandoInterno : invlido.
PrimeiroComandoSenao: invlido.
Expresso1: invlido.
ContadorDoPara: invlido.
19

Expresso2: invlido.
Comando Mostre
Comando: "MOSTRE".
PrximoComando: ponteiro para o prximo comando ou aterrado.
ListaDeVariveis: vetor com o endereo das variveis na tabela de smbolos.
Varivel: invlido.
Expresso: invlido.
PrimeiroComandoInterno : invlido.
PrimeiroComandoSenao: invlido.
Expresso1: invlido.
ContadorDoPara: invlido.
Expresso2: invlido.
Comando Se
Comando: "SE".
PrximoComando: ponteiro para o prximo comando ou aterrado.
ListaDeVariveis: invlido.
Varivel: invlido.
Expresso: ponteiro para a expresso a ser avaliada.
PrimeiroComandoInterno : ponteiro para o primeiro comando caso a expresso
seja verdadeira.
PrimeiroComandoSenao: ponteiro para o primeiro comando caso a expresso
seja falsa.
Expresso1: invlido.
ContadorDoPara: invlido.
Expresso2: invlido.
Comando Enquanto
Comando: "ENQUANTO".
PrximoComando: ponteiro para o prximo comando ou aterrado.
ListaDeVariveis: invlido.
Varivel: invlido.
Expresso: ponteiro para a expresso a ser avaliada no incio do passo do loop.
PrimeiroComandoInterno : ponteiro para o primeiro comando caso a expresso
seja verdadeira.
PrimeiroComandoSenao: invlido.
Expresso1: invlido.
ContadorDoPara: invlido.
Expresso2: invlido.
Comando Repita
Comando: "REPITA".
PrximoComando: ponteiro para o prximo comando ou aterrado.
ListaDeVariveis: invlido.
Varivel: invlido.
Expresso: ponteiro para a expresso a ser avaliada no final do passo do loop.
PrimeiroComandoInterno : ponteiro para o primeiro comando do loop.
PrimeiroComandoSenao: invlido.
Expresso1: invlido.
ContadorDoPara: invlido.
20

Expresso2: invlido.
Comando Para
Comando: "PARA".
PrximoComando: ponteiro para o prximo comando ou aterrado.
ListaDeVariveis: invlido.
Varivel: endereo da varivel na tabela de smbolo a ser utilizada como
contador do loop.
Expresso: invlido.
PrimeiroComandoInterno : ponteiro para o primeiro comando do loop.
PrimeiroComandoSenao: invlido.
Expresso1: ponteiro para a expresso que inicializa o contador.
ContadorDoPara: valor do incremento ou decremento para o contador.
Expresso2: ponteiro para a expresso a ser avaliada no incio do passo do loop.

21

Das könnte Ihnen auch gefallen