No description
Find a file
2013-06-24 21:46:23 +02:00
docs Finshed up the regex backend 2013-04-26 20:36:54 -07:00
examples All tests pass; lots of stuff is no longer const 2013-05-24 15:07:47 +02:00
jni Switched sequence and choice in JNI to varargs 2013-05-16 11:32:37 +02:00
lib Fixed a bug in hush 2012-05-26 13:13:56 +02:00
src Applied a bugfix from my local branch 2013-06-24 21:46:23 +02:00
.gitignore merging in aegis' JNI bindings 2013-05-23 00:58:27 -07:00
common.mk Got a lot of regex test cases working 2013-05-23 23:27:07 +02:00
config.mk Refactored tests; make just builds library, make test builds/runs tests 2012-11-13 22:29:25 -05:00
Doxyfile Tweaked docs 2012-11-13 22:42:25 -05:00
HACKING Refactored all of the desugaring code to no longer depend on memory being initialized to 0. Everything is about 12% faster now. 2013-05-25 03:35:42 +02:00
LICENSE Licensing under GPL v2. 2012-04-23 00:02:42 +01:00
Makefile Refactored all of the desugaring code to no longer depend on memory being initialized to 0. Everything is about 12% faster now. 2013-05-25 03:35:42 +02:00
NOTES Added benchmark skeleton, and at least stubs for all of the necessary functions 2012-11-02 17:16:53 -04:00
README.md update README: all the backends are done 2013-06-22 11:00:49 -07:00
TODO Added benchmark skeleton, and at least stubs for all of the necessary functions 2012-11-02 17:16:53 -04:00

Hammer is a parsing library. Like many modern parsing libraries, it provides a parser combinator interface for writing grammars as inline domain-specific languages, but Hammer also provides a variety of parsing backends. It's also bit-oriented rather than character-oriented, making it ideal for parsing binary data such as images, network packets, audio, and executables.

Hammer is written in C, but will provide bindings for other languages. If you don't see a language you're interested in on the list, just ask.

Hammer currently builds under Linux. (Windows and OSX are coming.)

Features

  • Bit-oriented -- grammars can include single-bit flags or multi-bit constructs that span character boundaries, with no hassle
  • Thread-safe, reentrant
  • Benchmarking for parsing backends -- determine empirically which backend will be most time-efficient for your grammar
  • Parsing backends:
    • Packrat parsing
    • LL(k)
    • GLR
    • LALR
    • Regular expressions
  • Language bindings:
    • C++ (not yet implemented)
    • Java
    • Python (not yet implemented)
    • Ruby (not yet implemented)
    • Perl (not yet implemented)
    • Go (not yet implemented)
    • PHP (not yet implemented)
    • .NET (not yet implemented)

Installing

Prerequisites

  • make
  • a JDK

Optional Dependencies

  • pkg-config (for make test)
  • glib-2.0 (>= 2.29) (for make test)
  • glib-2.0-dev (for make test)

To install, type make. To run the built-in test suite, type make test.

If jni.h and jni_md.h aren't already somewhere on your include path, prepend C_INCLUDE_PATH=/path/to/jdk/include to that.

There is not currently a make install target; to make Hammer available system-wide, copy libhammer.a to /usr/lib/ (or /usr/local/lib/, or wherever ld will find it) and hammer.h to /usr/include/.

Usage

Just #include <hammer.h> and link with -lhammer.

Examples

The examples/ directory contains some simple examples, currently including:

  • base64
  • DNS

Community

Please join us at #hammer on irc.upstandinghackers.com if you have any questions or just want to talk about parsing.

Contact

You can also email us at hammer@upstandinghackers.com.