I've forked ParseKit into a new faster/cleaner/smaller library called PEGKit.
ParseKit should be considered deprecated, and PEGKit should be used for all new development.
ParseKit was originally a very dynamic library with poor performance. Over time, I added static source code generation features (inspired by ANTLR) with much better performance.
My new PEKit library eschews all of the dynamic aspects of the original ParseKit library and retains only the new, fast, static code-generation aspects.
PEGKit's grammar syntax is very similar to ParseKit. The differences in PEGKit's grammar syntax are:
- There is no longer an explicit (redundant)
@startrule. The first rule defined in your grammar is implicitly recognized as your start rule. This simplifies your grammar slightly.
- Tokenizer Directives are removed. Instead, use a
@beforeblock on your start rule to configure your tokenizer behavior with Objective-C code. An example.
The highly dynamic nature of the original ParseKit library may still be usefull in some rare circumstances, but you almost certainly want to use PEGKit for all new development. See this PEGKit tutorial.
ParseKit is a Mac OS X Framework written by Todd Ditchendorf in Objective-C and released under the Apache 2 Open Source License. ParseKit is suitable for use on iOS or Mac OS X. ParseKit is an Objective-C is heavily influced by ANTLR by Terence Parr and "Building Parsers with Java" by Steven John Metsker. Also, ParseKit depends on MGTemplateEngine by Matt Gemmell for its templating features.
The ParseKit Framework offers 3 basic services of general interest to Cocoa developers:
- String Tokenization via the Objective-C PKTokenizer and PKToken classes.
- High-Level Language Parsing via Objective-C - An Objective-C parser-building API (the PKParser class and sublcasses).
- Objective-C Parser Generation via Grammars - Generate an Objective-C source code for parser for your custom language using a BNF-style grammar syntax (similar to yacc or ANTLR). While parsing, the parser will provide callbacks to your Objective-C code.