@ts-jison/ebnf-parser
Version:
A parser for BNF and EBNF grammars used by jison
120 lines (111 loc) • 3.73 kB
JavaScript
const { JisonParser, o } = require('@ts-jison/parser');
/**
* parser generated by @ts-jison/parser-generator 0.3.0
* @returns Parser implementing JisonParserApi and a Lexer implementing JisonLexerApi.
*/
class ebnfParser extends JisonParser {
constructor(yy = {}, lexer = new ebnfLexer(yy)) {
super(yy, lexer);
this.symbols_ = {"error":2,"production":3,"handle":4,"EOF":5,"handle_list":6,"|":7,"expression_suffix":8,"expression":9,"suffix":10,"ALIAS":11,"symbol":12,"(":13,")":14,"*":15,"?":16,"+":17,"$accept":0,"$end":1};
this.terminals_ = {2:"error",5:"EOF",7:"|",11:"ALIAS",12:"symbol",13:"(",14:")",15:"*",16:"?",17:"+"};
this.productions_ = [0,[3,2],[6,1],[6,3],[4,0],[4,2],[8,3],[8,2],[9,1],[9,3],[10,0],[10,1],[10,1],[10,1]];
// shorten static method to just `o` for terse STATE_TABLE
const $V0=[2,4],$V1=[1,6],$V2=[1,7],$V3=[5,7,12,13,14],$V4=[5,7,11,12,13,14],$V5=[5,7,11,12,13,14,15,16,17],$V6=[7,12,13,14],$V7=[7,14];
const o = JisonParser.expandParseTable;
this.table = [o([5,12,13],$V0,{3:1,4:2}),{1:[3]},{5:[1,3],8:4,9:5,12:$V1,13:$V2},{1:[2,1]},o($V3,[2,5]),o($V4,[2,10],{10:8,15:[1,9],16:[1,10],17:[1,11]}),o($V5,[2,8]),o($V6,$V0,{6:12,4:13}),o($V3,[2,7],{11:[1,14]}),o($V4,[2,11]),o($V4,[2,12]),o($V4,[2,13]),{7:[1,16],14:[1,15]},o($V7,[2,2],{8:4,9:5,12:$V1,13:$V2}),o($V3,[2,6]),o($V5,[2,9]),o($V6,$V0,{4:17}),o($V7,[2,3],{8:4,9:5,12:$V1,13:$V2})];
this.defaultActions = {3:[2,1]};
}
performAction (yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
/* this == yyval */
const $0 = $$.length - 1;
switch (yystate) {
case 1:
return $$[$0-1];
break;
case 2:
this.$ = [$$[$0]];
break;
case 3:
$$[$0-2].push($$[$0]);
break;
case 4:
this.$ = [];
break;
case 5:
$$[$0-1].push($$[$0]);
break;
case 6:
this.$ = ['xalias', $$[$0-1], $$[$0-2], $$[$0]];
break;
case 7:
if ($$[$0]) this.$ = [$$[$0], $$[$0-1]]; else this.$ = $$[$0-1];
break;
case 8:
this.$ = ['symbol', $$[$0]];
break;
case 9:
this.$ = ['()', $$[$0-1]];
break;
}
}
}
// Export module
Object.defineProperty(exports, "__esModule", { value: true });
exports.ebnfParser = ebnfParser;
/* generated by @ts-jison/lexer-generator 0.3.0 */
const { JisonLexer } = require('@ts-jison/lexer');
class ebnfLexer extends JisonLexer {
constructor (yy = {}) {
super(yy);
this.options = {"moduleName":"ebnf"};
this.rules = [/^(?:\s+)/,
/^(?:([a-zA-Z][a-zA-Z0-9_-]*))/,
/^(?:\[([a-zA-Z][a-zA-Z0-9_-]*)\])/,
/^(?:'[^']*')/,
/^(?:\.)/,
/^(?:bar\b)/,
/^(?:\()/,
/^(?:\))/,
/^(?:\*)/,
/^(?:\?)/,
/^(?:\|)/,
/^(?:\+)/,
/^(?:$)/
];
this.conditions = {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12],"inclusive":true}};
}
performAction (yy, yy_, $avoiding_name_collisions, YY_START) {
let YYSTATE = YY_START;
switch ($avoiding_name_collisions) {
case 0:/* skip whitespace */
break;
case 1:return 12;
break;
case 2:yy_.yytext = yy_.yytext.substr(1, yy_.yyleng-2); return 11;
break;
case 3:return 12;
break;
case 4:return 12;
break;
case 5:return 'bar';
break;
case 6:return 13;
break;
case 7:return 14;
break;
case 8:return 15;
break;
case 9:return 16;
break;
case 10:return 7;
break;
case 11:return 17;
break;
case 12:return 5;
break;
}
}
}
// Export module
Object.defineProperty(exports, "__esModule", { value: true });
exports.ebnfLexer = ebnfLexer;