"use strict"; const mapObj = require("map-obj"); let GrammarError = require("./grammar-error"); let compiler = require("./compiler"); let parser = require("./parser"); module.exports = { // PEG.js version (uses semantic versioning). VERSION: require("../package.json").version, GrammarError: GrammarError, parser: parser, compiler: 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(grammar, options = {}) { // FIXME: Validatem let config = { parser: parser, passes: mapObj(compiler.passes, (stage, passesForStage) => { return [ stage, Object.values(passesForStage) ]; }) }; let parseResult = config.parser.parse(grammar); if (parseResult.imports.length === 0) { return compiler.compile( parseResult, config.passes, options ); } else { throw new Error("`import` syntax can only be used with `generateFromFile`"); } }, generateFromFile: function (path, options = {}) { throw new Error(`Unimplemented`); } };