Você está na página 1de 4

IV Congresso Brasileiro de Computação – CBComp 2004 Algoritmos

Interpretador de Portugol
R. Santiago, Pesquisador, CTTMar/UNIVALI, e R. L. S. Dazzi, Orientador, CTTMar/UNIVALI

utilizados.
Abstract—Aiming at to become the learning of algorithms
more practical and pleasant, a tool was developed to allow to the A. Algoritmos
construction and execution of flowcharts and algorithms in Um algoritmo é uma maneira de resolver problemas de
Portugol. So that this tool could be developed and allowed total lógica em passos ordenados e estruturados, sendo que todo
control on its functioning, a interpretator was developed to be problema lógico tem várias soluções algorítmicas [2].
used with the tool. This interpretator was developed based in the
A idéia de utilizar algoritmos para controlar o computador,
processes of analyzes syntactic and lexic of the tools Lex and
Yacc [6] and programmed in C++. This interpretator allows to deve-se à Ada Augusta. Foi ela que introduziu os conceitos
the compilation and execution of the algorithms implemented in sobre estruturas de programação como sub-rotina, laços e
the CIFluxProg tool, becoming this sufficiently practical for the salto condicional. Desde as primeiras instruções elaboradas
users. This article presents the development of the interpretator. pela Condessa Ada até os dias atuais, as linguagens de
programação continuam utilizando os mesmos conceitos [1].
Index terms—Algorithms, Computer Science education. Depois de descobrir o algoritmo para o problema
específico, o passo seguinte é representá-lo em forma
Resumo—Visando tornar a aprendizagem de algoritmos e
apropriada, para depois ser transferido para a máquina [5].
programação mais prática e agradável, desenvolveu-se uma
ferramenta que permite a construção e execução de fluxogramas B. Teste de Mesa
e algoritmos em Portugol. Para que esta ferramenta pudesse ser
desenvolvida e permitisse controle total sobre o seu Após desenvolver um algoritmo, ele deverá ser testado.
funcionamento, desenvolveu-se um interpretador para ser Esta fase de teste é chamada de teste de mesa, onde, seguindo,
utilizado com ela. Este foi desenvolvido baseado nos processos de passo a passo, as instruções do algoritmo (TABELA I),
analise léxica e sintática das ferramentas Lex e Yacc [6] e apresentando as instruções e as variáveis utilizadas a cada
programado em C++. Este interpretador permite a compilação e momento, tira-se uma prova real de seu funcionamento [4].
execução dos algoritmos implementados na ferramenta
A vantagem em se testar o algoritmo em teste de mesa é
CIFluxProg, tornando essa bastante prática para os usuários.
Este artigo apresenta o desenvolvimento do interpretador. que se houver erro, este será detectado rapidamente
facilitando a identificação do local do erro e
Palavras Chaves—Algoritmos, Ensino em Ciência da conseqüentemente sua correção. É também chamado de teste
Computação. exaustivo [4].

TABELA I
EXEMPLOS DE TESTE DE MESA
I. INTRODUÇÃO
Variáveis
E ste artigo apresenta um dos módulos da ferramenta
CIFluxProg (Construtor e Interpretador de Fluxograma
para Programação), bem como sua construção. O módulo Z=9
Algoritmo
Z
9
X

descrito é responsável pela interpretação do português X = 40 40


