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!
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!