Uma ferramenta de apoio ao ensino de computabilidade que facilita o entendimento Máquinas Abstratas



Documentos relacionados
AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

Dadas a base e a altura de um triangulo, determinar sua área.

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Introdução às Linguagens de Programação

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos

Resolução de problemas e desenvolvimento de algoritmos

Outras Máquinas de Turing

Autómatos Finitos Determinísticos

Geração de código intermediário. Novembro 2006

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

1.1. Organização de um Sistema Computacional

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

Linguagem Formais e Autômatos

COMPILADORES E INTERPRETADORES

DEPARTAMENTO DE MATEMÁTICA E CIÊNCIAS EXPERIMENTAIS

Organização e Arquitetura de Computadores I. de Computadores

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Feature-Driven Development

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

02 - Usando o SiteMaster - Informações importantes

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO - TIC 10º C. Planificação de. Curso Profissional de Técnico de Secretariado

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

Programação para Computação

Introdução a Informática. Prof.: Roberto Franciscatto

Linguagens Formais e Autômatos

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

PLANO DE ENSINO. Período/ Fase: 1º Semestre: 1º Ano: 2011 Disciplina: Programação de Computadores I (PGC21) Carga Horária: 72 horas/aula

Introdução ao Aplicativo de Programação LEGO MINDSTORMS Education EV3

Conceitos Importantes:

1 Máquina URM, comandos e programas URM

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional

Máquinas de Turing. Juliana Kaizer Vizzotto. Disciplina de Teoria da Computação. Universidade Federal de Santa Maria

Utilização de Hipermídia para Criação de Help: Estudo de Caso Software para Auxílio no Ensino de Linguagens Regulares

Banco de Dados BrOffice Base

Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia de Computação CECOMP

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Pró-Reitoria de Ensino de Graduação P L A N O D E E N S I N O

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

2. Objetivos do Sistema

1. NÍVEL CONVENCIONAL DE MÁQUINA

ICC Introdução para JavaScript

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Os limites da computação algorítmica

ALP Algoritmos e Programação. . Linguagens para Computadores

Computabilidade 2012/2013. Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto

A função do primeiro grau

WebSphere_Integration_Developer_D_Jan06 Script

Algoritmos: Lógica para desenvolvimento de programação de computadores. Autor: José Augusto Manzano. Capítulo 1 Abordagem Contextual

CURSO: TÉCNICO EM INFORMÁTICA NA MODALIDADE EAD

Java. Marcio de Carvalho Victorino

AULA 1 INTRODUÇÃO - ENGENHARIA DE SOFTWARE. Prof. Msc. Hélio Esperidião

V Semana de Ciência e Tecnologia IFMG - campus Bambuí V Jornada Científica 19 a 24 de novembro de 2012

Lógica de Programação

SOFTWARES LIVRES: UMA REDE PARA O ENSINO E APRENDIZAGEM DE MATEMÁTICA NA REGIÃO CARBONÍFERA

2 echo "PHP e outros.";

O modelo do computador

Manual. Formações Modulares Certificadas. A Relha Cooperativa de Serviços CRL. Formador/a: Ricardo Cabral. Data: 05/2013. N.

Informática I. Aula 6. Aula 6-12/09/2007 1

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

Capacidade = 512 x 300 x x 2 x 5 = ,72 GB

Síntese das discussões do fórum Livro-APF: Julho/2010

Ensino de Programação nas Escolas Públicas: Criando. Novos Gênios

Curso Técnico em Redes

Programação Orientada a Objeto

Aula Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios. Algoritmo e Programação. Prof. Fábio Nelson.

UFRPE Prof. Gustavo Callou

Análise qualitativa do processo de workflow da ouvidoria do IFMG campus Bambuí: um estudo de caso

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO

O que há de novo. Audaces Idea

ATIVIDADES PRÁTICAS SUPERVISIONADAS

Projeto CONDIGITAL Mergulhando na Função Guia do Professor

Tutorial de Matlab Francesco Franco

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES

Autômatos a pilha. UFRN/DIMAp/DIM0330 Linguagens formais. David Déharbe. david/enseignement/2003.

Lógica de Programação

Orientação a Objetos

Introdução. INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br

18º Congresso de Iniciação Científica IMPLEMENTAÇÃO DE UM MODELO DE TESTE DE APLICAÇÕES WEB

UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE

CAPÍTULO 6 CIRCUITOS SEQUENCIAIS IV: PROJETO DE REDES SEQUENCIAIS