estruturado (portugol), utilizado pelo CiFluxProg. Apesar de X=X+Y 49
ter sido construído com fim específico, o interpretador pode
ser utilizado em qualquer situação que se tenha necessidade de
C. Interpretador
suas características.
Para melhor entender um interpretador é necessário saber o
II. REVISÃO BIBLIOGRÁFICA que é um compilador. Compilador é um programa que recebe
um código escrito em determinada linguagem de
Um módulo completo, foi construído na ferramenta
programação, denominado de linguagem fonte, e produz um
somente para portugol (português estruturado). O português
código em uma outra linguagem, denominado linguagem
estruturado, é formado pelas mesmas composições da
objeto [3].
programação estruturada, com a diferença do algoritmo ser
Dos compiladores derivam os interpretadores, que são
expresso em português e possuir um conjunto de recursos
compreendidos em um sistema que aceita como entrada a
limitados e direcionados ao aprendizado da programação [1].
linguagem fonte (também chamada de código fonte), produz
As sessões a seguir demonstram alguns pontos relevantes
um efeito de execução, sem precisar mapeá-lo em linguagem
para a análise do projeto e melhor compreensão dos conceitos
de máquina (notação binária que permite a comunicação direta

26
IV Congresso Brasileiro de Computação – CBComp 2004 Algoritmos
com o computador), ou seja, o código fonte é interpretado à TABELA II
GRAMÁTICA DE ALGUNS ELEMENTOS DA LINGUAGEM
medida que ocorre a execução, sem necessidade de gerar um
programa em linguagem de código objeto [3]. Portugol Descrição
O interpretador, como geralmente acontece com Inicio Identifica o início do portugol
compiladores, efetua duas análises: análise léxica e análise Fim Identifica o fim do portugol
sintática [3]. { Inicio de bloco
A análise léxica é a primeira etapa das tarefas de um } Fim de bloco
compilador. A função desta é fazer a leitura do código fonte, se( ) Desvio Condicional
caractere por caractere, e traduzi-las em forma de símbolos senao Negação do “se ( )”
léxicos, denominados token. Estes são unidades básicas do enquanto( ) Laço condicional
texto do programa. Cada token é representado por três para __ ate __ passo __ Laço condicional com repetição
características: classe do token (representando o tipo incremental
reconhecido, como identificadores, cadeias numéricas, inteiro Tipo de dado numérico inteiro
palavras reservadas, cadeia de caracteres, operadores e real Tipo de dado numérico real
separadores), valor do token (dependendo da classe o token logico Tipo lógico de dados
pode ter um valor como, por exemplo, um número inteiro), cadeia Tipo de dado de cadeia de caracteres
posição do token (indica o local onde o token foi encontrado verdadeiro Valor verdadeiro do tipo de dado
no código fonte) [3]. lógico
A análise sintática constitui a segunda etapa de um falso Valor falso do tipo de dado lógico
compilador. Sua tarefa é verificar se as palavras inseridas no leia( ) Instrução para entrada de dados
código fonte estão gramaticalmente corretas. Assim seguindo escreva( ) Instrução para a saída de dados
uma série de regras a verificação de erros é efetuada[3].
B. Árvore de Interpretação
III. IMPLEMENTAÇÃO Para possibilitar a interpretação do portugol, é gerada uma
Nesta sessão pretende-se apresentar detalhes de árvore (estrutura de dados) que estabelece a seqüência em que
implementação do interpretador, como ferramentas e técnicas o algoritmo deve ser executado.
utilizadas. A cada estrutura analisada no portugol, uma série de
procedimentos montam uma pequena árvore com a seqüência
A. Análise Léxica e Sintática
e as informações necessárias para interpretação. Cada nó esta
Para implementação de um interpretador utilizou-se a diretamente relacionado a um determinado tipo de aplicação
ferramenta Lex & Yacc. Gerando, desta forma, o modelo como: constantes, identificadores ou estruturas do portugol
léxico e o modelo sintático, bem como a gramática do (operadores).
portugol (TABELA II), foi possível criar funcionalidades que As constantes são armazenadas para depois serem
auxiliaram na interpretação do código. atribuídas como valores necessários nas estruturas do
Com a análise léxica, coleta-se os tokens um a um portugol.
identificando-os em acordo com a gramática utilizada. Através As estruturas do portugol são armazenadas identificando
de algoritmos aplicados sobre esta análise, buscou-se os dados seu tipo de aplicação e que informações esta possuí
de relevância na análise como: a identificação e criação de (constantes, variáveis ou mesmo outras estruturas de
variáveis, a contagem das linhas, o armazenamento de programação).
constantes e a identificação por tipo dos valores intrínsecos no Para simplificar será apresentado um pequeno exemplo na
portugol. Figura 1. Nesta figura os ponteiros identificam o que a
A análise sintática possibilitou uma maior preparação para estrutura irá precisar para resolver seus problemas (condições,
a interpretação do algoritmo. Com os dados necessários cálculo, ...), e o que vem depois da estrutura, se houver algo.
identificados e estabelecidos, como no caso de definição de Por exemplo, um desvio condicional deverá saber qual são as
variáveis utilizadas pelo portugol, esta análise possibilitou a instruções no fluxo de verdade, para o caso de sua condição
criação da principal estrutura de dados para a interpretação do ser verdadeira e também qual o fluxo das instruções no caso
CIFluxProg, uma árvore de interpretação. da condição ser falsa.

