Anima Algo

download Anima Algo

of 21

Transcript of Anima Algo

  • 7/21/2019 Anima Algo

    1/21

    1

    Anima Algo - softwarede animao de algoritmos paraauxlio ao ensino e entendimento da programao1

    Frederico de Almeida Martins2

    ResumoO desenvolvimento de um softwareque permita acompanhar a execuo de um

    algoritmo de forma visual com intuito de auxiliar no ensino e entendimento daprogramao, parte da elaborao de uma linguagem que seja completa e de fcilentendimento para a escrita desse algoritmo, passa pelos projetos do compilador dessalinguagem e do executor do cdigo ou rvore sinttica gerada pelo compilador eculmina na implementao propriamente dita. Este artigo descreve a implementao de

    um prottipo que permite escrever, compilar e visualizar a rvore sinttica gerada apartir do algoritmo escrito, visando dar suporte implementao do executor.

    Palavras-ChaveAlgoritmo; Animao; Linguagem de Programao; Compilador; Lex; Yacc.

    Anima Algo - algor ithm animation software to assist the

    education and understanding of the programming

    Frederico de Almeida Martins

    AbstractThe 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 iscomplete 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 discriblethe 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 theimplementation of the executer.

    Keywords

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

    1Trabalho desenvolvido na Disciplina de Tpicos Especiais VII - Universidade de Uberaba.2Aluno do Curso de Bacharelado em Sistemas de Informao Universidade de Uberaba.

  • 7/21/2019 Anima Algo

    2/21

    2

    1. Introduo

    De acordo com [VARANDA E HENRIQUES], a animao de um algoritmo definida como sendo um tipo de visualizao dinmica das principais abstraesexpressas por esse algoritmo.

    Segundo [REZENDE] e [MENDES], uma grande dificuldade encontrada pelos

    estudantes - e conseqentemente pelos professores - a falta da capacidade de abstraodo processo de execuo de um programa. So estudantes que, na sua maioria, nuncativeram contato com a matria e tm dificuldade em abstrair o problema para instruesde uma linguagem de programao.

    A animao de algoritmos vem dar uma contribuio nesse sentido medida quetorna visual o processo de execuo, facilitando o entendimento do que ocorre quandouma dada instruo executada [VARANDA E HENRIQUES]. Alm disso, segundo[VARANDA E HENRIQUES], pode-se transpor os limites do ensino da programao eaplicar 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 animaode algoritmos, que vai desde o ensino mdio at o ensino superior, e tambm para osautodidatas.

    Prope-se assim, o desenvolvimento de um software que permita escrever,compilar e executar de forma animada um determinado algoritmo escrito numalinguagem de fcil entendimento.

    O projeto para o desenvolvimento deste software foi dividido em duas fases. Aprimeira fase compreende o desenvolvimento de um prottipo funcional que permiteescrever e compilar um algoritmo gerando uma estrutura de dados - rvore de sintaxedecorada - que ser, na segunda fase, utilizada para execuo do algoritmo. Nesta

    primeira fase, com base nos requisitos de software, sero feitas as definies sobre alinguagem a ser utilizada na escrita dos algoritmos, a arquitetura dosoftware, o modo defuncionamento do compilador para a linguagem, a estrutura de dados da rvore desintaxe decorada e a interface com o usurio. A segunda fase ento, compreende odesenvolvimento do mdulo que ir interagir com a rvore de sintaxe decorada geradana 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 dealgoritmos perceber o funcionamento de aplicaes cuja animao vai ocorrendo

    progressivamente como resposta a aes do utilizador, tornando a interao maisrealista.

    Em [MENDES], pode-se encontrar mais alguns requisitos importantes para umaferramenta que se propes ao auxlio do ensino e entendimento da programao. Soeles:

    I) Ser Interativa, gerando feedback adequado para o aluno permitindo-lheinteratuar, controlar e desempenhar um papel ativo no processo de aprendizagem.

    II) Ser Configurvel, a fim de permitir a adio, remoo e alterao dosexemplos, exerccios propostos e solues apresentadas, sem que tal acarrete quaisqueralteraes no seu cdigo.

    III) Permitir Representaes alternativas, de forma a possibilitar ao alunodiferentes pontos de vista, estilos de raciocnio e solues para os mesmos problemas.

  • 7/21/2019 Anima Algo

    3/21

    3

    IV) Ser Animada, para melhor expressar as idias, transmitindo a dinmicaenvolvida e a informao patente no problema com mais realismo, facilitando acompreenso de conceitos, sem contudo gerar confuso visual.

    V) Ser Simples, bvia e intuitiva, exigindo pouco tempo de aprendizagem, maspersuasiva, 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 umelevado nmero de alunos.

    Seguindo as idias expostas acima, pode-se definir os requisitos bsicos para osoftwarea ser desenvolvido.

    Como osoftware 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 - comsintaxe intuitiva. A interface para a escrita do algoritmo deve ser amigvel contandocom recursos que permitam destacar com cores diferentes as palavras reservadas dalinguagem, os smbolos, os nmeros, os comentrios e os identificadores.

    Antes da execuo do algoritmo, o mesmo deve ser analisado para verificar se oscdigos correspondem s especificaes da linguagem, buscando possveis erroslxicos, sintticos e semnticos. Os provveis erros devero ser mostrados indicando olocal 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 noalgoritmo 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 qualas instrues (representadas por retngulos, losangos, crculos e etc) mudam de cor medida que esto sendo executadas. O comportamento da memria: variveis alocadas evalores assumidos, tambm dever ser mostrado na execuo de forma animada, commudanas 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 tipoprompt, por exemplo) e futuras alteraes (comono caso da implementao de novas funes, alteraes na linguagem e transporte paraoutras linguagens, por exemplo).

    3. Arquitetura Proposta

    No sistema ALMA, [VARANDA E HENRIQUES] propem uma arquiteturabaseada nos seguintes itens:

    I) Criao de um front-end (interface da frente) para uma determinadalinguagem, a partir da respectiva gramtica (para diferentes linguagens, o front-enddever ser gerado de novo de acordo com as suas gramticas). O front-end primeirainterface 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 corretamenteescrito com base nas definies da linguagem.

    II) Criao de um back-end (interface final) que, a partir da informao extradado resultado produzido pelo front-end, fornea a necessria interface para programaoda animao e realize a visualizao pretendida (independente da linguagem fonte). Este

  • 7/21/2019 Anima Algo

    4/21

    4

    back-endser implementado com base no algoritmo de um Tree-Walker Evaluator3, quepercorre a rvore de Sintaxe Decorada (ASD)4aplicando as operaes de visualizao,filtragem e animao adequadas. O desenvolvimento do back-endenvolve a criao dasseguintes interfaces:

    A) Uma interface que permita programar a animao, ou seja, indicar ossubprogramas (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 adefinio 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.

    3Pode 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 p-definido.4Ver tpico 4.2.1. rvore de Sintaxe Decorada.

  • 7/21/2019 Anima Algo

    5/21

    5

    Figura 2 - Interao dos componentes

    O editor fornece o cdigo fonte como entrada para o compilador. Este retornapara 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 memria para que o executor realize a animao.Como pode ser notado na Figura 2, o back-endnecessita apenas da ASD como

    entrada, no importando como a mesma foi gerada, nem em qual linguagem foi escrito oalgoritmo. Isso faz com que o executor seja independente do front-end e tambm

    permite que o back-endseja escrito para utilizar a ASD para a gerao de cdigo objetoe outras formas de execuo diferente da execuo animada.

    4. Projeto do Software

    O projeto do softwareenvolve o detalhamento de cada um dos componentes daarquitetura do sistema descrita no item anterior.

    Inicialmente, porm, deve-se definir qual linguagem e IDE sero utilizadas nodesenvolvimento, pois algumas linguagens possuem limitaes que implicam no projetodo compilador.

    O Delphi 5 foi escolhido como IDE para o desenvolvimento dosoftware, devidoao fato de possuir uma linguagem muito verstil, permitindo criao de tipos, uso de

    ponteiros na memria, recursividade e disponibilizar vrios componentes (proprietriose 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-endinicia-se com a definio da linguagem a ser utilizada naescrita dos algoritmos.

    Tem-se na linguagem Pascal, amplamente utilizada e consagrada, umalinguagem completa e de fcil entendimento. Por esse motivo, o Pascal foi utilizadocomo base para se definir a linguagem a ser utilizada no projeto. A BNF5do PascalSimplificado pode ser encontrada em [KOWALTOWSKI] e [NEPOMUCENO].

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

  • 7/21/2019 Anima Algo

    6/21

    6

    Existem ainda alguns pontos que tambm devem ser considerados na definioda linguagem.

    Primeiramente, o objetivo do projeto no criar uma nova linguagem quecontemple a resoluo de qualquer problema, mas sim possibilitar o entendimento daexecuo utilizando animao. Tambm, deve-se considerar que a linguagem nonecessita prover todas as funcionalidades do Pascal. Desta forma, no ser

    implementado o uso de procedimentos e funes e somente sero utilizados os tipos devarivel 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 aimplementao da estrutura de dados que representa o programa6.

    Outro ponto a ser considerado a sintaxe da linguagem, que deve ser simples epermitir a estruturao do programa. Para facilitar ainda mais, a linguagem no devediferenciar 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:

    PROGRAMANomeDoProgramaVARIAVEIS

    ListaDeVariveis COMOINTEIROListaDeVariveis COMOREAL

    INICIOListaDeComandos

    FIM

    Em ListaDeComandos podem ser encontrados comandos simples, comandocondicional e/ou comandos repetitivos.

    Os comandos simples so:

    Varivel :=ExpressoLEIA (ListaDeVariveis )MOSTRE (ListaDeVariveis)

    O comando condicional :

    SE Expresso ENTAOListaDeComandos

    SENAOListaDeComandos

    FIM SE

    Onde no obrigatrio que haja a condio representada pelo SENAO.

    Os comandos repetitivos so:

    REPITAListaDeComandos

    ATE QUE Expresso

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

  • 7/21/2019 Anima Algo

    7/21

    7

    ENQUANTO ExpressoFACAListaDeComandos

    FIM ENQUANTO

    PARA VarivelDE Expresso1ATE Expresso2FACA

    ListaDeComandosFIM PARA

    Onde o incremento da varivel no comando PARA pode ser positivo ounegativo. Para o incremento positivo, utiliza-se a palavra ATE, caso contrrio, utiliza-se a palavra ATE-DECRESCENDO.

    A especificao completa da BNF definida para a linguagem, pode serencontrada 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 asestruturas de dados que iro constituir a ASD. Esta definio bsica para que se possaconstruir o compilador e o executor.

    A rvore de Sintaxe Decorada (ASD) [VARANDA E HENRIQUES] ou rvoreSinttica Anotada [PRICE] uma estrutura de dados que representa a rvore Sinttica7de forma que possa ser implementada na memria.

    A rvore Sinttica, por sua vez, a representao grfica da hierarquia dasinstrues escritas em um algoritmo ou programa.

    Na figura abaixo, v-se a rvore Sinttica e a ASD de forma simplificada para aexpresso X + 5 - Y.

    7rvore Gramatical [AHO].

  • 7/21/2019 Anima Algo

    8/21

    8

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

    Na figura abaixo, apresentada a ASD para o comandoSe 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.

  • 7/21/2019 Anima Algo

    9/21

    9

    No caso de uma linguagem, deve-se diferenciar os comandos das expresses, jque cada um deles necessita de registros com campos especficos para represent-los.

    Sendo assim, so definidas as estruturas para as expresses e comandos dalinguagem do projeto conforme se segue.

    4.1.2.1. Expresses

    As expresses possuem os seguintes campos em sua estrutura:

    OperadorValorNFilhoDaEsquedaNFilhoDaDireita

    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:

    ComandoPrximoComandoListaDeVariveisVarivelExpressoPrimeiroComandoInternoPrimeiroComandoSenaoExpresso1ContadorDoParaExpresso2

    Sendo que, para cada comando, existem algumas distines nos campos. Estasdistines podem ser verificadas no anexo [Anexo B rvore de Sintaxe Decorada].

    4.1.3. Interface

    Algumas especificaes so necessrias para a interface. Ela deve conteralgumas 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 Helpcom a sintaxe da linguagem como referncia.

    No entanto, a parte central da interface o editor, que como j foi dito, onde oalgoritmo escrito.

    O ponto crucial do editor a marcao das palavras reservadas, smbolos e

    comentrios da linguagem na edio. Para isso, necessrio que seja implementado umanalisador lxico embutido no editor, que permita reconhecer cada palavra da entrada e

  • 7/21/2019 Anima Algo

    10/21

    10

    format- la (colorir, destacar em negrito, etc) de acordo com uma tabela de definies deformatao pr-carregada na memria. Esse analisador lxico deve ser chamado todavez que um evento de teclado ou de mouse (copiar/colar/recortar) for interceptado, paraque a marcao possa ser percebida como em tempo real.

    Foi comprovado de forma emprica, com a implementao de um editorsimplificado [Anexo A - Editor], que as especificaes para a marcao do cdigo so

    extensivas e fogem do escopo do projeto. Como j existem componentes disponveis nomercado que realizam esta tarefa [Anexo A - SynEdit], fica a critrio do desenvolvedorimplementar ou no a marcao do cdigo de forma original. Optou-se neste projeto porutilizar 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 dosoftware,pois ele que permite gerar a ASD utilizada pelo executor, alm de verificar a corretudedo algoritmo escrito, retornando os erros para o usurio.

    [AHO], [PRICE] e [MAK] descrevem os conceitos e tcnicas para projetar eimplementar compiladores. Estes trs autores indicam que a construo de umcompilador pode ser facilitada utilizando-se geradores de cdigo para compiladores.Estes geradores de cdigo interpretam arquivos com as especificaes da linguagem egeram o cdigo fonte correspondente ao analisador lxico e ao analisador sinttico docompilador, reduzindo boa parte do trabalho braal de programao.

    No entanto, a maior vantagem de se utilizar geradores de cdigo paracompiladores que eles facilitam a manuteno do compilador, pois permitemfacilmente alterar a linguagem.

    Sendo assim, foi utilizado neste projeto o softwareGlyd [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 paraescrever e compilar os arquivos de especificao necessrios gerao do cdigo docompilador. Na verdade, o Glyd funciona utilizando dois outros programas: o Lex e oYacc, [Anexo A - LexYacc] que podem ser adquiridos separadamente e gratuitamentena Internet (assim como o Glyd). O Lex l um arquivo contendo as expresses regularesque definem os identificadores e smbolos da linguagem, gerando o cdigo fonte doanalisador lxico. O Yacc l um outro arquivo contendo a gramtica da linguagem e asaes semnticas (utilizadas na anlise semntica e na gerao da ASD ou cdigointermedirio) gerando o cdigo fonte do analisador sinttico. Para a construo docompilador, 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-Enddo software o executor. Conforme foi dito anteriormente, a partirda 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 einteragir com o usurio durante essa execuo. Da mesma forma, o TWE pode tambmser escrito para gerar um cdigo intermedirio como o MEPA [KOWALTOWSKI], porexemplo. Em fim, a escolha de como ser a "interface da execuo" depende apenas daaplicao e no dofront-end.

    Em se tratando de animao de algoritmos, o funcionamento do executor podeser definido em duas etapas: Carregar a ASD e Executar a ASD.

  • 7/21/2019 Anima Algo

    11/21

    11

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

    Executar a ASD significa voltar ao primeiro comando (raiz da rvore) e executarpasso a passo os comandos interagindo com o usurio.

    Este artigo no contempla a implementao do executor animado. Entretanto, foiimplementado 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, eno 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. Esteprocedimento chamado recursivamente at encontrar um n aterrado. Uma funoauxiliar 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 foramimplementados.

    Tree-Walker Evaluator para Carregar a ASD

    Procedimento ProcessaComando(Cmd)inicio procedimento

    se (Cmd.Comando NoAterrado) entose (Cmd.Comando = ATRIBUIO) ento

    Mostre(Atribuir em )Mostre(Comando.Variavel)Mostre(o valor de )Mostre(ProcessaExpressao(Comando.Expressao))

    fim sese (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 sefim se//Segue mesma lgica para os demais comandos.ProcessaComando(Cmd.PrximoComando)

    fim sefim procedimento

    Tree-Walker Evaluator para Avaliar Expresses

    Funo ProcessaExpressao(Expresso) como Stringinicio funo

    se (Expresso.Operador = NUMERO) entaoRetornaComoString (Expresso.Valor)

    senao se (Expresso.Operador = VARIAVEL) entao

    RetornaComoString (Expresso.Valor)senao se (Expresso.NDaDireita EstAterrado) entao

  • 7/21/2019 Anima Algo

    12/21

    12

    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 sefim funo

    5. Prottipo

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

    6. Concluso

    Os objetivos iniciais foram atingidos satisfatoriamente, j que o prottipo estestvel 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 funcionalidades linguagem de forma mais simples. Inclusive, a principal funcionalidade que deve seradicionada linguagem a utilizao de vetores e matrizes.

    Outro ponto a ser destacado a facilidade que foi obtida com a estratgia detrabalhar com a ASD. Claramente, se verifica que a ASD gerada pode ser utilizada devrias formas: para gerar cdigo intermedirio, para executar o programa, para mostraras instrues e para depurao (debuging). E mais ainda, pode-se percorr-la no sentidodo 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 doexecutor para a animao do algoritmo. Para isso, ainda necessrio definir como seroos blocos representativos de cada instruo do algoritmo no fluxograma, definir comoser a interface com o usurio, como deve ser mostrado o contedo das variveis ecomo ser implementado a parte grfica (desenhos e animaes).

    7. Referncias

    [AHO] - AHO, Alfred V., et al.; Compiladores: Princpios, Tcnicas e Ferramentas. Riode Janeiro: Editora Guanabara Koogan S.A., 1995.

    [KOWALTOWSKI] - KOWALTOWSKI, Tomasz; Implementao de Linguagens deProgramao. Rio de Janeiro: Editora Guanabara Dois, 1983.

    [MAK] - MAK, Ronald; Writing Campilers adn Interpreters. Estados Unidos daAmrica: 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.

  • 7/21/2019 Anima Algo

    13/21

    13

    [PRICE] - PRICE, Ana Maria Alencar, et al.; Implementao de Linguagens deProgramao. Editora Sagra-Luzzatto, 2000.

    [REZENDE] - REZENDE, Pedro J. De; ASTRAL - Animation of data Structures andAlgorithms. http://www.dcc.unicamp.br/~rezende/ASTRAL/, 27/05/2003.

    [VARANDA E HENRIQUES] - VARANDA, Maria Joo, HENRIQUES, PedroRangel; Animao de Algoritmos Tornada Sistemtica.http://virtual.inesc.pt/virtual/CGME99/actas/c2/, 27/05/2003.

  • 7/21/2019 Anima Algo

    14/21

    14

    ANEXO AImplementaes e Componentes utilizados no projeto

  • 7/21/2019 Anima Algo

    15/21

    15

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

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

    SynEdithttp://synedit.sourceforge.net/

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

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

  • 7/21/2019 Anima Algo

    16/21

    16

    ANEXO BEspecificaes da BNF e ASD

  • 7/21/2019 Anima Algo

    17/21

    17

    BNF da Linguagem

    ::= programa

    ::= inicio fim

    ::=

    ::= inteiro| real

    ::=variaveis |

    ::= como

    ::= |

    ::=

    ::= , |

    ::=

    ::= |

    ::=| |

    ::=| leia( )

    | mostre()

  • 7/21/2019 Anima Algo

    18/21

    18

    se entao fimse

    ::= senao |

    ::=enquanto faca fimenquanto

    | repita ateque | para de faca fimpara

    ::= ate| ate-decrescendo

    ::=|

    ::= | | =

    ::= +| -

  • 7/21/2019 Anima Algo

    19/21

    19

    NFilhoDaDireita

    Nos NsOperador: igual a "+", "-" , "*", "/", "=", "", "", ">=" ou "

  • 7/21/2019 Anima Algo

    20/21

    20

    Expresso2: invlido.

    Comando MostreComando: "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 SeComando: "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 expressoseja verdadeira.PrimeiroComandoSenao: ponteiro para o primeiro comando caso a expressoseja falsa.Expresso1: invlido.ContadorDoPara: invlido.Expresso2: invlido.

    Comando EnquantoComando: "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 expressoseja verdadeira.PrimeiroComandoSenao: invlido.Expresso1: invlido.ContadorDoPara: invlido.Expresso2: invlido.

    Comando RepitaComando: "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.

  • 7/21/2019 Anima Algo

    21/21

    21

    Expresso2: invlido.

    Comando ParaComando: "PARA".PrximoComando: ponteiro para o prximo comando ou aterrado.ListaDeVariveis: invlido.

    Varivel: endereo da varivel na tabela de smbolo a ser utilizada comocontador 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.