Rock In Rio - Lisboa

Especificação do 3º Trabalho

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

OPERADORES E ESTRUTURAS DE CONTROLE

Sistema de Computação

Análise de Dados do Financeiro

CLUBE DE PROGRAMAÇÃO NAS ESCOLAS: NOVAS ERSPECTIVAS PARA O ENSINO DA COMPUTAÇÃO. IF Farroupilha Campus Santo Augusto; joaowinck@hotmail.

Criando um script simples

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

12 EXCEL MACROS E APLICAÇÕES

Transcrição:

Uma ferramenta de apoio ao ensino de computabilidade que facilita o entendimento Máquinas Abstratas Vitor Vieira 1,2, Vitor Marcolino 1, David Lima 1,2, Eliana Almeida 1,2 1 Centro de Pesquisa em Matemática Computacional Instituto de Computação Universidade Federal de Alagoas (UFAL) Campus A. C. Simões, BR 104-Norte, km 97, Cidade Universitária CEP: 57072-970 Maceió, AL Brasil 2 LCCV Laboratório de Computação Científica e Visualização Universidade Federal de Alagoas (UFAL) CEP: 57072-970 Maceió, AL Brasil {vitunv,vitor.marcolino,dhs.lima}@gmail.com eliana.almeida@pq.cnpq.br Resumo. Muitas disciplinas de estudo da Computação, devido a carga de abstração e conhecimento teórico, são vistas com desinteresse pelos discentes. A Teoria da Computação é inclusa nesse grupo apesar de sua clara importância na área. Com base nisto, é apresentada uma ferramenta que aborda dois modelos teóricos importantes para a computação: Máquinas Abstratas, considerando infinitos registros (MIR) e Linguagem Algorítmica Minimal (LAM). Essa ferramenta é composta por um simulador de programas em LAM e explora o mapeamento destes programas em programas em MIR. A ferramenta possui uma interface intuitiva e simples que estimula o aluno ao aprendizado destes modelos teóricos. Abstract. Many disciplines in computation study, due to quantity of abstraction and theoretical knowledge, are not seen so interesting by the students. The Theory of the Computation is in this group although is clear its importance in the area. Based on this, it is presented a tool that approaches two theoretical models that are important for the computation: Abstract Machines, considering Unlimited Register Machine (URM), and Minimal Algorithm Language (MAL). This tool is composed by a simulator of programs in MAL and explores the mapping of these programs in programs in URM. The tool possesses an intuitive and simple interface that stimulate the students to learn these theoretical models. 1. Introdução Cursos que tenham como base a Ciência da Computação requerem o ensino de conceitos formais e matemáticos sobre os limites do poder de resolução de problemas através de uma máquina, ou seja, do que é dito ser um problema computável. Portanto, para a formação básica dos discentes é necessário explorar tópicos da matemática e da própria Ciência da Computação que exijam um certo grau de abstração, mas apesar de dominar conceitos básicos da matemática dos ensinos médio e fundamental os alunos de graduação têm dificuldade de traduzí-los para instruções computacionais [Setti and Cifuentes 2007].

Sabe-se que raciocinar de forma algoritmica é diferente de raciocinar matematicamente, exigindo mais prática, contato com exercícios, e interação com a teoria. Por isso, ambientes de aprendizado podem ser utilizados como artifício para aproximar o aprendiz da teoria, introduzindo uma interação mais dinâmica e facilitando a visualização dos conceitos, e dessa forma melhorar a familiaridade com os mesmos. A ferramenta aqui apresentada visa facilitar o entendimento de computabilidade. Para isso, é utilizada a definição de uma linguagem de programação semelhante às linguagens imperativas mais primitivas (LAM - Linguagem Algorítmica Minimal), mostrando o modelo teórico implícito em todas as linguagens de tal natureza. Além de ser um simulador de LAM, a ferramenta aqui proposta permite transformar um programa escrito em LAM em um programa para o modelo formal de Máquinas Abstratas, fazendo uso da definição de Máquinas com Infinitos Registros (MIR). Para a melhor aprendizagem, a ferramenta introduz uma interface de usuário intuitiva e simples. Este trabalho é uma parcela importante do projeto ACARAjE (Ambiente Computacional Aplicado: Recursos de Ajuda Educacional)[Lopes and Almeida 2007], sistema constituído de módulos integrados cujo objetivo é prover um ambiente facilitador de ensino/aprendizado de conceitos teóricos de computação. O ACARAjE atualmente engloba uma ferramenta que auxilia o ensino de lógica de programação, o AmbAP (Ambiente de Aprendizado de Programação) e um conjunto de ferramentas voltadas especialmente ao entendimento das evidências da tese de Church[Lewis and Papadimitriou 1997]. Tais evidências são introduzidas por um conjunto de modelos formais explorados por [Brainerd and Landweber 1974] e [de Carvalho and de Oliveira 1998]. Dentre tais modelos destacam-se: Funções Recursivas, Linguagem Algorítmica, Máquinas com Registros, Máquinas de Turing e Algoritmo de Markov. O objetivo do projeto é abordar tais modelos juntamente com as transformações de equivalência entre os mesmos conforme a figura 1. Tais formalismos serão explorados por módulos independentes desenvolvidos individualmente ao longo do projeto. Na próxima seção, serão apresentados alguns trabalhos correlatos juntamente com os demais trabalhos realizados no projeto ACARAjE. Na seção 3, serão apresentados os conceitos teóricos relacionados. Na seção 4, a descrição da implementação da ferramenta aqui proposta será apresentada, seguida da conclusão e um panorama de trabalhos futuros. Figura 1. Modelos teóricos e suas transformações de equivalência

