0.1.41 • Published 5 months ago

gbnf v0.1.41

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

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.
0.1.41

5 months ago

0.1.40

5 months ago

0.1.38

5 months ago

0.1.39

5 months ago

0.1.37

7 months ago

0.1.30

8 months ago

0.1.31

8 months ago

0.1.32

8 months ago

0.1.33

8 months ago

0.1.34

8 months ago

0.1.35

8 months ago

0.1.36

8 months ago

0.1.27

8 months ago

0.1.28

8 months ago

0.1.29

8 months ago

0.1.20

9 months ago

0.1.21

9 months ago

0.1.22

8 months ago

0.1.23

8 months ago

0.1.24

8 months ago

0.1.25

8 months ago

0.1.26

8 months ago

0.1.19

9 months ago

0.1.16

12 months ago

0.1.17

12 months ago

0.1.18

12 months ago

0.1.14

1 year ago

0.1.15

12 months ago

0.1.13

1 year ago

0.1.11

1 year ago

0.1.12

1 year ago

0.1.10

1 year ago

0.1.9

1 year ago

0.1.8

1 year ago

0.1.6

1 year ago

0.1.5

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.2

1 year ago

0.1.0

1 year ago

0.1.1

1 year ago

0.0.9

1 year ago

0.0.8

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.1

1 year ago