Skip to main content

A pure Python LR/GLR parser

Project description

parglare logo

build-status coverage docs status license python-versions

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;

terminals
number: /\d+(\.\d+)?/;
"""

actions = {
    "E": [lambda _, n: n[0] + n[2],
          lambda _, n: n[0] - n[2],
          lambda _, n: n[0] * n[2],
          lambda _, n: n[0] / n[2],
          lambda _, n: n[0] ** n[2],
          lambda _, n: n[1],
          lambda _, n: n[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
# -- Debugging/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:

    Install just.

    $ git clone git@github.com:igordejanovic/parglare.git
    $ cd parglare
    $ just dev
    

Citing parglare

If you use parglare in your research please cite this paper:

Igor Dejanović, Parglare: A LR/GLR parser for Python,
Science of Computer Programming, issn:0167-6423, p.102734,
DOI:10.1016/j.scico.2021.102734, 2021.
@article{dejanovic2021b,
    author = {Igor Dejanović},
    title = {Parglare: A LR/GLR parser for Python},
    doi = {10.1016/j.scico.2021.102734},
    issn = {0167-6423},
    journal = {Science of Computer Programming},
    keywords = {parsing, LR, GLR, Python, visualization},
    pages = {102734},
    url = {https://www.sciencedirect.com/science/article/pii/S0167642321001271},
    year = {2021}
}

License

MIT

Python versions

Tested with 3.8-3.14

Credits

Initial layout/content of this package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

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

parglare-0.21.1.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

parglare-0.21.1-py3-none-any.whl (62.0 kB view details)

Uploaded Python 3

File details

Details for the file parglare-0.21.1.tar.gz.

File metadata

  • Download URL: parglare-0.21.1.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.34.2

File hashes

Hashes for parglare-0.21.1.tar.gz
Algorithm Hash digest
SHA256 0e5b5b042f5b0d7210572dcebeb6fd6f4a9a77788efe9c5b3dffbee85f7076a0
MD5 06a29963bfc9db1b74dff5b7261ff99b
BLAKE2b-256 f01fb9801d733d1d9f1ca71960bc18843624a71ad10800a2925a9107b0c815cb

See more details on using hashes here.

File details

Details for the file parglare-0.21.1-py3-none-any.whl.

File metadata

  • Download URL: parglare-0.21.1-py3-none-any.whl
  • Upload date:
  • Size: 62.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.34.2

File hashes

Hashes for parglare-0.21.1-py3-none-any.whl
Algorithm Hash digest
SHA256 778c61e7fefad3f304449b5a90dc2049a6a409da5249f52c1d66b6802379279e
MD5 753a65ecdc953b7886ae944b95c0b6b5
BLAKE2b-256 9591d882f42c4cd68efa69d0e22d28011ca0475551976722f255214f767352d0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page