A bit-oriented parser combinator library in C for parsing binary formats like images, network packets, and executables.
Hammer is a parser combinator library written in C that specializes in parsing binary data formats. It provides a domain-specific language for defining grammars and supports multiple parsing backends to optimize performance for different use cases, such as parsing images, network packets, audio files, and executables.
Developers working with binary data formats, such as those in networking, multimedia, or security, who need a flexible, high-performance parsing library in C.
Hammer stands out for its bit-oriented parsing capabilities, thread-safe design, and support for multiple parsing backends, allowing developers to choose the most efficient approach for their specific grammar and performance needs.
Parser combinators for binary formats, in C. Yes, in C. What? Don't look at me like that.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Allows parsing of single-bit flags and multi-bit constructs across character boundaries, essential for binary formats like network packets, as highlighted in the README.
Includes packrat, LL(k), GLR, LALR, and regex backends, enabling optimization for different grammar types and performance needs.
Built to be reentrant and safe for multi-threaded use, making it suitable for concurrent parsing tasks in environments like servers.
Provides bindings for C++, Python, Ruby, Perl, Go, PHP, and .NET, facilitating integration across various programming ecosystems.
Requires SCons and numerous optional dependencies for bindings, with specific version constraints for SWIG and Mono, making installation cumbersome.
Python bindings only work with Python 2.7 due to SCons and PyCapsule incompatibilities, restricting use in modern Python 3 environments.
Windows support is noted as 'coming' and not yet available, limiting development on Windows systems without workarounds.
Java bindings are not currently building, and some bindings have known bugs or version requirements, affecting reliability and ease of use.