source/projects/datalog/HACKING.md

28 lines
1.3 KiB
Markdown
Raw Normal View History

2021-05-15 05:39:18 +00:00
# Hacking on datalog
Datalog uses the [canopy](https://github.com/jcoglan/canopy) PEG
parser generator, the grammar for which is `src/datalog.peg`.
The included `Makefile` contains appropriate rules to build a Python 3
virtual environment, install the canopy compiler locally, build the
grammar, install pytest and run the test suite. All you should have to
do is `make test`, and away it all goes.
The `datalog.parser` module is generated code emitted by canopy and
should not be edited. It will be rebuilt as needed.
The parser is tested in `test/test_datalog_parser.py` which attempts
to provide coverage for the basic cases of the grammar itself. As of
v0.0.3 (and earlier) this coverage is somewhat incomplete.
The `datalog.core` module contains pretty much everything besides the
codegen'd parser. Particularly, it contains an `Actions` class which
uses hooks in the datalog PEG grammar (noted by the `%foo` ends of
lines) to construct a database AST for every *whole file* read.
The `datalog.core` module also implements evaluation of queries
against databases. This comes in the `evaluate` function and its
mutually recursive helper `join`. `join` is an implementation detail,
whereas `evaluate` is an intentionally exposed entry point. Future
versions of datalog may hide `join`.