introducing Construct

tomerfiliba at tomerfiliba at
Wed Mar 29 01:00:23 CEST 2006

"Construct -- parsing made fun"

info, demos, and download at:

Construct is a library for declaratively defining parsers and builders
for arbitrary data structures. Constructs are symmetrical: they can do
both parsing and building. Using the vast number of provided
primitives, you can easily define your data structures, including
advanced concepts like meta-constructs, as shown below. And it's
declarative -- so you don't need to write any code for the common
cases. You can also easily subclass Construct and write user-defined

Unlike most parsers, Construct works at the bit-level, which means you
can easily parse unaligned fields, or work with bit fields of arbitrary
lengths. The library supports Fields, Structs, Unions, and Repeaters;
Adapters and Validators;  Switches, Pointers and other Meta-constructs.

To show its power, I provided a fully functional ELF32 file parser,
WITHOUT ONE LINE OF PROCEDURAL CODE. It's all declerative. I used it to
parse python23.o (2.1MB), in 2.88 sec on my machine.

The library comes with a demos folder, an "inventory" of useful
ready-made protocols, and is fully documented with doc-strings, for
easy viewing with pydoc and the like.

from Construct import *

# simple structures
ethernet_header = Struct("ethernet_header",
    Bytes("destination", 6),
    Bytes("source", 6),
print ethernet_header.parse("123456ABCDEF\x08\x00")

# meta constructs -- uses meta data
tlv = Struct("tlv",
    MetaBytes("value", "_.length"),
print ethernet_header.parse("\x01\x05ABCDE")



More information about the Python-announce-list mailing list