2. Trabalhos Relacionados Nesta seção são apresentados alguns exemplos de softwares, trabalhos similares ao aqui apresentado, principalmente os que abordam ensino/aprendizado de aspectos teóricos de computação. Existem vários softwares para auxiliar a assimilação de conceitos teóricos da computação mas poucos evidenciam a Tese de Church-Turing. JFLAP [Rodger and Finley 2006] é um aplicativo que engloba simulações de diversos tipos de máquinas, como máquina de Turing clássica, máquina de Turing com múltiplas fitas, máquina de Mealy e máquina de Moore, como também faz a prova do lema do bombeamento e simula alguns tipos de autômatos e gramáticas. Porém, não trata outros formalismos teóricos importantes, como algoritmos de Markov e Funções Recursivas, por exemplo. Minerva [Estrebou et al. 2002], desenvolvido na linguagem Java, é utilizado principalmente no estudo de diversos tipos de autômatos (autômatos finitos, autômatos de pilhas e máquina de Turing) e também trata o lema do bombeamento para linguagens regulares. O Language Simulator [Vieira et al. 2003] é um simulador que abrange: autômato finito (determinístico, não determinístico e não determinístico com transição lambda), gramática regular, expressão regular e máquinas de Moore e Mealy. Possui também algumas outras funcionalidades, como a minimização de autômatos finitos determinísticos, também permite exportar os autômatos finitos como um arquivo para ser utilizado no graphviz. URM Simulator [Camacho 2009] é um simulador web de Máquina com Infinitos Registros. Também, possui algumas macros disponíveis que ajudam na elaboração algorítmo e tem como idioma o português, sendo o mais próximo da proposta aqui apresentada. Algumas ferramentas do ACARAjE foram desenvolvidas. O AmbAP (Ambiente de Aprendizado de Programação) [Almeida et al. 2002] é um ambiente para aprendizado de lógica de programação, implementado na linguagem Java, o qual faz uso de uma linguagem simples e no idioma português, demonstrada em [Evaristo and Crespo 2000]. O TOMaTE (Tutorial Otimizado de Máquinas de Turing Essenciais) [Peixoto et al. 2007] é um simulador de máquinas de Turing, construídos sobre grafos dirigidos, ele vem sendo aperfeiçoado, como pode-se constatar em [Lima and Almeida 2009]. Outro trabalho bastante importante é o SiR [Paes and Almeida 2008c, Paes and Almeida 2008b, Paes and Almeida 2008a] é ferramenta que transforma funções recursivas primitivas em um pséudo-código gerado dentro da definição de uma Linguagem Algorítmica Minimal (LAM). Também no âmbito do ACARAjE, há uma preocupação com o desenvolvimento da interface unificada do ambiente como um todo, considerando os seus módulos distintos, conforme apresentado em [Silva et al. 2009]. 3. Embasamento Teórico Segundo as evidências da Tese de Church, tudo que é computável pode ser escrito em uma linguagem algorítmica. O programa escrito em tal linguagem, assim como as linguagens de programação comumente utilizadas, são interpretadas por uma máquina que possui registros e linguagem de montagem própria. Com isso, todo pro-

