Compile your bnfs down to WebAssembly for maximum parsing speed; with generated type definitions to make using the syntax tree outputs a breeze. The compiled output from this library is platform agnostic, so it can run anywhere new WebAssembly.Instance()
is a valid function. It bundles the WebAssembly module inside of a single js file so it can be easily incorporated into any bundler. The type definitions for a given bnf are just that, a definitions file - so if you don't want to use typescript or type hints you can go wild by ignoring it.
program ::= chunk+ ;
chunk ::= "a"+ "b"+ ;
npx bnf-compile ./syntax.bnf
import * as syntax from "./bnf/syntax.js";
const tree = syntax.Parse_Program("abbaabab").root;
const chunk = program.value[0]; // typescript knows this this **will** be of type `Term_Chunk`
const firstBs = program.value[1];
const bCount: number = firstBs.value.length; // typescript knows this **will** be a number
Built to be a devDependency - if you use the included cli tool to generate your syntax parser you don't need to include this library as your dependency, you can just import those artifacts.
See https://bnf-parser.ajanibilby.com/
See https://bnf-parser.ajanibilby.com/api
See https://bnf-parser.ajanibilby.com/api
Try it in your browser https://bnf-parser.ajanibilby.com/test