Skip to content

rindPHI/NeoGrammarGraph

Repository files navigation

NeoGrammarGraph

Python Version BuildStatus Coverage Status Dependencies Code style: black

Creating graphs from context-free grammars for fun and profit.

This project is a re-implementation of GrammarGraph based on the efficient graph-tool library.

Supported Features

  • Creating sub graphs
  • Filter abstraction
  • Reachability of grammar symbols.
  • Computing the shortest path or all paths between two grammar symbols.
  • Computing k-paths (paths of exactly length k) in grammars and derivation trees (see this paper).
  • Checking whether a (sub) graph represents a tree
  • Export to GraphViz DOT files.

Install

NeoGrammarGraph requires at least Python 3.10 and a working installation of graph-tool. We refer to the graph-tool homepage (https://graph-tool.skewed.de/) for instructions on how to obtain graph-tool. On a MacOS system, we recommend the installation using homebrew; on Debian/Ubuntu, there's a custom APT repository to be used with apt-get.

We recommend installing NeoGrammarGraph in a virtual environment. Example usage (inside project directory):

python3.10 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Run tests
python3 -m pytest

On MacOS (maybe also on other systems), it might be required to link the graph-tool library into the virtual environment. If you used homebrew to install graph-tool, an example command-line invocation could look as follows (you might have to update some paths depending on the Python/graph-tool versions on your system):

ln -s \
    /usr/local/Cellar/graph-tool/2.51/lib/python3.11/site-packages/graph_tool \
    venv/lib/python3.10/site-packages

For the GitHub workflow, the following line was required:

sudo ln -s \
    /usr/lib/python3/dist-packages/graph_tool \
    /opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/site-packages

Author: Dominic Steinhöfel.

About

Performant Graph Operations on Context-Free Grammars

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages