An open API service indexing awesome lists of open source software.

https://github.com/darius/peglet

Robinson Crusoe's parsing library
https://github.com/darius/peglet

Last synced: 2 months ago
JSON representation

Robinson Crusoe's parsing library

Awesome Lists containing this project

README

          

Peglet
======

Peglet extends Python's regular expressions to handle recursive
grammars. For example, to parse a tiny subset of HTML:

>>> from peglet import Parser
>>> a_little_html = Parser(r"""parts = part parts |
... part = <(\w+)> parts \w+> group
... | ([^<]+)
... """, group=lambda *values: values)
>>> a_little_html("Hello.

Nesting for the win.

")
('Hello. ', ('p', ('em', 'Nesting'), ' for ', ('i', 'the win'), '.'))

The goal was to make a parsing library

1. pleasant enough to use;

2. simple to adapt or rewrite from scratch if I'm faced with some new
situation like a new programming language;

3. with code easy enough to follow that it could introduce people to
parsing.

So it came down to one page of clear code not using combinators. (And
then ballooned to 200+ lines from documentation and a few extras.)
Some bits that couldn't fit the latter two constraints went into a
combinator library, `parson `_.

For more, see `the examples
`_ or the
module doc in `the code
`_. Other
programs using this include `bicicleta.py
`_ and `.js
`_,
a `logic puzzle solver
`_,
and the lexer for `unitcalc `_.

Installing it
=============

``pip install peglet``, or else download then ``python setup.py install``.