caffeine-eight
a 'runtime' parsing expression grammar parser
Last updated 9 months ago by shanebdavis .
ISC · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install caffeine-eight 
SYNC missed versions from official npm registry.

CaffeineEight Build Status

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.

Motivating Example

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()

Goals

  • Define PEG parsers 100% in JavaScript
  • Runtime-extensible parsers
  • Reasonably fast
  • No globals - each parser instance parses in its own space

Features

  • Full parsing expression grammar support with memoizing
  • Full JavaScript regular expressions support for terminals
  • Simple, convention-over-configuration parse-tree class structure
  • Human-readable parse-tree dumps
  • Detailed information about parsing failures
  • Custom sub-parser hooks
    • Which enable indention-based block parsing for languages like Python, CoffeeScript, or my own CaffeineScript

Learn More

Rename History

  • CaffeineEight was formally called BabelBridgeJs
  • CaffeineEight was inspired by my earlier Babel Bridge Ruby Gem, the JavaScript version turned out to be even more awesome!

Current Tags

  • 2.6.0                                ...           latest (9 months ago)

21 Versions

  • 2.6.0                                ...           9 months ago
  • 2.5.13                                ...           9 months ago
  • 2.5.11                                ...           9 months ago
  • 2.5.9                                ...           a year ago
  • 2.5.6                                ...           a year ago
  • 2.5.5                                ...           a year ago
  • 2.5.3                                ...           2 years ago
  • 2.5.2                                ...           2 years ago
  • 2.5.1                                ...           2 years ago
  • 2.3.6                                ...           2 years ago
  • 2.3.2                                ...           2 years ago
  • 2.2.3                                ...           3 years ago
  • 2.2.2                                ...           3 years ago
  • 2.2.1                                ...           3 years ago
  • 2.2.0                                ...           3 years ago
  • 2.1.0                                ...           3 years ago
  • 2.0.3                                ...           3 years ago
  • 2.0.2                                ...           3 years ago
  • 2.0.1                                ...           3 years ago
  • 2.0.0                                ...           3 years ago
  • 1.13.0                                ...           3 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 26
Last Day 0
Last Week 4
Last Month 7
Dependencies (1)
Dev Dependencies (16)

Copyright 2014 - 2016 © taobao.org |