blema computável pode ser interpretado por tal máquina [Brainerd and Landweber 1974, de Carvalho and de Oliveira 1998]. Para abordar esses conceitos, os modelos formais de Linguagem Algorítmica Minimal (LAM) e Máquinas com Infinitos Registros (MIR) são utilizados. Tais modelos serão vistos com maiores detalhes a seguir, além da transformação de programas em LAM para programas em MIR e sua consequente interpretação. 3.1. A Linguagem Algorítmica Minimal Para embasar o modelo abstrato de máquina, esta ferramenta aborda um modelo de linguagem algorítmica o mais simples possível para escrever os programas ditos computáveis, Linguagem Algorítmica Minimal (LAM). Segue a descrição de sua BNF, segundo [Brainerd and Landweber 1974]. < atribuicao > ::= < nome > 0 < nome > < nome > < nome > < nome > + 1 < nome > ::= < literal > < literal >< numeral > < literal > ::= < letra > < letra >< literal > < letra > ::= A B... Z < numeral > ::= 0... 9 < programa io > ::= < io >< programa > < io > ::= < entrada >; < saida >; < entrada > ::= INP UT INP UT < lista de nomes > < saida > ::= OUT P UT OUT P UT < lista de nomes > < lista de nomes > ::= < nome >, < lista de nomes > < nome > < programa > ::= < comando rotulado > < loop >< programa >< end > < programa >< programa > < comando rotulado > ::= < comando > < rotulo >: < comando > < rotulo >: < comando rotulado > < comando > ::= < atribuicao > GOT O < rotulo >

< loop > ::= LOOP < nome >; < rotulo >: LOOP < nome > < rotulo >: < loop > < end > ::= END < rotulo >: END < rotulo >: < end > Para executar um programa em LAM, devem ser satisfeitos os seguintes pontos: 1. Toda variável deve ter seu valor inicial 0. 2. Os passos são executados na ordem em que são dispostos. 3. A atribuição só deverá ocorrer das seguintes formas: (a) X 0, ou seja, a variável X recebe o valor 0. (b) X Y, ou seja, X deve receber o valor da variável Y, tal que X Y. (c) X X + 1, ou seja, a variável X pode ser incrementada. 4. O conjunto das variáveis de entrada não podem estar à direita do comando de atribuição. 5. O valor V inicial da variável do comando LOOP indica quantas vezes o conjunto interno de instruções dessa estrutura é repetido. Tal valor inicial é mantido mesmo que a variável seja modificada e é decrementado a cada iteração. 6. Se o valor V inicial da variável do comando LOOP for zero, o bloco da estrutura é executado 0 vezes, ou seja, o programa continuará a ser executado a partir da próxima instrução depois do comando END correspondente. 7. O comando GOT O transfere a execução do programa para a instrução com o rótulo atribuído. 8. O programa pára em duas hipóteses: caso tenha acabado de ser executada a última instrução ou se um comando GOT O apontar para um rótulo não existente no programa. 3.2. A Máquina Abstrata (Máquina com Registros) No modelo LAM não é considerada a representação dos dados, o que vem a ser feito pelos formalismos de máquina abstrata, que se assemelha ainda mais com as máquinas reais. A máquina aqui tratada é a máquina com infinitos registros (MIR). Em MIR, mesmo havendo infinitos registros, há um conjunto de instruções finito, que muito se assemelha às linguagens de montagem, como apresentada a seguir: Definição: Seja W i uma i-tupla que pode ser entendida como os possíveis conteúdos de um conjunto ordenado de i registros. Uma Máquina com Infinitos Registros M é um 6-upla, tal que M =, R, M, I, α r, ω s, onde: = n, tal que n > 0, é chamado de alfabeto de entrada. R é um conjunto de objetos chamados registros, onde R = {r 0, r 1,..., r i,...}. M é um conjunto de funções µ : R, denominadas configurações de memória, e µ (r) é o conteúdo do registro r.

