Esta é uma implementação simplificada da Máquina Abstrata de Warren (WAM) para Prolog, que demonstra as principais instruções, compilação, alocação de registros e funções da máquina.
- Sobre Prolog: uma introdução apressada se você não sabe do que isso se trata.
- Estratégia de resolução: como uma consulta é realmente resolvida em Prolog.
- Warren Abstract Machine: tentativa de explicar a implementação.
- Indexando: implementação de indexação para acelerar alguns padrões de chamada.
- Parsing: explicação das estruturas básicas de parsing.
- Gramática: documentação para a aplicação de exemplo de parsing de gramática.
- Coisas extras: o que esta implementação simplificou da WAM, e referências.
- model.py: Objetos de dados, representando termos, programas e entidades da máquina.
- compiler.py: Compilação de uma lista de regras em uma lista de instruções.
- interpreter.py: Interpretador que executa a listagem de instruções para uma dada consulta.
- grammar.py: Uma aplicação de exemplo do interpretador, com uma gramática que parseia a si mesma.
Teste com
python -m grammar
e compare com o texto no arquivo!
Após criar um objeto Machine()
, você pode setar o atributo debug_filename
com o nome
de um arquivo onde ele escreve o estado interno da máquina
como um JSON para cada iteração.
Você pode visualizar a execução da máquina rodando um servidor HTTP dentro da pasta debug/,
por exemplo, com python -m http.server
, e carregando o arquivo JSONL.
Como uma amostra, debugtest/interpreter.jsonl
contém a execução de interpreter.py
.
Se você desejar escrever a execução de alguns testes de grammar
, rode pytest --debug_grammar
.
Aviso: a escrita de debug é leeenta.