parsejs-grammar

0.1.0 • Public • Published

Parsing Expression Grammar

PEG-like expression builder for JavaScript. <1kb.

Installation

$ npm install parsejs-grammar

browser:

$ component install parsejs/grammar

Features

  • easily define a custom parsing expression grammar (PEG)
  • reuse and recombine PEGs with .use(grammar)
  • expressions can be referenced by name, so complex grammars are very readable

Overview

A grammar is a set of expressions that share a common namespace. This means you can define named expressions within a grammar, and access them from anywhere else within the grammar.

Expressions can't exist outside of a grammar. A grammar itself is just an expression, it is the start of the expression hierarchy.

You can nest grammars, and so build on top of them easily!

Examples

var Grammar = require('parsejs-grammar');
var grammar = new Grammar('math');
var expression = grammar.expression;
 
expression('math')
  .match(':number', ':operator', ':number', function(left, operator, right){
    switch (operator) {
      case '+': return left + right;
      case '-': return left - right;
      case '*': return left * right;
      case '/': return left / right;
    }
  });
 
expression('number')
  .match(/\d+/, parseInt);
 
expression('operator')
  .match('+')
  .match('-')
  .match('*')
  .match('/');
 
var val = grammar.parse('6*8'); // 42

Nesting grammars. Say the above simple math grammar was in a module called math-grammar and we had another one called function-grammar. We could create a new grammar that builds on both of those:

var math = require('math-grammar');
var fn = require('function-grammar');
var Grammar = require('parsejs-grammar');
 
var grammar = new Grammar('foo');
grammar.use(math);
grammar.use(fn);

Then you could use their names in your grammar:

expression('foo')
  .match(':math')
  .match(':fn');

Or just use a subset of them:

expression('foo')
  .match(':fn', ':math:operator', ':fn');

Licence

MIT

Package Sidebar

Install

npm i parsejs-grammar

Weekly Downloads

0

Version

0.1.0

License

none

Last publish

Collaborators

  • viatropos