CaffeineEight - parsing made as easy as humanly possible
Come to C8 because you want an elegant, declarative API that makes parsing as easy as humanly possible. Stay for super powers like detailed parsing errors, predictable PEG-based parsing and runtime parser extendability.
Unlike other parsing libraries, CaffeineEight is not a parser-generator. There is no build step. Just extend a class, add some rules and you are ready to parse. With CaffeineEight you can create and, more importantly, extend your parsers at runtime.
A complete JSON parser in less than 30 lines of code.
# CaffeineScript
class JsonParser extends &CaffeineEight.Parser
@rule
root: :array :object
array:
"'[' _? ']'"
"'[' _? value commaValue* _? ']'"
object:
"'{' _? '}'"
"'{' _? pair commaPair* _? '}'"
commaValue: "_? ',' _? value"
commaPair: "_? ',' _? pair"
pair: "string _? ':' _? value"
value: :object :array :number :string :true :false :null
string: /"(?:[^"\\]|\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4}))*"/
number: /-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/
true: /true/
false: /false/
null: /null/
_: /\ +/
.repl()