Skip to content

Latest commit

 

History

History
37 lines (28 loc) · 2.17 KB

README.pt-BR.md

File metadata and controls

37 lines (28 loc) · 2.17 KB

Prol: WAM demo

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.

Documentação

  1. Sobre Prolog: uma introdução apressada se você não sabe do que isso se trata.
  2. Estratégia de resolução: como uma consulta é realmente resolvida em Prolog.
  3. Warren Abstract Machine: tentativa de explicar a implementação.
  4. Indexando: implementação de indexação para acelerar alguns padrões de chamada.
  5. Parsing: explicação das estruturas básicas de parsing.
  6. Gramática: documentação para a aplicação de exemplo de parsing de gramática.
  7. Coisas extras: o que esta implementação simplificou da WAM, e referências.

Organização do código

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

Visualizador de debug

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.

Screenshot do visualizador de debug, mostrando as instruções, valores de registros e controles

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.