"use strict"; let peg = { // PEG.js version (uses semantic versioning). VERSION: "0.10.0", GrammarError: require("./grammar-error"), parser: require("./parser"), compiler: require("./compiler"), // Generates a parser from a specified grammar and returns it. // // The grammar must be a string in the format described by the metagramar in // the parser.pegjs file. // // Throws |peg.parser.SyntaxError| if the grammar contains a syntax error or // |peg.GrammarError| if it contains a semantic error. Note that not all // errors are detected during the generation and some may protrude to the // generated parser and cause its malfunction. generate: function(grammar, options) { options = options !== undefined ? options : {}; function convertPasses(passes) { let converted = {}; Object.keys(passes).forEach(stage => { converted[stage] = Object.keys(passes[stage]) .map(name => passes[stage][name]); }); return converted; } let plugins = "plugins" in options ? options.plugins : []; let config = { parser: peg.parser, passes: convertPasses(peg.compiler.passes) }; plugins.forEach(p => { p.use(config, options); }); return peg.compiler.compile( config.parser.parse(grammar), config.passes, options ); } }; module.exports = peg;