Mostrando postagens com marcador C++. Mostrar todas as postagens
Mostrando postagens com marcador C++. Mostrar todas as postagens

sábado, 1 de agosto de 2009

Como implementar um interpretador de brainfuck - parte 5

Esta é a etapa final, e o programa já interpreta seis comandos, faltando apenas mais dois.

Como implementar um interpretador de brainfuck - parte 4

Até aqui, o programa já consegue interpretar dois dos oito comandos de brainfuck. Se o valor da célula selecionada for igual a 82, e for mandado para a tela, será exibido um “R”, pois 82 equivale a essa letra, de acordo com o ASCII.

Como implementar um interpretador de brainfuck - parte 3

Até aqui, o programa já abre um arquivo e coloca seu conteúdo na memória. Só falta fazê-lo analisar e interpretar o arquivo.

Como implementar um interpretador de brainfuck - parte 2

Depois de aberto o arquivo, deve-se extrair o seu conteúdo, usando funções como fgets(), fscanf() e fread(). Eu prefiro usar a função fread(), pois é a mais rápida das três e a única que pode extrair o conteúdo do arquivo inteiro de uma vez só, sem a necessidade de usar estruturas de repetição. A velocidade do processamento da função fread() pode não fazer diferença em arquivos pequenos, mas em arquivos grandes (~1 MB), as outras funções são tão lentas que podem levar horas, enquanto a fread() pode fazer o serviço na mesma velocidade, ou quase, que quando feita em arquivos pequenos.

Como implementar um interpretador de brainfuck

Neste tutorial estarei abordando a implementação de um interpretador de brainfuck, tendo ênfase em abrir arquivos, interpretar argumentos da linha de comando e interpretar comandos de byte único de uma linguagem, usando a linguagem C/C++ (será compatível com ambas as linguagens). O código fonte foi testado no Linux e no Windows, e provavelmente também funcionará em outros sistemas.