TatSu


NameTatSu JSON
Version 5.12.1 PyPI version JSON
download
home_pageNone
SummaryTatSu takes a grammar in a variation of EBNF as input, and outputs a memoizing PEG/Packrat parser in Python.
upload_time2024-05-02 16:00:29
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseTATSU - A PEG/Packrat parser generator for Python Copyright (C) 2017-2023 Juancarlo Añez All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 4. Redistributions of any form whatsoever must retain the following acknowledgment: 'This product includes software developed by "Juancarlo Añez" (https://apalala.bitbucket.io).' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. |dragon| unicode:: 0x7ADC .. unicode dragon
.. |TatSu| replace:: |dragon| **TatSu**
.. _RELEASES: https://github.com/neogeny/TatSu/releases

|license| |pyversions| |fury| |downloads| |actions| |docs|

    *At least for the people who send me mail about a new language that
    they're designing, the general advice is: do it to learn about how
    to write a compiler. Don't have any expectations that anyone will
    use it, unless you hook up with some sort of organization in a
    position to push it hard. It's a lottery, and some can buy a lot of
    the tickets. There are plenty of beautiful languages (more beautiful
    than C) that didn't catch on. But someone does win the lottery, and
    doing a language at least teaches you something.*

    `Dennis Ritchie`_ (1941-2011) Creator of the C_ programming
    language and of Unix_


|TatSu|
=======

|TatSu| is a tool that takes grammars in a variation of `EBNF`_ as input, and
outputs `memoizing`_ (`Packrat`_) `PEG`_ parsers in `Python`_.

