Metadata-Version: 2.1
Name: parglare
Version: 0.16.1
Summary: A pure Python Scannerless LR/GLR parser
Home-page: https://github.com/igordejanovic/parglare
Author: Igor R. Dejanovic
Author-email: igorREPLACEWITHDOTdejanovic@gmail.com
License: MIT
Keywords: parglare
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Software Development :: Interpreters
Classifier: Topic :: Software Development :: Compilers
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Operating System :: OS Independent
License-File: LICENSE
License-File: AUTHORS.md
Requires-Dist: click (<9.0,>=7.0)
Provides-Extra: dev
Requires-Dist: wheel ; extra == 'dev'
Requires-Dist: mkdocs ; extra == 'dev'
Requires-Dist: mike ; extra == 'dev'
Requires-Dist: twine ; extra == 'dev'
Provides-Extra: test
Requires-Dist: flake8 ; extra == 'test'
Requires-Dist: coverage ; extra == 'test'
Requires-Dist: coveralls ; extra == 'test'
Requires-Dist: pytest ; extra == 'test'

.. image:: https://raw.githubusercontent.com/igordejanovic/parglare/master/docs/images/parglare-logo.png

|build-status| |coverage| |docs| |status| |license| |python-versions|


A pure Python scannerless LR/GLR parser.


For more information see `the docs <http://www.igordejanovic.net/parglare/>`_.


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!

.. code:: python

    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:

.. code:: shell

    $ pip install parglare

- Development version:

.. code:: shell

    $ git clone git@github.com:igordejanovic/parglare.git
    $ pip install -e parglare

Citing parglare
---------------

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

.. code:: text

    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.6-3.11

Credits
-------

Initial layout/content of this package was created with `Cookiecutter
<https://github.com/audreyr/cookiecutter>`_ and the
`audreyr/cookiecutter-pypackage <https://github.com/audreyr/cookiecutter-pypackage>`_ project template.


.. |build-status| image:: https://github.com/igordejanovic/parglare/actions/workflows/ci-linux-ubuntu.yml/badge.svg
   :target: https://github.com/igordejanovic/parglare/actions

.. |coverage| image:: https://coveralls.io/repos/github/igordejanovic/parglare/badge.svg?branch=master
   :target: https://coveralls.io/github/igordejanovic/parglare?branch=master

.. |docs| image:: https://img.shields.io/badge/docs-latest-green.svg
   :target: http://www.igordejanovic.net/parglare/latest/

.. |status| image:: https://img.shields.io/pypi/status/parglare.svg

.. |license| image:: https://img.shields.io/badge/License-MIT-blue.svg
   :target: https://opensource.org/licenses/MIT

.. |python-versions| image:: https://img.shields.io/pypi/pyversions/parglare.svg


