UNPKG

pogo

Version:

A readable, DSL friendly programming language that compiles to JavaScript

79 lines 3.34 kB
(function() { var self = this; var ms, createParserContext, createDynamicLexer, parser, jisonLexer; ms = require("../memorystream"); createParserContext = require("./parserContext").createParserContext; createDynamicLexer = require("./dynamicLexer").createDynamicLexer; parser = require("./jisonParser").parser; jisonLexer = parser.lexer; exports.createParser = function(gen1_options) { var self = this; var terms, filename; terms = gen1_options !== void 0 && Object.prototype.hasOwnProperty.call(gen1_options, "terms") && gen1_options.terms !== void 0 ? gen1_options.terms : terms; filename = gen1_options !== void 0 && Object.prototype.hasOwnProperty.call(gen1_options, "filename") && gen1_options.filename !== void 0 ? gen1_options.filename : void 0; return { parse: function(source) { var self = this; var dynamicLexer, parserContext; dynamicLexer = createDynamicLexer({ nextLexer: jisonLexer }); parserContext = createParserContext({ terms: terms, filename: filename }); parserContext.lexer = dynamicLexer; jisonLexer.yy = parserContext; parser.yy = parserContext; parser.lexer = dynamicLexer; return parser.parse(source); }, errors: terms.errors, lex: function(source) { var self = this; var tokens, lexer, parserContext, tokenIndex, token, text, lexerToken; tokens = []; lexer = createDynamicLexer({ nextLexer: jisonLexer, source: source }); parserContext = createParserContext({ terms: terms }); parserContext.lexer = lexer; jisonLexer.yy = parserContext; tokenIndex = lexer.lex(); while (tokenIndex !== 1) { token = function() { if (typeof tokenIndex === "number") { return parser.terminals_[tokenIndex]; } else if (tokenIndex === "") { return undefined; } else { return tokenIndex; } }(); text = function() { if (lexer.yytext === "") { return undefined; } else if (lexer.yytext === token) { return undefined; } else { return lexer.yytext; } }(); lexerToken = function() { if (text) { return [ token, text ]; } else { return [ token ]; } }(); tokens.push(lexerToken); tokenIndex = lexer.lex(); } return tokens; } }; }; }).call(this);