gbnf v0.1.41
GBNF
A library for parsing .gbnf grammar files in Javascript.
Install
npm install gbnfUsage
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.
11 months ago
11 months ago
11 months ago
11 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago