Skip to main content

TatSu takes a grammar in a variation of EBNF as input, and outputs a memoizing PEG/Packrat parser in Python.

Reason this release was yanked:

outdated

Project description

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

def WARNING():
    """
    TatSu>=5.7 requires Python>=3.10

    Python 3.8, 3.9, and 3.10 introduced new language features
    that allow writing better programs more clearly. Code written
    for Python 3.7 should run fine on Python up to 3.11 with no changes.

    Python has adopted an annual release schedule (PEP-602).

    Python 3.11 will be released in Oct 2022
    Python 3.10 was released     in Oct 2021
    Python 3.9  bugfix releases final in May 2022
    Python 3.8  bugfix releases final in May 2021
    Python 3.7  bugfix releases final in mid 2020

    Compelling reasons to upgrade projects to the latest Python
    """
    pass

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 demarcatiors 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.

Installation

$ 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.

  • tatsu.compile(grammar, name=None, **kwargs)

    Compiles the grammar and generates a model that can subsequently be used for parsing input with.

  • tatsu.parse(grammar, input, **kwargs)

    Compiles the grammar and parses the given input producing an AST as result. The result is equivalent to calling:

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

    Compiled grammars are cached for efficiency.

  • tatsu.to_python_sourcecode(grammar, name=None, filename=None, **kwargs)

    Compiles the grammar to the Python sourcecode that implements the parser.

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

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:

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

Documentation

For a detailed explanation of what 竜 TatSu is capable of, please see the documentation.

Questions?

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

Changes

See the CHANGELOG 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.

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

TatSu-5.8.0.zip (207.5 kB view details)

Uploaded Source

Built Distribution

TatSu-5.8.0-py2.py3-none-any.whl (101.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file TatSu-5.8.0.zip.

File metadata

  • Download URL: TatSu-5.8.0.zip
  • Upload date:
  • Size: 207.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.2

File hashes

Hashes for TatSu-5.8.0.zip
Algorithm Hash digest
SHA256 9efc3a1d7265fb6b82834d4f673fc7f50c4c785754de87f35781d38ad08c404d
MD5 6d75333b214eabd58775df0d5b70c80a
BLAKE2b-256 52ab4dd8666fe08d9ae9a0adc505d964a744ca9e950d356db2affb1891718075

See more details on using hashes here.

File details

Details for the file TatSu-5.8.0-py2.py3-none-any.whl.

File metadata

  • Download URL: TatSu-5.8.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 101.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.2

File hashes

Hashes for TatSu-5.8.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 93673e6adbbcb088a795a10933f0e6c93060aaff7d744d05292ccfcbf2e1ae5a
MD5 7890f365509789801f8ca21fca3bdf9d
BLAKE2b-256 a19a23224fa3e8e5e29e0d2a7a9fde1a3ca91424084326bcca4c2490f7e580fc

See more details on using hashes here.

Supported by

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