
Security News
How Enterprise Security Is Adapting to AI-Accelerated Threats
Socket CTO Ahmad Nassri discusses why supply chain attacks now target developer machines and what AI means for the future of enterprise security.
ebnf-parser
Advanced tools
A parser for BNF and EBNF grammars used by jison.
npm install ebnf-parser
To build the parser yourself, clone the git repo then run:
make
This will generate parser.js, which is required by ebnf-parser.js.
The parser translates a string grammar or JSON grammar into a JSON grammar that jison can use (ENBF is transformed into BNF).
var ebnfParser = require('ebnf-parser');
// parse a bnf or ebnf string grammar
ebnfParser.parse("%start ... %");
// transform an ebnf JSON gramamr
ebnfParser.transform({"ebnf": ...});
The parser can parse its own BNF grammar, shown below:
%start spec
/* grammar for parsing jison grammar files */
%{
var transform = require('./ebnf-transform').transform;
var ebnf = false;
%}
%%
spec
: declaration_list '%%' grammar optional_end_block EOF
{$$ = $1; return extend($$, $3);}
| declaration_list '%%' grammar '%%' CODE EOF
{$$ = $1; yy.addDeclaration($$,{include:$5}); return extend($$, $3);}
;
optional_end_block
:
| '%%'
;
declaration_list
: declaration_list declaration
{$$ = $1; yy.addDeclaration($$, $2);}
|
{$$ = {};}
;
declaration
: START id
{$$ = {start: $2};}
| LEX_BLOCK
{$$ = {lex: $1};}
| operator
{$$ = {operator: $1};}
| ACTION
{$$ = {include: $1};}
;
operator
: associativity token_list
{$$ = [$1]; $$.push.apply($$, $2);}
;
associativity
: LEFT
{$$ = 'left';}
| RIGHT
{$$ = 'right';}
| NONASSOC
{$$ = 'nonassoc';}
;
token_list
: token_list symbol
{$$ = $1; $$.push($2);}
| symbol
{$$ = [$1];}
;
grammar
: production_list
{$$ = $1;}
;
production_list
: production_list production
{$$ = $1;
if($2[0] in $$) $$[$2[0]] = $$[$2[0]].concat($2[1]);
else $$[$2[0]] = $2[1];}
| production
{$$ = {}; $$[$1[0]] = $1[1];}
;
production
: id ':' handle_list ';'
{$$ = [$1, $3];}
;
handle_list
: handle_list '|' handle_action
{$$ = $1; $$.push($3);}
| handle_action
{$$ = [$1];}
;
handle_action
: handle prec action
{$$ = [($1.length ? $1.join(' ') : '')];
if($3) $$.push($3);
if($2) $$.push($2);
if ($$.length === 1) $$ = $$[0];
}
;
handle
: handle expression_suffix
{$$ = $1; $$.push($2)}
|
{$$ = [];}
;
handle_sublist
: handle_sublist '|' handle
{$$ = $1; $$.push($3.join(' '));}
| handle
{$$ = [$1.join(' ')];}
;
expression_suffix
: expression suffix
{$$ = $expression + $suffix; }
;
expression
: ID
{$$ = $1; }
| STRING
{$$ = ebnf ? "'"+$1+"'" : $1; }
| '(' handle_sublist ')'
{$$ = '(' + $handle_sublist.join(' | ') + ')'; }
;
suffix
: {$$ = ''}
| '*'
| '?'
| '+'
;
prec
: PREC symbol
{$$ = {prec: $2};}
|
{$$ = null;}
;
symbol
: id
{$$ = $1;}
| STRING
{$$ = yytext;}
;
id
: ID
{$$ = yytext;}
;
action
: '{' action_body '}'
{$$ = $2;}
| ACTION
{$$ = $1;}
| ARROW_ACTION
{$$ = '$$ ='+$1+';';}
|
{$$ = '';}
;
action_body
:
{$$ = '';}
| ACTION_BODY
{$$ = yytext;}
| action_body '{' action_body '}' ACTION_BODY
{$$ = $1+$2+$3+$4+$5;}
| action_body '{' action_body '}'
{$$ = $1+$2+$3+$4;}
;
%%
// transform ebnf to bnf if necessary
function extend (json, grammar) {
json.bnf = ebnf ? transform(grammar) : grammar;
return json;
}
MIT
FAQs
A parser for BNF and EBNF grammars used by jison
We found that ebnf-parser demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CTO Ahmad Nassri discusses why supply chain attacks now target developer machines and what AI means for the future of enterprise security.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.