{"_id":"ebnf-parser","_rev":"140253","name":"ebnf-parser","description":"A parser for BNF and EBNF grammars used by jison","dist-tags":{"latest":"0.1.10"},"maintainers":[{"name":"zaach","email":""}],"time":{"modified":"2021-06-03T11:26:29.000Z","created":"2013-01-27T04:07:37.416Z","0.1.10":"2014-04-05T17:58:08.358Z","0.1.9":"2013-09-01T22:33:51.944Z","0.1.8":"2013-08-05T02:48:07.641Z","0.1.7":"2013-08-04T02:32:52.756Z","0.1.6":"2013-07-27T22:08:33.167Z","0.1.5":"2013-06-22T19:45:14.563Z","0.1.4":"2013-06-22T18:46:36.817Z","0.1.3":"2013-06-22T18:20:21.782Z","0.1.2":"2013-06-22T17:55:52.154Z","0.1.1":"2013-01-28T03:37:37.595Z","0.1.0":"2013-01-28T01:50:20.248Z","0.0.1":"2013-01-27T04:07:37.416Z"},"users":{"divisuals":true},"author":{"name":"Zach Carter"},"repository":{"type":"git","url":"https://github.com/zaach/ebnf-parser.git"},"versions":{"0.1.10":{"name":"ebnf-parser","version":"0.1.10","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"https://github.com/zaach/ebnf-parser.git"},"keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"git://github.com/zaach/jison.git#ef2647","lex-parser":"0.1.0","test":"*"},"bugs":{"url":"https://github.com/zaach/ebnf-parser/issues"},"homepage":"https://github.com/zaach/ebnf-parser","_id":"ebnf-parser@0.1.10","dist":{"shasum":"cd1f6ba477c5638c40c97ed9b572db5bab5d8331","size":18426,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.10.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.10.tgz"},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1396720688358,"_cnpm_publish_time":1396720688358,"_hasShrinkwrap":false},"0.1.9":{"name":"ebnf-parser","version":"0.1.9","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"https://github.com/zaach/ebnf-parser.git"},"keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"git://github.com/zaach/jison.git#ef2647","lex-parser":"0.1.0","test":"*"},"readmeFilename":"README.md","bugs":{"url":"https://github.com/zaach/ebnf-parser/issues"},"_id":"ebnf-parser@0.1.9","dist":{"shasum":"876435d97ad72260c88c369bfadc50a3403e7347","size":18155,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.9.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.9.tgz"},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1378074831944,"_cnpm_publish_time":1378074831944,"_hasShrinkwrap":false},"0.1.8":{"name":"ebnf-parser","version":"0.1.8","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"https://github.com/zaach/ebnf-parser.git"},"keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","lex-parser":"0.1.0","test":"*"},"readmeFilename":"README.md","bugs":{"url":"https://github.com/zaach/ebnf-parser/issues"},"_id":"ebnf-parser@0.1.8","dist":{"shasum":"c64e2f7e1145c417793e425cc2a6a5f9b886d210","size":15421,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.8.tgz"},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1375670887641,"_cnpm_publish_time":1375670887641,"_hasShrinkwrap":false},"0.1.7":{"name":"ebnf-parser","version":"0.1.7","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"https://github.com/zaach/ebnf-parser.git"},"keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","lex-parser":"0.1.0","test":"*"},"readmeFilename":"README.md","bugs":{"url":"https://github.com/zaach/ebnf-parser/issues"},"_id":"ebnf-parser@0.1.7","dist":{"shasum":"579ebc0c8d9d4436d2c5ddf4c8a0c563134737d1","size":15159,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.7.tgz"},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1375583572756,"_cnpm_publish_time":1375583572756,"_hasShrinkwrap":false},"0.1.6":{"name":"ebnf-parser","version":"0.1.6","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"https://github.com/zaach/ebnf-parser.git"},"keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","lex-parser":"0.1.0","test":"*"},"readmeFilename":"README.md","bugs":{"url":"https://github.com/zaach/ebnf-parser/issues"},"_id":"ebnf-parser@0.1.6","dist":{"shasum":"09f45cf7fddaa7fa50f655c4a0c6d42bf3bd2e38","size":15091,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.6.tgz"},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1374962913167,"_cnpm_publish_time":1374962913167,"_hasShrinkwrap":false},"0.1.5":{"name":"ebnf-parser","version":"0.1.5","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","lex-parser":"0.1.0","test":"*"},"readmeFilename":"README.md","_id":"ebnf-parser@0.1.5","dist":{"shasum":"3f97c244a3bb2a65682ed0bfb9adfb9f05abc95d","size":14971,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.5.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1371930314563,"_cnpm_publish_time":1371930314563,"_hasShrinkwrap":false},"0.1.4":{"name":"ebnf-parser","version":"0.1.4","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","lex-parser":"0.1.0","test":"*"},"readmeFilename":"README.md","_id":"ebnf-parser@0.1.4","dist":{"shasum":"0f117e766230b13c4066bbe118f50156f7d307c0","size":14904,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.4.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1371926796817,"_cnpm_publish_time":1371926796817,"_hasShrinkwrap":false},"0.1.3":{"name":"ebnf-parser","version":"0.1.3","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","lex-parser":"0.1.0","test":"*"},"readmeFilename":"README.md","_id":"ebnf-parser@0.1.3","dist":{"shasum":"bd86e735c907787faaf9f1543ee61c6283756a51","size":14822,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.3.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1371925221782,"_cnpm_publish_time":1371925221782,"_hasShrinkwrap":false},"0.1.2":{"name":"ebnf-parser","version":"0.1.2","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","lex-parser":"0.1.0","test":"*"},"readmeFilename":"README.md","_id":"ebnf-parser@0.1.2","dist":{"shasum":"3cb596930a33e1a0b76f999a22fcad76aef3fa21","size":14807,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.2.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1371923752154,"_cnpm_publish_time":1371923752154,"_hasShrinkwrap":false},"0.1.1":{"name":"ebnf-parser","version":"0.1.1","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","devDependencies":{"jison":"0.4.x","lex-parser":"0.1.0","test":"*"},"_id":"ebnf-parser@0.1.1","dist":{"shasum":"4197a0c2e5d56b45adcb879fced2b12139b81c1f","size":12172,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.1.tgz"},"_npmVersion":"1.1.63","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1359344257595,"_cnpm_publish_time":1359344257595,"_hasShrinkwrap":false},"0.1.0":{"name":"ebnf-parser","version":"0.1.0","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","dependencies":{"jison":"0.4.x"},"devDependencies":{"lex-parser":"0.1.0","test":"*"},"_id":"ebnf-parser@0.1.0","dist":{"shasum":"9db1df8f57df53fcb4def83f189b38bffa329895","size":11594,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.1.0.tgz"},"_npmVersion":"1.1.63","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1359337820248,"_cnpm_publish_time":1359337820248,"_hasShrinkwrap":false},"0.0.1":{"name":"ebnf-parser","version":"0.0.1","description":"A parser for BNF and EBNF grammars used by jison","main":"ebnf-parser.js","scripts":{"test":"make test"},"repository":"","keywords":["bnf","ebnf","grammar","parser","jison"],"author":{"name":"Zach Carter"},"license":"MIT","dependencies":{"jison":"0.3.12"},"devDependencies":{"lex-parser":"0.0.1","test":"*"},"_id":"ebnf-parser@0.0.1","dist":{"shasum":"6e2ef4eb3b552c2d26948bdc21cc4fdfc10e6ef2","size":11584,"noattachment":false,"key":"/ebnf-parser/-/ebnf-parser-0.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/ebnf-parser/download/ebnf-parser-0.0.1.tgz"},"_npmVersion":"1.1.63","_npmUser":{"name":"zaach","email":"zack.carter@gmail.com"},"maintainers":[{"name":"zaach","email":""}],"directories":{},"publish_time":1359259657416,"_cnpm_publish_time":1359259657416,"_hasShrinkwrap":false}},"readme":"# ebnf-parser\n\nA parser for BNF and EBNF grammars used by jison.\n\n## install\n\n    npm install ebnf-parser\n\n\n## build\n\nTo build the parser yourself, clone the git repo then run:\n\n    make\n\nThis will generate `parser.js`, which is required by `ebnf-parser.js`.\n\n## usage\n\nThe parser translates a string grammar or JSON grammar into a JSON grammar that jison can use (ENBF is transformed into BNF).\n\n    var ebnfParser = require('ebnf-parser');\n\n    // parse a bnf or ebnf string grammar\n    ebnfParser.parse(\"%start ... %\");\n\n    // transform an ebnf JSON gramamr\n    ebnfParser.transform({\"ebnf\": ...});\n\n\n## example grammar\n\nThe parser can parse its own BNF grammar, shown below:\n\n    %start spec\n\n    /* grammar for parsing jison grammar files */\n\n    %{\n    var transform = require('./ebnf-transform').transform;\n    var ebnf = false;\n    %}\n\n    %%\n\n    spec\n        : declaration_list '%%' grammar optional_end_block EOF\n            {$$ = $1; return extend($$, $3);}\n        | declaration_list '%%' grammar '%%' CODE EOF\n            {$$ = $1; yy.addDeclaration($$,{include:$5}); return extend($$, $3);}\n        ;\n\n    optional_end_block\n        :\n        | '%%'\n        ;\n\n    declaration_list\n        : declaration_list declaration\n            {$$ = $1; yy.addDeclaration($$, $2);}\n        |\n            {$$ = {};}\n        ;\n\n    declaration\n        : START id\n            {$$ = {start: $2};}\n        | LEX_BLOCK\n            {$$ = {lex: $1};}\n        | operator\n            {$$ = {operator: $1};}\n        | ACTION\n            {$$ = {include: $1};}\n        ;\n\n    operator\n        : associativity token_list\n            {$$ = [$1]; $$.push.apply($$, $2);}\n        ;\n\n    associativity\n        : LEFT\n            {$$ = 'left';}\n        | RIGHT\n            {$$ = 'right';}\n        | NONASSOC\n            {$$ = 'nonassoc';}\n        ;\n\n    token_list\n        : token_list symbol\n            {$$ = $1; $$.push($2);}\n        | symbol\n            {$$ = [$1];}\n        ;\n\n    grammar\n        : production_list\n            {$$ = $1;}\n        ;\n\n    production_list\n        : production_list production\n            {$$ = $1;\n              if($2[0] in $$) $$[$2[0]] = $$[$2[0]].concat($2[1]);\n              else  $$[$2[0]] = $2[1];}\n        | production\n            {$$ = {}; $$[$1[0]] = $1[1];}\n        ;\n\n    production\n        : id ':' handle_list ';'\n            {$$ = [$1, $3];}\n        ;\n\n    handle_list\n        : handle_list '|' handle_action\n            {$$ = $1; $$.push($3);}\n        | handle_action\n            {$$ = [$1];}\n        ;\n\n    handle_action\n        : handle prec action\n            {$$ = [($1.length ? $1.join(' ') : '')];\n                if($3) $$.push($3);\n                if($2) $$.push($2);\n                if ($$.length === 1) $$ = $$[0];\n            }\n        ;\n\n    handle\n        : handle expression_suffix\n            {$$ = $1; $$.push($2)}\n        |\n            {$$ = [];}\n        ;\n\n    handle_sublist\n        : handle_sublist '|' handle\n            {$$ = $1; $$.push($3.join(' '));}\n        | handle\n            {$$ = [$1.join(' ')];}\n        ;\n\n    expression_suffix\n        : expression suffix\n            {$$ = $expression + $suffix; }\n        ;\n\n    expression\n        : ID\n            {$$ = $1; }\n        | STRING\n            {$$ = ebnf ? \"'\"+$1+\"'\" : $1; }\n        | '(' handle_sublist ')'\n            {$$ = '(' + $handle_sublist.join(' | ') + ')'; }\n        ;\n\n    suffix\n        : {$$ = ''}\n        | '*'\n        | '?'\n        | '+'\n        ;\n\n    prec\n        : PREC symbol\n            {$$ = {prec: $2};}\n        |\n            {$$ = null;}\n        ;\n\n    symbol\n        : id\n            {$$ = $1;}\n        | STRING\n            {$$ = yytext;}\n        ;\n\n    id\n        : ID\n            {$$ = yytext;}\n        ;\n\n    action\n        : '{' action_body '}'\n            {$$ = $2;}\n        | ACTION\n            {$$ = $1;}\n        | ARROW_ACTION\n            {$$ = '$$ ='+$1+';';}\n        |\n            {$$ = '';}\n        ;\n\n    action_body\n        :\n            {$$ = '';}\n        | ACTION_BODY\n            {$$ = yytext;}\n        | action_body '{' action_body '}' ACTION_BODY\n            {$$ = $1+$2+$3+$4+$5;}\n        | action_body '{' action_body '}'\n            {$$ = $1+$2+$3+$4;}\n        ;\n\n    %%\n\n    // transform ebnf to bnf if necessary\n    function extend (json, grammar) {\n        json.bnf = ebnf ? transform(grammar) : grammar;\n        return json;\n    }\n\n## license\n\nMIT\n","_attachments":{},"homepage":"https://github.com/zaach/ebnf-parser","bugs":{"url":"https://github.com/zaach/ebnf-parser/issues"},"license":"MIT"}