I é um conjunto de funções de M em M chamadas instruções. Temos, em MIR, que I = {cortaesq (r k, δ), concdir (r k, δ), testa (r k ) k > 0 e δ }. Considerando W n o conjunto de possíveis conteúdos de n registros. α r é uma função de W r em M chamada de função de entrada, onde α r (x 1,..., x r ) = { r 0, 0, r 1, x 1,..., r r, x r, r r+1, 0,...}. ω s é uma função de M em W s chamada de função de saída, onde ω s ({ r 0, y 0, r 1, y 1,.., r s, y s, r s+1, y s+1,..}) = y 1,.., y s. Temos também que as funções de I de uma máquina MIR funcionam da seguinte forma: Em cortaesq (r, δ) (µ) = µ, temos µ (r) = S se µ(r) = δs para qualquer S ou temos um salto caso contrário. Em concdir(r, δ)(µ) = µ, temos que µ (r) = µ(r)δ. Em testa(r)(µ) = µ, temos que µ = µ se µ(r) = 0 e que ocorra um salto se µ(r) 0. Define-se uma instrução em um programa em MIR como uma tripla < l, f, l >, onde f I e l, l L, sendo L o conjunto de símbolos denominados rótulos. Observe que cada instrução, assim como algumas linguagens de baixo nível, contem um rótulo (l), um procedimento (f) e após o mesmo uma diretiva para outra instrução (l ). É possível em MIR construir programas utilizando funções constituídas por sequências de instruções básicas da máquina (I). Semelhante a idéia de funções ou rotinas definidas pelo usuário em linguagem de programação, tais funções são chamadas pelo programa. Como exemplo, podem ser definidas funções tais como limpe(r k ), que zera o conteúdo do registro r k, copie(r k, r j ), que copia o conteúdo do registro r j para r k, com k, j 0 e j k. 3.3. Mapeamento Programa em LAM/Programa em MIR São necessárias algumas modificações na estrutura do programa em LAM para se efetuar o mapeamento para programas em MIR. As r variáveis de entrada deverão ser substituídas por X 1,..., X r, seguidas pelas t variáveis de saída, caso existam, então substituídas por X r+1,..., X r+t. Finalmente, as k variáveis restantes, as que ocorrem no resto do programa, devem ser substituídas pelas seguintes k variáveis da mesma forma. Também, todas as instruções em LAM são acrescidas de rótulos enumerados sequencialmente, onde a primeira instrução tem rótulo 1, a segunda 2 e assim sucessivamente. O mapeamento de LAM em MIR pode ser feita em nove passos, como segue: 1. Eliminação de INP UT e OUT P UT ; 2. Estado inicial do programa em MIR é < 1, α(x 1,..., x r ) > 3. Substituição l X k 0 por l limpe(r k ); 4. Substituição l X k X k + 1 por l concdir(r k, 1); 5. Substituição l X k X j por: l copie(r k, r j ) se k j l limpe(r 0 ) se k = j 6. No comando l LOOP X k, ao encontrar o comando l END, é feita a substituição pelo comando l END l. Caso m = max{i X i ocorre no programa}, substituir o comando l LOOP X k por l copie(r m+1, r k ) l.1 testa(r m+1 ) l + 1, cortaesq(r m, 1) l + 1

7. Substituição l END l por l limpe(r 0 ) l.1 8. Sendo m maior rótulo do programa, substituir comando l GOT O l por l limpe(r 0 ) l se l m ou por l limpe(r 0 ) m + 1 se l > m 9. Sendo m maior rótulo do programa, adicionar seguinte seqüência que prepara as saídas do programa: m + 1 copie(r 1, r r+1 ) m + 2 copie(r 2, r r+2 )... m + s copie(r s, r r+s ) m + s + 1 fim 4. Implementação A ferramenta em questão foi desenvolvida na linguagem Java 1, assim como o projeto ACARAjE vem sendo desenvolvido. O padrão de projetos e estilo arquitetural MVC (Model-View-Controller) foi utilizado para prover a separação de interesses dos componentes do código, tornando o código flexível e promovendo a possibilidade de reusabilidade dos componentes para o projeto. A ferramenta faz uso da API Swing 2 para a interface gráfica. A figura 2 apresenta a execução de um programa escrito em LAM demonstrando a tabela de símbolos, variáveis de entrada e saída juntamente com as do corpo do programa (heap). Ao iniciar o programa, é feita uma consulta de qual são as variáveis de entrada para o mesmo. O programa passa pelo analisador léxico, sintático e um programa em Máquinas com Registros é gerado e interpretado de forma a obter os resultados tanto em LAM quanto em MIR, como mostrado na figura 3. Ou seja, é demonstrado a execução do programa em MIR através dos dois modelos. Também, o programa demonstra o passo-a-passo da transformação entre os modelos como é demonstrado na figura 4. Assim o aprendiz pode visualizar a transformação e perceber a relação entre eles. 1 Ver site: http://java.sun.com/ 2 Ver site: http://java.sun.com/products/jfc/tsc/articles/architecture/

Figura 2. Execução do programa em LAM Figura 3. Correspondência em MIR e disposição dos valores nos registros