27
IV Congresso Brasileiro de Computação – CBComp 2004 Algoritmos
console, utilizou-se instruções para uma API de ambiente
gráfico.

TIPO Depois as mudanças foram aplicadas na iteração do


algoritmo de interpretação com a interface do ambiente. No
fim, a versão executou normalmente como esperado e com as
Dados do nó mesmas funcionalidades que possuía em console.

IV. AMBIENTE DA FERRAMENTA


Para exemplificar o funcionamento do interpretador será

...
apresentada uma parte da ferramenta CiFluxProg responsável
pela criação de algoritmos. O ambiente (Figura 3) foi
desenvolvido nos moldes das ferramentas de programação.
Com o intuito de gerar um ambiente gráfico, onde o usuário
poderia ter mais comodidade e compreensão do que lhe foi
fornecido.
Figura 1. Estrutura de dados que armazena as estruturas do portugol (nó de
uma árvore). Para a inclusão do algoritmo em portugol há uma caixa de
texto onde serão escritas as instruções deste. O módulo de
A estrutura da árvore é processada por um algoritmo que portugol possui menus para facilitar a iteração entre o usuário
fará a interpretação e logo outro, posteriormente, que fará a e o software. Abaixo se encontra uma descrição acerca dos
destruição de sua estrutura. destes.
C. Algoritmo de Interpretação
Com a árvore, contendo os passos para interpretação,
construída, um algoritmo fará a execução do portugol.
Para que tal função pudesse funcionar, identificou-se todas
as estruturas presentes no portugol (laços e desvios
condicionais, operações de atribuição, entrada e saída). Com
estes dados já observados, a cada passo de execução, analisa-
se cada nó da árvore de interpretação e a cada área em que
deve haver uma execução. O algoritmo aloca os recursos
necessários e executa o fragmento do portugol.
A Figura 2 demonstra como é feito o reconhecimento do
portugol e como é gerada a execução.

O Interpretador recebe
TIPO{SE} o nodo Se e depois
Dados do nó: 2 ponteiros testa sua condição
Figura 3. Interface do ambiente CIFluxProg no módulo de portugol.

A. Menus
RESULTADO DA CONDIÇÃO
A ferramenta possui menus (Figura 4) onde se encontram
VERDADEIRO DO SE
todas as opções do ambiente.
TIPO TIPO Como itens mais importantes deste menu encontram:
{ESCREVA} {CONDIÇÃO}
• Novo, Abrir e Salvar: o ambiente possibilita ao usuário as
opções de abrir, começar um novo e armazenar os
Se a condição for verdadeira o trabalhos em um arquivo texto, possibilitando que sua
escreva é interpretado
edição possa ocorrer em ferramentas de texto simples,
Figura 2. A visão da árvore e o tratamento do interpretador.
como por exemplo o bloco de notas.
D. Adaptação para um Ambiente Gráfico • Executar: nesta opção o usuário terá a possibilidade de
Como a versão original do interpretador havia sido feita testar seu portugol executando-o (onde o interpretador
sem a utilização de linguagem visual, optou-se por refazer agirá). Esta execução pode ser visualizada na Figura 5.
alguns de seus processos para facilitar a adaptação desta ao • Ajuda: a ferramenta possui muitas informações de ajuda
CiFluxProg. Com o algoritmo refeito em uma versão C++ ao usuário através de arquivos help.
visual, se iniciou a integração do módulo de interpretação de • Estruturas do portugol: neste o usuário poderá escolher
console com o módulo de interface. qual estrutura de programação ele poderá inserir no texto.
Em uma primeira mudança, alterou-se o algoritmo de Escolhendo uma destas opções o usuário não precisará se
execução de entrada e saída. Em lugar de instruções de preocupar tanto com a sintaxe, pois a maior parte da

