Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Prof.: Elton M. Cardoso CEA419 - Linguagens de Programa ca o Trabalho Pr atico II - Data de entrega: 21/03/2013
Linguagem Brainf
O modelo de m aquina utilizado por Brainfuck e simples. A m aquina que executa o c odigo possui um vetor de bytes e um ponteiro um endere co desse vetor. A instru c oes s ao descritas abaixo: Instru c ao > < + . , [ ] Signicado Avan ca o ponteiro uma unidade para direita Avan ca o ponteiro uma unidade para esquerda Incrementa o valor apontado pelo ponteiro em uma unidade Decrementa o valor apontado pelo ponteiro em uma unidade Imprime o valor apontado pelo ponteiro como caracter L e uma caracter e o armazenda o endere co referenciado pelo ponteiro Se o valor apontado pelo ponteiro for zero, ent ao salta todas as intru c oes adiante (a direita) at e instru c ao imediatamente ap os o ] correspondente. Se o valor apontado pelo ponteiro for diferente de zero, ent ao salta todas as intru c oes pr evias (a esquerda) at e instru c ao imediatamente ap os o [ correspondente. Tabela 1: Commandos da linguagem Brainf
Para a realiza c ao deste trabalho uma modelagem de um interpretador para Brainf j a foi feita. Juntamente com este enunciado h a m odulo Brainf.hs o qual cont em as deni c oes dos tipos de dados a serem utilizados e as assinaturas de tipo das fun c oes. A seguir relaciona-se as fun c oes a serem implementadas e os tipos denidos: type Fita = ([Char],Char,[Char]) Dena a representa c ao para uma ta de mem oria da m aquina de Brainf. Ao contr ario da M aquina de Turing, a ta e limitada e cont em inicialmente car acteres NUL. O tipo ta e representado por um terno onde o primeiro elemento e uma lista de car acteres j a percorridos, o segundo elemento e o caractere corrente (equivalente ao car acter referenciado pelo apontador). o terceiro elemento e uma lista de car acteres ainda n ao vistos. type Program = Fita Um programa e convenientemente representado como uma ta tamb em. type State = (Program,Fita) Um estado e um por ordenado formado por um programa e uma ta. As seguintes fun c oes devem se implementadas com os respectivos tipos anotados: 1. mr :: Fita -> Fita : Move a ta um car acter para direita. Ex.: mr (,a,"bcde") ("a",b,"cde") 2. ml:: Fita -> Fita : Move a ta um car acter para a esquerda. Ex.: ml ("cba",d,"e") ("ba",c,"de") 3. inc :: Fita -> Fita : Incrementa em uma unidade o car acter corrente na ta.Deve-se considerar como intervalo de car acteres v alidos os car ateres corresponde aos c odigos ASCII entre 0 e 255. Se o caracter corrente tiver o c odigo 255 inc deve mudar este car acter n ao para 256, mas sim para 0. Ex.: inc ("cba",d,"e") ("cba",e,"e") 4. dec :: rente. Fita -> Fita : An alogo a inc exceto que decrementa o valor do car acter corFita -> Char : Retorna o car acter corrente da ta.
5. current ::
6. backLoop :: Program -> Program: Retrocede na ta at e encontrar um marcador de in cio de la co [. Leva em considera c ao a exist encia de la cos aninhados. Ap os o termino desta fun c ao a cabe ca da primeira lista da ta deve ser [. Ex.: backLoop ("+-+[",],) ("[",+,-+]") 7. forwardLoop :: Program -> Program : Avan ca na ta at e encontrar um car acter marcador de m de la co ]. Ap os o t ermino da execu c ao desta fun c ao a cabe ca da lista na terceira posi c ao do par deve ser ].
Page 2
8. makeInitialState :: String -> State : Dada uma String s que cont em um programa, cria um estado inicial do seguinte modo: A programa e formado pelo terno ([],head s,tail s ++[\NUL]). A ta e formada pelo terno ([],\NUL, ys) onde ys e uma lista com 300 caracteres NUL. Um car acter \NUL e inserido ao m do programa com prop osito de facilitar a detec c ao do m da execu c ao do programa. A fun c ao de interpreta c ao interpreter :: State -> State deve considerar apenas o comando corrente, seja ele qual for. O processo de repeti c ao da interpreta c ao sobre os demais comandos e realizada pela fun c ao withInterpreter. A fun c ao interpreter deve se concentrar apenas nos comandos +,-,>,<,[ e ] deixando os comandos entrada e sa da . e , a cargo da fun c ao withInterpreter Uma vez que todas as fun c oes estiverem implementadas voc e pode executar o interpretador invocando o m etodo main no GHCi. O programa ir a ent ao solicitar um nome de arquivo que cont em c odigo em Brainfuck, o c odigo ser a lido e o interpretador ser a executado. Como usual seu c odigo dever a ser submetido ao e-mail eltonm.cardoso@gmail.com at ea data de 21/03/2013
Page 3