Figura 4. Tradução das instruções LAM para MIR 5. Considerações Finais O próximo passo será incorporar este trabalho ao ambiente ACARAjE e acoplá-lo ao módulo que concerne à transformação do modelo formal de funções recursivas. Como este último gera a partir de um programa em funções recursivas seu correspondente em LAM, sua utilização possibilitará abordar os três formalismos. Através da ferramenta aqui abordada, pretende-se que os alunos de Teoria da Computação tenham um recurso dinâmico e interativo para auxiliar à aprendizagem da disciplina, especialmente no entendimento de modelos teóricos computacionais, que evidenciam a tese de Church, além do entendimento da tese em si. A consolidação da ferramenta só se dará depois de um feedback mais efetivo por parte dos usuários. Referências Almeida, E. S., Costa, E. B., Silva, K. S., Paes, R. B., Almeida, A. A. M., and Braga, J. D. H. (2002). Ambap: Um ambiente de apoio ao aprendizado de programação. In XXII Congresso da Sociedade Brasileira de Computação X WEI, Florianópolis SC (Brasil). Brainerd, W. S. and Landweber, L. H. (1974). Theory of Computation. John Wiley & Sons. Camacho, P. (2009). URM simulator. http://max.uma.pt/ a2082604/urm. php, acesso em 16 de outubro de 2009. de Carvalho, R. L. and de Oliveira, C. M. G. M. (1998). Sistemas Formais. Imprinta Gráfica e Editora Ltda. Modelos de Computação e

Estrebou, F., Lanza, M., Mauco, V., Barbuzza, R., and Fabre, L. (2002). Minerva: Una herramienta para un curso de lenguajes formales y autómatas. In Latin American Informatics conference (CLEI). Evaristo, J. and Crespo, S. (2000). Aprendendo a programar - programando numa linguagem algorítma executável ILA. Book Express. Lewis, H. R. and Papadimitriou, C. H. (1997). Elements of the Theory of Computation. Prentice Hall International, 2 edition. Lima, D. H. S. and Almeida, E. S. (2009). Aprendendo máquina de turing atraves de um ambiente gráfico de simulação. In IX Escola Regional Bahia - Alagoas - Sergipe, Workshop de Educação em Computação e Informática. Lopes, B. and Almeida, E. (2007). Um simulador para ilustrar graficamente a execução de programas e as noções de computabilidade. In Anais da 59 a reunião da SBPC. Paes, A. and Almeida, E. (2008a). Transformando funções recursivas em programas através de uma ferramenta gráfica de simulação. In 8 o Encontro Regional de Matemática Aplicada e Computacional - VIII ERMAC. Paes, A. and Almeida, E. S. (2008b). Gerando pseudo - código a partir de funções computáveis utilizando uma ferramenta de simulação. In Fortaleza. Anais do XIX Simpósio Brasileiro de Informática na Educação, 2008. Paes, A. and Almeida, E. S. (2008c). Um ambiente para execução de funções computáveis através de uma ferramenta gráfica de simulação utilizando o conceito de grafo de dependências e linguagens de programação. In VIII Escola Regional Bahia - Alagoas - Sergipe, Workshop de Educação em Computação e Informática, pages 10 18. Peixoto, M., Vieira, B. L., and Almeida, E. S. (2007). Construindo uma ferramenta para transpor paradigmas de interface em máquinas de turing - TOMaTE. In São Paulo. Anais do XVIII Simpósio Brasileiro de Informática na Educação, 2007. Rodger, S. and Finley, T. (2006). JFLAP - An Interactive Formal Languages and Automata Package. Jones and Bartlett. Setti, M. G. and Cifuentes, J. C. (2007). O pensamento matemático elementar como um obstáculo epistemológico para o pensamento computacional. Simpósio Nacional de Tecnologia e Sociedade, 1:1 7. Silva, E. R., Lobo, V. T. C., Lima, D. H. S., and Almeida, E. S. (2009). Construindo uma interface para um ambiente educacional de apoio ao aprendizado dos aspectos formais da computação. In IX Escola Regional Bahia - Alagoas - Sergipe, Workshop de Trabalhos de Iniciação Científica e Graduação. Vieira, L. F. M., Vieira, M. A. M., and Vieira, N. J. (2003). Language emulator, uma ferramenta de auxílio no ensino de teoria da computação. In XIII Workshop sobre Educação em Computação - XXV Congresso da Sociedade Brasileira de Computação.