SmallForth: an implementation over Pharo Smalltalk – Part 5

Voltar ao índice.

Veja post anterior.

A palavra 'marker' neste post pode ser vista em  3. The Editor (and Staff).

marker

Temos agora a tarefa de implementar a word marker. Esta exigirá uma mudança na estrutura de dados do dicionário caso se queira manter as coisas mais simples.

Abaixo o teste que devemos fazer nosso código passar. Embora o teste não dê conta de todas as possibilidade na nossa implementação se buscará uma solução o mais geral possível. E como há troca da estrutura de dados isto envolve modificar vários métodos.

Usando um “truque”

O método abaixo encerra um “truque”. Criamos uma word __marker que é um sinônimo do marker definido.

O método __marker abaixo é quem efetivamente remove as words. Aqui vale explanar mais um pouco. Quando um marker criado, –work por exemplo, é invocado como se fosse uma word normal é causa a invocação do código Forth compilado ‘__marker -work’. __marker obtém o argumento –work da stream e providencia a remoção das words até encontrar o markerwork e também o remover. A técnica se parece com o que é aplicado num double dispatch.

O novo dicionário

Agora o dicionário é uma OrderedCollection. Acima vimos que usamos uma disciplina de inserção semelhante ao que ocorre no Stack. OrderedCollection>>addFirst: é similar a Stack>>push:. A troca de estrutura de dados só será efetiva ao pressionar o botão Run script pois o método initialize no class side só executado voluntariamente ou quando a classe é carregada pela primeira vez no ambiente.

#compile agora precisa ser modificado para usar OrderedCollection>>addFirst:.

Outras modificações associadas

Outro métodos foram modificados por conta da troca da estrutura de dados. Alguns foram criados ou removidos para da conta do tratamento de erros também. E mais testes foram criados.

Acrescentamos mais uma linha em testForget para torná-lo mais efetivo pois antes ele passava devido à busca reversa dar o mesmo resultado que a direta.

E todos os testes passam.

Múltiplos markers

Para testar se o emprego de dois markers não quebraria nada os dois testes abaixo foram introduzidos e passaram.

Lembramos que o link para o file out atualizado até a parte 7 se encontra no primeiro post. A partir da parte 8 você pode encontrar SmallForth no GitHub em https://github.com/chicoary/small-forth.

Voltar ao índice.

Veja próximo post.

2 comentários

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s