Why use a PEG_ parser? Because `regular languages`_ (those parsable with Python's ``re`` package) *"cannot count"*. Any language with nested structures or with balancing of demarcations requires more than regular expressions to be parsed.

|TatSu| can compile a grammar stored in a string into a
``tatsu.grammars.Grammar`` object that can be used to parse any given
input, much like the `re`_ module does with regular expressions, or it can generate a Python_ module that implements the parser.

|TatSu| supports `left-recursive`_  rules in PEG_ grammars using the
algorithm_ by *Laurent* and *Mens*. The generated AST_ has the expected left associativity.

|TatSu| requires a maintained version of Python (3.11+ at the moment).  While no code
in |TatSu| yet depends on new language or standard library features,
the authors don't want to be constrained by Python version compatibility considerations
when developing features that will be part of future releases.

.. _algorithm: http://norswap.com/pubs/sle2016.pdf

Installation
------------

.. code-block:: bash

    $ pip install TatSu


Using the Tool
--------------

|TatSu| can be used as a library, much like `Python`_'s ``re``, by embedding grammars as strings and generating grammar models instead of generating Python_ code.

This compiles the grammar and generates an in-memory *parser* that can subsequently be used for parsing input with.

.. code-block:: python

   parser = tatsu.compile(grammar)


Compiles the grammar and parses the given input producing an AST_ as result.

.. code-block:: python

    ast = tatsu.parse(grammar, input)

The result is equivalent to calling:


.. code-block:: python

    parser = compile(grammar)
    ast = parser.parse(input)

Compiled grammars are cached for efficiency.

This compiles the grammar to the `Python`_ sourcecode that implements the parser.

.. code-block:: python

    parser_source = tatsu.to_python_sourcecode(grammar)


This is an example of how to use |TatSu| as a library:

.. code-block:: python

    GRAMMAR = '''
        @@grammar::CALC


        start = expression $ ;


        expression
            =
            | expression '+' term
            | expression '-' term
            | term
            ;


        term
            =
            | term '*' factor
            | term '/' factor
            | factor
            ;


        factor
            =
            | '(' expression ')'
            | number
            ;


        number = /\d+/ ;
    '''


    if __name__ == '__main__':
        import json
        from tatsu import parse
        from tatsu.util import asjson

        ast = parse(GRAMMAR, '3 + 5 * ( 10 - 20 )')
        print(json.dumps(asjson(ast), indent=2))
..

|TatSu| will use the first rule defined in the grammar as the *start* rule.

This is the output:

.. code-block:: console

    [
      "3",
      "+",
      [
        "5",
        "*",
        [
          "10",
          "-",
          "20"
        ]
      ]
    ]

Documentation
-------------

For a detailed explanation of what |TatSu| is capable of, please see the
documentation_.

.. _documentation: http://tatsu.readthedocs.io/


Questions?
----------

Please use the `[tatsu]`_ tag on `StackOverflow`_ for general Q&A, and limit
Github issues to bugs, enhancement proposals, and feature requests.

.. _[tatsu]: https://stackoverflow.com/tags/tatsu/info


Changes
-------

See the `RELEASES`_ for details.


License
-------

You may use |TatSu| under the terms of the `BSD`_-style license
described in the enclosed `LICENSE.txt`_ file. *If your project
requires different licensing* please `email`_.


.. _ANTLR: http://www.antlr.org/
.. _AST: http://en.wikipedia.org/wiki/Abstract_syntax_tree
.. _Abstract Syntax Tree: http://en.wikipedia.org/wiki/Abstract_syntax_tree
.. _Algol W: http://en.wikipedia.org/wiki/Algol_W
.. _Algorithms + Data Structures = Programs: http://www.amazon.com/Algorithms-Structures-Prentice-Hall-Automatic-Computation/dp/0130224189/
.. _BSD: http://en.wikipedia.org/wiki/BSD_licenses#2-clause_license_.28.22Simplified_BSD_License.22_or_.22FreeBSD_License.22.29
.. _Basel Shishani: https://bitbucket.org/basel-shishani
.. _C: http://en.wikipedia.org/wiki/C_language
.. _CHANGELOG: https://github.com/neogeny/TatSu/releases
.. _CSAIL at MIT: http://www.csail.mit.edu/
.. _Cyclomatic complexity: http://en.wikipedia.org/wiki/Cyclomatic_complexity
.. _David Röthlisberger: https://bitbucket.org/drothlis/
.. _Dennis Ritchie: http://en.wikipedia.org/wiki/Dennis_Ritchie
.. _EBNF: http://en.wikipedia.org/wiki/Ebnf
.. _English: http://en.wikipedia.org/wiki/English_grammar
.. _Euler: http://en.wikipedia.org/wiki/Euler_programming_language
.. _Grako: https://bitbucket.org/neogeny/grako/
.. _Jack: http://en.wikipedia.org/wiki/Javacc
.. _Japanese: http://en.wikipedia.org/wiki/Japanese_grammar
.. _KLOC: http://en.wikipedia.org/wiki/KLOC
.. _Kathryn Long: https://bitbucket.org/starkat
.. _Keywords: https://en.wikipedia.org/wiki/Reserved_word
.. _`left-recursive`: https://en.wikipedia.org/wiki/Left_recursion
.. _LL(1): http://en.wikipedia.org/wiki/LL(1)
.. _Marcus Brinkmann: http://blog.marcus-brinkmann.de/
.. _MediaWiki: http://www.mediawiki.org/wiki/MediaWiki
.. _Modula-2: http://en.wikipedia.org/wiki/Modula-2
.. _Modula: http://en.wikipedia.org/wiki/Modula
.. _Oberon-2: http://en.wikipedia.org/wiki/Oberon-2
.. _Oberon: http://en.wikipedia.org/wiki/Oberon_(programming_language)
.. _PEG and Packrat parsing mailing list: https://lists.csail.mit.edu/mailman/listinfo/peg
.. _PEG.js: http://pegjs.majda.cz/
.. _PEG: http://en.wikipedia.org/wiki/Parsing_expression_grammar
.. _PL/0: http://en.wikipedia.org/wiki/PL/0
.. _Packrat: http://bford.info/packrat/
.. _Pascal: http://en.wikipedia.org/wiki/Pascal_programming_language
.. _Paul Sargent: https://bitbucket.org/PaulS/
.. _Perl: http://www.perl.org/
.. _PyPy team: http://pypy.org/people.html
.. _PyPy: http://pypy.org/
.. _Python Weekly: http://www.pythonweekly.com/
.. _Python: http://python.org
.. _Reserved Words: https://en.wikipedia.org/wiki/Reserved_word
.. _Robert Speer: https://bitbucket.org/r_speer
.. _Ruby: http://www.ruby-lang.org/
.. _Semantic Graph: http://en.wikipedia.org/wiki/Abstract_semantic_graph
.. _StackOverflow: http://stackoverflow.com/tags/tatsu/info
.. _Sublime Text: https://www.sublimetext.com
.. _TatSu Forum: https://groups.google.com/forum/?fromgroups#!forum/tatsu
.. _UCAB: http://www.ucab.edu.ve/
.. _USB: http://www.usb.ve/
.. _Unix: http://en.wikipedia.org/wiki/Unix
.. _VIM: http://www.vim.org/
.. _WTK: http://en.wikipedia.org/wiki/Well-known_text
.. _Warth et al: http://www.vpri.org/pdf/tr2007002_packrat.pdf
.. _Well-known text: http://en.wikipedia.org/wiki/Well-known_text
.. _Wirth: http://en.wikipedia.org/wiki/Niklaus_Wirth
.. _`LICENSE.txt`: LICENSE.txt
.. _basel-shishani: https://bitbucket.org/basel-shishani
.. _blog post: http://dietbuddha.blogspot.com/2012/12/52python-encapsulating-exceptions-with.html
.. _colorama: https://pypi.python.org/pypi/colorama/
.. _context managers: http://docs.python.org/2/library/contextlib.html
.. _declensions: http://en.wikipedia.org/wiki/Declension
.. _drothlis: https://bitbucket.org/drothlis
.. _email: mailto:apalala@gmail.com
.. _exceptions: http://www.jeffknupp.com/blog/2013/02/06/write-cleaner-python-use-exceptions/
.. _franz\_g: https://bitbucket.org/franz_g
.. _gapag: https://bitbucket.org/gapag
.. _gegenschall: https://bitbucket.org/gegenschall
.. _gkimbar: https://bitbucket.org/gkimbar
.. _introduced: http://dl.acm.org/citation.cfm?id=964001.964011
.. _jimon: https://bitbucket.org/jimon
.. _keyword: https://en.wikipedia.org/wiki/Reserved_word
.. _keywords: https://en.wikipedia.org/wiki/Reserved_word
.. _lambdafu: http://blog.marcus-brinkmann.de/
.. _leewz: https://bitbucket.org/leewz
.. _linkdd: https://bitbucket.org/linkdd
.. _make a donation: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=P9PV7ZACB669J
.. _memoizing: http://en.wikipedia.org/wiki/Memoization
.. _nehz: https://bitbucket.org/nehz
.. _neumond: https://bitbucket.org/neumond
.. _parsewkt: https://github.com/cleder/parsewkt
.. _pauls: https://bitbucket.org/pauls
.. _pgebhard: https://bitbucket.org/pgebhard
.. _pygraphviz: https://pypi.python.org/pypi/pygraphviz
.. _r\_speer: https://bitbucket.org/r_speer
.. _raw string literal: https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals
.. _re: https://docs.python.org/3.7/library/re.html
.. _regular languages: https://en.wikipedia.org/wiki/Regular_language
.. _regex: https://pypi.python.org/pypi/regex
.. _siemer: https://bitbucket.org/siemer
.. _sjbrownBitbucket: https://bitbucket.org/sjbrownBitbucket
.. _smc.mw: https://github.com/lambdafu/smc.mw
.. _starkat: https://bitbucket.org/starkat
.. _tonico\_strasser: https://bitbucket.org/tonico_strasser
.. _vinay.sajip: https://bitbucket.org/vinay.sajip
.. _vmuriart: https://bitbucket.org/vmuriart

.. |fury| image:: https://badge.fury.io/py/TatSu.svg
   :target: https://badge.fury.io/py/TatSu
.. |license| image:: https://img.shields.io/badge/license-BSD-blue.svg
   :target: https://raw.githubusercontent.com/neogeny/tatsu/master/LICENSE.txt
.. |pyversions| image:: https://img.shields.io/pypi/pyversions/tatsu.svg
   :target: https://pypi.python.org/pypi/tatsu
.. |travis| image:: https://secure.travis-ci.org/neogeny/TatSu.svg
   :target: http://travis-ci.org/neogeny/TatSu
.. |actions| image:: https://github.com/neogeny/TatSu/workflows/tests/badge.svg
    :target: https://github.com/neogeny/TatSu/actions
.. |circleci| image:: https://circleci.com/gh/neogeny/TatSu.svg?style=shield
    :target: https://circleci.com/gh/neogeny/TatSu
.. |landscape| image:: https://landscape.io/github/apalala/TatSu/master/landscape.png
   :target: https://landscape.io/github/apalala/TatSu/master
.. |donate| image:: https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif
   :target: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2TW56SV6WNJV6
.. |quantifiedcode| image:: https://www.quantifiedcode.com/api/v1/project/f60bbd94ae2d4bd5b2e04c241c9d47ff/badge.svg
   :target: https://www.quantifiedcode.com/app/project/f60bbd94ae2d4bd5b2e04c241c9d47ff
   :alt: Code issues
.. |docs| image:: https://readthedocs.org/projects/tatsu/badge/?version=stable
   :target: http://tatsu.readthedocs.io/en/stable/
.. |downloads| image:: https://img.shields.io/pypi/dm/TatSu.svg
   :target: http://tatsu.readthedocs.io/en/stable/

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "TatSu",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "Juancarlo A\u00f1ez <apalala@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/f6/e0/bfaf1cd529c07f94d5b4acd483b1b8bc904726d62029238a8acc8f50ae09/tatsu-5.12.1.tar.gz",
    "platform": null,
    "description": ".. |dragon| unicode:: 0x7ADC .. unicode dragon\n.. |TatSu| replace:: |dragon| **TatSu**\n.. _RELEASES: https://github.com/neogeny/TatSu/releases\n\n|license| |pyversions| |fury| |downloads| |actions| |docs|\n\n    *At least for the people who send me mail about a new language that\n    they're designing, the general advice is: do it to learn about how\n    to write a compiler. Don't have any expectations that anyone will\n    use it, unless you hook up with some sort of organization in a\n    position to push it hard. It's a lottery, and some can buy a lot of\n    the tickets. There are plenty of beautiful languages (more beautiful\n    than C) that didn't catch on. But someone does win the lottery, and\n    doing a language at least teaches you something.*\n\n    `Dennis Ritchie`_ (1941-2011) Creator of the C_ programming\n    language and of Unix_\n\n\n|TatSu|\n=======\n\n|TatSu| is a tool that takes grammars in a variation of `EBNF`_ as input, and\noutputs `memoizing`_ (`Packrat`_) `PEG`_ parsers in `Python`_.\n\nWhy use a PEG_ parser? Because `regular languages`_ (those parsable with Python's ``re`` package) *\"cannot count\"*. Any language with nested structures or with balancing of demarcations requires more than regular expressions to be parsed.\n\n|TatSu| can compile a grammar stored in a string into a\n``tatsu.grammars.Grammar`` object that can be used to parse any given\ninput, much like the `re`_ module does with regular expressions, or it can generate a Python_ module that implements the parser.\n\n|TatSu| supports `left-recursive`_  rules in PEG_ grammars using the\nalgorithm_ by *Laurent* and *Mens*. The generated AST_ has the expected left associativity.\n\n|TatSu| requires a maintained version of Python (3.11+ at the moment).  While no code\nin |TatSu| yet depends on new language or standard library features,\nthe authors don't want to be constrained by Python version compatibility considerations\nwhen developing features that will be part of future releases.\n\n.. _algorithm: http://norswap.com/pubs/sle2016.pdf\n\nInstallation\n------------\n\n.. code-block:: bash\n\n    $ pip install TatSu\n\n\nUsing the Tool\n--------------\n\n|TatSu| can be used as a library, much like `Python`_'s ``re``, by embedding grammars as strings and generating grammar models instead of generating Python_ code.\n\nThis compiles the grammar and generates an in-memory *parser* that can subsequently be used for parsing input with.\n\n.. code-block:: python\n\n   parser = tatsu.compile(grammar)\n\n\nCompiles the grammar and parses the given input producing an AST_ as result.\n\n.. code-block:: python\n\n    ast = tatsu.parse(grammar, input)\n\nThe result is equivalent to calling:\n\n\n.. code-block:: python\n\n    parser = compile(grammar)\n    ast = parser.parse(input)\n\nCompiled grammars are cached for efficiency.\n\nThis compiles the grammar to the `Python`_ sourcecode that implements the parser.\n\n.. code-block:: python\n\n    parser_source = tatsu.to_python_sourcecode(grammar)\n\n\nThis is an example of how to use |TatSu| as a library:\n\n.. code-block:: python\n\n    GRAMMAR = '''\n        @@grammar::CALC\n\n\n        start = expression $ ;\n\n\n        expression\n            =\n            | expression '+' term\n            | expression '-' term\n            | term\n            ;\n\n\n        term\n            =\n            | term '*' factor\n            | term '/' factor\n            | factor\n            ;\n\n\n        factor\n            =\n            | '(' expression ')'\n            | number\n            ;\n\n\n        number = /\\d+/ ;\n    '''\n\n\n    if __name__ == '__main__':\n        import json\n        from tatsu import parse\n        from tatsu.util import asjson\n\n        ast = parse(GRAMMAR, '3 + 5 * ( 10 - 20 )')\n        print(json.dumps(asjson(ast), indent=2))\n..\n\n|TatSu| will use the first rule defined in the grammar as the *start* rule.\n\nThis is the output:\n\n.. code-block:: console\n\n    [\n      \"3\",\n      \"+\",\n      [\n        \"5\",\n        \"*\",\n        [\n          \"10\",\n          \"-\",\n          \"20\"\n        ]\n      ]\n    ]\n\nDocumentation\n-------------\n\nFor a detailed explanation of what |TatSu| is capable of, please see the\ndocumentation_.\n\n.. _documentation: http://tatsu.readthedocs.io/\n\n\nQuestions?\n----------\n\nPlease use the `[tatsu]`_ tag on `StackOverflow`_ for general Q&A, and limit\nGithub issues to bugs, enhancement proposals, and feature requests.\n\n.. _[tatsu]: https://stackoverflow.com/tags/tatsu/info\n\n\nChanges\n-------\n\nSee the `RELEASES`_ for details.\n\n\nLicense\n-------\n\nYou may use |TatSu| under the terms of the `BSD`_-style license\ndescribed in the enclosed `LICENSE.txt`_ file. *If your project\nrequires different licensing* please `email`_.\n\n\n.. _ANTLR: http://www.antlr.org/\n.. _AST: http://en.wikipedia.org/wiki/Abstract_syntax_tree\n.. _Abstract Syntax Tree: http://en.wikipedia.org/wiki/Abstract_syntax_tree\n.. _Algol W: http://en.wikipedia.org/wiki/Algol_W\n.. _Algorithms + Data Structures = Programs: http://www.amazon.com/Algorithms-Structures-Prentice-Hall-Automatic-Computation/dp/0130224189/\n.. _BSD: http://en.wikipedia.org/wiki/BSD_licenses#2-clause_license_.28.22Simplified_BSD_License.22_or_.22FreeBSD_License.22.29\n.. _Basel Shishani: https://bitbucket.org/basel-shishani\n.. _C: http://en.wikipedia.org/wiki/C_language\n.. _CHANGELOG: https://github.com/neogeny/TatSu/releases\n.. _CSAIL at MIT: http://www.csail.mit.edu/\n.. _Cyclomatic complexity: http://en.wikipedia.org/wiki/Cyclomatic_complexity\n.. _David R\u00f6thlisberger: https://bitbucket.org/drothlis/\n.. _Dennis Ritchie: http://en.wikipedia.org/wiki/Dennis_Ritchie\n.. _EBNF: http://en.wikipedia.org/wiki/Ebnf\n.. _English: http://en.wikipedia.org/wiki/English_grammar\n.. _Euler: http://en.wikipedia.org/wiki/Euler_programming_language\n.. _Grako: https://bitbucket.org/neogeny/grako/\n.. _Jack: http://en.wikipedia.org/wiki/Javacc\n.. _Japanese: http://en.wikipedia.org/wiki/Japanese_grammar\n.. _KLOC: http://en.wikipedia.org/wiki/KLOC\n.. _Kathryn Long: https://bitbucket.org/starkat\n.. _Keywords: https://en.wikipedia.org/wiki/Reserved_word\n.. _`left-recursive`: https://en.wikipedia.org/wiki/Left_recursion\n.. _LL(1): http://en.wikipedia.org/wiki/LL(1)\n.. _Marcus Brinkmann: http://blog.marcus-brinkmann.de/\n.. _MediaWiki: http://www.mediawiki.org/wiki/MediaWiki\n.. _Modula-2: http://en.wikipedia.org/wiki/Modula-2\n.. _Modula: http://en.wikipedia.org/wiki/Modula\n.. _Oberon-2: http://en.wikipedia.org/wiki/Oberon-2\n.. _Oberon: http://en.wikipedia.org/wiki/Oberon_(programming_language)\n.. _PEG and Packrat parsing mailing list: https://lists.csail.mit.edu/mailman/listinfo/peg\n.. _PEG.js: http://pegjs.majda.cz/\n.. _PEG: http://en.wikipedia.org/wiki/Parsing_expression_grammar\n.. _PL/0: http://en.wikipedia.org/wiki/PL/0\n.. _Packrat: http://bford.info/packrat/\n.. _Pascal: http://en.wikipedia.org/wiki/Pascal_programming_language\n.. _Paul Sargent: https://bitbucket.org/PaulS/\n.. _Perl: http://www.perl.org/\n.. _PyPy team: http://pypy.org/people.html\n.. _PyPy: http://pypy.org/\n.. _Python Weekly: http://www.pythonweekly.com/\n.. _Python: http://python.org\n.. _Reserved Words: https://en.wikipedia.org/wiki/Reserved_word\n.. _Robert Speer: https://bitbucket.org/r_speer\n.. _Ruby: http://www.ruby-lang.org/\n.. _Semantic Graph: http://en.wikipedia.org/wiki/Abstract_semantic_graph\n.. _StackOverflow: http://stackoverflow.com/tags/tatsu/info\n.. _Sublime Text: https://www.sublimetext.com\n.. _TatSu Forum: https://groups.google.com/forum/?fromgroups#!forum/tatsu\n.. _UCAB: http://www.ucab.edu.ve/\n.. _USB: http://www.usb.ve/\n.. _Unix: http://en.wikipedia.org/wiki/Unix\n.. _VIM: http://www.vim.org/\n.. _WTK: http://en.wikipedia.org/wiki/Well-known_text\n.. _Warth et al: http://www.vpri.org/pdf/tr2007002_packrat.pdf\n.. _Well-known text: http://en.wikipedia.org/wiki/Well-known_text\n.. _Wirth: http://en.wikipedia.org/wiki/Niklaus_Wirth\n.. _`LICENSE.txt`: LICENSE.txt\n.. _basel-shishani: https://bitbucket.org/basel-shishani\n.. _blog post: http://dietbuddha.blogspot.com/2012/12/52python-encapsulating-exceptions-with.html\n.. _colorama: https://pypi.python.org/pypi/colorama/\n.. _context managers: http://docs.python.org/2/library/contextlib.html\n.. _declensions: http://en.wikipedia.org/wiki/Declension\n.. _drothlis: https://bitbucket.org/drothlis\n.. _email: mailto:apalala@gmail.com\n.. _exceptions: http://www.jeffknupp.com/blog/2013/02/06/write-cleaner-python-use-exceptions/\n.. _franz\\_g: https://bitbucket.org/franz_g\n.. _gapag: https://bitbucket.org/gapag\n.. _gegenschall: https://bitbucket.org/gegenschall\n.. _gkimbar: https://bitbucket.org/gkimbar\n.. _introduced: http://dl.acm.org/citation.cfm?id=964001.964011\n.. _jimon: https://bitbucket.org/jimon\n.. _keyword: https://en.wikipedia.org/wiki/Reserved_word\n.. _keywords: https://en.wikipedia.org/wiki/Reserved_word\n.. _lambdafu: http://blog.marcus-brinkmann.de/\n.. _leewz: https://bitbucket.org/leewz\n.. _linkdd: https://bitbucket.org/linkdd\n.. _make a donation: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=P9PV7ZACB669J\n.. _memoizing: http://en.wikipedia.org/wiki/Memoization\n.. _nehz: https://bitbucket.org/nehz\n.. _neumond: https://bitbucket.org/neumond\n.. _parsewkt: https://github.com/cleder/parsewkt\n.. _pauls: https://bitbucket.org/pauls\n.. _pgebhard: https://bitbucket.org/pgebhard\n.. _pygraphviz: https://pypi.python.org/pypi/pygraphviz\n.. _r\\_speer: https://bitbucket.org/r_speer\n.. _raw string literal: https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals\n.. _re: https://docs.python.org/3.7/library/re.html\n.. _regular languages: https://en.wikipedia.org/wiki/Regular_language\n.. _regex: https://pypi.python.org/pypi/regex\n.. _siemer: https://bitbucket.org/siemer\n.. _sjbrownBitbucket: https://bitbucket.org/sjbrownBitbucket\n.. _smc.mw: https://github.com/lambdafu/smc.mw\n.. _starkat: https://bitbucket.org/starkat\n.. _tonico\\_strasser: https://bitbucket.org/tonico_strasser\n.. _vinay.sajip: https://bitbucket.org/vinay.sajip\n.. _vmuriart: https://bitbucket.org/vmuriart\n\n.. |fury| image:: https://badge.fury.io/py/TatSu.svg\n   :target: https://badge.fury.io/py/TatSu\n.. |license| image:: https://img.shields.io/badge/license-BSD-blue.svg\n   :target: https://raw.githubusercontent.com/neogeny/tatsu/master/LICENSE.txt\n.. |pyversions| image:: https://img.shields.io/pypi/pyversions/tatsu.svg\n   :target: https://pypi.python.org/pypi/tatsu\n.. |travis| image:: https://secure.travis-ci.org/neogeny/TatSu.svg\n   :target: http://travis-ci.org/neogeny/TatSu\n.. |actions| image:: https://github.com/neogeny/TatSu/workflows/tests/badge.svg\n    :target: https://github.com/neogeny/TatSu/actions\n.. |circleci| image:: https://circleci.com/gh/neogeny/TatSu.svg?style=shield\n    :target: https://circleci.com/gh/neogeny/TatSu\n.. |landscape| image:: https://landscape.io/github/apalala/TatSu/master/landscape.png\n   :target: https://landscape.io/github/apalala/TatSu/master\n.. |donate| image:: https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif\n   :target: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2TW56SV6WNJV6\n.. |quantifiedcode| image:: https://www.quantifiedcode.com/api/v1/project/f60bbd94ae2d4bd5b2e04c241c9d47ff/badge.svg\n   :target: https://www.quantifiedcode.com/app/project/f60bbd94ae2d4bd5b2e04c241c9d47ff\n   :alt: Code issues\n.. |docs| image:: https://readthedocs.org/projects/tatsu/badge/?version=stable\n   :target: http://tatsu.readthedocs.io/en/stable/\n.. |downloads| image:: https://img.shields.io/pypi/dm/TatSu.svg\n   :target: http://tatsu.readthedocs.io/en/stable/\n",
    "bugtrack_url": null,
    "license": "TATSU - A PEG/Packrat parser generator for Python  Copyright (C) 2017-2023 Juancarlo A\u00f1ez All rights reserved.  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.  4. Redistributions of any form whatsoever must retain the following acknowledgment: 'This product includes software developed by \"Juancarlo A\u00f1ez\" (https://apalala.bitbucket.io).'  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ",
    "summary": "TatSu takes a grammar in a variation of EBNF as input, and outputs a memoizing PEG/Packrat parser in Python.",
    "version": "5.12.1",
    "project_urls": {
        "Documentation": "https://tatsu.readthedocs.io/en/stable/",
        "Homepage": "https://github.com/neogeny/TatSu",
        "Questions": "https://stackoverflow.com/questions/tagged/tatsu",
        "Repository": "https://github.com/neogeny/TatSu"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "317ddaad9ce582ce159bb1d15b3591185571817c912cd6b82763db7183043dee",
                "md5": "0874c039ced0a06ff1e41caaa2c61faf",
                "sha256": "97073bcf496a54adc6c87043cfd70c177a5f5f95c09c3ba0cfea43286ea728e1"
            },
            "downloads": -1,
            "filename": "TatSu-5.12.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "0874c039ced0a06ff1e41caaa2c61faf",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 79942,
            "upload_time": "2024-05-02T16:00:26",
            "upload_time_iso_8601": "2024-05-02T16:00:26.374184Z",
            "url": "https://files.pythonhosted.org/packages/31/7d/daad9ce582ce159bb1d15b3591185571817c912cd6b82763db7183043dee/TatSu-5.12.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f6e0bfaf1cd529c07f94d5b4acd483b1b8bc904726d62029238a8acc8f50ae09",
                "md5": "a1db780c8a0495d20fc7670e981fdbd3",
                "sha256": "57a6da442f71f07cac4fc99c5f997e2559e340b9e5177449dc35b751e18e3405"
            },
            "downloads": -1,
            "filename": "tatsu-5.12.1.tar.gz",
            "has_sig": false,
            "md5_digest": "a1db780c8a0495d20fc7670e981fdbd3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 131189,
            "upload_time": "2024-05-02T16:00:29",
            "upload_time_iso_8601": "2024-05-02T16:00:29.586208Z",
            "url": "https://files.pythonhosted.org/packages/f6/e0/bfaf1cd529c07f94d5b4acd483b1b8bc904726d62029238a8acc8f50ae09/tatsu-5.12.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-02 16:00:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "neogeny",
    "github_project": "TatSu",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "tatsu"
}
        
Elapsed time: 0.21613s