EBNF Grammar Parser for Jison

0.1.10 · maintenance · verified Tue Apr 21

ebnf-parser is a utility library designed to parse BNF and EBNF grammars, primarily used as a pre-processor for the Jison parser generator. It takes either a string representation of a grammar or a JSON grammar and transforms EBNF constructs into standard BNF, producing a JSON grammar format that Jison can consume. The current stable version is 0.1.10. Due to its specific role as a dependency for Jison and its low version number, its release cadence is slow and driven by Jison's needs. Key differentiators include its tight integration with Jison's grammar format and its focus solely on grammar transformation rather than full parsing engine capabilities, making it a specialized tool in the parser generator ecosystem.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to use `ebnf-parser` to parse a string-based EBNF grammar and how to conceptually transform an EBNF JSON grammar into a Jison-compatible BNF JSON format.

const ebnfParser = require('ebnf-parser');

// Example 1: Parsing a simple EBNF string grammar
const grammarString = `
%start program

program: statement+;
statement: 'id' '=' expression ';';
expression: term ('+' term)*;
term: 'number' | '(' expression ')';
`;

try {
  const parsedGrammar = ebnfParser.parse(grammarString);
  console.log('Parsed Grammar (string input):', JSON.stringify(parsedGrammar, null, 2));
} catch (error) {
  console.error('Error parsing string grammar:', error.message);
}

// Example 2: Transforming an EBNF JSON grammar (conceptual, actual JSON might vary)
const ebnfJson = {
  "ebnf": {
    "program": ["statement+"],
    "statement": ["'id' '=' expression ';'"],
    "expression": ["term ('+' term)*"],
    "term": ["'number' | '(' expression ')'"]
  }
};

try {
  const transformedGrammar = ebnfParser.transform(ebnfJson);
  console.log('Transformed Grammar (JSON input):', JSON.stringify(transformedGrammar, null, 2));
} catch (error) {
  console.error('Error transforming JSON grammar:', error.message);
}

view raw JSON →