Kodumaro :: Brainfuck (parte 4) – Finalização

Publicado em 15 de Dezembro, 2017
As sombras da programação.
Máquina de Turing

Já com todas as partes em mãos, vamos colar tudo em um executável.

Vamos criar um arquivo brainfuck.pl cujo cabeçalho apenas importará o módulo parser e a biblioteca padrão main:

% -*- Prolog -*-
:- [parser, library(main)].

A lib main espera um predicado user:main/1, que receba uma lista de atoms representando os parâmetros da linha de comando. Considerando que nosso parse/1 espera o nome do arquivo, consideremos que o nome do arquivo seja passado na linha de comando:

main([Filename]) :- parse(Filename).

Se nenhum parâmetro for passado vamos exibir uma mensagem de uso:

main([]) :- current_prolog_flag(os_argv, [_, '-x', Path | _]),
            file_base_name(Path, Script),
            format('use: ~w <source>~n', [Script]).

Podemos rodar todos os testes a partir deste arquivo agora:

sh> swipl -q -t run_tests. brainfuck.pl
... ...... .......

Se quisermos testar como um script, adicione a seguinte linha:

:- initialization(main).

Use o arquivo hello.bf para testar:

sh> swipl -q brainfuck.pl hello.bf
Hello World!

Criando executável

Para criar um executável, remova ou comente a linha com initialization e execute a seguinte linha de comando:

sh> swipl -q
?- [library(qsave), brainfuck].
true.
?- qsave_program(brainfuck, [init_file('brainfuck.pl'),
| goal(main),
| toplevel(halt)]).
true.

Testando agora:

sh> ./brainfuck hello.bf
Hello World!

Conceitual | Lógica