Small little context-free expression generator and parser using user provided EBNF-like source.
Project description
NanGram
Negative Nancy's expression generator & parser! XD
Write grammars, generate random expressions, parse expressions.
Installation
pip install nangram
Usage
First write yourself a nice little grammar like this!:
grammar.bnf:
determiner = "the " | "a " .
noun = "cat " | "dog " | "chair " .
verb = "runs " | "snacks " | "plays " .
adverb = "quickly" | "ferociously" | "sneakily" .
noun_phrase = determiner noun .
verb_phrase = verb adverb .
sentence = noun_phrase verb_phrase .
main = sentence .
Then import nangram and load the grammar source:
import nangram
grammar = nangram.Grammar.load_bnf('grammar.bnf')
Then generate some expressions!:
for expression in grammar.generate():
print(expression)
And you get...
the cat plays ferociously
the dog plays ferociously
the chair snacks quickly
a cat snacks quickly
a dog runs quickly
a dog snacks ferociously
a dog plays quickly
a chair plays ferociously
Then try parsing something:
for parse_tree in grammar.parse('a cat snacks sneakily'):
print(parse_tree)
And you get...
sentence = 'a cat snacks sneakily'
├ noun_phrase = 'a cat '
│ ├ determiner = 'a '
│ └ noun = 'cat '
└ verb_phrase = 'snacks sneakily'
├ verb = 'snacks '
└ adverb = 'sneakily'
(The parser will yield as many parse trees as are valid, so if you have an ambiguous grammar, for example, you can parse all variations. If the expression is not in the language, you won't get any parse trees.)
See examples/english.bnf and examples/english.py for another example.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nangram-0.0.6.tar.gz.
File metadata
- Download URL: nangram-0.0.6.tar.gz
- Upload date:
- Size: 8.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f971ed2d20d5ed9d9c8920996941e8cff73f75d9e171d3f1c3eb5771cc0129f0
|
|
| MD5 |
53ad3a5c4422bc09fc6701a210f3ae44
|
|
| BLAKE2b-256 |
224fae6457796d38c916b840bd485dfa8ab821c7e5f9162c3e5c65016d181b5f
|
File details
Details for the file nangram-0.0.6-py3-none-any.whl.
File metadata
- Download URL: nangram-0.0.6-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdfa3ee6c236b22edcdfc0d7de76f67520b48f927343a72e98ad7adbc60a0cf6
|
|
| MD5 |
d2562ab86ae543849992223891b58484
|
|
| BLAKE2b-256 |
855de8cb1f316bb9dae1a4fcea1700a24050c1777a79f65cf685eb4da0c1c937
|