A pure Python Scannerless LR/GLR parser
Project description
A pure Python scannerless LR/GLR parser.
For more information see the docs.
Quick intro
This is just a small example to get the general idea. This example shows how to parse and evaluate expressions with 5 operations with different priority and associativity. Evaluation is done using semantic/reduction actions.
The whole expression evaluator is done in under 30 lines of code!
from parglare import Parser, Grammar
grammar = r"""
E: E '+' E {left, 1}
| E '-' E {left, 1}
| E '*' E {left, 2}
| E '/' E {left, 2}
| E '^' E {right, 3}
| '(' E ')'
| number;
number: /\d+(\.\d+)?/;
"""
actions = {
"E": [lambda _, nodes: nodes[0] + nodes[2],
lambda _, nodes: nodes[0] - nodes[2],
lambda _, nodes: nodes[0] * nodes[2],
lambda _, nodes: nodes[0] / nodes[2],
lambda _, nodes: nodes[0] ** nodes[2],
lambda _, nodes: nodes[1],
lambda _, nodes: nodes[0]],
"number": lambda _, value: float(value),
}
g = Grammar.from_string(grammar)
parser = Parser(g, debug=True, actions=actions)
result = parser.parse("34 + 4.6 / 2 * 4^2^2 + 78")
print("Result = ", result)
# Output
# -- Debuging/tracing output with detailed info about grammar, productions,
# -- terminals and nonterminals, DFA states, parsing progress,
# -- and at the end of the output:
# Result = 700.8
Installation
Stable version:
$ pip install parglare
Development version:
$ git clone git@github.com:igordejanovic/parglare.git
$ pip install -e parglare
License
MIT
Python versions
Tested with 2.7, 3.3-3.6
Credits
Initial layout/content of this package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
parglare-0.3.tar.gz
(760.6 kB
view hashes)
Built Distribution
parglare-0.3-py2.py3-none-any.whl
(38.1 kB
view hashes)
Close
Hashes for parglare-0.3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f367ab2843fe6aa58db49987660fb8c170078c46a8edf14809c1a3792b1f6772 |
|
MD5 | ae73bbe0345f09ff13e912f5fe1be11f |
|
BLAKE2b-256 | 4a319e4d6f1182026b5fbae6273d337f211dde1e247946b2549da158dcdfc08a |