Skip to main content

A Parser Library for Python 3 (and 2.6): Recursive Descent; Full Backtracking

Project description

Introducing version 2.0 of LEPL with a new, more powerful core.

I am trying to keep LEPL simple and intuitive while making it easier to add features from recent research papers “under the hood”. The combination of trampolining (which exposes the inner loop) and matcher graph rewriting (which allows the parser to be restructured programmatically) should allow further extensions without changing the original, simple grammar syntax.

The aim is a powerful, extensible parser that will also give solid, reliable results to first–time users. This release is a major step towards that goal.

Features

  • Parsers are Python code, defined in Python itself. No separate grammar is necessary.

  • Friendly syntax using Python’s operators.

  • Built-in AST support (a generic Node class). Improved support for the visitor pattern and tree re–writing.

  • Well documented and easy to extend.

  • Unlimited recursion depth. The underlying algorithm is recursive descent, which can exhaust the stack for complex grammars and large data sets. LEPL avoids this problem by using Python generators as coroutines (aka “trampolining”).

  • Support for ambiguous grammars (complete backtracking). A parser can return more than one result (aka “parse forests”).

  • Packrat parsing. Parsers can be made much more efficient with automatic memoisation.

  • Parser rewriting. The parser can itself be manipulated by Python code. This gives unlimited opportunities for future expansion and optimisation.

  • Left recursive grammars. Memoisation can detect and control left–recursive grammars. Together with LEPL’s support for ambiguity this means that “any” grammar can be supported.

  • Pluggable trace and resource management, including “deepest match” diagnostics and the ability to limit backtracking.

LEPL’s weakest point is probably performance. This has improved with memoisation, but it is still more suited for exploratory and one–off jobs than, for example, a compiler front–end. Measuring and improving performance is the main target of the next release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

LEPL-2.0.2.zip (62.8 kB view details)

Uploaded Source

LEPL-2.0.2.tar.gz (51.4 kB view details)

Uploaded Source

File details

Details for the file LEPL-2.0.2.zip.

File metadata

  • Download URL: LEPL-2.0.2.zip
  • Upload date:
  • Size: 62.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for LEPL-2.0.2.zip
Algorithm Hash digest
SHA256 754c7ba7fd2084c5c41bc828e7fb6320b6b2de09b6ad61020c4e24bbfe40568f
MD5 5b74d387514c96508014a2f5c75426d6
BLAKE2b-256 e1f3b87fa7d6306e0fb3e7b5e6e6b641a216ea57c68cb1840f37ca759ccd9c7c

See more details on using hashes here.

File details

Details for the file LEPL-2.0.2.tar.gz.

File metadata

  • Download URL: LEPL-2.0.2.tar.gz
  • Upload date:
  • Size: 51.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for LEPL-2.0.2.tar.gz
Algorithm Hash digest
SHA256 0e4336118e6f63e75671263f6a600fedbc00ef2e128338f2656b62044ccc7a12
MD5 205a3d0ba70491ef41866e798cd81bdb
BLAKE2b-256 554dd695d4d12b8441e48eb1632262eefa163dca9570539aaaafb9a78e28d3bd

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