diff --git a/lib/compiler.js b/lib/compiler.js index b116e78..febdd81 100644 --- a/lib/compiler.js +++ b/lib/compiler.js @@ -16,27 +16,14 @@ module.exports = { generateJavascript: require("./compiler/passes/generate-javascript") }, - /* - * Names of passes that will get run during the compilation (in the specified - * order). - */ - appliedPassNames: [ - "reportMissingRules", - "reportLeftRecursion", - "removeProxyRules", - "generateBytecode", - "generateJavascript" - ], - /* * Generates a parser from a specified grammar AST. Throws |PEG.GrammarError| * if the AST 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. */ - compile: function(ast) { - var that = this, - options = arguments.length > 1 ? utils.clone(arguments[1]) : {}; + compile: function(ast, passes) { + var options = arguments.length > 2 ? utils.clone(arguments[2]) : {}; utils.defaults(options, { allowedStartRules: [ast.rules[0].name], @@ -45,9 +32,7 @@ module.exports = { output: "parser" }); - utils.each(this.appliedPassNames, function(passName) { - that.passes[passName](ast, options); - }); + utils.each(passes, function(p) { p(ast, options); }); switch (options.output) { case "parser": return eval(ast.code); diff --git a/lib/peg.js b/lib/peg.js index ff4e724..56efd57 100644 --- a/lib/peg.js +++ b/lib/peg.js @@ -1,3 +1,5 @@ +var utils = require("./utils"); + module.exports = { /* PEG.js version (uses semantic versioning). */ VERSION: "0.7.0", @@ -18,6 +20,10 @@ module.exports = { * generated parser and cause its malfunction. */ buildParser: function(grammar, options) { - return this.compiler.compile(this.parser.parse(grammar), options); + return this.compiler.compile( + this.parser.parse(grammar), + utils.values(this.compiler.passes), + options + ); } };