28
IV Congresso Brasileiro de Computação – CBComp 2004 Algoritmos
estrutura é montada na área do portugol automaticamente. disponibilizar futuramente uma ferramenta de uso livre para
outros grupos que atuem nessa área.

VI. AGRADECIMENTOS
Agradecimentos ao Centro de Ciências Tecnológicas da
Figura 4. Menus do ambiente. Terra e do Mar, Universidade do Vale do Itajaí, pelo
financiamento deste projeto.

VII. REFERÊNCIAS

Artigos Publicados em Congressos ou Seminários:


[1] E. M. S. Souza, G. Grandi, O. R. M. Souza, and R. L. S. Dazzi,
"Reavaliando o ensino de algoritmos," I Simpósio Catarinense de
Computação, vol. 3, pp. 69-79, Ago. 2000.

Livros:
[2] A. I. Orth, Algoritmos e Programação. Porto Alegre: AIO, 2001, p. 174.
[3] A. M. A. Price, and S. S. Toscani, Implementação de Linguagens de
Programação: Compiladores . Porto Alegra: Sagra Luzzatto, 2 ª Edição,
2001, p. 216.
[4] J. L. Szwarcfiter, and L. Markenzon, Estruturas de dados e seus
algoritmos. Rio de Janeiro: JC Editora, 1994, pp. 2-14.
[5] J. G. Brookshear, Ciência da Computação uma Visão Abrangente. Porto
Alegre: Bookman, 2000, p. 499.
[6] J. R. Levine, T. Mason, and D. Brouwn, Lex & Yacc, O'Reilly &
Associates, 2ª Edição, 1992.

Rafael de Santiago nasceu em Itajaí, Brasil, em


Dezembro de 1983. Ele estuda na Universidade do
Vale do Itajaí, no curso de ciência da computação.
Trabalha como pesquisador no Laboratório de
Inteligência Aplicada, onde desenvolve projetos
computacionais como compiladores, sistemas
voltados ao ensino acadêmico e sistemas de
informação.

Rudimar Luís Scaranto Dazzi. Bacharel em


Ciência da Computação e especialista em
Engenharia da Informação pela Pontifícia
Universidade Católica do Paraná, Brasil. Mestre em
Ciência da Computação, área de concentração em
Inteligência Artificial, na Universidade Federal de
Figura 5. Exemplo de interpretação(execução) do portugol. Santa Catarina, Brasil. Doutorando em Engenharia
Elétrica, área de informática médica, na
V. CONCLUSÃO Universidade Federal de Santa Catarina, Brasil.
Professor titular e pesquisador do Curso de Ciências
Com a conclusão do interpretador, pode-se colocar em teste da Computação no Centro de Ciências Exatas da
uma ferramenta que auxilia os aprendizes de programação a Terra e do Mar da Universidade do Vale do Itajaí,
entender e consolidar seus conhecimentos. Santa Catarina, Brasil.

Esse projeto agregou novas funcionalidades e flexibilidade


nas ferramentas que fazem uso deste, uma vez que se tem
condição de fazer qualquer tipo de adaptação necessária para
atender as necessidades das ferramentas de ensino. Com isso
não é mais necessário modelarmos as ferramentas de acordo
com as características do interpretador disponível, além de não
se necessitar de custos com aquisição destes.
O interpretador ainda será expandido, visando atender a
outras necessidades mais avançadas de programação, como
por exemplo, permitir a utilização de funções. Isso contudo
não visa desenvolver um embrião para uma futura linguagem
de programação, mas simplesmente atender a necessidades
existentes nas pesquisas desenvolvidas pelo grupo e também

29

Você também pode gostar