Skip to main content

A parser/formatter library that's easy to use and that provides informative error messages.

Project description

Parcon is a parser library. It can be used for parsing both normal text and binary data. It’s designed to be easy to use and to provide informative error messages.

Pargen, which is provided as a submodule of Parcon, is a formatter library. It’s much the opposite of Parcon: while Parcon is used to parse text into various objects, Pargen is used to format objects into text. As an example, if you wanted to reimplement Python’s json module, you would use Parcon to implement json.loads and Pargen to implement json.dumps.

Static, which is also provided as a submodule of Parcon, is a static typing library and Python object pattern library. It lets you build patterns that match Python objects based on their type, their attributes, certain properties such as whether or not the object is a sequence, the types that make up the object’s values if the object is a sequence, and so on.

All of the classes, and most of the functions, in Parcon are comprehensively documented. The best place to look for help is in Parcon’s module documentation. Pargen’s classes and functions and Static’s classes and functions are also documented, though not quite as well as Parcon’s are at present.

Parcon grammars are written as Python expressions, so there’s no need to learn a separate language for writing grammars or anything like that.

Here’s an example of a simple expression evaluator written using Parcon:

from parcon import number, Forward, InfixExpr
import operator
expr = Forward()
term = number[float] | "(" + expr + ")"
term = InfixExpr(term, [("*", operator.mul), ("/", operator.truediv)])
term = InfixExpr(term, [("+", operator.add), ("-", operator.sub)])
expr << term(name="expr")

This expression evaluator can be used thus:

print expr.parse_string("1+2") # prints 3
print expr.parse_string("1+2+3") # prints 6
print expr.parse_string("1+2+3+4") # prints 10
print expr.parse_string("3*4") # prints 12
print expr.parse_string("5+3*4") # prints 17
print expr.parse_string("(5+3)*4") # prints 32
print expr.parse_string("10/4") # prints 2.5

A syntax diagram can then be generated from it like this:

expr.draw_productions_to_png({}, "syntax-expr.png")

which would draw this image to syntax-expr.png.

More examples can be found on Parcon’s blog, and more information in general can be found at Parcon’s website. But reports should be submitted to the GitHub issue tracker.

Parcon is currently much more comprehensively documented than Pargen and Static are. Improved documentation for Pargen and Static will come soon.

Project details


Download files

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

Source Distribution

parcon-0.1.23.tar.gz (130.8 kB view details)

Uploaded Source

File details

Details for the file parcon-0.1.23.tar.gz.

File metadata

  • Download URL: parcon-0.1.23.tar.gz
  • Upload date:
  • Size: 130.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for parcon-0.1.23.tar.gz
Algorithm Hash digest
SHA256 1af5ab3bfe307c79efd2e0e1687e49f8ff95ffbe7527927b73408acaa3b01cb4
MD5 897f8872f55545173729073ee5a3c2e8
BLAKE2b-256 267d1bff3161e5b18aa72b664106c4a3c67d29a682fdedaf5fc5bacd3900b319

See more details on using hashes here.

Supported by

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