gbnf

0.1.37 • Public • Published

GBNF

Latest GBNF NPM Version License for GBNF Downloads per week on NPM for GBNF Status of Javascript Tests for GBNF repository Code Coverage for GBNF DeepSource issues for GBNF

A library for parsing .gbnf grammar files in Javascript.

Install

npm install gbnf

Usage

Pass your grammar to GBNF:

import GBNF from 'gbnf';
const state = GBNF(`
root  ::= "yes" | "no"
`)

If the grammar is invalid, GBNF will throw.

GBNF returns a state representing the parsed state:

import GBNF from 'gbnf';
const state = GBNF(`
root  ::= "yes" | "no"
`)
for (const rule of state) {
  console.log(rule); 
  // { type: "CHAR", value: ["y".charCodeAt(0)]}
  // { type: "CHAR", value: ["n".charCodeAt(0)]}
}

state can be iterated over. (You can also call the iterator method directly with state.rules()). state cannot be indexed directly, but can easily be cast to an array with [...state] and indexed that way.

States are immutable. To parse a new token, call state.add():

import GBNF from 'gbnf';
let state = GBNF(`
root  ::= "I like green eggs and ham"
`)
console.log([...state]); // [{ type: "CHAR", value: ["I".charCodeAt(0)]}]
state = state.add("I li");
console.log([...state]); // [{ type: "CHAR", value: ["k".charCodeAt(0)]}]
state = state.add("ke gree");
console.log([...state]); // [{ type: "CHAR", value: ["n".charCodeAt(0)]}]

The possible rules returned include:

  • CHAR - contains an array of either numbers representing code points to match, or an array of two numbers denoting a range within which a code point may appear.
  • CHAR_EXCLUDED - contains an array of numbers representing code points not to match, or an array of two numbers denoting a range within which a code point may not appear.
  • END - denotes a valid end of a string.

Package Sidebar

Install

npm i gbnf

Weekly Downloads

405

Version

0.1.37

License

MIT

Unpacked Size

270 kB

Total Files

62

Last publish

Collaborators

  • ambient-labs